blob: b11a7d0bfbb4392a5beb672fdf8bd4f45fd8d5d1 [file] [log] [blame]
Paul Bakker33b43f12013-08-20 11:48:36 +02001/* BEGIN_HEADER */
Paul Bakker0e04d0e2011-11-27 14:46:59 +00002#include <polarssl/ctr_drbg.h>
3
4int test_offset;
Paul Bakker69e095c2011-12-10 21:55:01 +00005int entropy_func( void *data, unsigned char *buf, size_t len )
Paul Bakker0e04d0e2011-11-27 14:46:59 +00006{
Paul Bakker69e095c2011-12-10 21:55:01 +00007 unsigned char *p = (unsigned char *) data;
Paul Bakker0e04d0e2011-11-27 14:46:59 +00008 memcpy( buf, p + test_offset, len );
9 test_offset += 32;
10 return( 0 );
11}
Paul Bakker33b43f12013-08-20 11:48:36 +020012/* END_HEADER */
Paul Bakker0e04d0e2011-11-27 14:46:59 +000013
Paul Bakker33b43f12013-08-20 11:48:36 +020014/* BEGIN_DEPENDENCIES
15 * depends_on:POLARSSL_CTR_DRBG_C
16 * END_DEPENDENCIES
17 */
Paul Bakker0e04d0e2011-11-27 14:46:59 +000018
Paul Bakker33b43f12013-08-20 11:48:36 +020019/* BEGIN_CASE */
20void ctr_drbg_validate_pr( char *add_init_string, char *entropy_string,
21 char *add1_string, char *add2_string,
22 char *result_str )
Paul Bakker0e04d0e2011-11-27 14:46:59 +000023{
24 unsigned char entropy[512];
25 unsigned char add_init[512];
26 unsigned char add1[512];
27 unsigned char add2[512];
28 ctr_drbg_context ctx;
29 unsigned char buf[512];
30 unsigned char output_str[512];
31 int add_init_len, add1_len, add2_len;
32
33 memset( output_str, 0, 512 );
34
Paul Bakker33b43f12013-08-20 11:48:36 +020035 unhexify( entropy, entropy_string );
36 add_init_len = unhexify( add_init, add_init_string );
37 add1_len = unhexify( add1, add1_string );
38 add2_len = unhexify( add2, add2_string );
Paul Bakker0e04d0e2011-11-27 14:46:59 +000039
40 test_offset = 0;
Paul Bakker18d32912011-12-10 21:42:49 +000041 TEST_ASSERT( ctr_drbg_init_entropy_len( &ctx, entropy_func, entropy, add_init, add_init_len, 32 ) == 0 );
Paul Bakker0e04d0e2011-11-27 14:46:59 +000042 ctr_drbg_set_prediction_resistance( &ctx, CTR_DRBG_PR_ON );
43
44 TEST_ASSERT( ctr_drbg_random_with_add( &ctx, buf, 16, add1, add1_len ) == 0 );
45 TEST_ASSERT( ctr_drbg_random_with_add( &ctx, buf, 16, add2, add2_len ) == 0 );
46 hexify( output_str, buf, 16 );
Paul Bakker33b43f12013-08-20 11:48:36 +020047 TEST_ASSERT( strcmp( (char *) output_str, result_str ) == 0 );
Paul Bakker0e04d0e2011-11-27 14:46:59 +000048}
Paul Bakker33b43f12013-08-20 11:48:36 +020049/* END_CASE */
Paul Bakker0e04d0e2011-11-27 14:46:59 +000050
Paul Bakker33b43f12013-08-20 11:48:36 +020051/* BEGIN_CASE */
52void ctr_drbg_validate_nopr( char *add_init_string, char *entropy_string,
53 char *add1_string, char *add_reseed_string,
54 char *add2_string, char *result_str )
Paul Bakker0e04d0e2011-11-27 14:46:59 +000055{
56 unsigned char entropy[512];
57 unsigned char add_init[512];
58 unsigned char add1[512];
59 unsigned char add_reseed[512];
60 unsigned char add2[512];
61 ctr_drbg_context ctx;
62 unsigned char buf[512];
63 unsigned char output_str[512];
64 int add_init_len, add1_len, add_reseed_len, add2_len;
65
66 memset( output_str, 0, 512 );
67
Paul Bakker33b43f12013-08-20 11:48:36 +020068 unhexify( entropy, entropy_string );
69 add_init_len = unhexify( add_init, add_init_string );
70 add1_len = unhexify( add1, add1_string );
71 add_reseed_len = unhexify( add_reseed, add_reseed_string );
72 add2_len = unhexify( add2, add2_string );
Paul Bakker0e04d0e2011-11-27 14:46:59 +000073
74 test_offset = 0;
Paul Bakker18d32912011-12-10 21:42:49 +000075 TEST_ASSERT( ctr_drbg_init_entropy_len( &ctx, entropy_func, entropy, add_init, add_init_len, 32 ) == 0 );
Paul Bakker0e04d0e2011-11-27 14:46:59 +000076
77 TEST_ASSERT( ctr_drbg_random_with_add( &ctx, buf, 16, add1, add1_len ) == 0 );
78 TEST_ASSERT( ctr_drbg_reseed( &ctx, add_reseed, add_reseed_len ) == 0 );
79 TEST_ASSERT( ctr_drbg_random_with_add( &ctx, buf, 16, add2, add2_len ) == 0 );
80 hexify( output_str, buf, 16 );
Paul Bakker33b43f12013-08-20 11:48:36 +020081 TEST_ASSERT( strcmp( (char *) output_str, result_str ) == 0 );
Paul Bakker0e04d0e2011-11-27 14:46:59 +000082}
Paul Bakker33b43f12013-08-20 11:48:36 +020083/* END_CASE */