Openssl中的许多数据结构不仅包含数据本身,还包含各种操作,并且这些操作是可替换的。Openssl中这些结构集合一般叫做XXX_METHOD,有DSO_METHOD、DSA_METHOD、EC_METHOD、ECDH_METHOD、ECDSA_METHOD、DH_METHOD、RAND_METHOD、RSA_METHOD、EVP_CIPHER和EVP_MD等。以RSA结构为例(crypto/rsa/rsa.h),RSA结构不仅包含了大数n、e、d和p等等数据项目,还包含一个RSA_METHOD回调函数集合。该方法给出了RSA各种运算函数。
对于各种数据类型,要进行计算必须至少有一个可用的方法(XXX_METHOD)。因此,openssl对各种类型都提供了默认的计算方法(软算法)。如果用户实现了自己的XXX_METHOD,那么就能替换openssl提供的方法,各种计算由用户自己控制。硬件Engine就是这种原理。根据需要,一个硬件Engine可实现自己的RAND_METHOD、RSA_METHOD、EVP_CIPHER、DSA_METHOD、DH_METHOD、ECDH_METHOD和EVP_MD等,来替换对应软算法的METHOD。