Loading crypto/rsa/rsa_oaep_test.c +42 −11 Original line number Diff line number Diff line /* 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); \ Loading Loading @@ -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; Loading @@ -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++) Loading @@ -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; } Loading @@ -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; } Loading @@ -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); } Loading rsaref/rsaref.c +10 −2 Original line number Diff line number Diff line Loading @@ -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) Loading Loading @@ -328,8 +333,11 @@ 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); Loading Loading
crypto/rsa/rsa_oaep_test.c +42 −11 Original line number Diff line number Diff line /* 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); \ Loading Loading @@ -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; Loading @@ -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++) Loading @@ -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; } Loading @@ -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; } Loading @@ -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); } Loading
rsaref/rsaref.c +10 −2 Original line number Diff line number Diff line Loading @@ -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) Loading Loading @@ -328,8 +333,11 @@ 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); Loading