如何使用这个功能。
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)
Run Code Online (Sandbox Code Playgroud)
那么通过调用这样的函数mbedtls_pk_verify(&public_key_context, MBEDTLS_MD_SHA1, md, sizeof(md), signature, signature_lenght)我应该如何初始化 md 以及我如何知道它是什么?
md是message digest(通常是哈希值)。
要验证签名,您必须通过创建签名时使用的相同哈希算法提供消息。如果签名是使用 SHA1 创建的,那么您必须首先计算要验证的消息的 SHA1 哈希值。然后将此值及其长度(本例中为 20 个字节)传递给函数。
您可以使用 mbedtls 库本身来计算消息摘要:
// Get the message digest info structure for SHA1
const mbedtls_md_info_t *mdinfo = mbedtls_md_info_from_type(MBEDTLS_MD_SHA1);
unsigned 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);
Run Code Online (Sandbox Code Playgroud)
这应该可以满足您的需要。
| 归档时间: |
|
| 查看次数: |
3830 次 |
| 最近记录: |