diff options
Diffstat (limited to 'libraries/spongycastle/prov/src/test/java/org/spongycastle/jce/provider/test/GOST3410Test.java')
-rw-r--r-- | libraries/spongycastle/prov/src/test/java/org/spongycastle/jce/provider/test/GOST3410Test.java | 517 |
1 files changed, 0 insertions, 517 deletions
diff --git a/libraries/spongycastle/prov/src/test/java/org/spongycastle/jce/provider/test/GOST3410Test.java b/libraries/spongycastle/prov/src/test/java/org/spongycastle/jce/provider/test/GOST3410Test.java deleted file mode 100644 index 5aa64c3cf..000000000 --- a/libraries/spongycastle/prov/src/test/java/org/spongycastle/jce/provider/test/GOST3410Test.java +++ /dev/null @@ -1,517 +0,0 @@ -package org.spongycastle.jce.provider.test; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.math.BigInteger; -import java.security.InvalidKeyException; -import java.security.KeyFactory; -import java.security.KeyPair; -import java.security.KeyPairGenerator; -import java.security.KeyStore; -import java.security.KeyStoreException; -import java.security.NoSuchAlgorithmException; -import java.security.NoSuchProviderException; -import java.security.PrivateKey; -import java.security.PublicKey; -import java.security.SecureRandom; -import java.security.Security; -import java.security.Signature; -import java.security.SignatureException; -import java.security.UnrecoverableKeyException; -import java.security.cert.Certificate; -import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; -import java.security.spec.PKCS8EncodedKeySpec; -import java.security.spec.X509EncodedKeySpec; -import java.util.Date; - -import org.spongycastle.asn1.cryptopro.CryptoProObjectIdentifiers; -import org.spongycastle.jce.X509Principal; -import org.spongycastle.jce.interfaces.ECPrivateKey; -import org.spongycastle.jce.interfaces.ECPublicKey; -import org.spongycastle.jce.interfaces.GOST3410PrivateKey; -import org.spongycastle.jce.interfaces.GOST3410PublicKey; -import org.spongycastle.jce.interfaces.PKCS12BagAttributeCarrier; -import org.spongycastle.jce.provider.BouncyCastleProvider; -import org.spongycastle.jce.spec.ECNamedCurveGenParameterSpec; -import org.spongycastle.jce.spec.ECParameterSpec; -import org.spongycastle.jce.spec.ECPrivateKeySpec; -import org.spongycastle.jce.spec.ECPublicKeySpec; -import org.spongycastle.jce.spec.GOST3410ParameterSpec; -import org.spongycastle.math.ec.ECCurve; -import org.spongycastle.math.ec.ECFieldElement; -import org.spongycastle.math.ec.ECPoint; -import org.spongycastle.util.BigIntegers; -import org.spongycastle.util.test.FixedSecureRandom; -import org.spongycastle.util.test.SimpleTest; -import org.spongycastle.x509.X509V3CertificateGenerator; - -public class GOST3410Test - extends SimpleTest -{ - private void ecGOST3410Test() - throws Exception - { - - BigInteger r = new BigInteger("29700980915817952874371204983938256990422752107994319651632687982059210933395"); - BigInteger s = new BigInteger("46959264877825372965922731380059061821746083849389763294914877353246631700866"); - - byte[] kData = BigIntegers.asUnsignedByteArray(new BigInteger("53854137677348463731403841147996619241504003434302020712960838528893196233395")); - - SecureRandom k = new FixedSecureRandom(kData); - - BigInteger mod_p = new BigInteger("57896044618658097711785492504343953926634992332820282019728792003956564821041"); //p - - ECCurve curve = new ECCurve.Fp( - mod_p, // p - new BigInteger("7"), // a - new BigInteger("43308876546767276905765904595650931995942111794451039583252968842033849580414")); // b - - ECParameterSpec spec = new ECParameterSpec( - curve, - new ECPoint.Fp(curve, - new ECFieldElement.Fp(mod_p,new BigInteger("2")), // x - new ECFieldElement.Fp(mod_p,new BigInteger("4018974056539037503335449422937059775635739389905545080690979365213431566280"))), // y - new BigInteger("57896044618658097711785492504343953927082934583725450622380973592137631069619")); // q - - ECPrivateKeySpec priKey = new ECPrivateKeySpec( - new BigInteger("55441196065363246126355624130324183196576709222340016572108097750006097525544"), // d - spec); - - ECPublicKeySpec pubKey = new ECPublicKeySpec( - new ECPoint.Fp(curve, - new ECFieldElement.Fp(mod_p, new BigInteger("57520216126176808443631405023338071176630104906313632182896741342206604859403")), // x - new ECFieldElement.Fp(mod_p, new BigInteger("17614944419213781543809391949654080031942662045363639260709847859438286763994"))), // y - spec); - - Signature sgr = Signature.getInstance("ECGOST3410", "SC"); - KeyFactory f = KeyFactory.getInstance("ECGOST3410", "SC"); - PrivateKey sKey = f.generatePrivate(priKey); - PublicKey vKey = f.generatePublic(pubKey); - - sgr.initSign(sKey, k); - - byte[] message = new byte[] { (byte)'a', (byte)'b', (byte)'c' }; - - sgr.update(message); - - byte[] sigBytes = sgr.sign(); - - sgr.initVerify(vKey); - - sgr.update(message); - - if (!sgr.verify(sigBytes)) - { - fail("ECGOST3410 verification failed"); - } - - BigInteger[] sig = decode(sigBytes); - - if (!r.equals(sig[0])) - { - fail( - ": r component wrong." + System.getProperty("line.separator") - + " expecting: " + r + System.getProperty("line.separator") - + " got : " + sig[0]); - } - - if (!s.equals(sig[1])) - { - fail( - ": s component wrong." + System.getProperty("line.separator") - + " expecting: " + s + System.getProperty("line.separator") - + " got : " + sig[1]); - } - } - - private void generationTest() - throws Exception - { - Signature s = Signature.getInstance("GOST3410", "SC"); - KeyPairGenerator g = KeyPairGenerator.getInstance("GOST3410", "SC"); - byte[] data = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; - GOST3410ParameterSpec gost3410P = new GOST3410ParameterSpec(CryptoProObjectIdentifiers.gostR3410_94_CryptoPro_A.getId()); - - g.initialize(gost3410P, new SecureRandom()); - - KeyPair p = g.generateKeyPair(); - - PrivateKey sKey = p.getPrivate(); - PublicKey vKey = p.getPublic(); - - s.initSign(sKey); - - s.update(data); - - byte[] sigBytes = s.sign(); - - s = Signature.getInstance("GOST3410", "SC"); - - s.initVerify(vKey); - - s.update(data); - - if (!s.verify(sigBytes)) - { - fail("GOST3410 verification failed"); - } - - // - // default initialisation test - // - s = Signature.getInstance("GOST3410", "SC"); - g = KeyPairGenerator.getInstance("GOST3410", "SC"); - - p = g.generateKeyPair(); - - sKey = p.getPrivate(); - vKey = p.getPublic(); - - s.initSign(sKey); - - s.update(data); - - sigBytes = s.sign(); - - s = Signature.getInstance("GOST3410", "SC"); - - s.initVerify(vKey); - - s.update(data); - - if (!s.verify(sigBytes)) - { - fail("GOST3410 verification failed"); - } - - // - // encoded test - // - KeyFactory f = KeyFactory.getInstance("GOST3410", "SC"); - - X509EncodedKeySpec x509s = new X509EncodedKeySpec(vKey.getEncoded()); - GOST3410PublicKey k1 = (GOST3410PublicKey)f.generatePublic(x509s); - - if (!k1.getY().equals(((GOST3410PublicKey)vKey).getY())) - { - fail("public number not decoded properly"); - } - - if (!k1.getParameters().equals(((GOST3410PublicKey)vKey).getParameters())) - { - fail("public parameters not decoded properly"); - } - - PKCS8EncodedKeySpec pkcs8 = new PKCS8EncodedKeySpec(sKey.getEncoded()); - GOST3410PrivateKey k2 = (GOST3410PrivateKey)f.generatePrivate(pkcs8); - - if (!k2.getX().equals(((GOST3410PrivateKey)sKey).getX())) - { - fail("private number not decoded properly"); - } - - if (!k2.getParameters().equals(((GOST3410PrivateKey)sKey).getParameters())) - { - fail("private number not decoded properly"); - } - - k2 = (GOST3410PrivateKey)serializeDeserialize(sKey); - if (!k2.getX().equals(((GOST3410PrivateKey)sKey).getX())) - { - fail("private number not deserialised properly"); - } - - if (!k2.getParameters().equals(((GOST3410PrivateKey)sKey).getParameters())) - { - fail("private number not deserialised properly"); - } - - checkEquals(k2, sKey); - - if (!(k2 instanceof PKCS12BagAttributeCarrier)) - { - fail("private key not implementing PKCS12 attribute carrier"); - } - - k1 = (GOST3410PublicKey)serializeDeserialize(vKey); - - if (!k1.getY().equals(((GOST3410PublicKey)vKey).getY())) - { - fail("public number not deserialised properly"); - } - - if (!k1.getParameters().equals(((GOST3410PublicKey)vKey).getParameters())) - { - fail("public parameters not deserialised properly"); - } - - checkEquals(k1, vKey); - - // - // ECGOST3410 generation test - // - s = Signature.getInstance("ECGOST3410", "SC"); - g = KeyPairGenerator.getInstance("ECGOST3410", "SC"); - -// BigInteger mod_p = new BigInteger("57896044618658097711785492504343953926634992332820282019728792003956564821041"); //p -// -// ECCurve curve = new ECCurve.Fp( -// mod_p, // p -// new BigInteger("7"), // a -// new BigInteger("43308876546767276905765904595650931995942111794451039583252968842033849580414")); // b -// -// ECParameterSpec ecSpec = new ECParameterSpec( -// curve, -// new ECPoint.Fp(curve, -// new ECFieldElement.Fp(mod_p,new BigInteger("2")), // x -// new ECFieldElement.Fp(mod_p,new BigInteger("4018974056539037503335449422937059775635739389905545080690979365213431566280"))), // y -// new BigInteger("57896044618658097711785492504343953927082934583725450622380973592137631069619")); // q - - g.initialize(new ECNamedCurveGenParameterSpec("GostR3410-2001-CryptoPro-A"), new SecureRandom()); - - p = g.generateKeyPair(); - - sKey = p.getPrivate(); - vKey = p.getPublic(); - - s.initSign(sKey); - - s.update(data); - - sigBytes = s.sign(); - - s = Signature.getInstance("ECGOST3410", "SC"); - - s.initVerify(vKey); - - s.update(data); - - if (!s.verify(sigBytes)) - { - fail("ECGOST3410 verification failed"); - } - - // - // encoded test - // - f = KeyFactory.getInstance("ECGOST3410", "SC"); - - x509s = new X509EncodedKeySpec(vKey.getEncoded()); - ECPublicKey eck1 = (ECPublicKey)f.generatePublic(x509s); - - if (!eck1.getQ().equals(((ECPublicKey)vKey).getQ())) - { - fail("public number not decoded properly"); - } - - if (!eck1.getParameters().equals(((ECPublicKey)vKey).getParameters())) - { - fail("public parameters not decoded properly"); - } - - pkcs8 = new PKCS8EncodedKeySpec(sKey.getEncoded()); - ECPrivateKey eck2 = (ECPrivateKey)f.generatePrivate(pkcs8); - - if (!eck2.getD().equals(((ECPrivateKey)sKey).getD())) - { - fail("private number not decoded properly"); - } - - if (!eck2.getParameters().equals(((ECPrivateKey)sKey).getParameters())) - { - fail("private number not decoded properly"); - } - - eck2 = (ECPrivateKey)serializeDeserialize(sKey); - if (!eck2.getD().equals(((ECPrivateKey)sKey).getD())) - { - fail("private number not decoded properly"); - } - - if (!eck2.getParameters().equals(((ECPrivateKey)sKey).getParameters())) - { - fail("private number not decoded properly"); - } - - checkEquals(eck2, sKey); - - if (!(eck2 instanceof PKCS12BagAttributeCarrier)) - { - fail("private key not implementing PKCS12 attribute carrier"); - } - - eck1 = (ECPublicKey)serializeDeserialize(vKey); - - if (!eck1.getQ().equals(((ECPublicKey)vKey).getQ())) - { - fail("public number not decoded properly"); - } - - if (!eck1.getParameters().equals(((ECPublicKey)vKey).getParameters())) - { - fail("public parameters not decoded properly"); - } - - checkEquals(eck1, vKey); - } - - private void keyStoreTest(PrivateKey sKey, PublicKey vKey) - throws KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException, NoSuchProviderException, SignatureException, InvalidKeyException, UnrecoverableKeyException - { - // - // keystore test - // - KeyStore ks = KeyStore.getInstance("JKS"); - - ks.load(null, null); - - // - // create the certificate - version 3 - // - X509V3CertificateGenerator certGen = new X509V3CertificateGenerator(); - - certGen.setSerialNumber(BigInteger.valueOf(1)); - certGen.setIssuerDN(new X509Principal("CN=Test")); - certGen.setNotBefore(new Date(System.currentTimeMillis() - 50000)); - certGen.setNotAfter(new Date(System.currentTimeMillis() + 50000)); - certGen.setSubjectDN(new X509Principal("CN=Test")); - certGen.setPublicKey(vKey); - certGen.setSignatureAlgorithm("GOST3411withGOST3410"); - - X509Certificate cert = certGen.generate(sKey, "SC"); - - ks.setKeyEntry("gost",sKey, "gost".toCharArray(), new Certificate[] { cert }); - - ByteArrayOutputStream bOut = new ByteArrayOutputStream(); - - ks.store(bOut, "gost".toCharArray()); - - ks = KeyStore.getInstance("JKS"); - - ks.load(new ByteArrayInputStream(bOut.toByteArray()), "gost".toCharArray()); - - PrivateKey gKey = (PrivateKey)ks.getKey("gost", "gost".toCharArray()); - } - - private void checkEquals(Object o1, Object o2) - { - if (!o1.equals(o2)) - { - fail("comparison test failed"); - } - - if (o1.hashCode() != o2.hashCode()) - { - fail("hashCode test failed"); - } - } - - private void parametersTest() - throws Exception - { -// AlgorithmParameterGenerator a = AlgorithmParameterGenerator.getInstance("GOST3410", "SC"); -// a.init(512, random); -// AlgorithmParameters params = a.generateParameters(); -// -// byte[] encodeParams = params.getEncoded(); -// -// AlgorithmParameters a2 = AlgorithmParameters.getInstance("GOST3410", "SC"); -// a2.init(encodeParams); -// -// // a and a2 should be equivalent! -// byte[] encodeParams_2 = a2.getEncoded(); -// -// if (!arrayEquals(encodeParams, encodeParams_2)) -// { -// fail("encode/decode parameters failed"); -// } - - GOST3410ParameterSpec gost3410P = new GOST3410ParameterSpec(CryptoProObjectIdentifiers.gostR3410_94_CryptoPro_B.getId()); - - KeyPairGenerator g = KeyPairGenerator.getInstance("GOST3410", "SC"); - g.initialize(gost3410P, new SecureRandom()); - KeyPair p = g.generateKeyPair(); - - PrivateKey sKey = p.getPrivate(); - PublicKey vKey = p.getPublic(); - - Signature s = Signature.getInstance("GOST3410", "SC"); - byte[] data = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; - - s.initSign(sKey); - - s.update(data); - - byte[] sigBytes = s.sign(); - - s = Signature.getInstance("GOST3410", "SC"); - - s.initVerify(vKey); - - s.update(data); - - if (!s.verify(sigBytes)) - { - fail("GOST3410 verification failed"); - } - - keyStoreTest(sKey, vKey); - } - - private BigInteger[] decode( - byte[] encoding) - { - byte[] r = new byte[32]; - byte[] s = new byte[32]; - - System.arraycopy(encoding, 0, s, 0, 32); - - System.arraycopy(encoding, 32, r, 0, 32); - - BigInteger[] sig = new BigInteger[2]; - - sig[0] = new BigInteger(1, r); - sig[1] = new BigInteger(1, s); - - return sig; - } - - private Object serializeDeserialize(Object o) - throws Exception - { - ByteArrayOutputStream bOut = new ByteArrayOutputStream(); - ObjectOutputStream oOut = new ObjectOutputStream(bOut); - - oOut.writeObject(o); - oOut.close(); - - ObjectInputStream oIn = new ObjectInputStream(new ByteArrayInputStream(bOut.toByteArray())); - - return oIn.readObject(); - } - - public String getName() - { - return "GOST3410/ECGOST3410"; - } - - public void performTest() - throws Exception - { - ecGOST3410Test(); - generationTest(); - parametersTest(); - } - - public static void main( - String[] args) - { - Security.addProvider(new BouncyCastleProvider()); - - runTest(new GOST3410Test()); - } -} |