int selftest( int argc, char *argv[] ) { int ret = 0, v; #if defined(MBEDTLS_MEMORY_BUFFER_ALLOC_C) unsigned char buf[1000000]; #endif if( argc == 2 && strcmp( argv[1], "-quiet" ) == 0 ) v = 0; else { v = 1; mbedtls_printf( "\n" ); } #if defined(MBEDTLS_SELF_TEST) #if defined(MBEDTLS_MEMORY_BUFFER_ALLOC_C) mbedtls_memory_buffer_alloc_init( buf, sizeof(buf) ); #endif #if defined(MBEDTLS_MD2_C) if( ( ret = mbedtls_md2_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_MD4_C) if( ( ret = mbedtls_md4_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_MD5_C) if( ( ret = mbedtls_md5_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_RIPEMD160_C) if( ( ret = mbedtls_ripemd160_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_SHA1_C) if( ( ret = mbedtls_sha1_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_SHA256_C) if( ( ret = mbedtls_sha256_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_SHA512_C) if( ( ret = mbedtls_sha512_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_ARC4_C) if( ( ret = mbedtls_arc4_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_DES_C) if( ( ret = mbedtls_des_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_AES_C) if( ( ret = mbedtls_aes_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_AES_C) if( ( ret = mbedtls_gcm_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_AES_C) if( ( ret = mbedtls_ccm_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_BASE64_C) if( ( ret = mbedtls_base64_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_BIGNUM_C) if( ( ret = mbedtls_mpi_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_RSA_C) if( ( ret = mbedtls_rsa_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_X509_USE_C) if( ( ret = mbedtls_x509_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_XTEA_C) if( ( ret = mbedtls_xtea_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_CAMELLIA_C) if( ( ret = mbedtls_camellia_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_CTR_DRBG_C) if( ( ret = mbedtls_ctr_drbg_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_HMAC_DRBG_C) if( ( ret = mbedtls_hmac_drbg_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_ECP_C) if( ( ret = mbedtls_ecp_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_DHM_C) if( ( ret = mbedtls_dhm_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_ENTROPY_C) if( ( ret = mbedtls_entropy_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_PKCS5_C) if( ( ret = mbedtls_pkcs5_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_TIMING_C) if( ( ret = mbedtls_timing_self_test( v ) ) != 0 ) return( ret ); #endif #else mbedtls_printf( " POLARSSL_SELF_TEST not defined.\n" ); #endif if( v != 0 ) { #if defined(MBEDTLS_MEMORY_BUFFER_ALLOC_C) && defined(MBEDTLS_MEMORY_DEBUG) mbedtls_memory_buffer_alloc_status(); #endif } #if defined(MBEDTLS_MEMORY_BUFFER_ALLOC_C) mbedtls_memory_buffer_alloc_free(); if( ( ret = mbedtls_memory_buffer_alloc_self_test( v ) ) != 0 ) return( ret ); #endif if( v != 0 ) { mbedtls_printf( " [ All tests passed ]\n\n" ); #if defined(_WIN32) mbedtls_printf( " Press Enter to exit this program.\n" ); fflush( stdout ); getchar(); #endif } return( ret ); }
int main(void) { int v, suites_tested = 0, suites_failed = 0; void *pointer; mbedtls_platform_set_printf(MBEDTLS_PRINT); TC_START("Performing mbedTLS crypto tests:"); /* * The C standard doesn't guarantee that all-bits-0 is the representation * of a NULL pointer. We do however use that in our code for initializing * structures, which should work on every modern platform. Let's be sure. */ memset(&pointer, 0, sizeof(void *)); if (pointer != NULL) { mbedtls_printf("all-bits-zero is not a NULL pointer\n"); mbedtls_exit(MBEDTLS_EXIT_FAILURE); } /* * Make sure we have a snprintf that correctly zero-terminates */ if (run_test_snprintf() != 0) { mbedtls_printf("the snprintf implementation is broken\n"); mbedtls_exit(MBEDTLS_EXIT_FAILURE); } v = 1; mbedtls_printf("\n"); #if defined(MBEDTLS_SELF_TEST) #if defined(MBEDTLS_MEMORY_BUFFER_ALLOC_C) mbedtls_memory_buffer_alloc_init(buf, sizeof(buf)); #endif #if defined(MBEDTLS_MD2_C) if (mbedtls_md2_self_test(v) != 0) { suites_failed++; } suites_tested++; #endif #if defined(MBEDTLS_MD4_C) if (mbedtls_md4_self_test(v) != 0) { suites_failed++; } suites_tested++; #endif #if defined(MBEDTLS_MD5_C) if (mbedtls_md5_self_test(v) != 0) { suites_failed++; } suites_tested++; #endif #if defined(MBEDTLS_RIPEMD160_C) if (mbedtls_ripemd160_self_test(v) != 0) { suites_failed++; } suites_tested++; #endif #if defined(MBEDTLS_SHA1_C) if (mbedtls_sha1_self_test(v) != 0) { suites_failed++; } suites_tested++; #endif #if defined(MBEDTLS_SHA256_C) if (mbedtls_sha256_self_test(v) != 0) { suites_failed++; } suites_tested++; #endif #if defined(MBEDTLS_SHA512_C) if (mbedtls_sha512_self_test(v) != 0) { suites_failed++; } suites_tested++; #endif #if defined(MBEDTLS_ARC4_C) if (mbedtls_arc4_self_test(v) != 0) { suites_failed++; } suites_tested++; #endif #if defined(MBEDTLS_DES_C) if (mbedtls_des_self_test(v) != 0) { suites_failed++; } suites_tested++; #endif #if defined(MBEDTLS_AES_C) if (mbedtls_aes_self_test(v) != 0) { suites_failed++; } suites_tested++; #endif #if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_AES_C) if (mbedtls_gcm_self_test(v) != 0) { suites_failed++; } suites_tested++; #endif #if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_AES_C) if (mbedtls_ccm_self_test(v) != 0) { suites_failed++; } suites_tested++; #endif #if defined(MBEDTLS_BASE64_C) if (mbedtls_base64_self_test(v) != 0) { suites_failed++; } suites_tested++; #endif #if defined(MBEDTLS_BIGNUM_C) if (mbedtls_mpi_self_test(v) != 0) { suites_failed++; } suites_tested++; #endif #if defined(MBEDTLS_RSA_C) if (mbedtls_rsa_self_test(v) != 0) { suites_failed++; } suites_tested++; #endif #if defined(MBEDTLS_X509_USE_C) if (mbedtls_x509_self_test(v) != 0) { suites_failed++; } suites_tested++; #endif #if defined(MBEDTLS_XTEA_C) if (mbedtls_xtea_self_test(v) != 0) { suites_failed++; } suites_tested++; #endif #if defined(MBEDTLS_CAMELLIA_C) if (mbedtls_camellia_self_test(v) != 0) { suites_failed++; } suites_tested++; #endif #if defined(MBEDTLS_CTR_DRBG_C) if (mbedtls_ctr_drbg_self_test(v) != 0) { suites_failed++; } suites_tested++; #endif #if defined(MBEDTLS_HMAC_DRBG_C) if (mbedtls_hmac_drbg_self_test(v) != 0) { suites_failed++; } suites_tested++; #endif #if defined(MBEDTLS_ECP_C) if (mbedtls_ecp_self_test(v) != 0) { suites_failed++; } suites_tested++; #endif #if defined(MBEDTLS_ECJPAKE_C) if (mbedtls_ecjpake_self_test(v) != 0) { suites_failed++; } suites_tested++; #endif #if defined(MBEDTLS_DHM_C) if (mbedtls_dhm_self_test(v) != 0) { suites_failed++; } suites_tested++; #endif #if defined(MBEDTLS_ENTROPY_C) #if defined(MBEDTLS_ENTROPY_NV_SEED) && !defined(MBEDTLS_NO_PLATFORM_ENTROPY) create_entropy_seed_file(); #endif if (mbedtls_entropy_self_test(v) != 0) { suites_failed++; } suites_tested++; #endif #if defined(MBEDTLS_PKCS5_C) if (mbedtls_pkcs5_self_test(v) != 0) { suites_failed++; } suites_tested++; #endif /* Slow tests last */ #if defined(MBEDTLS_TIMING_C) if (mbedtls_timing_self_test(v) != 0) { suites_failed++; } suites_tested++; #endif #else mbedtls_printf(" MBEDTLS_SELF_TEST not defined.\n"); #endif if (v != 0) { #if defined(MBEDTLS_MEMORY_BUFFER_ALLOC_C) && defined(MBEDTLS_MEMORY_DEBUG) mbedtls_memory_buffer_alloc_status(); #endif } #if defined(MBEDTLS_MEMORY_BUFFER_ALLOC_C) mbedtls_memory_buffer_alloc_free(); if (mbedtls_memory_buffer_alloc_self_test(v) != 0) { suites_failed++; } suites_tested++; #endif if (v != 0) { mbedtls_printf(" Executed %d test suites\n\n", suites_tested); if (suites_failed > 0) { mbedtls_printf(" [ %d tests FAIL ]\n\n", suites_failed); TC_END_RESULT(TC_FAIL); TC_END_REPORT(TC_FAIL); } else { mbedtls_printf(" [ All tests PASS ]\n\n"); TC_END_RESULT(TC_PASS); TC_END_REPORT(TC_PASS); } #if defined(_WIN32) mbedtls_printf(" Press Enter to exit this program.\n"); fflush(stdout); getchar(); #endif } while (1) { }; }
int mbedtls_self_test() { int ret = 0, v; #if defined(MBEDTLS_MEMORY_BUFFER_ALLOC_C) unsigned char buf[1000000]; #endif void *pointer; /* * The C standard doesn't guarantee that all-bits-0 is the representation * of a NULL pointer. We do however use that in our code for initializing * structures, which should work on every modern platform. Let's be sure. */ memset( &pointer, 0, sizeof( void * ) ); if( pointer != NULL ) { mbedtls_printf( "all-bits-zero is not a NULL pointer\n" ); return( 1 ); } /* * Make sure we have a snprintf that correctly zero-terminates */ if( run_test_snprintf() != 0 ) { mbedtls_printf( "the snprintf implementation is broken\n" ); return( 0 ); } v = 1; mbedtls_printf( "\n" ); #if defined(MBEDTLS_SELF_TEST) #if defined(MBEDTLS_MEMORY_BUFFER_ALLOC_C) mbedtls_memory_buffer_alloc_init( buf, sizeof(buf) ); #endif #if defined(MBEDTLS_MD2_C) if( ( ret = mbedtls_md2_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_MD4_C) if( ( ret = mbedtls_md4_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_MD5_C) if( ( ret = mbedtls_md5_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_RIPEMD160_C) if( ( ret = mbedtls_ripemd160_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_SHA1_C) if( ( ret = mbedtls_sha1_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_SHA256_C) if( ( ret = mbedtls_sha256_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_SHA512_C) if( ( ret = mbedtls_sha512_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_ARC4_C) if( ( ret = mbedtls_arc4_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_DES_C) if( ( ret = mbedtls_des_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_AES_C) if( ( ret = mbedtls_aes_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_AES_C) if( ( ret = mbedtls_gcm_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_AES_C) if( ( ret = mbedtls_ccm_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_BASE64_C) if( ( ret = mbedtls_base64_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_BIGNUM_C) if( ( ret = mbedtls_mpi_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_RSA_C) if( ( ret = mbedtls_rsa_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_X509_USE_C) if( ( ret = mbedtls_x509_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_XTEA_C) if( ( ret = mbedtls_xtea_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_CAMELLIA_C) if( ( ret = mbedtls_camellia_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_CTR_DRBG_C) if( ( ret = mbedtls_ctr_drbg_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_HMAC_DRBG_C) if( ( ret = mbedtls_hmac_drbg_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_ECP_C) if( ( ret = mbedtls_ecp_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_ECJPAKE_C) if( ( ret = mbedtls_ecjpake_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_DHM_C) if( ( ret = mbedtls_dhm_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_ENTROPY_C) if( ( ret = mbedtls_entropy_self_test( v ) ) != 0 ) return( ret ); #endif #if defined(MBEDTLS_PKCS5_C) if( ( ret = mbedtls_pkcs5_self_test( v ) ) != 0 ) return( ret ); #endif /* Slow tests last */ #if defined(MBEDTLS_TIMING_C) if( ( ret = mbedtls_timing_self_test( v ) ) != 0 ) return( ret ); #endif #else mbedtls_printf( " MBEDTLS_SELF_TEST not defined.\n" ); #endif if( v != 0 ) { #if defined(MBEDTLS_MEMORY_BUFFER_ALLOC_C) && defined(MBEDTLS_MEMORY_DEBUG) mbedtls_memory_buffer_alloc_status(); #endif } #if defined(MBEDTLS_MEMORY_BUFFER_ALLOC_C) mbedtls_memory_buffer_alloc_free(); if( ( ret = mbedtls_memory_buffer_alloc_self_test( v ) ) != 0 ) return( ret ); #endif // if( v != 0 ) // { // mbedtls_printf( " [ All tests passed ]\n\n" ); //#if defined(_WIN32) // mbedtls_printf( " Press Enter to exit this program.\n" ); // fflush( stdout ); getchar(); //#endif // } return( ret ); }
int ExecuteCryptoTests(bool verbose) { int res; bool TestFail = false; res = mbedtls_mpi_self_test(verbose); if (res) TestFail = true; res = mbedtls_aes_self_test(verbose); if (res) TestFail = true; res = mbedtls_des_self_test(verbose); if (res) TestFail = true; res = mbedtls_sha1_self_test(verbose); if (res) TestFail = true; res = mbedtls_md5_self_test(verbose); if (res) TestFail = true; res = mbedtls_rsa_self_test(verbose); if (res) TestFail = true; res = mbedtls_entropy_self_test(verbose); if (res) TestFail = true; res = mbedtls_timing_self_test(verbose); if (res) TestFail = true; res = mbedtls_ctr_drbg_self_test(verbose); if (res) TestFail = true; res = mbedtls_base64_self_test(verbose); if (res) TestFail = true; res = mbedtls_cmac_self_test(verbose); if (res) TestFail = true; res = ecdsa_nist_test(verbose); if (res) TestFail = true; res = mbedtls_ecp_self_test(verbose); if (res) TestFail = true; res = mbedtls_x509_self_test(verbose); if (res) TestFail = true; res = exec_sda_test(verbose); if (res) TestFail = true; res = exec_dda_test(verbose); if (res) TestFail = true; res = exec_cda_test(verbose); if (res) TestFail = true; res = exec_crypto_test(verbose); if (res) TestFail = true; res = roca_self_test(); if (res) TestFail = true; PrintAndLog("\n--------------------------"); if (TestFail) PrintAndLogEx(FAILED, "\tTest(s) [ %s ]", _RED_(FAIL) ); else PrintAndLogEx(SUCCESS, "\tTest(s) [ %s ]", _GREEN_(OK) ); return TestFail; }