소스 검색

test: add test rsa key generate with public exponent upto 256 bits

Add a RSA test generating a RSA key with a 256 bits public exponent.

Signed-off-by: Cedric Neveux <[email protected]>
Cedric Neveux 4 년 전
부모
커밋
d6bc30e8b8
1개의 변경된 파일47개의 추가작업 그리고 0개의 파일을 삭제
  1. 47 0
      tests/rsa_test.c

+ 47 - 0
tests/rsa_test.c

@@ -369,6 +369,52 @@ static int s_rsa_issue_301(int prng_idx)
    return CRYPT_OK;
 }
 
+static int s_rsa_public_ubin_e(int prng_idx)
+{
+   rsa_key       key;
+   unsigned char e[32] = {0};
+   unsigned long elen = sizeof(e);
+
+   /* Check public exponent too small */
+   e[elen - 1] = 1;
+   SHOULD_FAIL_WITH(rsa_make_key_ubin_e(&yarrow_prng, prng_idx, 128, e, elen, &key),
+                    CRYPT_INVALID_ARG);
+
+   /*
+    * Generate about 256 bits to check error when public exponent
+    * overflow.
+    */
+   DO(rng_make_prng(elen * 8, prng_idx, &yarrow_prng, NULL));
+   LTC_ARGCHK(yarrow_read(e, elen, &yarrow_prng) == elen);
+
+   /* Ensure that public exponent is:
+    *  - odd value
+    *  - MSB is even
+    */
+   e[elen - 1] |= 0x1;
+   e[0] &= ~0x1;
+
+   /* Check public exponent overflow */
+   /* Set high bit of MSB set to get 256 bits, to get e overflow */
+   e[0] |= 0x80;
+   SHOULD_FAIL_WITH(rsa_make_key_ubin_e(&yarrow_prng, prng_idx, 128, e, elen, &key),
+                    CRYPT_INVALID_ARG);
+
+
+  /* Check public exponent not odd but e value < 256 bits */
+   e[elen - 1] &= ~0x1;
+   e[0] &= ~0x80;
+   SHOULD_FAIL_WITH(rsa_make_key_ubin_e(&yarrow_prng, prng_idx, 128, e, elen, &key),
+                    CRYPT_INVALID_ARG);
+
+   /* Ensure that public exponent is odd value and e value < 256 bits */
+   e[elen - 1] |= 0x1;
+   DO(rsa_make_key_ubin_e(&yarrow_prng, prng_idx, 128, e, elen, &key));
+   rsa_free(&key);
+
+   return CRYPT_OK;
+}
+
 #ifdef LTC_TEST_READDIR
 static int s_rsa_import_x509(const void *in, unsigned long inlen, void *key)
 {
@@ -426,6 +472,7 @@ int rsa_test(void)
 
    DO(s_rsa_cryptx_issue_69());
    DO(s_rsa_issue_301(prng_idx));
+   DO(s_rsa_public_ubin_e(prng_idx));
 
    /* make 10 random key */
    for (cnt = 0; cnt < 10; cnt++) {