test_suite_pkcs1_v21.function 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. /* BEGIN_HEADER */
  2. #include "mbedtls/rsa.h"
  3. #include "mbedtls/md.h"
  4. /* END_HEADER */
  5. /* BEGIN_DEPENDENCIES
  6. * depends_on:MBEDTLS_PKCS1_V21:MBEDTLS_RSA_C:MBEDTLS_SHA1_C
  7. * END_DEPENDENCIES
  8. */
  9. /* BEGIN_CASE */
  10. void pkcs1_rsaes_oaep_encrypt( int mod, int radix_N, char * input_N,
  11. int radix_E, char * input_E, int hash,
  12. data_t * message_str, data_t * rnd_buf,
  13. data_t * result_str, int result )
  14. {
  15. unsigned char output[256];
  16. mbedtls_rsa_context ctx;
  17. rnd_buf_info info;
  18. mbedtls_mpi N, E;
  19. info.buf = rnd_buf->x;
  20. info.length = rnd_buf->len;
  21. mbedtls_mpi_init( &N ); mbedtls_mpi_init( &E );
  22. mbedtls_rsa_init( &ctx, MBEDTLS_RSA_PKCS_V21, hash );
  23. memset( output, 0x00, sizeof( output ) );
  24. TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 );
  25. TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 );
  26. TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, NULL, NULL, NULL, &E ) == 0 );
  27. TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( ( mod + 7 ) / 8 ) );
  28. TEST_ASSERT( mbedtls_rsa_check_pubkey( &ctx ) == 0 );
  29. TEST_ASSERT( mbedtls_rsa_pkcs1_encrypt( &ctx, &rnd_buffer_rand, &info, MBEDTLS_RSA_PUBLIC, message_str->len, message_str->x, output ) == result );
  30. if( result == 0 )
  31. {
  32. TEST_ASSERT( mbedtls_test_hexcmp( output, result_str->x,
  33. ctx.len, result_str->len ) == 0 );
  34. }
  35. exit:
  36. mbedtls_mpi_free( &N ); mbedtls_mpi_free( &E );
  37. mbedtls_rsa_free( &ctx );
  38. }
  39. /* END_CASE */
  40. /* BEGIN_CASE */
  41. void pkcs1_rsaes_oaep_decrypt( int mod, int radix_P, char * input_P,
  42. int radix_Q, char * input_Q, int radix_N,
  43. char * input_N, int radix_E, char * input_E,
  44. int hash, data_t * result_str,
  45. char * seed, data_t * message_str,
  46. int result )
  47. {
  48. unsigned char output[64];
  49. mbedtls_rsa_context ctx;
  50. size_t output_len;
  51. rnd_pseudo_info rnd_info;
  52. mbedtls_mpi N, P, Q, E;
  53. ((void) seed);
  54. mbedtls_mpi_init( &N ); mbedtls_mpi_init( &P );
  55. mbedtls_mpi_init( &Q ); mbedtls_mpi_init( &E );
  56. mbedtls_rsa_init( &ctx, MBEDTLS_RSA_PKCS_V21, hash );
  57. memset( output, 0x00, sizeof( output ) );
  58. memset( &rnd_info, 0, sizeof( rnd_pseudo_info ) );
  59. TEST_ASSERT( mbedtls_mpi_read_string( &P, radix_P, input_P ) == 0 );
  60. TEST_ASSERT( mbedtls_mpi_read_string( &Q, radix_Q, input_Q ) == 0 );
  61. TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 );
  62. TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 );
  63. TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, &P, &Q, NULL, &E ) == 0 );
  64. TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( ( mod + 7 ) / 8 ) );
  65. TEST_ASSERT( mbedtls_rsa_complete( &ctx ) == 0 );
  66. TEST_ASSERT( mbedtls_rsa_check_privkey( &ctx ) == 0 );
  67. TEST_ASSERT( mbedtls_rsa_pkcs1_decrypt( &ctx, &rnd_pseudo_rand, &rnd_info,
  68. MBEDTLS_RSA_PRIVATE, &output_len,
  69. message_str->x, output,
  70. sizeof( output ) ) == result );
  71. if( result == 0 )
  72. {
  73. TEST_ASSERT( mbedtls_test_hexcmp( output, result_str->x,
  74. output_len,
  75. result_str->len ) == 0 );
  76. }
  77. exit:
  78. mbedtls_mpi_free( &N ); mbedtls_mpi_free( &P );
  79. mbedtls_mpi_free( &Q ); mbedtls_mpi_free( &E );
  80. mbedtls_rsa_free( &ctx );
  81. }
  82. /* END_CASE */
  83. /* BEGIN_CASE */
  84. void pkcs1_rsassa_pss_sign( int mod, int radix_P, char * input_P, int radix_Q,
  85. char * input_Q, int radix_N, char * input_N,
  86. int radix_E, char * input_E, int digest, int hash,
  87. data_t * message_str, data_t * rnd_buf,
  88. data_t * result_str, int result )
  89. {
  90. unsigned char hash_result[MBEDTLS_MD_MAX_SIZE];
  91. unsigned char output[256];
  92. mbedtls_rsa_context ctx;
  93. rnd_buf_info info;
  94. mbedtls_mpi N, P, Q, E;
  95. info.buf = rnd_buf->x;
  96. info.length = rnd_buf->len;
  97. mbedtls_mpi_init( &N ); mbedtls_mpi_init( &P );
  98. mbedtls_mpi_init( &Q ); mbedtls_mpi_init( &E );
  99. mbedtls_rsa_init( &ctx, MBEDTLS_RSA_PKCS_V21, hash );
  100. memset( hash_result, 0x00, sizeof( hash_result ) );
  101. memset( output, 0x00, sizeof( output ) );
  102. TEST_ASSERT( mbedtls_mpi_read_string( &P, radix_P, input_P ) == 0 );
  103. TEST_ASSERT( mbedtls_mpi_read_string( &Q, radix_Q, input_Q ) == 0 );
  104. TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 );
  105. TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 );
  106. TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, &P, &Q, NULL, &E ) == 0 );
  107. TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( ( mod + 7 ) / 8 ) );
  108. TEST_ASSERT( mbedtls_rsa_complete( &ctx ) == 0 );
  109. TEST_ASSERT( mbedtls_rsa_check_privkey( &ctx ) == 0 );
  110. if( mbedtls_md_info_from_type( digest ) != NULL )
  111. TEST_ASSERT( mbedtls_md( mbedtls_md_info_from_type( digest ), message_str->x, message_str->len, hash_result ) == 0 );
  112. TEST_ASSERT( mbedtls_rsa_pkcs1_sign( &ctx, &rnd_buffer_rand, &info, MBEDTLS_RSA_PRIVATE,
  113. digest, 0, hash_result, output ) == result );
  114. if( result == 0 )
  115. {
  116. TEST_ASSERT( mbedtls_test_hexcmp( output, result_str->x,
  117. ctx.len, result_str->len ) == 0 );
  118. }
  119. exit:
  120. mbedtls_mpi_free( &N ); mbedtls_mpi_free( &P );
  121. mbedtls_mpi_free( &Q ); mbedtls_mpi_free( &E );
  122. mbedtls_rsa_free( &ctx );
  123. }
  124. /* END_CASE */
  125. /* BEGIN_CASE */
  126. void pkcs1_rsassa_pss_verify( int mod, int radix_N, char * input_N,
  127. int radix_E, char * input_E, int digest,
  128. int hash, data_t * message_str, char * salt,
  129. data_t * result_str, int result )
  130. {
  131. unsigned char hash_result[MBEDTLS_MD_MAX_SIZE];
  132. mbedtls_rsa_context ctx;
  133. mbedtls_mpi N, E;
  134. ((void) salt);
  135. mbedtls_mpi_init( &N ); mbedtls_mpi_init( &E );
  136. mbedtls_rsa_init( &ctx, MBEDTLS_RSA_PKCS_V21, hash );
  137. memset( hash_result, 0x00, sizeof( hash_result ) );
  138. TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 );
  139. TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 );
  140. TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, NULL, NULL, NULL, &E ) == 0 );
  141. TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( ( mod + 7 ) / 8 ) );
  142. TEST_ASSERT( mbedtls_rsa_check_pubkey( &ctx ) == 0 );
  143. if( mbedtls_md_info_from_type( digest ) != NULL )
  144. TEST_ASSERT( mbedtls_md( mbedtls_md_info_from_type( digest ), message_str->x, message_str->len, hash_result ) == 0 );
  145. TEST_ASSERT( mbedtls_rsa_pkcs1_verify( &ctx, NULL, NULL, MBEDTLS_RSA_PUBLIC, digest, 0, hash_result, result_str->x ) == result );
  146. exit:
  147. mbedtls_mpi_free( &N ); mbedtls_mpi_free( &E );
  148. mbedtls_rsa_free( &ctx );
  149. }
  150. /* END_CASE */
  151. /* BEGIN_CASE */
  152. void pkcs1_rsassa_pss_verify_ext( int mod, int radix_N, char * input_N,
  153. int radix_E, char * input_E,
  154. int msg_digest_id, int ctx_hash,
  155. int mgf_hash, int salt_len,
  156. data_t * message_str,
  157. data_t * result_str, int result_simple,
  158. int result_full )
  159. {
  160. unsigned char hash_result[MBEDTLS_MD_MAX_SIZE];
  161. mbedtls_rsa_context ctx;
  162. size_t hash_len;
  163. mbedtls_mpi N, E;
  164. mbedtls_mpi_init( &N ); mbedtls_mpi_init( &E );
  165. mbedtls_rsa_init( &ctx, MBEDTLS_RSA_PKCS_V21, ctx_hash );
  166. memset( hash_result, 0x00, sizeof( hash_result ) );
  167. TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 );
  168. TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 );
  169. TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, NULL, NULL, NULL, &E ) == 0 );
  170. TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( ( mod + 7 ) / 8 ) );
  171. TEST_ASSERT( mbedtls_rsa_check_pubkey( &ctx ) == 0 );
  172. if( msg_digest_id != MBEDTLS_MD_NONE )
  173. {
  174. TEST_ASSERT( mbedtls_md( mbedtls_md_info_from_type( msg_digest_id ),
  175. message_str->x, message_str->len, hash_result ) == 0 );
  176. hash_len = 0;
  177. }
  178. else
  179. {
  180. memcpy( hash_result, message_str->x, message_str->len );
  181. hash_len = message_str->len;
  182. }
  183. TEST_ASSERT( mbedtls_rsa_pkcs1_verify( &ctx, NULL, NULL, MBEDTLS_RSA_PUBLIC,
  184. msg_digest_id, hash_len, hash_result,
  185. result_str->x ) == result_simple );
  186. TEST_ASSERT( mbedtls_rsa_rsassa_pss_verify_ext( &ctx, NULL, NULL, MBEDTLS_RSA_PUBLIC,
  187. msg_digest_id, hash_len, hash_result,
  188. mgf_hash, salt_len,
  189. result_str->x ) == result_full );
  190. exit:
  191. mbedtls_mpi_free( &N ); mbedtls_mpi_free( &E );
  192. mbedtls_rsa_free( &ctx );
  193. }
  194. /* END_CASE */