提交 28847dd1 编写于 作者: U Ulf Möller

Test PKCS#1 v1.5 padding as well.

上级 a5a47e4a
/* 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++)
......@@ -217,11 +223,37 @@ int main()
break;
}
num = RSA_public_encrypt(plen, ptext_ex, ctext, key,
RSA_PKCS1_PADDING);
if (num != clen)
{
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("Encryption failed!\n");
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)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册