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,對於每個方法都注冊一遍。
