test_suite_pkcs1_v21.function 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. BEGIN_HEADER
  2. #include <polarssl/rsa.h>
  3. #include <polarssl/md.h>
  4. #include <polarssl/md2.h>
  5. #include <polarssl/md4.h>
  6. #include <polarssl/md5.h>
  7. #include <polarssl/sha1.h>
  8. #include <polarssl/sha2.h>
  9. #include <polarssl/sha4.h>
  10. END_HEADER
  11. BEGIN_DEPENDENCIES
  12. depends_on:POLARSSL_PKCS1_V21:POLARSSL_RSA_C:POLARSSL_BIGNUM_C:POLARSSL_SHA1_C:POLARSSL_GENPRIME
  13. END_DEPENDENCIES
  14. BEGIN_CASE
  15. pkcs1_rsaes_oaep_encrypt:mod:radix_N:input_N:radix_E:input_E:hash:message_hex_string:seed:result_hex_str:result
  16. {
  17. unsigned char message_str[1000];
  18. unsigned char output[1000];
  19. unsigned char output_str[1000];
  20. unsigned char rnd_buf[1000];
  21. rsa_context ctx;
  22. size_t msg_len;
  23. rnd_buf_info info;
  24. info.length = unhexify( rnd_buf, {seed} );
  25. info.buf = rnd_buf;
  26. info.per_call = 1;
  27. rsa_init( &ctx, RSA_PKCS_V21, {hash} );
  28. memset( message_str, 0x00, 1000 );
  29. memset( output, 0x00, 1000 );
  30. memset( output_str, 0x00, 1000 );
  31. ctx.len = {mod} / 8 + ( ( {mod} % 8 ) ? 1 : 0 );
  32. TEST_ASSERT( mpi_read_string( &ctx.N, {radix_N}, {input_N} ) == 0 );
  33. TEST_ASSERT( mpi_read_string( &ctx.E, {radix_E}, {input_E} ) == 0 );
  34. TEST_ASSERT( rsa_check_pubkey( &ctx ) == 0 );
  35. msg_len = unhexify( message_str, {message_hex_string} );
  36. TEST_ASSERT( rsa_pkcs1_encrypt( &ctx, &rnd_buffer_rand, &info, RSA_PUBLIC, msg_len, message_str, output ) == {result} );
  37. if( {result} == 0 )
  38. {
  39. hexify( output_str, output, ctx.len );
  40. TEST_ASSERT( strcasecmp( (char *) output_str, {result_hex_str} ) == 0 );
  41. }
  42. }
  43. END_CASE
  44. BEGIN_CASE
  45. pkcs1_rsaes_oaep_decrypt:mod:radix_P:input_P:radix_Q:input_Q:radix_N:input_N:radix_E:input_E:hash:result_hex_str:seed:message_hex_string:result
  46. {
  47. unsigned char message_str[1000];
  48. unsigned char output[1000];
  49. unsigned char output_str[1000];
  50. rsa_context ctx;
  51. mpi P1, Q1, H, G;
  52. size_t output_len;
  53. mpi_init( &P1 ); mpi_init( &Q1 ); mpi_init( &H ); mpi_init( &G );
  54. rsa_init( &ctx, RSA_PKCS_V21, {hash} );
  55. memset( message_str, 0x00, 1000 );
  56. memset( output, 0x00, 1000 );
  57. memset( output_str, 0x00, 1000 );
  58. ctx.len = {mod} / 8 + ( ( {mod} % 8 ) ? 1 : 0 );
  59. TEST_ASSERT( mpi_read_string( &ctx.P, {radix_P}, {input_P} ) == 0 );
  60. TEST_ASSERT( mpi_read_string( &ctx.Q, {radix_Q}, {input_Q} ) == 0 );
  61. TEST_ASSERT( mpi_read_string( &ctx.N, {radix_N}, {input_N} ) == 0 );
  62. TEST_ASSERT( mpi_read_string( &ctx.E, {radix_E}, {input_E} ) == 0 );
  63. TEST_ASSERT( mpi_sub_int( &P1, &ctx.P, 1 ) == 0 );
  64. TEST_ASSERT( mpi_sub_int( &Q1, &ctx.Q, 1 ) == 0 );
  65. TEST_ASSERT( mpi_mul_mpi( &H, &P1, &Q1 ) == 0 );
  66. TEST_ASSERT( mpi_gcd( &G, &ctx.E, &H ) == 0 );
  67. TEST_ASSERT( mpi_inv_mod( &ctx.D , &ctx.E, &H ) == 0 );
  68. TEST_ASSERT( mpi_mod_mpi( &ctx.DP, &ctx.D, &P1 ) == 0 );
  69. TEST_ASSERT( mpi_mod_mpi( &ctx.DQ, &ctx.D, &Q1 ) == 0 );
  70. TEST_ASSERT( mpi_inv_mod( &ctx.QP, &ctx.Q, &ctx.P ) == 0 );
  71. TEST_ASSERT( rsa_check_privkey( &ctx ) == 0 );
  72. unhexify( message_str, {message_hex_string} );
  73. TEST_ASSERT( rsa_pkcs1_decrypt( &ctx, RSA_PRIVATE, &output_len, message_str, output, 1000 ) == {result} );
  74. if( {result} == 0 )
  75. {
  76. hexify( output_str, output, ctx.len );
  77. TEST_ASSERT( strncasecmp( (char *) output_str, {result_hex_str}, strlen( {result_hex_str} ) ) == 0 );
  78. }
  79. mpi_free( &P1 ); mpi_free( &Q1 ); mpi_free( &H ); mpi_free( &G );
  80. }
  81. END_CASE
  82. BEGIN_CASE
  83. pkcs1_rsassa_pss_sign:mod:radix_P:input_P:radix_Q:input_Q:radix_N:input_N:radix_E:input_E:digest:hash:message_hex_string:salt:result_hex_str:result
  84. {
  85. unsigned char message_str[1000];
  86. unsigned char hash_result[1000];
  87. unsigned char output[1000];
  88. unsigned char output_str[1000];
  89. unsigned char rnd_buf[1000];
  90. rsa_context ctx;
  91. mpi P1, Q1, H, G;
  92. size_t msg_len;
  93. rnd_buf_info info;
  94. info.length = unhexify( rnd_buf, {salt} );
  95. info.buf = rnd_buf;
  96. info.per_call = 1;
  97. mpi_init( &P1 ); mpi_init( &Q1 ); mpi_init( &H ); mpi_init( &G );
  98. rsa_init( &ctx, RSA_PKCS_V21, {hash} );
  99. memset( message_str, 0x00, 1000 );
  100. memset( hash_result, 0x00, 1000 );
  101. memset( output, 0x00, 1000 );
  102. memset( output_str, 0x00, 1000 );
  103. ctx.len = {mod} / 8 + ( ( {mod} % 8 ) ? 1 : 0 );
  104. TEST_ASSERT( mpi_read_string( &ctx.P, {radix_P}, {input_P} ) == 0 );
  105. TEST_ASSERT( mpi_read_string( &ctx.Q, {radix_Q}, {input_Q} ) == 0 );
  106. TEST_ASSERT( mpi_read_string( &ctx.N, {radix_N}, {input_N} ) == 0 );
  107. TEST_ASSERT( mpi_read_string( &ctx.E, {radix_E}, {input_E} ) == 0 );
  108. TEST_ASSERT( mpi_sub_int( &P1, &ctx.P, 1 ) == 0 );
  109. TEST_ASSERT( mpi_sub_int( &Q1, &ctx.Q, 1 ) == 0 );
  110. TEST_ASSERT( mpi_mul_mpi( &H, &P1, &Q1 ) == 0 );
  111. TEST_ASSERT( mpi_gcd( &G, &ctx.E, &H ) == 0 );
  112. TEST_ASSERT( mpi_inv_mod( &ctx.D , &ctx.E, &H ) == 0 );
  113. TEST_ASSERT( mpi_mod_mpi( &ctx.DP, &ctx.D, &P1 ) == 0 );
  114. TEST_ASSERT( mpi_mod_mpi( &ctx.DQ, &ctx.D, &Q1 ) == 0 );
  115. TEST_ASSERT( mpi_inv_mod( &ctx.QP, &ctx.Q, &ctx.P ) == 0 );
  116. TEST_ASSERT( rsa_check_privkey( &ctx ) == 0 );
  117. msg_len = unhexify( message_str, {message_hex_string} );
  118. switch( {digest} )
  119. {
  120. #ifdef POLARSSL_MD2_C
  121. case SIG_RSA_MD2:
  122. md2( message_str, msg_len, hash_result );
  123. break;
  124. #endif
  125. #ifdef POLARSSL_MD4_C
  126. case SIG_RSA_MD4:
  127. md4( message_str, msg_len, hash_result );
  128. break;
  129. #endif
  130. #ifdef POLARSSL_MD5_C
  131. case SIG_RSA_MD5:
  132. md5( message_str, msg_len, hash_result );
  133. break;
  134. #endif
  135. #ifdef POLARSSL_SHA1_C
  136. case SIG_RSA_SHA1:
  137. sha1( message_str, msg_len, hash_result );
  138. break;
  139. #endif
  140. #ifdef POLARSSL_SHA2_C
  141. case SIG_RSA_SHA224:
  142. sha2( message_str, msg_len, hash_result, 1 );
  143. break;
  144. case SIG_RSA_SHA256:
  145. sha2( message_str, msg_len, hash_result, 0 );
  146. break;
  147. #endif
  148. #ifdef POLARSSL_SHA4_C
  149. case SIG_RSA_SHA384:
  150. sha4( message_str, msg_len, hash_result, 1 );
  151. break;
  152. case SIG_RSA_SHA512:
  153. sha4( message_str, msg_len, hash_result, 0 );
  154. break;
  155. #endif
  156. }
  157. TEST_ASSERT( rsa_pkcs1_sign( &ctx, &rnd_buffer_rand, &info, RSA_PRIVATE, {digest}, 0, hash_result, output ) == {result} );
  158. if( {result} == 0 )
  159. {
  160. hexify( output_str, output, ctx.len);
  161. TEST_ASSERT( strcasecmp( (char *) output_str, {result_hex_str} ) == 0 );
  162. }
  163. mpi_free( &P1 ); mpi_free( &Q1 ); mpi_free( &H ); mpi_free( &G );
  164. }
  165. END_CASE
  166. BEGIN_CASE
  167. pkcs1_rsassa_pss_verify:mod:radix_N:input_N:radix_E:input_E:digest:hash:message_hex_string:salt:result_hex_str:result
  168. {
  169. unsigned char message_str[1000];
  170. unsigned char hash_result[1000];
  171. unsigned char result_str[1000];
  172. rsa_context ctx;
  173. size_t msg_len;
  174. rsa_init( &ctx, RSA_PKCS_V21, {hash} );
  175. memset( message_str, 0x00, 1000 );
  176. memset( hash_result, 0x00, 1000 );
  177. memset( result_str, 0x00, 1000 );
  178. ctx.len = {mod} / 8 + ( ( {mod} % 8 ) ? 1 : 0 );
  179. TEST_ASSERT( mpi_read_string( &ctx.N, {radix_N}, {input_N} ) == 0 );
  180. TEST_ASSERT( mpi_read_string( &ctx.E, {radix_E}, {input_E} ) == 0 );
  181. TEST_ASSERT( rsa_check_pubkey( &ctx ) == 0 );
  182. msg_len = unhexify( message_str, {message_hex_string} );
  183. unhexify( result_str, {result_hex_str} );
  184. switch( {digest} )
  185. {
  186. #ifdef POLARSSL_MD2_C
  187. case SIG_RSA_MD2:
  188. md2( message_str, msg_len, hash_result );
  189. break;
  190. #endif
  191. #ifdef POLARSSL_MD4_C
  192. case SIG_RSA_MD4:
  193. md4( message_str, msg_len, hash_result );
  194. break;
  195. #endif
  196. #ifdef POLARSSL_MD5_C
  197. case SIG_RSA_MD5:
  198. md5( message_str, msg_len, hash_result );
  199. break;
  200. #endif
  201. #ifdef POLARSSL_SHA1_C
  202. case SIG_RSA_SHA1:
  203. sha1( message_str, msg_len, hash_result );
  204. break;
  205. #endif
  206. #ifdef POLARSSL_SHA2_C
  207. case SIG_RSA_SHA224:
  208. sha2( message_str, msg_len, hash_result, 1 );
  209. break;
  210. case SIG_RSA_SHA256:
  211. sha2( message_str, msg_len, hash_result, 0 );
  212. break;
  213. #endif
  214. #ifdef POLARSSL_SHA4_C
  215. case SIG_RSA_SHA384:
  216. sha4( message_str, msg_len, hash_result, 1 );
  217. break;
  218. case SIG_RSA_SHA512:
  219. sha4( message_str, msg_len, hash_result, 0 );
  220. break;
  221. #endif
  222. }
  223. TEST_ASSERT( rsa_pkcs1_verify( &ctx, RSA_PUBLIC, {digest}, 0, hash_result, result_str ) == {result} );
  224. }
  225. END_CASE