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

如何用wolfSSL验证OpenSSL的ECC签名
EN

Stack Overflow用户
提问于 2016-10-12 09:13:28
回答 1查看 1.2K关注 0票数 2

我是椭圆曲线密码学的新手,openSSL和wolfSSL。我的上下文是使用openssl从命令行生成KeyPair,并将私钥导入到代码中。然后使用wolfSSL生成签名并输出签名。

我以DER格式保存输出并尝试使用openSSL进行验证,验证失败。

如果我用wolfSSL在代码中签名和验证,那么它将成功验证,如果我用openSSL在命令行中签名和验证,也是成功的。

是否有编码问题,我不确定?

更新代码

代码语言:javascript
复制
// ECC public key
const uint8_t pubKey[] ={Hex Format key};
// ECC Signature from wolfSSL
char* sigString = {Signature from wolfSSL returned as char};
/* TYPE CONVERTIONS*/
const uint8_t *der_bytes_copy;
const uint8_t *pub_bytes_copy;
der_bytes_copy = (const unsigned char*)sigString;
pub_bytes_copy = pubKey;


EC_KEY *ECpubkey;
size_t keySize = sizeof(pubKey);
int eccgrp;
eccgrp = OBJ_txt2nid("secp256r1");
 ECpubkey = EC_KEY_new_by_curve_name(eccgrp);
o2i_ECPublicKey(&ECpubkey, &pub_bytes_copy, keySize);
ECDSA_SIG *signature;
signature = d2i_ECDSA_SIG(NULL, &der_bytes_copy, signedSize);
uint8_t digest[36];
int verified;
const char message[] = "Test for Authenticate Kernel with ECC";
SHA256_CTX ctx;
SHA256_Init(&ctx);
SHA256_Update(&ctx, (const uint8_t*)message,sizeof(message));
SHA256_Final(digest, &ctx);
verified = ECDSA_do_verify(digest, sizeof(digest), signature, ECpubkey);

私钥与wolfSSL一起使用来对消息进行签名,然后使用openssl对公钥进行验证,但这会突然停止。

EN

回答 1

Stack Overflow用户

发布于 2017-01-18 22:22:20

在过去,当使用openSSL并将符号值与wolfSSL进行比较时,我发现OpenSSL在签名时执行以下步骤:

  1. 读取并解码密钥
  2. 计算散列
  3. 签名编码散列
  4. 对编码的散列签名
  5. Base64对签名进行编码

OpenSSL并没有使这一点变得显而易见或对用户友好,因此不幸的是,这是您必须发现的东西。

请使用wolfSSL中的以下步骤来实现您想要的输出:

1创建或导入ECC密钥

2像以前那样计算输入上的sha散列

3用这个API调用编码哈希:encodedSz = wc_EncodeSignature(encodedOutput, hashInput, SHA256_DIGEST_SIZE, SHA256h);

4签名编码的散列。

5现在做验证

如果这对你有用,请告诉我们。

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

https://stackoverflow.com/questions/39994824

复制
相关文章

相似问题

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