openssl之EVP系列之11---EVP_Verify系列函数介绍
2015-06-26 14:07
393 查看
openssl之EVP系列之11---EVP_Verify系列函数介绍
---根据openssl doc/crypto/EVP_VerifyInit.pod翻译和自己的理解写成
(作者:DragonKing, Mail: wzhah@263.net ,发布于: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 doc/crypto/EVP_VerifyInit.pod翻译和自己的理解写成
(作者:DragonKing, Mail: wzhah@263.net ,发布于: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系列之10---EVP_Sign系列函数介绍
- openssl之EVP系列之9---EVP_Digest系列函数的一个例子
- openssl之EVP系列之8---EVP_Digest系列函数详解
- openssl之EVP系列之7---信息摘要算法结构概述
- OpenCL概述
- openssl之EVP系列之6---EVP_Encrypt系列函数编程架构及例子
- openssl之EVP系列之5---EVP_Encrypt系列函数详解(二)
- sphinx配置全解析
- openssl之EVP系列之4---EVP_Encrypt系列函数详解(一)
- Linux命令
- openssl之EVP系列之3---EVP_Encrypt支持的对称加密算法列表
- 【Hadoop权威指南】MapReduce简介(第二天)
- openssl之EVP系列之2---对称加密算法概述
- 基于Hadoop数据仓库Hive1.2部署及使用
- openssl之EVP系列之1---算法封装
- 通过boundingRectWithSize:options:attributes:context:计算文本尺寸
- 用openssl创建公钥私钥证书的脚本
- linux常用查看硬件设备信息命令
- LNMP-Linux下Nginx+MySQL+PHP+phpMyAdmin+eAcelerator一键安装包
- hdu1299 Diophantus of Alexandria---素因子分解