LibTomCtypt中为密码算法定义了一个算法描述子cipher_descriptor,可以把它理解为一个类,里面描述了密码算法应该有的变量和函数操作。密码算法描述子的详细描述可以参见tomcrypt_cipher.h
extern struct ltc_cipher_descriptor {
char *name; // 密码算法名,最后一个会被置为NULL以表示结束
unsigned char ID; // 密码算法标识符
int min_key_length, // 密码长度最小值(字节)
max_key_length, // 密码长度最小值(字节)
block_length, // 分组大小(字节)
default_rounds; // 密码算法默认轮数
//以下是操作函数,通常仅前6个函数有效,后面函数用于快速优化实现,多为NULL
int (*setup)(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);// 初始化,做密钥安装
int (*ecb_encrypt)(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);//加密一个分组
int (*ecb_decrypt)(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);//解密一个分组
int (*test)(void);// 测试函数
void (*done)(symmetric_key *skey); //反初始化
int (*keysize)(int *keysize);//获取密钥大小
//以下函数多用于快速优化实现,常设置为NULL,介绍略
int (*accel_ecb_encrypt)(...);
int (*accel_ecb_decrypt) (...);
int (*accel_cbc_encrypt) (...);
int (*accel_cbc_decrypt) (...);
int (*accel_ctr_encrypt) (...);
int (*accel_lrw_encrypt) (...);
int (*accel_lrw_decrypt) (...);
int (*accel_ccm_memory) (...);
int (*accel_gcm_memory) (...);
int (*omac_memory) (...);
int (*xcbc_memory) (...);
int (*f9_memory) (...);
} cipher_descriptor[];
相关函数介绍
──────────────────────────────────────
int (*setup)(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
// [功能] 初始化,做密钥安装
- key // [输入] 密钥
- keylen // [输入] 密钥长度(字节)
- num_rounds // [输入] 密码算法轮数(建议设置为0,以使用算法默认轮数)
- skey // [输出] 扩展密钥
──────────────────────────────────────
──────────────────────────────────────
int (*ecb_encrypt)(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
// [功能] 加密一个分组
- pt // [输入] 明文
- ct // [输出] 密文
- skey // [输入] 扩展密钥
──────────────────────────────────────
──────────────────────────────────────
int (*ecb_decrypt)(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
// [功能] 解密一个分组
- ct // [输入] 密文
- pt // [输出] 明文
- skey // [输入] 扩展密钥
──────────────────────────────────────
──────────────────────────────────────
int (*test)(void);
// [功能] 测试函数
──────────────────────────────────────
──────────────────────────────────────
void (*done)(symmetric_key *skey);
// [功能] 反初始化(最好销毁此扩展密钥)
- skey // [输入/输出] 扩展密钥
──────────────────────────────────────
──────────────────────────────────────
int (*keysize)(int *keysize)
// [功能] 获取推荐的密钥长度
- keysize // [输入/输出] 密钥长度
──────────────────────────────────────