aboutsummaryrefslogtreecommitdiffstats
path: root/libraries/spongycastle/core/src/main/java/org/spongycastle/crypto/kems/RSAKeyEncapsulation.java
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/spongycastle/core/src/main/java/org/spongycastle/crypto/kems/RSAKeyEncapsulation.java')
-rwxr-xr-xlibraries/spongycastle/core/src/main/java/org/spongycastle/crypto/kems/RSAKeyEncapsulation.java164
1 files changed, 0 insertions, 164 deletions
diff --git a/libraries/spongycastle/core/src/main/java/org/spongycastle/crypto/kems/RSAKeyEncapsulation.java b/libraries/spongycastle/core/src/main/java/org/spongycastle/crypto/kems/RSAKeyEncapsulation.java
deleted file mode 100755
index 5f9a7f519..000000000
--- a/libraries/spongycastle/core/src/main/java/org/spongycastle/crypto/kems/RSAKeyEncapsulation.java
+++ /dev/null
@@ -1,164 +0,0 @@
-package org.spongycastle.crypto.kems;
-
-import java.math.BigInteger;
-import java.security.SecureRandom;
-
-import org.spongycastle.crypto.CipherParameters;
-import org.spongycastle.crypto.DerivationFunction;
-import org.spongycastle.crypto.KeyEncapsulation;
-import org.spongycastle.crypto.params.KDFParameters;
-import org.spongycastle.crypto.params.KeyParameter;
-import org.spongycastle.crypto.params.RSAKeyParameters;
-import org.spongycastle.util.BigIntegers;
-
-/**
- * The RSA Key Encapsulation Mechanism (RSA-KEM) from ISO 18033-2.
- */
-public class RSAKeyEncapsulation
- implements KeyEncapsulation
-{
- private static final BigInteger ZERO = BigInteger.valueOf(0);
- private static final BigInteger ONE = BigInteger.valueOf(1);
-
- private DerivationFunction kdf;
- private SecureRandom rnd;
- private RSAKeyParameters key;
-
- /**
- * Set up the RSA-KEM.
- *
- * @param kdf the key derivation function to be used.
- * @param rnd the random source for the session key.
- */
- public RSAKeyEncapsulation(
- DerivationFunction kdf,
- SecureRandom rnd)
- {
- this.kdf = kdf;
- this.rnd = rnd;
- }
-
-
- /**
- * Initialise the RSA-KEM.
- *
- * @param key the recipient's public (for encryption) or private (for decryption) key.
- */
- public void init(CipherParameters key)
- throws IllegalArgumentException
- {
- if (!(key instanceof RSAKeyParameters))
- {
- throw new IllegalArgumentException("RSA key required");
- }
- else
- {
- this.key = (RSAKeyParameters)key;
- }
- }
-
-
- /**
- * Generate and encapsulate a random session key.
- *
- * @param out the output buffer for the encapsulated key.
- * @param outOff the offset for the output buffer.
- * @param keyLen the length of the random session key.
- * @return the random session key.
- */
- public CipherParameters encrypt(byte[] out, int outOff, int keyLen)
- throws IllegalArgumentException
- {
- if (key.isPrivate())
- {
- throw new IllegalArgumentException("Public key required for encryption");
- }
-
- BigInteger n = key.getModulus();
- BigInteger e = key.getExponent();
-
- // Generate the ephemeral random and encode it
- BigInteger r = BigIntegers.createRandomInRange(ZERO, n.subtract(ONE), rnd);
- byte[] R = BigIntegers.asUnsignedByteArray((n.bitLength() + 7) / 8, r);
-
- // Encrypt the random and encode it
- BigInteger c = r.modPow(e, n);
- byte[] C = BigIntegers.asUnsignedByteArray((n.bitLength() + 7) / 8, c);
- System.arraycopy(C, 0, out, outOff, C.length);
-
-
- // Initialise the KDF
- kdf.init(new KDFParameters(R, null));
-
- // Generate the secret key
- byte[] K = new byte[keyLen];
- kdf.generateBytes(K, 0, K.length);
-
- return new KeyParameter(K);
- }
-
-
- /**
- * Generate and encapsulate a random session key.
- *
- * @param out the output buffer for the encapsulated key.
- * @param keyLen the length of the random session key.
- * @return the random session key.
- */
- public CipherParameters encrypt(byte[] out, int keyLen)
- {
- return encrypt(out, 0, keyLen);
- }
-
-
- /**
- * Decrypt an encapsulated session key.
- *
- * @param in the input buffer for the encapsulated key.
- * @param inOff the offset for the input buffer.
- * @param inLen the length of the encapsulated key.
- * @param keyLen the length of the session key.
- * @return the session key.
- */
- public CipherParameters decrypt(byte[] in, int inOff, int inLen, int keyLen)
- throws IllegalArgumentException
- {
- if (!key.isPrivate())
- {
- throw new IllegalArgumentException("Private key required for decryption");
- }
-
- BigInteger n = key.getModulus();
- BigInteger d = key.getExponent();
-
- // Decode the input
- byte[] C = new byte[inLen];
- System.arraycopy(in, inOff, C, 0, C.length);
- BigInteger c = new BigInteger(1, C);
-
- // Decrypt the ephemeral random and encode it
- BigInteger r = c.modPow(d, n);
- byte[] R = BigIntegers.asUnsignedByteArray((n.bitLength() + 7) / 8, r);
-
- // Initialise the KDF
- kdf.init(new KDFParameters(R, null));
-
- // Generate the secret key
- byte[] K = new byte[keyLen];
- kdf.generateBytes(K, 0, K.length);
-
- return new KeyParameter(K);
- }
-
- /**
- * Decrypt an encapsulated session key.
- *
- * @param in the input buffer for the encapsulated key.
- * @param keyLen the length of the session key.
- * @return the session key.
- */
- public CipherParameters decrypt(byte[] in, int keyLen)
- {
- return decrypt(in, 0, in.length, keyLen);
- }
-}