C语言 使用gmssl 计算gb35114 认证signal1
时间: 2023-07-11 15:28:52 浏览: 100
下面是使用gmssl库在C语言中计算GB/T 35114-2017数字签名的示例代码:
```c
#include <stdio.h>
#include <string.h>
#include <gmssl/sm3.h>
#include <gmssl/sm2.h>
#include <gmssl/error.h>
int main(int argc, char *argv[])
{
const char *data = "signal1";
uint8_t hash_value[32];
uint8_t signature[256];
size_t signature_len = sizeof(signature);
// 计算哈希值
sm3_context ctx;
sm3_init(&ctx);
sm3_update(&ctx, data, strlen(data));
sm3_finish(&ctx, hash_value);
// 加载私钥
FILE *fp = fopen("/path/to/private_key.der", "rb");
sm2_key pri_key;
sm2_key_init(&pri_key);
int ret = sm2_key_parse_pkcs8(&pri_key, fp);
fclose(fp);
if (ret != 1) {
error_print();
return -1;
}
// 进行数字签名计算
ret = gmssl_sm2_sign(hash_value, sizeof(hash_value),
signature, &signature_len,
&pri_key, SM2_DEFAULT_ID);
if (ret != 1) {
error_print();
return -1;
}
// 打印签名结果
for (size_t i = 0; i < signature_len; i++) {
printf("%02x", signature[i]);
}
printf("\n");
return 0;
}
```
其中,`/path/to/private_key.der` 是指存储私钥的DER编码格式的文件路径。需要注意的是,在实际使用中,需要将签名结果和计算哈希值的数据一起发送给接收方,接收方在验证签名时需要用到发送方的公钥。
阅读全文