23.openssl编程——Engine

23.1  Engine
openssl硬件引擎(Engine)能够使用户比较容易地将自己的硬件加入到openssl中去,替换提供的软算法。一个Engine提供了密码计算中各种计算方法的集合,他用于控制opnessl的各种密码计算
23.2 Engine支持的原理
Openssl中的许多数据结构不仅包含数据本身,还包含各种操作,并且这些操作是可替换的。Openssl中这些结构集合一般叫做XXX_METHOD,有DSO_METHOD\DSA_METHOD\EC_METHOD\ECDH_METHOD\ECDSA_METHOD\DH_METHOD\RAND_METHOD\RSA_METHOD\EVP_CIPHER和EVP_MD等
对于各种数据类型,要进行计算必须至少有一个可用方法(XXX_METHOD).因此,openssl对各种类型都提供了默认的计算方法(软算法)。如果用户实现了自己的XXX_METHOD,那么就能替换openssl提供的方法,各种计算由用户自己控制 。硬件Engine就是这种原理。根据需要,一个硬件Engine可实现自己的RAND_METHOD\RSA_METHOD\EVP_CIPHER\DSA_METHOD\DH_METHOD\ECDH_METHOD和EVP_MD等,来替换对应软算法的METHOD
23.3 Engine函数
a.ENGINE_add
将Engine加入全局到链表中
b.ENGINE_by_id
根据id来获取Engine。
c.ENGINE_cleanup
清除所有Engine数据
d. const EVP_CIPHER*ENGINE_get_cipher(ENGINE *e, int nid)
根据制定的硬件Engine以及对称算法的nid,获取Engine实现对应的EVP_CIPHER,用于对称计算。
e.ENGINE_get_cipher_engine
根据对称算法nid来获取Engine
f.ENGINE_get_ciphers/ENGINE_set_ciphers
获取/设置指定Engine的对称算法选取函数地址,该函数用于Engine中选择一种对称算法。
g.ENGINE_get_ctrl_function
获取Engine的控制函数地址
h.const DH_METHOD *ENGINE_get_DH(const ENGINE *e)
获取Engine的DH_METHOD.
i.ENGINE *ENGINE_get_digest_engine(int nid)
根据摘要算法nid来获取Engine
j.ENGINE_get_digests/ENGINE_set_digests
获取/设置制定Engine的摘要算法选取函数地址,改函数用于从Engine中选择一种摘要算法。
k.const DSA_METHOD *ENGINE_get_DSA(cosnt ENGINE *e)
获取Engine的DSA方法。
l.int ENGINE_register_XXX(ENGINE *e)
注册函数,将某一个Engine添加到对应方法的哈希表中
m.void ENGINE_unregister_XXX(ENGINE *e)
将某一个Engine从对应的哈希表中删除
n.void ENGINE_register_all_XXX(void)
将所有的Engine注册到对应方法的哈希表中
o.ENGINE_set_fefualt_XXXX
设置某Engine为对应XXXX方法的默认Engine.
p.ENGINE_set_XXX_function
设置Engine中XXX对应的函数
q.ENGINE_get_XXX_function
获取Engine中XXX对应的函数
r.ENGINE_ctrl
Engine控制函数
s.ENGINE_get_ex_data/ENGINE_set_ex_data
获取/设置Engine的扩展数据
t.ENGINE_init/ENGINE_finish
Engine初始化/结束
ENGINE_up_ref
给Engine增加一个引用
ENGINE_new/ENGINE_free
生成/释放一个Engine数据结构
ENGINE_register_all_complete
将所有的Engine,对于每个方法都注册一遍。
posted @ 2018-01-25 17:03  艾小小雨  阅读(4340)  评论(0编辑  收藏  举报