首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用mbedtls_pk_verify验证签名

如何使用mbedtls_pk_verify验证签名
EN

Stack Overflow用户
提问于 2018-10-17 11:42:27
回答 1查看 2.5K关注 0票数 1

如何使用此函数。

代码语言:javascript
复制
int mbedtls_pk_verify(mbedtls_pk_context *  ctx, mbedtls_md_type_t md_alg, const unsigned char * hash, size_t hash_len, const unsigned char * sig, size_t sig_len)

因此,通过调用像这个mbedtls_pk_verify(&public_key_context, MBEDTLS_MD_SHA1, md, sizeof(md), signature, signature_lenght)这样的函数,我应该如何初始化md,以及如何知道它是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-17 12:09:07

mdmessage digest (通常是一个散列值)。

要验证签名,您必须使用创建签名时使用的哈希算法来输入消息。如果签名是使用SHA1创建的,则必须首先为要验证的消息计算SHA1哈希值。然后将这个值连同它的长度(在本例中为20个字节)传递给函数。

您可以使用mbedtls库本身计算消息摘要:

代码语言:javascript
复制
// Get the message digest info structure for SHA1
mbetdtls_md_info_t *mdinfo = mbedtls_md_info_from_type(MBEDTLS_MD_SHA1);
char *md = malloc(mdinfo->size);
// Calculate the message digest for the data
mbedtls_md(mdinfo, data, datalen, md);

// Now verify the signature for the given hash of the data
int st = mbedtls_pk_verify(&public_key_context, 
                           mdinfo->type, md, mdinfo->size,
                           signature, signature_length);
if (st != 0) {
      // Signature invalid!
} else {
      // Signature valid
}

free(md);

这应该能满足你的需要。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52854063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档