Make RSA_NO_PADDING really use no padding.

Submitted by: Ulf Moeller <ulf@fitug.de>
diff --git a/CHANGES b/CHANGES
index 1891c53..cfa9884 100644
--- a/CHANGES
+++ b/CHANGES
@@ -5,6 +5,9 @@
 
  Changes between 0.9.1c and 0.9.2
 
+  *) Make RSA_NO_PADDING really use no padding.
+     [Ulf Moeller <ulf@fitug.de>]
+
   *) Generate errors when private/public key check is done.
      [Ben Laurie]
 
diff --git a/crypto/rsa/rsa.err b/crypto/rsa/rsa.err
index 81554a0..8ac095f 100644
--- a/crypto/rsa/rsa.err
+++ b/crypto/rsa/rsa.err
@@ -31,13 +31,13 @@
 #define RSA_R_BAD_FIXED_HEADER_DECRYPT			 102
 #define RSA_R_BAD_PAD_BYTE_COUNT			 103
 #define RSA_R_BAD_SIGNATURE				 104
-#define RSA_R_BAD_ZERO_BYTE				 105
 #define RSA_R_BLOCK_TYPE_IS_NOT_01			 106
 #define RSA_R_BLOCK_TYPE_IS_NOT_02			 107
 #define RSA_R_DATA_GREATER_THAN_MOD_LEN			 108
 #define RSA_R_DATA_TOO_LARGE				 109
 #define RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE		 110
 #define RSA_R_DATA_TOO_SMALL				 111
+#define RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE		 122
 #define RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY		 112
 #define RSA_R_KEY_SIZE_TOO_SMALL			 120
 #define RSA_R_NULL_BEFORE_BLOCK_MISSING			 113
diff --git a/crypto/rsa/rsa.h b/crypto/rsa/rsa.h
index 5a8b1f8..9911579 100644
--- a/crypto/rsa/rsa.h
+++ b/crypto/rsa/rsa.h
@@ -338,13 +338,13 @@
 #define RSA_R_BAD_FIXED_HEADER_DECRYPT			 102
 #define RSA_R_BAD_PAD_BYTE_COUNT			 103
 #define RSA_R_BAD_SIGNATURE				 104
-#define RSA_R_BAD_ZERO_BYTE				 105
 #define RSA_R_BLOCK_TYPE_IS_NOT_01			 106
 #define RSA_R_BLOCK_TYPE_IS_NOT_02			 107
 #define RSA_R_DATA_GREATER_THAN_MOD_LEN			 108
 #define RSA_R_DATA_TOO_LARGE				 109
 #define RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE		 110
 #define RSA_R_DATA_TOO_SMALL				 111
+#define RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE		 122
 #define RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY		 112
 #define RSA_R_KEY_SIZE_TOO_SMALL			 120
 #define RSA_R_NULL_BEFORE_BLOCK_MISSING			 113
diff --git a/crypto/rsa/rsa_err.c b/crypto/rsa/rsa_err.c
index 22d5254..cdb8a33 100644
--- a/crypto/rsa/rsa_err.c
+++ b/crypto/rsa/rsa_err.c
@@ -96,13 +96,13 @@
 {RSA_R_BAD_FIXED_HEADER_DECRYPT          ,"bad fixed header decrypt"},
 {RSA_R_BAD_PAD_BYTE_COUNT                ,"bad pad byte count"},
 {RSA_R_BAD_SIGNATURE                     ,"bad signature"},
-{RSA_R_BAD_ZERO_BYTE                     ,"bad zero byte"},
 {RSA_R_BLOCK_TYPE_IS_NOT_01              ,"block type is not 01"},
 {RSA_R_BLOCK_TYPE_IS_NOT_02              ,"block type is not 02"},
 {RSA_R_DATA_GREATER_THAN_MOD_LEN         ,"data greater than mod len"},
 {RSA_R_DATA_TOO_LARGE                    ,"data too large"},
 {RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE       ,"data too large for key size"},
 {RSA_R_DATA_TOO_SMALL                    ,"data too small"},
+{RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE       ,"data too small for key size"},
 {RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY        ,"digest too big for rsa key"},
 {RSA_R_KEY_SIZE_TOO_SMALL                ,"key size too small"},
 {RSA_R_NULL_BEFORE_BLOCK_MISSING         ,"null before block missing"},
diff --git a/crypto/rsa/rsa_none.c b/crypto/rsa/rsa_none.c
index 6385b55..e944f84 100644
--- a/crypto/rsa/rsa_none.c
+++ b/crypto/rsa/rsa_none.c
@@ -68,13 +68,18 @@
 unsigned char *from;
 int flen;
 	{
-	if (flen >= tlen)
+	if (flen > tlen)
 		{
 		RSAerr(RSA_F_RSA_PADDING_ADD_NONE,RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE);
 		return(0);
 		}
+
+	if (flen < tlen)
+		{
+		RSAerr(RSA_F_RSA_PADDING_ADD_NONE,RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE);
+		return(0);
+		}
 	
-	*(to++)=0;
 	memcpy(to,from,(unsigned int)flen);
 	return(1);
 	}
@@ -86,25 +91,15 @@
 int flen;
 int num;
 	{
-	int j;
 
-	from++;
-	if (flen+1 > tlen)
+	if (flen > tlen)
 		{
 		RSAerr(RSA_F_RSA_PADDING_CHECK_NONE,RSA_R_DATA_TOO_LARGE);
 		return(-1);
 		}
-	if (flen+1 >= num)
-		{
-		RSAerr(RSA_F_RSA_PADDING_CHECK_NONE,RSA_R_BAD_ZERO_BYTE);
-		return(-1);
-		}
 
-	/* scan over padding data */
-	j=flen-1; /* one for type and one for the prepended 0. */
-	memset(to,0,tlen-j);
-	to+=(tlen-j);
-	memcpy(to,from,j);
-	return(j);
+	memset(to,0,tlen-flen);
+	memcpy(to+tlen-flen,from,flen);
+	return(tlen);
 	}