summaryrefslogtreecommitdiff
path: root/gnu/javax/crypto/RSACipherImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/javax/crypto/RSACipherImpl.java')
-rw-r--r--gnu/javax/crypto/RSACipherImpl.java42
1 files changed, 14 insertions, 28 deletions
diff --git a/gnu/javax/crypto/RSACipherImpl.java b/gnu/javax/crypto/RSACipherImpl.java
index 0a4c29db6..05f77213e 100644
--- a/gnu/javax/crypto/RSACipherImpl.java
+++ b/gnu/javax/crypto/RSACipherImpl.java
@@ -41,11 +41,11 @@ package gnu.javax.crypto;
import gnu.classpath.ByteArray;
import gnu.classpath.debug.Component;
import gnu.classpath.debug.SystemLogger;
+import gnu.java.security.sig.rsa.EME_PKCS1_V1_5;
import java.math.BigInteger;
import java.security.AlgorithmParameters;
-import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
@@ -58,8 +58,6 @@ import java.security.interfaces.RSAPublicKey;
import java.security.spec.AlgorithmParameterSpec;
-import java.util.logging.Logger;
-
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.CipherSpi;
@@ -69,7 +67,7 @@ import javax.crypto.ShortBufferException;
public class RSACipherImpl extends CipherSpi
{
- private static final Logger logger = SystemLogger.SYSTEM;
+ private static final SystemLogger logger = SystemLogger.SYSTEM;
private static final byte[] EMPTY = new byte[0];
private int opmode = -1;
@@ -210,37 +208,25 @@ public class RSACipherImpl extends CipherSpi
throw new IllegalBlockSizeException ("expecting exactly " + dataBuffer.length + " bytes");
BigInteger enc = new BigInteger (1, dataBuffer);
byte[] dec = rsaDecrypt (enc);
- logger.log (Component.CRYPTO, "RSA: decryption produced\n{0}",
- new ByteArray (dec));
- if (dec[0] != 0x02)
- throw new BadPaddingException ("expected padding type 2");
- int i;
- for (i = 1; i < dec.length && dec[i] != 0x00; i++);
- int len = dec.length - i;
- byte[] result = new byte[len];
- System.arraycopy (dec, i, result, 0, len);
- pos = 0;
+ logger.log (Component.CRYPTO, "RSA: decryption produced\n{0}",
+ new ByteArray (dec));
+ EME_PKCS1_V1_5 pkcs = EME_PKCS1_V1_5.getInstance(decipherKey);
+ byte[] result = pkcs.decode(dec);
return result;
}
else
{
offset = dataBuffer.length - pos;
if (offset < 3)
- throw new IllegalBlockSizeException ("input is too large to encrypt");
- byte[] dec = new byte[dataBuffer.length];
- dec[0] = 0x02;
+ throw new IllegalBlockSizeException("input is too large to encrypt");
+ EME_PKCS1_V1_5 pkcs = EME_PKCS1_V1_5.getInstance(encipherKey);
if (random == null)
- random = new SecureRandom ();
- byte[] pad = new byte[offset - 2];
- random.nextBytes (pad);
- for (int i = 0; i < pad.length; i++)
- if (pad[i] == 0)
- pad[i] = 1;
- System.arraycopy (pad, 0, dec, 1, pad.length);
- dec[dec.length - pos] = 0x00;
- System.arraycopy (dataBuffer, 0, dec, offset, pos);
- logger.log (Component.CRYPTO, "RSA: produced padded plaintext\n{0}",
- new ByteArray (dec));
+ random = new SecureRandom();
+ byte[] em = new byte[pos];
+ System.arraycopy(dataBuffer, 0, em, 0, pos);
+ byte[] dec = pkcs.encode(em, random);
+ logger.log (Component.CRYPTO, "RSA: produced padded plaintext\n{0}",
+ new ByteArray (dec));
BigInteger x = new BigInteger (1, dec);
BigInteger y = x.modPow (encipherKey.getPublicExponent (),
encipherKey.getModulus ());