forked from eden-emu/eden
		
	
		
			
	
	
		
			339 lines
		
	
	
	
		
			14 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
		
		
			
		
	
	
			339 lines
		
	
	
	
		
			14 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
|  | /* BEGIN_HEADER */ | ||
|  | #include "mbedtls/blowfish.h" | ||
|  | /* END_HEADER */ | ||
|  | 
 | ||
|  | /* BEGIN_DEPENDENCIES | ||
|  |  * depends_on:MBEDTLS_BLOWFISH_C | ||
|  |  * END_DEPENDENCIES | ||
|  |  */ | ||
|  | 
 | ||
|  | /* BEGIN_CASE */ | ||
|  | void blowfish_valid_param( ) | ||
|  | { | ||
|  |     TEST_VALID_PARAM( mbedtls_blowfish_free( NULL ) ); | ||
|  | } | ||
|  | /* END_CASE */ | ||
|  | 
 | ||
|  | /* BEGIN_CASE depends_on:MBEDTLS_CHECK_PARAMS:!MBEDTLS_PARAM_FAILED_ALT */ | ||
|  | void blowfish_invalid_param( ) | ||
|  | { | ||
|  |     mbedtls_blowfish_context ctx; | ||
|  |     unsigned char buf[16] = { 0 }; | ||
|  |     size_t const valid_keylength = sizeof( buf ) * 8; | ||
|  |     size_t valid_mode = MBEDTLS_BLOWFISH_ENCRYPT; | ||
|  |     size_t invalid_mode = 42; | ||
|  |     size_t off; | ||
|  |     ((void) off); | ||
|  | 
 | ||
|  |     TEST_INVALID_PARAM( mbedtls_blowfish_init( NULL ) ); | ||
|  |     TEST_VALID_PARAM( mbedtls_blowfish_free( NULL ) ); | ||
|  | 
 | ||
|  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, | ||
|  |                             mbedtls_blowfish_setkey( NULL, | ||
|  |                                                      buf, | ||
|  |                                                      valid_keylength ) ); | ||
|  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, | ||
|  |                             mbedtls_blowfish_setkey( &ctx, | ||
|  |                                                      NULL, | ||
|  |                                                      valid_keylength ) ); | ||
|  | 
 | ||
|  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, | ||
|  |                             mbedtls_blowfish_crypt_ecb( NULL, | ||
|  |                                                      valid_mode, | ||
|  |                                                      buf, buf ) ); | ||
|  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, | ||
|  |                             mbedtls_blowfish_crypt_ecb( &ctx, | ||
|  |                                                         invalid_mode, | ||
|  |                                                         buf, buf ) ); | ||
|  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, | ||
|  |                             mbedtls_blowfish_crypt_ecb( &ctx, | ||
|  |                                                         valid_mode, | ||
|  |                                                         NULL, buf ) ); | ||
|  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, | ||
|  |                             mbedtls_blowfish_crypt_ecb( &ctx, | ||
|  |                                                         valid_mode, | ||
|  |                                                         buf, NULL ) ); | ||
|  | 
 | ||
|  | #if defined(MBEDTLS_CIPHER_MODE_CBC) | ||
|  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, | ||
|  |                             mbedtls_blowfish_crypt_cbc( NULL, | ||
|  |                                                         valid_mode, | ||
|  |                                                         sizeof( buf ), | ||
|  |                                                         buf, buf, buf ) ); | ||
|  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, | ||
|  |                             mbedtls_blowfish_crypt_cbc( &ctx, | ||
|  |                                                         invalid_mode, | ||
|  |                                                         sizeof( buf ), | ||
|  |                                                         buf, buf, buf ) ); | ||
|  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, | ||
|  |                             mbedtls_blowfish_crypt_cbc( &ctx, | ||
|  |                                                         valid_mode, | ||
|  |                                                         sizeof( buf ), | ||
|  |                                                         NULL, buf, buf ) ); | ||
|  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, | ||
|  |                             mbedtls_blowfish_crypt_cbc( &ctx, | ||
|  |                                                         valid_mode, | ||
|  |                                                         sizeof( buf ), | ||
|  |                                                         buf, NULL, buf ) ); | ||
|  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, | ||
|  |                             mbedtls_blowfish_crypt_cbc( &ctx, | ||
|  |                                                         valid_mode, | ||
|  |                                                         sizeof( buf ), | ||
|  |                                                         buf, buf, NULL ) ); | ||
|  | #endif /* MBEDTLS_CIPHER_MODE_CBC */ | ||
|  | 
 | ||
