des.h 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /************************************************************************/
  2. /* Copyright (C), 2016-2020, [IT], 保留所有权利;
  3. /* 模 块 名:;
  4. /* 描 述:;
  5. /*
  6. /* 版 本:[V];
  7. /* 作 者:[Home];
  8. /* 日 期:[6/5/2016];
  9. /*
  10. /*
  11. /* 注 意:;
  12. /*
  13. /* 修改记录:[IT];
  14. /* 修改日期:;
  15. /* 修改版本:;
  16. /* 修改内容:;
  17. /************************************************************************/
  18. #ifndef POLARSSL_DES_H
  19. #define POLARSSL_DES_H
  20. #define DES_ENCRYPT 1
  21. #define DES_DECRYPT 0
  22. #define DES_KEY_SIZE 8
  23. #define POLARSSL_ERR_DES_INVALID_INPUT_LENGTH -0x0C00
  24. // DES结构体;
  25. typedef struct
  26. {
  27. unsigned long sk[32]; // DES 子密钥(由用户输入的密钥生成);
  28. }
  29. des_context;
  30. // 3层DES结构体;
  31. typedef struct
  32. {
  33. unsigned long sk[96]; // DES 子密钥(由用户输入的密钥生成);
  34. }
  35. des3_context;
  36. // 设置密钥校验位为偶校验;
  37. void des_key_set_parity( unsigned char key[8] );
  38. // 判断密钥校验位是否为偶校验;
  39. int des_key_check_key_parity( const unsigned char key[8] );
  40. // 判断密钥是否为弱密钥;
  41. int des_key_check_weak( const unsigned char key[8] );
  42. // 返回加密时填充后的明文长度;
  43. unsigned __int64 des_enc_len(const unsigned __int64& nlen);
  44. // 返回解密后,去除填充的长度;
  45. unsigned __int64 des_dec_len(const unsigned char* input, unsigned __int64 nlen);
  46. // 设置DES加密密钥;
  47. void des_setkey_enc( IN des_context *ctx, IN const unsigned char key[8] );
  48. // 设置DES解密密钥;
  49. void des_setkey_dec( IN des_context *ctx, IN const unsigned char key[8] );
  50. // 设置2层DES加密密钥;
  51. void des3_set2key_enc( IN des3_context *ctx, IN const unsigned char key[16] );
  52. // 设置2层DES解密密钥;
  53. void des3_set2key_dec( IN des3_context *ctx, IN const unsigned char key[16] );
  54. // 设置3层DES加密密钥;
  55. void des3_set3key_enc( IN des3_context *ctx, IN const unsigned char key[24] );
  56. // 设置3层DES解密密钥;
  57. void des3_set3key_dec( IN des3_context *ctx, IN const unsigned char key[24] );
  58. // DES-ECB模式加解密;
  59. int des_crypt_ecb( IN des_context *ctx, IN const unsigned char input[8], IN unsigned char output[8] );
  60. // DES-CBC模式加解密;
  61. int des_crypt_cbc( IN des_context *ctx, IN int mode, IN int length, IN unsigned char iv[8], IN const unsigned char *input, IN unsigned char *output );
  62. // 3层DES-ECB模式加解密;
  63. int des3_crypt_ecb( IN des3_context *ctx, IN const unsigned char input[8], IN unsigned char output[8] );
  64. // 3层DES-CBC模式加解密;
  65. int des3_crypt_cbc( IN des3_context *ctx, IN int mode, IN int length, IN unsigned char iv[8], IN const unsigned char *input, IN unsigned char *output );
  66. // 测试例子;
  67. int des_self_test( int verbose );
  68. #endif // POLARSSL_DES_H