/************************************************************************/ /* Copyright (C), 2016-2020, [IT], 保留所有权利; /* 模 块 名:; /* 描 述:; /* /* 版 本:[V]; /* 作 者:[Home]; /* 日 期:[6/5/2016]; /* /* /* 注 意:; /* /* 修改记录:[IT]; /* 修改日期:; /* 修改版本:; /* 修改内容:; /************************************************************************/ #ifndef POLARSSL_DES_H #define POLARSSL_DES_H #define DES_ENCRYPT 1 #define DES_DECRYPT 0 #define DES_KEY_SIZE 8 #define POLARSSL_ERR_DES_INVALID_INPUT_LENGTH -0x0C00 // DES结构体; typedef struct { unsigned long sk[32]; // DES 子密钥(由用户输入的密钥生成); } des_context; // 3层DES结构体; typedef struct { unsigned long sk[96]; // DES 子密钥(由用户输入的密钥生成); } des3_context; // 设置密钥校验位为偶校验; void des_key_set_parity( unsigned char key[8] ); // 判断密钥校验位是否为偶校验; int des_key_check_key_parity( const unsigned char key[8] ); // 判断密钥是否为弱密钥; int des_key_check_weak( const unsigned char key[8] ); // 返回加密时填充后的明文长度; unsigned __int64 des_enc_len(const unsigned __int64& nlen); // 返回解密后,去除填充的长度; unsigned __int64 des_dec_len(const unsigned char* input, unsigned __int64 nlen); // 设置DES加密密钥; void des_setkey_enc( IN des_context *ctx, IN const unsigned char key[8] ); // 设置DES解密密钥; void des_setkey_dec( IN des_context *ctx, IN const unsigned char key[8] ); // 设置2层DES加密密钥; void des3_set2key_enc( IN des3_context *ctx, IN const unsigned char key[16] ); // 设置2层DES解密密钥; void des3_set2key_dec( IN des3_context *ctx, IN const unsigned char key[16] ); // 设置3层DES加密密钥; void des3_set3key_enc( IN des3_context *ctx, IN const unsigned char key[24] ); // 设置3层DES解密密钥; void des3_set3key_dec( IN des3_context *ctx, IN const unsigned char key[24] ); // DES-ECB模式加解密; int des_crypt_ecb( IN des_context *ctx, IN const unsigned char input[8], IN unsigned char output[8] ); // DES-CBC模式加解密; 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 ); // 3层DES-ECB模式加解密; int des3_crypt_ecb( IN des3_context *ctx, IN const unsigned char input[8], IN unsigned char output[8] ); // 3层DES-CBC模式加解密; 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 ); // 测试例子; int des_self_test( int verbose ); #endif // POLARSSL_DES_H