ECDSA_DATA主要描述ECDSA的附加信息,其定义如下。
typedef struct ecdsa_data_st {
int (*init)(EC_KEY *);
ENGINE *engine;
int flags;
const ECDSA_METHOD *meth;
CRYPTO_EX_DATA ex_data;
} ECDSA_DATA;
其中:
- engine Engine机制。
- meth 记载了调用的签名验证等函数的信息,参见下面的ECDSA_METHOD。
- ex_data 额外的附加信息。
Engine机制是OpenSSL不可缺少的一部分,其目的是使OpenSSL能够透明地使用第三方提供的软件加密库或者硬件加密设备进行加密。这使得OpenSSL已经不仅仅是一个加密库,而且还提供一个通用的加密接口,能够与绝大部分加密库或者加密设备协调工作。当然,要使特定加密库或加密设备与OpenSSL协调工作,需要写少量的接口代码,但是这样的工作量并不大。Engine是OpenSSL预留的用以加载第三方加密库引擎,主要包括了动态库加载的代码和加密函数指针管理的一系列接口。如果要使用Engine,那么首先要加载该Engine,然后选择要使用的算法或者使用支持的所有加密算法。这样你的应用程序在调用加解密算法时,它就会指向你加载的动态库里的加解密算法,而不是原先的OpenSSL库里的加解密算法。Engine的实现在crypto\engine目录下可以找到,也可以参见[4,5,6]。