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

本文深入解析LibTomCrypt中的密码算法描述子cipher_descriptor,介绍了其结构和功能,包括算法名、标识符、密钥长度、分组大小及默认轮数等属性,以及初始化、加密、解密等关键操作函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

  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         // [输入/输出] 密钥长度

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值