00001
00004 #ifndef _DES_H
00005 #define _DES_H
00006
00007 #ifdef __cplusplus
00008 extern "C" {
00009 #endif
00010
00014 typedef struct
00015 {
00016 unsigned long esk[32];
00017 unsigned long dsk[32];
00018 }
00019 des_context;
00020
00024 typedef struct
00025 {
00026 unsigned long esk[96];
00027 unsigned long dsk[96];
00028 }
00029 des3_context;
00030
00037 void des_set_key( des_context *ctx, unsigned char key[8] );
00038
00046 void des_encrypt( des_context *ctx,
00047 unsigned char input[8],
00048 unsigned char output[8] );
00049
00057 void des_decrypt( des_context *ctx,
00058 unsigned char input[8],
00059 unsigned char output[8] );
00060
00070 void des_cbc_encrypt( des_context *ctx,
00071 unsigned char iv[8],
00072 unsigned char *input,
00073 unsigned char *output,
00074 int len );
00075
00085 void des_cbc_decrypt( des_context *ctx,
00086 unsigned char iv[8],
00087 unsigned char *input,
00088 unsigned char *output,
00089 int len );
00090
00097 void des3_set_2keys( des3_context *ctx, unsigned char key[16] );
00098
00105 void des3_set_3keys( des3_context *ctx, unsigned char key[24] );
00106
00114 void des3_encrypt( des3_context *ctx,
00115 unsigned char input[8],
00116 unsigned char output[8] );
00117
00125 void des3_decrypt( des3_context *ctx,
00126 unsigned char input[8],
00127 unsigned char output[8] );
00128
00138 void des3_cbc_encrypt( des3_context *ctx,
00139 unsigned char iv[8],
00140 unsigned char *input,
00141 unsigned char *output,
00142 int len );
00143
00153 void des3_cbc_decrypt( des3_context *ctx,
00154 unsigned char iv[8],
00155 unsigned char *input,
00156 unsigned char *output,
00157 int len );
00158
00159
00160
00161
00162
00163
00164 int des_self_test( int verbose );
00165
00166 #ifdef __cplusplus
00167 }
00168 #endif
00169
00170 #endif