From 7cb752aaf746dc0b473afeb9e892b7fbc12666c5 Mon Sep 17 00:00:00 2001 From: Roberto Tyley Date: Mon, 14 Jul 2014 22:38:01 +0100 Subject: Execute become-spongy.sh https://github.com/rtyley/spongycastle/blob/3040af/become-spongy.sh --- .../provider/mceliece/McEliecePKCSCipherSpi.java | 171 +++++++++++++++++++++ 1 file changed, 171 insertions(+) create mode 100644 prov/src/main/java/org/spongycastle/pqc/jcajce/provider/mceliece/McEliecePKCSCipherSpi.java (limited to 'prov/src/main/java/org/spongycastle/pqc/jcajce/provider/mceliece/McEliecePKCSCipherSpi.java') diff --git a/prov/src/main/java/org/spongycastle/pqc/jcajce/provider/mceliece/McEliecePKCSCipherSpi.java b/prov/src/main/java/org/spongycastle/pqc/jcajce/provider/mceliece/McEliecePKCSCipherSpi.java new file mode 100644 index 00000000..cbabfdcc --- /dev/null +++ b/prov/src/main/java/org/spongycastle/pqc/jcajce/provider/mceliece/McEliecePKCSCipherSpi.java @@ -0,0 +1,171 @@ +package org.spongycastle.pqc.jcajce.provider.mceliece; + +import java.security.InvalidAlgorithmParameterException; +import java.security.InvalidKeyException; +import java.security.Key; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.security.SecureRandom; +import java.security.spec.AlgorithmParameterSpec; + +import javax.crypto.BadPaddingException; +import javax.crypto.IllegalBlockSizeException; + +import org.spongycastle.asn1.pkcs.PKCSObjectIdentifiers; +import org.spongycastle.asn1.x509.X509ObjectIdentifiers; +import org.spongycastle.crypto.CipherParameters; +import org.spongycastle.crypto.Digest; +import org.spongycastle.crypto.digests.SHA1Digest; +import org.spongycastle.crypto.digests.SHA224Digest; +import org.spongycastle.crypto.digests.SHA256Digest; +import org.spongycastle.crypto.digests.SHA384Digest; +import org.spongycastle.crypto.digests.SHA512Digest; +import org.spongycastle.crypto.params.ParametersWithRandom; +import org.spongycastle.pqc.crypto.mceliece.McElieceKeyParameters; +import org.spongycastle.pqc.crypto.mceliece.McEliecePKCSCipher; +import org.spongycastle.pqc.jcajce.provider.util.AsymmetricBlockCipher; + +public class McEliecePKCSCipherSpi + extends AsymmetricBlockCipher + implements PKCSObjectIdentifiers, X509ObjectIdentifiers +{ + // TODO digest needed? + private Digest digest; + private McEliecePKCSCipher cipher; + + public McEliecePKCSCipherSpi(Digest digest, McEliecePKCSCipher cipher) + { + this.digest = digest; + this.cipher = cipher; + } + + protected void initCipherEncrypt(Key key, AlgorithmParameterSpec params, + SecureRandom sr) + throws InvalidKeyException, + InvalidAlgorithmParameterException + { + + CipherParameters param; + param = McElieceKeysToParams.generatePublicKeyParameter((PublicKey)key); + + param = new ParametersWithRandom(param, sr); + digest.reset(); + cipher.init(true, param); + this.maxPlainTextSize = cipher.maxPlainTextSize; + this.cipherTextSize = cipher.cipherTextSize; + } + + protected void initCipherDecrypt(Key key, AlgorithmParameterSpec params) + throws InvalidKeyException, InvalidAlgorithmParameterException + { + CipherParameters param; + param = McElieceKeysToParams.generatePrivateKeyParameter((PrivateKey)key); + + digest.reset(); + cipher.init(false, param); + this.maxPlainTextSize = cipher.maxPlainTextSize; + this.cipherTextSize = cipher.cipherTextSize; + } + + protected byte[] messageEncrypt(byte[] input) + throws IllegalBlockSizeException, BadPaddingException + { + byte[] output = null; + try + { + output = cipher.messageEncrypt(input); + } + catch (Exception e) + { + e.printStackTrace(); + } + return output; + } + + protected byte[] messageDecrypt(byte[] input) + throws IllegalBlockSizeException, BadPaddingException + { + byte[] output = null; + try + { + output = cipher.messageDecrypt(input); + } + catch (Exception e) + { + e.printStackTrace(); + } + return output; + } + + public String getName() + { + return "McEliecePKCS"; + } + + public int getKeySize(Key key) + throws InvalidKeyException + { + McElieceKeyParameters mcElieceKeyParameters; + if (key instanceof PublicKey) + { + mcElieceKeyParameters = (McElieceKeyParameters)McElieceKeysToParams.generatePublicKeyParameter((PublicKey)key); + } + else + { + mcElieceKeyParameters = (McElieceKeyParameters)McElieceKeysToParams.generatePrivateKeyParameter((PrivateKey)key); + + } + + + return cipher.getKeySize(mcElieceKeyParameters); + } + + ////////////////////////////////////////////////////////////////////////////////// + + static public class McEliecePKCS + extends McEliecePKCSCipherSpi + { + public McEliecePKCS() + { + super(new SHA1Digest(), new McEliecePKCSCipher()); + } + } + + static public class McEliecePKCS224 + extends McEliecePKCSCipherSpi + { + public McEliecePKCS224() + { + super(new SHA224Digest(), new McEliecePKCSCipher()); + } + } + + static public class McEliecePKCS256 + extends McEliecePKCSCipherSpi + { + public McEliecePKCS256() + { + super(new SHA256Digest(), new McEliecePKCSCipher()); + } + } + + static public class McEliecePKCS384 + extends McEliecePKCSCipherSpi + { + public McEliecePKCS384() + { + super(new SHA384Digest(), new McEliecePKCSCipher()); + } + } + + static public class McEliecePKCS512 + extends McEliecePKCSCipherSpi + { + public McEliecePKCS512() + { + super(new SHA512Digest(), new McEliecePKCSCipher()); + } + } + + +} -- cgit v1.2.3