第二十一章 EVP / 21.3 源码结构

evp源码位于crypto/evp目录,可以分为如下几类:

1)   全局函数

主要包括c_allc.cc_alld.cc_all.c以及names.c。他们加载openssl支持的所有的对称算法和摘要算法,放入到哈希表中。实现了OpenSSL_add_all_digestsOpenSSL_add_all_ciphers以及OpenSSL_add_all_algorithms(调用了前两个函数)函数。在进行计算时,用户也可以单独加载摘要函数(EVP_add_digest)和对称计算函数(EVP_add_cipher)。

2)   BIO扩充

包括bio_b64.cbio_enc.cbio_md.cbio_ok.c,各自实现了BIO_METHOD方法,分别用于base64编解码、对称加解密以及摘要。

3)   摘要算法EVP封装

digest.c实现,实现过程中调用了对应摘要算法的回调函数。各个摘要算法提供了自己的EVP_MD静态结构,对应源码为m_xxx.c

4对称算法EVP封装

evp_enc.c实现,实现过程调用了具体对称算法函数,实现了Update操作。各种对称算法都提供了一个EVP_CIPHER静态结构,对应源码为e_xxx.c。需要注意的是,e_xxx.c中不提供完整的加解密运算,它只提供基本的对于一个block_size数据的计算,完整的计算由evp_enc.c来实现。当用户想添加一个自己的对称算法时,可以参考e_xxx.c的实现方式。一般用户至少需要实现如下功能:

Ø         构造一个新的静态的EVP_CIPHER结构;

Ø         实现EVP_CIPHER结构中的init函数,该函数用于设置iv,设置加解密标记、以及根据外送密钥生成自己的内部密钥;

Ø         实现do_cipher函数,该函数仅对block_size字节的数据进行对称运算;

Ø         实现cleanup函数,该函数主要用于清除内存中的密钥信息。

5)   非对称算法EVP封装

主要是以p_开头的文件。其中,p_enc.c封装了公钥加密;p_dec.c封装了私钥解密;p_lib.c实现一些辅助函数;p_sign.c封装了签名函数;p_verify.c封装了验签函数;p_seal.c封装了数字信封;p_open.c封装了解数字信封。

6基于口令的加密

包括p5_crpt2.cp5_crpt.cevp_pbe.c