|  | #if defined(MBEDTLS_CIPHER_MODE_CFB) | ||
|  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, | ||
|  |                             mbedtls_blowfish_crypt_cfb64( NULL, | ||
|  |                                                           valid_mode, | ||
|  |                                                           sizeof( buf ), | ||
|  |                                                           &off, buf, | ||
|  |                                                           buf, buf ) ); | ||
|  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, | ||
|  |                             mbedtls_blowfish_crypt_cfb64( &ctx, | ||
|  |                                                           invalid_mode, | ||
|  |                                                           sizeof( buf ), | ||
|  |                                                           &off, buf, | ||
|  |                                                           buf, buf ) ); | ||
|  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, | ||
|  |                             mbedtls_blowfish_crypt_cfb64( &ctx, | ||
|  |                                                           valid_mode, | ||
|  |                                                           sizeof( buf ), | ||
|  |                                                           NULL, buf, | ||
|  |                                                           buf, buf ) ); | ||
|  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, | ||
|  |                             mbedtls_blowfish_crypt_cfb64( &ctx, | ||
|  |                                                           valid_mode, | ||
|  |                                                           sizeof( buf ), | ||
|  |                                                           &off, NULL, | ||
|  |                                                           buf, buf ) ); | ||
|  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, | ||
|  |                             mbedtls_blowfish_crypt_cfb64( &ctx, | ||
|  |                                                           valid_mode, | ||
|  |                                                           sizeof( buf ), | ||
|  |                                                           &off, buf, | ||
|  |                                                           NULL, buf ) ); | ||
|  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, | ||
|  |                             mbedtls_blowfish_crypt_cfb64( &ctx, | ||
|  |                                                           valid_mode, | ||
|  |                                                           sizeof( buf ), | ||
|  |                                                           &off, buf, | ||
|  |                                                           buf, NULL ) ); | ||
|  | #endif /* MBEDTLS_CIPHER_MODE_CFB */ | ||
|  | 
 | ||
|  | #if defined(MBEDTLS_CIPHER_MODE_CTR) | ||
|  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, | ||
|  |                             mbedtls_blowfish_crypt_ctr( NULL, | ||
|  |                                                         sizeof( buf ), | ||
|  |                                                         &off, | ||
|  |                                                         buf, buf, | ||
|  |                                                         buf, buf ) ); | ||
|  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, | ||
|  |                             mbedtls_blowfish_crypt_ctr( &ctx, | ||
|  |                                                         sizeof( buf ), | ||
|  |                                                         NULL, | ||
|  |                                                         buf, buf, | ||
|  |                                                         buf, buf ) ); | ||
|  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, | ||
|  |                             mbedtls_blowfish_crypt_ctr( &ctx, | ||
|  |                                                         sizeof( buf ), | ||
|  |                                                         &off, | ||
|  |                                                         NULL, buf, | ||
|  |                                                         buf, buf ) ); | ||
|  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, | ||
|  |                             mbedtls_blowfish_crypt_ctr( &ctx, | ||
|  |                                                         sizeof( buf ), | ||
|  |                                                         &off, | ||
|  |                                                         buf, NULL, | ||
|  |                                                         buf, buf ) ); | ||
|  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, | ||
|  |                             mbedtls_blowfish_crypt_ctr( &ctx, | ||
|  |                                                         sizeof( buf ), | ||
|  |                                                         &off, | ||
|  |                                                         buf, buf, | ||
|  |                                                         NULL, buf ) ); | ||
|  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, | ||
|  |                             mbedtls_blowfish_crypt_ctr( &ctx, | ||
|  |                                                         sizeof( buf ), | ||
|  |                                                         &off, | ||
|  |                                                         buf, buf, | ||
|  |                                                         buf, NULL ) ); | ||
|  | #endif /* MBEDTLS_CIPHER_MODE_CTR */ | ||
|  | 
 | ||
|  | exit: | ||
|  |     return; | ||
|  | } | ||
|  | /* END_CASE */ | ||
|  | 
 | ||
