aboutsummaryrefslogtreecommitdiffstats
path: root/crypto
diff options
context:
space:
mode:
authorUlf Möller <ulf@openssl.org>1999-04-09 16:26:37 +0000
committerUlf Möller <ulf@openssl.org>1999-04-09 16:26:37 +0000
commit28847dd15398a5914e45275c887192a5e04f39fa (patch)
treea1e757ff5d12e32547fac89ac01d38d211731af9 /crypto
parenta5a47e4afbdc1cc1ec8c98f63cbc49705b8a6f4f (diff)
downloadopenssl-28847dd15398a5914e45275c887192a5e04f39fa.tar.gz
Test PKCS#1 v1.5 padding as well.
Diffstat (limited to 'crypto')
-rw-r--r--crypto/rsa/rsa_oaep_test.c53
1 files changed, 42 insertions, 11 deletions
diff --git a/crypto/rsa/rsa_oaep_test.c b/crypto/rsa/rsa_oaep_test.c
index 57e10e9a08..c18fd98b3a 100644
--- a/crypto/rsa/rsa_oaep_test.c
+++ b/crypto/rsa/rsa_oaep_test.c
@@ -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_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);
}