openssl ECDSA_verify的调用demo
时间: 2023-10-23 09:12:32 浏览: 255
我可以为您提供一个openssl ECDSA_verify的调用demo,您可以参考以下代码:
```c
#include <openssl/ec.h>
#include <openssl/ecdsa.h>
#include <openssl/obj_mac.h>
int verify_signature(const unsigned char *msg, size_t msglen, EC_KEY *pubkey, const unsigned char *sig, size_t siglen)
{
int ret = 0;
ECDSA_SIG *signature = NULL;
signature = ECDSA_SIG_new();
if(signature == NULL)
{
printf("ECDSA_SIG_new failed\n");
return ret;
}
const unsigned char *r = sig;
const unsigned char *s = sig + ECDSA_SIG_r_len(sig);
if(!BN_bin2bn(r, ECDSA_SIG_r_len(sig), signature->r))
{
printf("BN_bin2bn r failed\n");
goto err;
}
if(!BN_bin2bn(s, ECDSA_SIG_s_len(sig), signature->s))
{
printf("BN_bin2bn s failed\n");
goto err;
}
if(ECDSA_do_verify(msg, msglen, signature, pubkey) != 1)
{
printf("ECDSA_do_verify failed\n");
goto err;
}
ret = 1;
err:
if(signature != NULL)
ECDSA_SIG_free(signature);
return ret;
}
```
这个demo可以用来验证一个ECDSA签名是否正确。您需要传入待验证的消息、消息长度、公钥、签名和签名长度。如果验证通过,函数返回1,否则返回0。
请注意,这只是一个demo,实际使用时需要根据您的具体需求进行修改。
阅读全文