c - 如何使用 mbedtls_pk_verify 验证签名

标签 c embedded

如何使用此功能。

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以及如何知道它是什么?

最佳答案

md消息摘要(通常是哈希值)。

要验证签名,您必须通过创建签名时使用的相同哈希算法来提供消息。如果签名是使用 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);

这应该可以满足您的需要。

关于c - 如何使用 mbedtls_pk_verify 验证签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52854063/

相关文章:

c - RFID RC522读卡接线Pi

c - 嵌入式 C-UTF8 到 MARC8

c - 在c : string cutting with respect to its contents中解析shell命令

c - 32bit架构下各种指针大小的面试题

c++ - 请在这里澄清左值和右值的概念

linux - 系统锁定或无限循环是否会导致重启?

linux - 在嵌入式设备上安装 ssh 服务器

c - 将输入限制为 4 位数字条目 (0-9)

c - 从群组的SID获取群组成员的方法是什么?

c - 在ARM嵌入式C编程中使用定时器