|  | /* BEGIN_CASE */ | ||
|  | void blowfish_encrypt_ecb( data_t * key_str, data_t * src_str, | ||
|  |                            data_t * dst, int setkey_result ) | ||
|  | { | ||
|  |     unsigned char output[100]; | ||
|  |     mbedtls_blowfish_context ctx; | ||
|  | 
 | ||
|  |     memset(output, 0x00, 100); | ||
|  |     mbedtls_blowfish_init( &ctx ); | ||
|  | 
 | ||
|  | 
 | ||
|  |     TEST_ASSERT( mbedtls_blowfish_setkey( &ctx, key_str->x, key_str->len * 8 ) == setkey_result ); | ||
|  |     if( setkey_result == 0 ) | ||
|  |     { | ||
|  |         TEST_ASSERT( mbedtls_blowfish_crypt_ecb( &ctx, MBEDTLS_BLOWFISH_ENCRYPT, src_str->x, output ) == 0 ); | ||
|  | 
 | ||
|  |         TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, 8, dst->len ) == 0 ); | ||
|  |     } | ||
|  | 
 | ||
|  | exit: | ||
|  |     mbedtls_blowfish_free( &ctx ); | ||
|  | } | ||
|  | /* END_CASE */ | ||
|  | 
 | ||
|  | /* BEGIN_CASE */ | ||
|  | void blowfish_decrypt_ecb( data_t * key_str, data_t * src_str, | ||
|  |                            data_t * dst, int setkey_result ) | ||
|  | { | ||
|  |     unsigned char output[100]; | ||
|  |     mbedtls_blowfish_context ctx; | ||
|  | 
 | ||
|  |     memset(output, 0x00, 100); | ||
|  |     mbedtls_blowfish_init( &ctx ); | ||
|  | 
 | ||
|  | 
 | ||
|  |     TEST_ASSERT( mbedtls_blowfish_setkey( &ctx, key_str->x, key_str->len * 8 ) == setkey_result ); | ||
|  |     if( setkey_result == 0 ) | ||
|  |     { | ||
|  |         TEST_ASSERT( mbedtls_blowfish_crypt_ecb( &ctx, MBEDTLS_BLOWFISH_DECRYPT, src_str->x, output ) == 0 ); | ||
|  | 
 | ||
|  |         TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, 8, dst->len ) == 0 ); | ||
|  |     } | ||
|  | 
 | ||
|  | exit: | ||
|  |     mbedtls_blowfish_free( &ctx ); | ||
|  | } | ||
|  | /* END_CASE */ | ||
|  | 
 | ||
|  | /* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */ | ||
|  | void blowfish_encrypt_cbc( data_t * key_str, data_t * iv_str, | ||
|  |                            data_t * src_str, data_t * dst, | ||
|  |                            int cbc_result ) | ||
|  | { | ||
|  |     unsigned char output[100]; | ||
|  |     mbedtls_blowfish_context ctx; | ||
|  | 
 | ||
|  |     memset(output, 0x00, 100); | ||
|  |     mbedtls_blowfish_init( &ctx ); | ||
|  | 
 | ||
|  | 
 | ||
|  |     mbedtls_blowfish_setkey( &ctx, key_str->x, key_str->len * 8 ); | ||
|  | 
 | ||
|  |     TEST_ASSERT( mbedtls_blowfish_crypt_cbc( &ctx, MBEDTLS_BLOWFISH_ENCRYPT, src_str->len , iv_str->x, src_str->x, output ) == cbc_result ); | ||
|  |     if( cbc_result == 0 ) | ||
|  |     { | ||
|  | 
 | ||
|  |         TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, | ||
|  |                                           src_str->len, dst->len ) == 0 ); | ||
|  |     } | ||
|  | 
 | ||
|  | exit: | ||
|  |     mbedtls_blowfish_free( &ctx ); | ||
|  | } | ||
|  | /* END_CASE */ | ||
|  | 
 | ||
|  | /* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */ | ||
|  | void blowfish_decrypt_cbc( data_t * key_str, data_t * iv_str, | ||
|  |                            data_t * src_str, data_t * dst, | ||
|  |                            int cbc_result ) | ||
|  | { | ||
|  |     unsigned char output[100]; | ||
|  |     mbedtls_blowfish_context ctx; | ||
|  | 
 | ||
|  |     memset(output, 0x00, 100); | ||
|  |     mbedtls_blowfish_init( &ctx ); | ||
|  | 
 | ||
|  | 
 | ||
|  |     mbedtls_blowfish_setkey( &ctx, key_str->x, key_str->len * 8 ); | ||
|  |     TEST_ASSERT( mbedtls_blowfish_crypt_cbc( &ctx, MBEDTLS_BLOWFISH_DECRYPT, src_str->len , iv_str->x, src_str->x, output ) == cbc_result ); | ||
|  |     if( cbc_result == 0) | ||
|  |     { | ||
|  | 
 | ||
|  |         TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, src_str->len, | ||
|  |                                           dst->len ) == 0 ); | ||
|  |     } | ||
|  | 
 | ||
