openssl之EVP系列之11---EVP_Verify系列函数介绍
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之EVP系列之11---EVP_Verify系列函数介绍的更多相关文章
- JMeter36个内置函数及11个新增函数介绍
JMeter内置了36个函数,这些函数可以通过函数助手进行编辑和测试.了解这些函数,不仅能提高JMeter的使用熟练度,也有助于知晓测试工具或测试框架通用的函数有哪些,在自主设计时,作为参考借鉴. J ...
- JavaWeb网上图书商城完整项目--11.项目所需jquery函数介绍
1.下载jquery的函数包 2.强函数包添加到工程的web-root目录下 3.在jsp文件中加载js文件 <script type="text/javascript" s ...
- openssl之EVP系列之1---算法封装
openssl之EVP系列之1---算法封装 ---依据openssl doc/crypto/EVP.pod翻译和自己的理解写成 (作者:DragonKing, Mail: wzhah ...
- openssl之EVP系列之6---EVP_Encrypt系列函数编程架构及样例
openssl之EVP系列之6---EVP_Encrypt系列函数编程架构及样例 ---依据openssl doc/crypto/EVP_EncryptInit.pod和doc/ssleay. ...
- openssl之EVP系列之13---EVP_Open系列函数介绍
openssl之EVP系列之13---EVP_Open系列函数介绍 ---依据openssl doc/crypto/EVP_OpenInit.pod翻译和自己的理解写成 (作者:Dra ...
- openssl之EVP系列之9---EVP_Digest系列函数的一个样例
openssl之EVP系列之9---EVP_Digest系列函数的一个样例 ---依据openssl doc/crypto/EVP_DigestInit.pod翻译 (作者:Drago ...
- openssl之EVP系列之8---EVP_Digest系列函数具体解释
openssl之EVP系列之8---EVP_Digest系列函数具体解释 ---依据openssl doc/crypto/EVP_DigestInit.pod翻译和自己的理解写成 (作 ...
- openssl之EVP系列之7---信息摘要算法结构概述
openssl之EVP系列之7---信息摘要算法结构概述 ---依据openssl doc/crypto/EVP_DigestInit.pod翻译和自己的理解写成 (作者:Dragon ...
- openssl之EVP系列之12---EVP_Seal系列函数介绍
openssl之EVP系列之12---EVP_Seal系列函数介绍 ---依据openssl doc/crypto/EVP_SealInit.pod翻译和自己的理解写成 (作者:Dra ...
随机推荐
- luogu2764 最小路径覆盖问题
最小路径覆盖,看这里 #include <iostream> #include <cstring> #include <cstdio> #include <q ...
- Selenium WebDriver-模拟鼠标双击某个元素
#encoding=utf-8 import unittest import time import chardet from selenium import webdriver class Visi ...
- 测试jsonp
login<?php $type = $_GET['type']; if(empty($type)) { $url = ""; }else { if($type == 'lo ...
- kb-07线段树--11--区间多重该值多种查询
/* lazy思想的运用,因为查询多种,如果全记录就太繁了,lazy就是如果该区间的每一个叶子的状态都相同就不用深入下去该值,只要暂时标记下,查询的时候也不用下去,直接计算: */ #include& ...
- 刷题总结——work(ssoj)
题目: 题目背景 SOURCE:NOIP2015-SHY-5 题目描述 假设现在离 noip 还有 m 天,有 n 个人要去参加比赛.他们每个人都有一个预定的训练量 r[i] ,所以每一天他们都抓紧时 ...
- log4j.xml——java日志处理组件配置简介
(从一篇好文开始)log4j(一)——为什么要用log4j? 三:看完栗子后的感想 (1)很明显我们在编写代码的时候有各种需要打印日志的需求,比如:我们调试代码的时候:我们的应用出现了问题,我们分析. ...
- Linux服务器的安装
命令:1. mount /mnt/cdrom/回车 安装光驱2. cd /mnt/cdrom/ 进入光驱目录3. cd /mnt/cdrom/RedHat/RPMS/ 进入RPMS目录4. rpm - ...
- 写论文,关于word的技巧
当段落的行间距为固定值的时候,图片会出现显示不全的情况,将行间距先改了再插入图片就没问题了. 从引用那边自动添加目录. ctrl+H打开可以使用通配符,改变字母或者数字的样式等
- json键的不能像值一样拼写的问题
今天碰到了一个json的键不能拼写的问题 解决方法是 先把json对象作为一个字符串拼写 然后再通过eavl函数转为json对象 $(".select_date").each( ...
- Linux 虚拟内存和物理内存的理解【转】
转自:http://www.cnblogs.com/dyllove98/archive/2013/06/12/3132940.html 首先,让我们看下虚拟内存: 第一层理解 1. 每 ...