Commit 28847dd1 authored by Ulf Möller's avatar Ulf Möller
Browse files

Test PKCS#1 v1.5 padding as well.

parent a5a47e4a
Loading
Loading
Loading
Loading
+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); \
@@ -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);
	}
+10 −2
Original line number Diff line number Diff line
@@ -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,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);