openssl之EVP系列之11---EVP_Verify系列函数介绍

Posted gccbuaa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了openssl之EVP系列之11---EVP_Verify系列函数介绍相关的知识,希望对你有一定的参考价值。

openssl之EVP系列之11---EVP_Verify系列函数介绍
    ---依据openssl doc/crypto/EVP_VerifyInit.pod翻译和自己的理解写成
    (作者:DragonKing, Mail: [email protected] ,公布于:http://openssl.126.com之openssl专业论坛,版本号:openssl-0.9.7)
    跟EVP_Sign系列函数一样,EVP_Verify系列函数的前两步(初始化和信息摘要处理)跟信息摘要算法是一样的,由于签名验证的过程就是先对信息进行信息摘要,然后再将发来的摘要信息解密后进行比較的过程,其定义例如以下(openssl/evp.h):
     int EVP_VerifyInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl);
     int EVP_VerifyUpdate(EVP_MD_CTX *ctx, const void *d, unsigned int cnt);
     int EVP_VerifyFinal(EVP_MD_CTX *ctx,unsigned char *sigbuf, unsigned int siglen,EVP_PKEY *pkey);
    
     int EVP_VerifyInit(EVP_MD_CTX *ctx, const EVP_MD *type);
    【EVP_VerifyInit_ex】
    该函数是一个宏定义函数,事实上际定义例如以下:
    #define EVP_VerifyInit_ex(a,b,c) EVP_DigestInit_ex(a,b,c)
    所以,其功能和用法跟前面介绍的EVP_DigestInit_ex函数是一样的。

该函数使用參数impl所提供的算法库对验证结构ctx进行设置。在调用本函数之前。參数ctx必须经过调用EVP_MD_CTX_init进行初始化。成功返回1。失败返回0。


    【EVP_VerifyUpdate】
    该函数也是一个宏定义函数,事实上际定义例如以下:
    #define EVP_VerifyUpdate(a,b,c) EVP_DigestUpdate(a,b,c)
    所以,其功能和用法跟前面介绍的EVP_DigestUpdate函数是同样的。

该函数将參数d中的cnt字节数据经过信息摘要计算后保存到ctx中。该函数能够进行多次调用,以处理很多其它的数据。

成功调用返回1,失败返回0。
    【EVP_VerifyFinal】
    该函数使用公钥pkey和ctx结构里面的信息验证sigbuf里面的数据的签名。其实。该函数先调用EVP_MD_CTX_copy_ex函数将原来的ctx拷贝一份,然后调用EVP_DigestFinal_ex函数完毕拷贝的ctx的信息摘要计算。最后才使用公钥进行签名的验证工作。
    由于该函数实际上处理的是原来ctx函数的一个拷贝,所以原来的ctx结构还能够调用EVP_VerifyUpdate和EVP_VerifyFinal函数进行很多其它的数据处理和签名验证工作。


    在使用完之后,ctx必须使用EVP_MD_CTX_cleanup函数释放内存。否则就会导致内存泄漏。


    此外,至于信息摘要算法和签名算法的关联的关系,请參照信息摘要算法部分的说明。
    该函数调用成功返回1。失败则返回0或-1。
    【EVP_VerifyInit】
    该函数使用缺省的实现算法对ctx结构进行初始化。也是一个宏定义函数,其定义例如以下:
    #define EVP_VerifyInit(a,b) EVP_DigestInit(a,b)
    所以跟EVP_DigestInit函数功能和使用方法是一样的。

以上是关于openssl之EVP系列之11---EVP_Verify系列函数介绍的主要内容,如果未能解决你的问题,请参考以下文章

openssl之EVP系列之8---EVP_Digest系列函数具体解释

OpenSSL之EVP用法

openssl evp 哈希算法(md5,sha1,sha256)

openssl evp RSA 加密解密

OpenSSL 1.1.0 中的 EVP_get_cipherbyname 和“未定义的结构/联合 evp_cipher_st”

OpenSSL 上的 EVP_DecryptFinal_ex 错误