32 #if defined(POLARSSL_CIPHER_C)
39 #if defined _MSC_VER && !defined strcasecmp
40 #define strcasecmp _stricmp
44 static void polarssl_zeroize(
void *v,
size_t n ) {
45 volatile unsigned char *p = v;
while( n-- ) *p++ = 0;
48 static const int supported_ciphers[] = {
50 #if defined(POLARSSL_AES_C)
55 #if defined(POLARSSL_CIPHER_MODE_CFB)
61 #if defined(POLARSSL_CIPHER_MODE_CTR)
69 #if defined(POLARSSL_CAMELLIA_C)
74 #if defined(POLARSSL_CIPHER_MODE_CFB)
80 #if defined(POLARSSL_CIPHER_MODE_CTR)
88 #if defined(POLARSSL_DES_C)
94 #if defined(POLARSSL_BLOWFISH_C)
97 #if defined(POLARSSL_CIPHER_MODE_CFB)
101 #if defined(POLARSSL_CIPHER_MODE_CTR)
107 #if defined(POLARSSL_CIPHER_NULL_CIPHER)
116 return supported_ciphers;
122 switch ( cipher_type )
124 #if defined(POLARSSL_AES_C)
132 #if defined(POLARSSL_CIPHER_MODE_CFB)
141 #if defined(POLARSSL_CIPHER_MODE_CTR)
152 #if defined(POLARSSL_CAMELLIA_C)
160 #if defined(POLARSSL_CIPHER_MODE_CFB)
169 #if defined(POLARSSL_CIPHER_MODE_CTR)
180 #if defined(POLARSSL_DES_C)
189 #if defined(POLARSSL_BLOWFISH_C)
193 #if defined(POLARSSL_CIPHER_MODE_CFB)
198 #if defined(POLARSSL_CIPHER_MODE_CTR)
205 #if defined(POLARSSL_CIPHER_NULL_CIPHER)
207 return &null_cipher_info;
217 if( NULL == cipher_name )
221 #if defined(POLARSSL_CAMELLIA_C)
222 if( !strcasecmp(
"CAMELLIA-128-CBC", cipher_name ) )
224 if( !strcasecmp(
"CAMELLIA-192-CBC", cipher_name ) )
226 if( !strcasecmp(
"CAMELLIA-256-CBC", cipher_name ) )
229 #if defined(POLARSSL_CIPHER_MODE_CFB)
230 if( !strcasecmp(
"CAMELLIA-128-CFB128", cipher_name ) )
232 if( !strcasecmp(
"CAMELLIA-192-CFB128", cipher_name ) )
234 if( !strcasecmp(
"CAMELLIA-256-CFB128", cipher_name ) )
238 #if defined(POLARSSL_CIPHER_MODE_CTR)
239 if( !strcasecmp(
"CAMELLIA-128-CTR", cipher_name ) )
241 if( !strcasecmp(
"CAMELLIA-192-CTR", cipher_name ) )
243 if( !strcasecmp(
"CAMELLIA-256-CTR", cipher_name ) )
248 #if defined(POLARSSL_AES_C)
249 if( !strcasecmp(
"AES-128-CBC", cipher_name ) )
251 if( !strcasecmp(
"AES-192-CBC", cipher_name ) )
253 if( !strcasecmp(
"AES-256-CBC", cipher_name ) )
256 #if defined(POLARSSL_CIPHER_MODE_CFB)
257 if( !strcasecmp(
"AES-128-CFB128", cipher_name ) )
259 if( !strcasecmp(
"AES-192-CFB128", cipher_name ) )
261 if( !strcasecmp(
"AES-256-CFB128", cipher_name ) )
265 #if defined(POLARSSL_CIPHER_MODE_CTR)
266 if( !strcasecmp(
"AES-128-CTR", cipher_name ) )
268 if( !strcasecmp(
"AES-192-CTR", cipher_name ) )
270 if( !strcasecmp(
"AES-256-CTR", cipher_name ) )
275 #if defined(POLARSSL_DES_C)
276 if( !strcasecmp(
"DES-CBC", cipher_name ) )
278 if( !strcasecmp(
"DES-EDE-CBC", cipher_name ) )
280 if( !strcasecmp(
"DES-EDE3-CBC", cipher_name ) )
284 #if defined(POLARSSL_BLOWFISH_C)
285 if( !strcasecmp(
"BLOWFISH-CBC", cipher_name ) )
288 #if defined(POLARSSL_CIPHER_MODE_CFB)
289 if( !strcasecmp(
"BLOWFISH-CFB64", cipher_name ) )
293 #if defined(POLARSSL_CIPHER_MODE_CTR)
294 if( !strcasecmp(
"BLOWFISH-CTR", cipher_name ) )
299 #if defined(POLARSSL_CIPHER_NULL_CIPHER)
300 if( !strcasecmp(
"NULL", cipher_name ) )
309 if( NULL == cipher_info || NULL == ctx )
342 #if defined(POLARSSL_CIPHER_NULL_CIPHER)
367 if( NULL == ctx || NULL == ctx->
cipher_info || NULL == iv )
378 unsigned char *output,
size_t *olen )
383 if( NULL == ctx || NULL == ctx->
cipher_info || NULL == olen ||
391 #if defined(POLARSSL_CIPHER_NULL_CIPHER)
394 memcpy( output, input, ilen );
505 static void add_pkcs_padding(
unsigned char *output,
size_t output_len,
508 size_t padding_len = output_len - data_len;
511 for( i = 0; i < padding_len; i++ )
512 output[data_len + i] = (
unsigned char) padding_len;
515 static int get_pkcs_padding(
unsigned char *input,
unsigned int input_len,
518 unsigned int i, pad_idx;
519 unsigned char padding_len, bad = 0;
521 if( NULL == input || NULL == data_len )
524 padding_len = input[input_len - 1];
525 *data_len = input_len - padding_len;
528 bad |= padding_len > input_len;
529 bad |= padding_len == 0;
533 pad_idx = input_len - padding_len;
534 for( i = 0; i < input_len; i++ )
535 bad |= ( input[i] ^ padding_len ) * ( i >= pad_idx );
544 if( NULL == ctx || NULL == ctx->
cipher_info || NULL == olen )
589 #if defined(POLARSSL_SELF_TEST)
593 #define ASSERT(x) if (!(x)) { \
594 printf( "failed with %i at %s\n", value, (#x) ); \