org.testifyproject.bouncycastle.asn1.test.X9Test Maven / Gradle / Ivy
package org.testifyproject.bouncycastle.asn1.test;
import java.math.BigInteger;
import org.testifyproject.bouncycastle.asn1.ASN1OctetString;
import org.testifyproject.bouncycastle.asn1.ASN1Primitive;
import org.testifyproject.bouncycastle.asn1.DEROctetString;
import org.testifyproject.bouncycastle.asn1.pkcs.PrivateKeyInfo;
import org.testifyproject.bouncycastle.asn1.sec.ECPrivateKey;
import org.testifyproject.bouncycastle.asn1.x509.AlgorithmIdentifier;
import org.testifyproject.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
import org.testifyproject.bouncycastle.asn1.x9.X962NamedCurves;
import org.testifyproject.bouncycastle.asn1.x9.X962Parameters;
import org.testifyproject.bouncycastle.asn1.x9.X9ECParameters;
import org.testifyproject.bouncycastle.asn1.x9.X9ECPoint;
import org.testifyproject.bouncycastle.asn1.x9.X9IntegerConverter;
import org.testifyproject.bouncycastle.asn1.x9.X9ObjectIdentifiers;
import org.testifyproject.bouncycastle.math.ec.ECPoint;
import org.testifyproject.bouncycastle.util.Arrays;
import org.testifyproject.bouncycastle.util.encoders.Base64;
import org.testifyproject.bouncycastle.util.test.SimpleTest;
public class X9Test
extends SimpleTest
{
private byte[] namedPub = Base64.org.testifyproject.testifyprojectcode("MDcwEwYHKoZIzj0CAQYIKoZIzj0DAQEDIAADG5xRI+Iki/JrvL20hoDUa7Cggzorv5B9yyqSMjYu");
private byte[] expPub = Base64.org.testifyproject.testifyprojectcode(
"MIH8MIHXBgcqhkjOPQIBMIHLAgEBMCkGByqGSM49AQECHn///////////////3///////4AAAA" +
"AAAH///////zBXBB5///////////////9///////+AAAAAAAB///////wEHiVXBfoqMGZUsfTL" +
"A9anUKMMJQEC1JiHF9m6FattPgMVAH1zdBaP/jRxtgqFdoahlHXTv6L/BB8DZ2iujhi7ks/PAF" +
"yUmqLG2UhT0OZgu/hUsclQX+laAh5///////////////9///+XXetBs6YFfDxDIUZSZVECAQED" +
"IAADG5xRI+Iki/JrvL20hoDUa7Cggzorv5B9yyqSMjYu");
private byte[] namedPriv = Base64.org.testifyproject.testifyprojectcode("MCICAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEECDAGAgEBBAEK");
private byte[] expPriv = Base64.org.testifyproject.testifyprojectcode(
"MIHnAgEAMIHXBgcqhkjOPQIBMIHLAgEBMCkGByqGSM49AQECHn///////////////3///////4"
+ "AAAAAAAH///////zBXBB5///////////////9///////+AAAAAAAB///////wEHiVXBfoqMGZU"
+ "sfTLA9anUKMMJQEC1JiHF9m6FattPgMVAH1zdBaP/jRxtgqFdoahlHXTv6L/BB8DZ2iujhi7ks"
+ "/PAFyUmqLG2UhT0OZgu/hUsclQX+laAh5///////////////9///+XXetBs6YFfDxDIUZSZVEC"
+ "AQEECDAGAgEBBAEU");
private void encodePublicKey()
throws Exception
{
X9ECParameters ecP = X962NamedCurves.getByOID(X9ObjectIdentifiers.prime239v3);
X9IntegerConverter conv = new X9IntegerConverter();
if (conv.getByteLength(ecP.getCurve()) != 30)
{
fail("wrong byte length reported for curve");
}
if (ecP.getCurve().getFieldSize() != 239)
{
fail("wrong field size reported for curve");
}
//
// named curve
//
X962Parameters params = new X962Parameters(X9ObjectIdentifiers.prime192v1);
ECPoint point = ecP.getG().multiply(BigInteger.valueOf(100));
ASN1OctetString p = new DEROctetString(point.getEncoded(true));
SubjectPublicKeyInfo info = new SubjectPublicKeyInfo(new AlgorithmIdentifier(X9ObjectIdentifiers.id_ecPublicKey, params), p.getOctets());
if (!areEqual(info.getEncoded(), namedPub))
{
fail("failed public named generation");
}
X9ECPoint x9P = new X9ECPoint(ecP.getCurve(), p);
if (!Arrays.areEqual(p.getOctets(), x9P.getPoint().getEncoded()))
{
fail("point encoding not preserved");
}
ASN1Primitive o = ASN1Primitive.fromByteArray(namedPub);
if (!info.equals(o))
{
fail("failed public named equality");
}
//
// explicit curve parameters
//
params = new X962Parameters(ecP);
info = new SubjectPublicKeyInfo(new AlgorithmIdentifier(X9ObjectIdentifiers.id_ecPublicKey, params), p.getOctets());
if (!areEqual(info.getEncoded(), expPub))
{
fail("failed public explicit generation");
}
o = ASN1Primitive.fromByteArray(expPub);
if (!info.equals(o))
{
fail("failed public explicit equality");
}
}
private void encodePrivateKey()
throws Exception
{
X9ECParameters ecP = X962NamedCurves.getByOID(X9ObjectIdentifiers.prime239v3);
//
// named curve
//
X962Parameters params = new X962Parameters(X9ObjectIdentifiers.prime192v1);
PrivateKeyInfo info = new PrivateKeyInfo(new AlgorithmIdentifier(X9ObjectIdentifiers.id_ecPublicKey, params), new ECPrivateKey(BigInteger.valueOf(10)));
if (!areEqual(info.getEncoded(), namedPriv))
{
fail("failed private named generation");
}
ASN1Primitive o = ASN1Primitive.fromByteArray(namedPriv);
if (!info.equals(o))
{
fail("failed private named equality");
}
//
// explicit curve parameters
//
params = new X962Parameters(ecP);
info = new PrivateKeyInfo(new AlgorithmIdentifier(X9ObjectIdentifiers.id_ecPublicKey, params), new ECPrivateKey(BigInteger.valueOf(20)));
if (!areEqual(info.getEncoded(), expPriv))
{
fail("failed private explicit generation");
}
o = ASN1Primitive.fromByteArray(expPriv);
if (!info.equals(o))
{
fail("failed private explicit equality");
}
}
public void performTest()
throws Exception
{
encodePublicKey();
encodePrivateKey();
}
public String getName()
{
return "X9";
}
public static void main(
String[] args)
{
runTest(new X9Test());
}
}