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", "BC");
g = KeyPairGenerator.getInstance("ECGOST3410", "BC");
// 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", "BC");
s.initVerify(vKey);
s.update(data);
if (!s.verify(sigBytes))
{
fail("ECGOST3410 verification failed");
}
//
// encoded test
//
f = KeyFactory.getInstance("ECGOST3410", "BC");
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");