diff options
Diffstat (limited to 'libraries/spongycastle/core/src/test/java/org/spongycastle/crypto/test/ECIESTest.java')
-rw-r--r-- | libraries/spongycastle/core/src/test/java/org/spongycastle/crypto/test/ECIESTest.java | 349 |
1 files changed, 0 insertions, 349 deletions
diff --git a/libraries/spongycastle/core/src/test/java/org/spongycastle/crypto/test/ECIESTest.java b/libraries/spongycastle/core/src/test/java/org/spongycastle/crypto/test/ECIESTest.java deleted file mode 100644 index 70d0501e9..000000000 --- a/libraries/spongycastle/core/src/test/java/org/spongycastle/crypto/test/ECIESTest.java +++ /dev/null @@ -1,349 +0,0 @@ -package org.spongycastle.crypto.test; - -import java.math.BigInteger; -import java.security.SecureRandom; - -import org.spongycastle.crypto.AsymmetricCipherKeyPair; -import org.spongycastle.crypto.BufferedBlockCipher; -import org.spongycastle.crypto.KeyEncoder; -import org.spongycastle.crypto.KeyGenerationParameters; -import org.spongycastle.crypto.agreement.ECDHBasicAgreement; -import org.spongycastle.crypto.digests.SHA1Digest; -import org.spongycastle.crypto.engines.IESEngine; -import org.spongycastle.crypto.engines.TwofishEngine; -import org.spongycastle.crypto.generators.ECKeyPairGenerator; -import org.spongycastle.crypto.generators.EphemeralKeyPairGenerator; -import org.spongycastle.crypto.generators.KDF2BytesGenerator; -import org.spongycastle.crypto.macs.HMac; -import org.spongycastle.crypto.modes.CBCBlockCipher; -import org.spongycastle.crypto.paddings.PaddedBufferedBlockCipher; -import org.spongycastle.crypto.params.AsymmetricKeyParameter; -import org.spongycastle.crypto.params.ECDomainParameters; -import org.spongycastle.crypto.params.ECKeyGenerationParameters; -import org.spongycastle.crypto.params.ECPrivateKeyParameters; -import org.spongycastle.crypto.params.ECPublicKeyParameters; -import org.spongycastle.crypto.params.IESParameters; -import org.spongycastle.crypto.params.IESWithCipherParameters; -import org.spongycastle.crypto.parsers.ECIESPublicKeyParser; -import org.spongycastle.math.ec.ECCurve; -import org.spongycastle.util.encoders.Hex; -import org.spongycastle.util.test.SimpleTest; - -/** - * test for ECIES - Elliptic Curve Integrated Encryption Scheme - */ -public class ECIESTest - extends SimpleTest -{ - ECIESTest() - { - } - - public String getName() - { - return "ECIES"; - } - - private void staticTest() - throws Exception - { - ECCurve.Fp curve = new ECCurve.Fp( - new BigInteger("6277101735386680763835789423207666416083908700390324961279"), // q - new BigInteger("fffffffffffffffffffffffffffffffefffffffffffffffc", 16), // a - new BigInteger("64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1", 16)); // b - - ECDomainParameters params = new ECDomainParameters( - curve, - curve.decodePoint(Hex.decode("03188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012")), // G - new BigInteger("6277101735386680763835789423176059013767194773182842284081")); // n - - ECPrivateKeyParameters priKey = new ECPrivateKeyParameters( - new BigInteger("651056770906015076056810763456358567190100156695615665659"), // d - params); - - ECPublicKeyParameters pubKey = new ECPublicKeyParameters( - curve.decodePoint(Hex.decode("0262b12d60690cdcf330babab6e69763b471f994dd702d16a5")), // Q - params); - - AsymmetricCipherKeyPair p1 = new AsymmetricCipherKeyPair(pubKey, priKey); - AsymmetricCipherKeyPair p2 = new AsymmetricCipherKeyPair(pubKey, priKey); - - // - // stream test - // - IESEngine i1 = new IESEngine( - new ECDHBasicAgreement(), - new KDF2BytesGenerator(new SHA1Digest()), - new HMac(new SHA1Digest())); - IESEngine i2 = new IESEngine( - new ECDHBasicAgreement(), - new KDF2BytesGenerator(new SHA1Digest()), - new HMac(new SHA1Digest())); - byte[] d = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 }; - byte[] e = new byte[] { 8, 7, 6, 5, 4, 3, 2, 1 }; - IESParameters p = new IESParameters(d, e, 64); - - i1.init(true, p1.getPrivate(), p2.getPublic(), p); - i2.init(false, p2.getPrivate(), p1.getPublic(), p); - - byte[] message = Hex.decode("1234567890abcdef"); - - byte[] out1 = i1.processBlock(message, 0, message.length); - - if (!areEqual(out1, Hex.decode("468d89877e8238802403ec4cb6b329faeccfa6f3a730f2cdb3c0a8e8"))) - { - fail("stream cipher test failed on enc"); - } - - byte[] out2 = i2.processBlock(out1, 0, out1.length); - - if (!areEqual(out2, message)) - { - fail("stream cipher test failed"); - } - - // - // twofish with CBC - // - BufferedBlockCipher c1 = new PaddedBufferedBlockCipher( - new CBCBlockCipher(new TwofishEngine())); - BufferedBlockCipher c2 = new PaddedBufferedBlockCipher( - new CBCBlockCipher(new TwofishEngine())); - i1 = new IESEngine( - new ECDHBasicAgreement(), - new KDF2BytesGenerator(new SHA1Digest()), - new HMac(new SHA1Digest()), - c1); - i2 = new IESEngine( - new ECDHBasicAgreement(), - new KDF2BytesGenerator(new SHA1Digest()), - new HMac(new SHA1Digest()), - c2); - d = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 }; - e = new byte[] { 8, 7, 6, 5, 4, 3, 2, 1 }; - p = new IESWithCipherParameters(d, e, 64, 128); - - i1.init(true, p1.getPrivate(), p2.getPublic(), p); - i2.init(false, p2.getPrivate(), p1.getPublic(), p); - - message = Hex.decode("1234567890abcdef"); - - out1 = i1.processBlock(message, 0, message.length); - - if (!areEqual(out1, Hex.decode("b8a06ea5c2b9df28b58a0a90a734cde8c9c02903e5c220021fe4417410d1e53a32a71696"))) - { - fail("twofish cipher test failed on enc"); - } - - out2 = i2.processBlock(out1, 0, out1.length); - - if (!areEqual(out2, message)) - { - fail("twofish cipher test failed"); - } - } - - private void doEphemeralTest() - throws Exception - { - ECCurve.Fp curve = new ECCurve.Fp( - new BigInteger("6277101735386680763835789423207666416083908700390324961279"), // q - new BigInteger("fffffffffffffffffffffffffffffffefffffffffffffffc", 16), // a - new BigInteger("64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1", 16)); // b - - ECDomainParameters params = new ECDomainParameters( - curve, - curve.decodePoint(Hex.decode("03188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012")), // G - new BigInteger("6277101735386680763835789423176059013767194773182842284081")); // n - - ECPrivateKeyParameters priKey = new ECPrivateKeyParameters( - new BigInteger("651056770906015076056810763456358567190100156695615665659"), // d - params); - - ECPublicKeyParameters pubKey = new ECPublicKeyParameters( - curve.decodePoint(Hex.decode("0262b12d60690cdcf330babab6e69763b471f994dd702d16a5")), // Q - params); - - AsymmetricCipherKeyPair p1 = new AsymmetricCipherKeyPair(pubKey, priKey); - AsymmetricCipherKeyPair p2 = new AsymmetricCipherKeyPair(pubKey, priKey); - - // Generate the ephemeral key pair - ECKeyPairGenerator gen = new ECKeyPairGenerator(); - gen.init(new ECKeyGenerationParameters(params, new SecureRandom())); - - EphemeralKeyPairGenerator ephKeyGen = new EphemeralKeyPairGenerator(gen, new KeyEncoder() - { - public byte[] getEncoded(AsymmetricKeyParameter keyParameter) - { - return ((ECPublicKeyParameters)keyParameter).getQ().getEncoded(); - } - }); - - // - // stream test - // - IESEngine i1 = new IESEngine( - new ECDHBasicAgreement(), - new KDF2BytesGenerator(new SHA1Digest()), - new HMac(new SHA1Digest())); - IESEngine i2 = new IESEngine( - new ECDHBasicAgreement(), - new KDF2BytesGenerator(new SHA1Digest()), - new HMac(new SHA1Digest())); - - byte[] d = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 }; - byte[] e = new byte[] { 8, 7, 6, 5, 4, 3, 2, 1 }; - IESParameters p = new IESParameters(d, e, 64); - - i1.init(p2.getPublic(), p, ephKeyGen); - i2.init(p2.getPrivate(), p, new ECIESPublicKeyParser(params)); - - byte[] message = Hex.decode("1234567890abcdef"); - - byte[] out1 = i1.processBlock(message, 0, message.length); - - byte[] out2 = i2.processBlock(out1, 0, out1.length); - - if (!areEqual(out2, message)) - { - fail("stream cipher test failed"); - } - - // - // twofish with CBC - // - BufferedBlockCipher c1 = new PaddedBufferedBlockCipher( - new CBCBlockCipher(new TwofishEngine())); - BufferedBlockCipher c2 = new PaddedBufferedBlockCipher( - new CBCBlockCipher(new TwofishEngine())); - i1 = new IESEngine( - new ECDHBasicAgreement(), - new KDF2BytesGenerator(new SHA1Digest()), - new HMac(new SHA1Digest()), - c1); - i2 = new IESEngine( - new ECDHBasicAgreement(), - new KDF2BytesGenerator(new SHA1Digest()), - new HMac(new SHA1Digest()), - c2); - d = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 }; - e = new byte[] { 8, 7, 6, 5, 4, 3, 2, 1 }; - p = new IESWithCipherParameters(d, e, 64, 128); - - i1.init(p2.getPublic(), p, ephKeyGen); - i2.init(p2.getPrivate(), p, new ECIESPublicKeyParser(params)); - - message = Hex.decode("1234567890abcdef"); - - out1 = i1.processBlock(message, 0, message.length); - - out2 = i2.processBlock(out1, 0, out1.length); - - if (!areEqual(out2, message)) - { - fail("twofish cipher test failed"); - } - } - - private void doTest(AsymmetricCipherKeyPair p1, AsymmetricCipherKeyPair p2) - throws Exception - { - // - // stream test - // - IESEngine i1 = new IESEngine( - new ECDHBasicAgreement(), - new KDF2BytesGenerator(new SHA1Digest()), - new HMac(new SHA1Digest())); - IESEngine i2 = new IESEngine( - new ECDHBasicAgreement(), - new KDF2BytesGenerator(new SHA1Digest()), - new HMac(new SHA1Digest())); - byte[] d = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 }; - byte[] e = new byte[] { 8, 7, 6, 5, 4, 3, 2, 1 }; - IESParameters p = new IESParameters(d, e, 64); - - i1.init(true, p1.getPrivate(), p2.getPublic(), p); - i2.init(false, p2.getPrivate(), p1.getPublic(), p); - - byte[] message = Hex.decode("1234567890abcdef"); - - byte[] out1 = i1.processBlock(message, 0, message.length); - - byte[] out2 = i2.processBlock(out1, 0, out1.length); - - if (!areEqual(out2, message)) - { - fail("stream cipher test failed"); - } - - // - // twofish with CBC - // - BufferedBlockCipher c1 = new PaddedBufferedBlockCipher( - new CBCBlockCipher(new TwofishEngine())); - BufferedBlockCipher c2 = new PaddedBufferedBlockCipher( - new CBCBlockCipher(new TwofishEngine())); - i1 = new IESEngine( - new ECDHBasicAgreement(), - new KDF2BytesGenerator(new SHA1Digest()), - new HMac(new SHA1Digest()), - c1); - i2 = new IESEngine( - new ECDHBasicAgreement(), - new KDF2BytesGenerator(new SHA1Digest()), - new HMac(new SHA1Digest()), - c2); - d = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 }; - e = new byte[] { 8, 7, 6, 5, 4, 3, 2, 1 }; - p = new IESWithCipherParameters(d, e, 64, 128); - - i1.init(true, p1.getPrivate(), p2.getPublic(), p); - i2.init(false, p2.getPrivate(), p1.getPublic(), p); - - message = Hex.decode("1234567890abcdef"); - - out1 = i1.processBlock(message, 0, message.length); - - out2 = i2.processBlock(out1, 0, out1.length); - - if (!areEqual(out2, message)) - { - fail("twofish cipher test failed"); - } - } - - public void performTest() - throws Exception - { - staticTest(); - - ECCurve.Fp curve = new ECCurve.Fp( - new BigInteger("6277101735386680763835789423207666416083908700390324961279"), // q - new BigInteger("fffffffffffffffffffffffffffffffefffffffffffffffc", 16), // a - new BigInteger("64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1", 16)); // b - - ECDomainParameters params = new ECDomainParameters( - curve, - curve.decodePoint(Hex.decode("03188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012")), // G - new BigInteger("6277101735386680763835789423176059013767194773182842284081")); // n - - ECKeyPairGenerator eGen = new ECKeyPairGenerator(); - KeyGenerationParameters gParam = new ECKeyGenerationParameters(params, new SecureRandom()); - - eGen.init(gParam); - - AsymmetricCipherKeyPair p1 = eGen.generateKeyPair(); - AsymmetricCipherKeyPair p2 = eGen.generateKeyPair(); - - doTest(p1, p2); - - doEphemeralTest(); - } - - public static void main( - String[] args) - { - runTest(new ECIESTest()); - } -} |