Test PKCS#1 v1.5 padding as well.
This commit is contained in:
parent
a5a47e4afb
commit
28847dd153
2 changed files with 53 additions and 14 deletions
|
@ -1,8 +1,10 @@
|
|||
/* test vectors from p1ovect1.txt */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "e_os.h"
|
||||
#include "rsa.h"
|
||||
#include "err.h"
|
||||
|
||||
#define SetKey \
|
||||
key->n = BN_bin2bn(n, sizeof(n)-1, key->n); \
|
||||
|
@ -182,6 +184,15 @@ int key3(RSA *key, unsigned char *c)
|
|||
SetKey;
|
||||
}
|
||||
|
||||
int pad_unknown()
|
||||
{
|
||||
unsigned long l;
|
||||
while ((l = ERR_get_error()) != 0)
|
||||
if (ERR_GET_REASON(l) == RSA_R_UNKNOWN_PADDING_TYPE)
|
||||
return(1);
|
||||
return(0);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int err=0;
|
||||
|
@ -195,11 +206,6 @@ int main()
|
|||
int clen = 0;
|
||||
int num;
|
||||
|
||||
#ifdef RSAref
|
||||
printf("No OAEP support with RSAref - skipping test\n");
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
plen = sizeof(ptext_ex) - 1;
|
||||
|
||||
for (v = 0; v < 3; v++)
|
||||
|
@ -218,10 +224,36 @@ int main()
|
|||
}
|
||||
|
||||
num = RSA_public_encrypt(plen, ptext_ex, ctext, key,
|
||||
RSA_PKCS1_OAEP_PADDING);
|
||||
RSA_PKCS1_PADDING);
|
||||
if (num != clen)
|
||||
{
|
||||
printf("Encryption failed!\n");
|
||||
printf("PKCS#1 v1.5 encryption failed!\n");
|
||||
err=1;
|
||||
goto oaep;
|
||||
}
|
||||
|
||||
num = RSA_private_decrypt(num, ctext, ptext, key,
|
||||
RSA_PKCS1_PADDING);
|
||||
if (num != plen || memcmp(ptext, ptext_ex, num) != 0)
|
||||
{
|
||||
printf("PKCS#1 v1.5 decryption failed!\n");
|
||||
err=1;
|
||||
}
|
||||
else
|
||||
printf("PKCS #1 v1.5 encryption/decryption ok\n");
|
||||
|
||||
oaep:
|
||||
ERR_clear_error();
|
||||
num = RSA_public_encrypt(plen, ptext_ex, ctext, key,
|
||||
RSA_PKCS1_OAEP_PADDING);
|
||||
if (num == -1 && pad_unknown())
|
||||
{
|
||||
printf("No OAEP support\n");
|
||||
goto next;
|
||||
}
|
||||
if (num != clen)
|
||||
{
|
||||
printf("OAEP encryption failed!\n");
|
||||
err=1;
|
||||
goto next;
|
||||
}
|
||||
|
@ -230,14 +262,14 @@ int main()
|
|||
RSA_PKCS1_OAEP_PADDING);
|
||||
if (num != plen || memcmp(ptext, ptext_ex, num) != 0)
|
||||
{
|
||||
printf("Decryption failed!\n");
|
||||
printf("OAEP decryption failed!\n");
|
||||
err=1;
|
||||
goto next;
|
||||
}
|
||||
|
||||
if (memcmp(ctext, ctext_ex, num) == 0)
|
||||
{
|
||||
printf("Vector %d passed!\n", v);
|
||||
printf("OAEP test vector %d passed!\n", v);
|
||||
goto next;
|
||||
}
|
||||
|
||||
|
@ -249,12 +281,11 @@ int main()
|
|||
|
||||
if (num != plen || memcmp(ptext, ptext_ex, num) != 0)
|
||||
{
|
||||
printf("Decryption failed!\n");
|
||||
printf("OAEP decryption (test vector data) failed!\n");
|
||||
err=1;
|
||||
}
|
||||
else
|
||||
printf("Encryption/decryption successful!\n");
|
||||
|
||||
printf("OAEP encryption/decryption ok\n");
|
||||
next:
|
||||
RSA_free(key);
|
||||
}
|
||||
|
|
|
@ -283,6 +283,11 @@ int padding;
|
|||
int i,outlen= -1;
|
||||
RSArefPrivateKey RSAkey;
|
||||
|
||||
if (padding != RSA_PKCS1_PADDING)
|
||||
{
|
||||
RSAREFerr(RSAREF_F_RSA_REF_PRIVATE_ENCRYPT, RSA_R_UNKNOWN_PADDING_TYPE);
|
||||
goto err;
|
||||
}
|
||||
if (!RSAref_Private_eay2ref(rsa,&RSAkey))
|
||||
goto err;
|
||||
if ((i=RSAPrivateEncrypt(to,&outlen,from,len,&RSAkey)) != 0)
|
||||
|
@ -328,9 +333,12 @@ int padding;
|
|||
RSARandomState rnd;
|
||||
unsigned char buf[16];
|
||||
|
||||
if (padding == RSA_PKCS1_OAEP_PADDING)
|
||||
if (padding != RSA_PKCS1_PADDING && padding != RSA_SSLV23_PADDING)
|
||||
{
|
||||
RSAREFerr(RSAREF_F_RSA_REF_PUBLIC_ENCRYPT, RSA_R_UNKNOWN_PADDING_TYPE);
|
||||
goto err;
|
||||
|
||||
}
|
||||
|
||||
R_RandomInit(&rnd);
|
||||
R_GetRandomBytesNeeded((unsigned int *)&i,&rnd);
|
||||
while (i > 0)
|
||||
|
|
Loading…
Reference in a new issue