密码库LibTomCrypt学习记录——(1.1)分组密码算法——算法描述子cipher_descriptor

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

扫描二维码关注公众号,回复: 4405581 查看本文章

   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);

// [功能]   初始化,做密钥安装

  1. key              // [输入] 密钥
  2. keylen     // [输入] 密钥长度(字节)
  3. num_rounds  // [输入] 密码算法轮数(建议设置为0,以使用算法默认轮数)
  4. skey             // [输出] 扩展密钥

──────────────────────────────────────

 

──────────────────────────────────────

int (*ecb_encrypt)(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);

// [功能]   加密一个分组

  1. pt           // [输入] 明文
  2. ct            // [输出] 密文
  3. skey             // [输入] 扩展密钥

──────────────────────────────────────

 

──────────────────────────────────────

int (*ecb_decrypt)(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);

// [功能] 解密一个分组

  1. ct            // [输入] 密文
  2. pt           // [输出] 明文
  3. skey             // [输入] 扩展密钥

──────────────────────────────────────

 

──────────────────────────────────────

int (*test)(void);

// [功能] 测试函数

──────────────────────────────────────

 

──────────────────────────────────────

void (*done)(symmetric_key *skey);

// [功能] 反初始化(最好销毁此扩展密钥)

  1. skey             // [输入/输出] 扩展密钥

──────────────────────────────────────

 

──────────────────────────────────────

int  (*keysize)(int *keysize)

// [功能] 获取推荐的密钥长度

  1. keysize         // [输入/输出] 密钥长度

──────────────────────────────────────

猜你喜欢

转载自blog.csdn.net/samsho2/article/details/84819999
今日推荐