算法类型
- 算法类型
在算法说明数据结构中有两个成员变量可以表示算法类型(包括算法实现方式),分别为:
(1)算法标志cra_flags的低4bit表示算法类型,在crypto.h(root\include\linux\crypto.h)中定义了一系列形如CRYPTO_ALG_TYPE_XXX的算法类型宏,如下所示:
#define CRYPTO_ALG_TYPE_CIPHER 0x00000001 //分组加密算法
#define CRYPTO_ALG_TYPE_COMPRESS 0x00000002 //压缩算法
#define CRYPTO_ALG_TYPE_AEAD 0x00000003 //认证加密算法
#define CRYPTO_ALG_TYPE_BLKCIPHER 0x00000004 //块加密算法
#define CRYPTO_ALG_TYPE_ABLKCIPHER 0x00000005 //异步块加密算法
#define CRYPTO_ALG_TYPE_GIVCIPHER 0x00000006 //带IV生成器的加密算法
#define CRYPTO_ALG_TYPE_DIGEST 0x00000008 //摘要算法
#define CRYPTO_ALG_TYPE_HASH 0x00000008 //哈希算法
#define CRYPTO_ALG_TYPE_SHASH 0x00000009 //同步哈希算法
#define CRYPTO_ALG_TYPE_AHASH 0x0000000a //异步哈希算法
#define CRYPTO_ALG_TYPE_RNG 0x0000000c //随机数生成算法
无论是静态算法还是动态算法,其算法标志低4bit表示的算法类型是必须设置的,例如:
a、AES算法的算法说明aes_alg中明确定义其算法类型为CRYPTO_ALG_TYPE_CIPHER,表示在加密框架中AES算法为分组加密算法;
b、MD5算法的算法说明md5_alg中明确定义其算法类型为CRYPTO_ALG_TYPE_SHASH,表示在加密框架中MD5算法为同步方式实现的哈希算法;
c、所有CBC算法模板创建的动态算法,其算法类型定义为CRYPTO_ALG_TYPE_BLKCIPHER,表示在加密框架中所有CBC算法模板创建的动态算法都是块加密算法;
d、所有HMAC算法模板创建的动态算法,其算法类型定义为CRYPTO_ALG_TYPE_SHASH,表示在加密框架中所有HMAC模板创建的动态算法都是同步方式的哈希算法;
e、更复杂的算法模板“authenc”创建的动态算法,其算法类型定义为CRYPTO_ALG_TYPE_AEAD,表示在加密框架中算法模板"authenc"创建的动态算法都是同时可提供加密服务和认证服务的AEAD算法。
除上述算法类型宏外,加密框架中还定义了一系列算法类型屏蔽字的宏定义,如下所示。
#define CRYPTO_ALG_TYPE_MASK 0x0000000f
#