c - 如何从 EC_KEY 获取发布密钥以使用 ECDSA_do_verify 函数验证摘要?
问题描述
我试图弄清楚如何使用 ECDSA 签名和仅公钥来验证哈希。我已经设法使用 EC_KEY 对象(私钥 + 公钥)进行验证。但是,由于该对象将被发送,我不希望我的私钥被发布。这是我的 sign_hash 函数:
int sign_hash(const char *hash, struct Hash *signed_hash)
{
int retval = 0;
EC_KEY *myecc;
ECDSA_SIG *signature;
if (strlen(hash) > 0)
{
myecc = EC_KEY_new_by_curve_name(ECCTYPE);
if (myecc == NULL)
{
fprintf(stderr, "Failed to create new EC key\n");
retval = 0;
}
else
{
if (create_keys(myecc))
{
if (ec_sign(hash, myecc, signature))
{
printf("Successfully signed hash\n");
signed_hash->pub_key = EC_KEY_new_by_curve_name(ECCTYPE);
if (EC_KEY_copy(signed_hash->pub_key, myecc) != NULL)
{
signed_hash->signature = signature;
strcpy(signed_hash->digest, hash);
retval = 1;
}
else
{
fprintf(stderr, "EC_KEY_copy error\n");
}
}
else
{
fprintf(stderr, "Failed to sign EC signature\n");
}
}
else
{
fprintf(stderr, "Failed to generate EC Key\n");
}
}
}
else
{
fprintf(stderr, "Empty hash to sign\n");
}
return retval;
}
Hash 结构变量具有以下结构:
struct Hash
{
char digest[HASH_SIZE];
ECDSA_SIG *signature;
EC_KEY *pub_key;
};
这些是ECDSA_do_verify函数中需要的参数。
我想知道如何只复制公钥signed_hash->pub_key
而不是私钥和公钥。
谢谢,
bgxx
解决方案
推荐阅读
- javascript - 使用 Fastify 和 Fastify-HTTP-Proxy 绑定接口
- flutter - TextEditingController 返回旧值
- ffmpeg - FFMPEG 用于下载时失真的视频缩略图
- javascript - 如何从功能组件导航到选项卡导航器中的屏幕,其中该选项卡导航器嵌套在父堆栈导航器中
- python-3.x - Pynput 似乎无法让我的代码看到它
- python - 模型查询 Django
- javascript - NodeJS - 如何在继续执行流程之前等待多个异步调用完成?
- javascript - TypeError:无法解构“未定义”的属性“list2”
- amazon-s3 - s3 lambda - 仅移动特定文件夹中的文件位置
- css - CSS for Outlook:拒绝以任何方式设置表格列宽