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 );
}
Exemple #2
0
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 );
}
Exemple #3
0
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) {
	};
}