|  | exit: | ||
|  |     mbedtls_blowfish_free( &ctx ); | ||
|  | } | ||
|  | /* END_CASE */ | ||
|  | 
 | ||
|  | /* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */ | ||
|  | void blowfish_encrypt_cfb64( data_t * key_str, data_t * iv_str, | ||
|  |                              data_t * src_str, data_t * dst ) | ||
|  | { | ||
|  |     unsigned char output[100]; | ||
|  |     mbedtls_blowfish_context ctx; | ||
|  |     size_t iv_offset = 0; | ||
|  | 
 | ||
|  |     memset(output, 0x00, 100); | ||
|  |     mbedtls_blowfish_init( &ctx ); | ||
|  | 
 | ||
|  | 
 | ||
|  |     mbedtls_blowfish_setkey( &ctx, key_str->x, key_str->len * 8 ); | ||
|  |     TEST_ASSERT( mbedtls_blowfish_crypt_cfb64( &ctx, MBEDTLS_BLOWFISH_ENCRYPT, src_str->len, &iv_offset, iv_str->x, src_str->x, output ) == 0 ); | ||
|  | 
 | ||
|  |     TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, src_str->len, | ||
|  |                                       dst->len ) == 0 ); | ||
|  | 
 | ||
|  | exit: | ||
|  |     mbedtls_blowfish_free( &ctx ); | ||
|  | } | ||
|  | /* END_CASE */ | ||
|  | 
 | ||
|  | /* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */ | ||
|  | void blowfish_decrypt_cfb64( data_t * key_str, data_t * iv_str, | ||
|  |                              data_t * src_str, data_t * dst ) | ||
|  | { | ||
|  |     unsigned char output[100]; | ||
|  |     mbedtls_blowfish_context ctx; | ||
|  |     size_t iv_offset = 0; | ||
|  | 
 | ||
|  |     memset(output, 0x00, 100); | ||
|  |     mbedtls_blowfish_init( &ctx ); | ||
|  | 
 | ||
|  | 
 | ||
|  |     mbedtls_blowfish_setkey( &ctx, key_str->x, key_str->len * 8 ); | ||
|  |     TEST_ASSERT( mbedtls_blowfish_crypt_cfb64( &ctx, MBEDTLS_BLOWFISH_DECRYPT, src_str->len, &iv_offset, iv_str->x, src_str->x, output ) == 0 ); | ||
|  | 
 | ||
|  |     TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, src_str->len, | ||
|  |                                       dst->len ) == 0 ); | ||
|  | 
 | ||
|  | exit: | ||
|  |     mbedtls_blowfish_free( &ctx ); | ||
|  | } | ||
|  | /* END_CASE */ | ||
|  | 
 | ||
|  | /* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CTR */ | ||
|  | void blowfish_encrypt_ctr( data_t * key_str, data_t * iv_str, | ||
|  |                            data_t * src_str, data_t * dst ) | ||
|  | { | ||
|  |     unsigned char stream_str[100]; | ||
|  |     unsigned char output[100]; | ||
|  |     mbedtls_blowfish_context ctx; | ||
|  |     size_t iv_offset = 0; | ||
|  | 
 | ||
|  |     memset(stream_str, 0x00, 100); | ||
|  |     memset(output, 0x00, 100); | ||
|  |     mbedtls_blowfish_init( &ctx ); | ||
|  | 
 | ||
|  | 
 | ||
|  |     mbedtls_blowfish_setkey( &ctx, key_str->x, key_str->len * 8 ); | ||
|  |     TEST_ASSERT( mbedtls_blowfish_crypt_ctr( &ctx, src_str->len, &iv_offset, iv_str->x, stream_str, src_str->x, output ) == 0 ); | ||
|  | 
 | ||
|  |     TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, src_str->len, | ||
|  |                                       dst->len ) == 0 ); | ||
|  | 
 | ||
|  | exit: | ||
|  |     mbedtls_blowfish_free( &ctx ); | ||
|  | } | ||
|  | /* END_CASE */ |