![JAR search and dependency download from the Maven repository](/logo.png)
nl.open.jwtdependency.org.bouncycastle.asn1.test.X9Test Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of java-jwt-nodependencies Show documentation
Show all versions of java-jwt-nodependencies Show documentation
This is a drop in replacement for the auth0 java-jwt library (see https://github.com/auth0/java-jwt). This jar makes sure there are no external dependencies (e.g. fasterXml, Apacha Commons) needed. This is useful when deploying to an application server (e.g. tomcat with Alfreso or Pega).
The newest version!
package org.bouncycastle.asn1.test;
import java.math.BigInteger;
import org.bouncycastle.asn1.ASN1OctetString;
import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.DEROctetString;
import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
import org.bouncycastle.asn1.sec.ECPrivateKey;
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
import org.bouncycastle.asn1.x9.X962NamedCurves;
import org.bouncycastle.asn1.x9.X962Parameters;
import org.bouncycastle.asn1.x9.X9ECParameters;
import org.bouncycastle.asn1.x9.X9ECPoint;
import org.bouncycastle.asn1.x9.X9IntegerConverter;
import org.bouncycastle.asn1.x9.X9ObjectIdentifiers;
import org.bouncycastle.math.ec.ECPoint;
import org.bouncycastle.util.Arrays;
import org.bouncycastle.util.encoders.Base64;
import org.bouncycastle.util.encoders.Hex;
import org.bouncycastle.util.test.SimpleTest;
public class X9Test
extends SimpleTest
{
private byte[] namedPub = Base64.decode("MDcwEwYHKoZIzj0CAQYIKoZIzj0DAQEDIAADG5xRI+Iki/JrvL20hoDUa7Cggzorv5B9yyqSMjYu");
private byte[] expPub = Base64.decode(
"MIH8MIHXBgcqhkjOPQIBMIHLAgEBMCkGByqGSM49AQECHn///////////////3///////4AAAA" +
"AAAH///////zBXBB5///////////////9///////+AAAAAAAB///////wEHiVXBfoqMGZUsfTL" +
"A9anUKMMJQEC1JiHF9m6FattPgMVAH1zdBaP/jRxtgqFdoahlHXTv6L/BB8DZ2iujhi7ks/PAF" +
"yUmqLG2UhT0OZgu/hUsclQX+laAh5///////////////9///+XXetBs6YFfDxDIUZSZVECAQED" +
"IAADG5xRI+Iki/JrvL20hoDUa7Cggzorv5B9yyqSMjYu");
private byte[] namedPriv = Base64.decode("MDkCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEHzAdAgEBBB" +
"gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAo=");
private byte[] expPriv = Base64.decode(
"MIIBBAIBADCB1wYHKoZIzj0CATCBywIBATApBgcqhkjOPQEBAh5///////////////9///////" +
"+AAAAAAAB///////8wVwQef///////////////f///////gAAAAAAAf//////8BB4lVwX6KjBmVL" +
"H0ywPWp1CjDCUBAtSYhxfZuhWrbT4DFQB9c3QWj/40cbYKhXaGoZR107+i/wQfA2doro4Yu5LPzw" +
"BclJqixtlIU9DmYLv4VLHJUF/pWgIef///////////////f///l13rQbOmBXw8QyFGUmVRAgEBBC" +
"UwIwIBAQQeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU");
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.prime192v1);
//
// named curve
//
X962Parameters params = new X962Parameters(X9ObjectIdentifiers.prime192v1);
PrivateKeyInfo info = new PrivateKeyInfo(new AlgorithmIdentifier(X9ObjectIdentifiers.id_ecPublicKey, params),
new ECPrivateKey(ecP.getN().bitLength(), 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
//
ecP = X962NamedCurves.getByOID(X9ObjectIdentifiers.prime239v3);
params = new X962Parameters(ecP);
info = new PrivateKeyInfo(new AlgorithmIdentifier(X9ObjectIdentifiers.id_ecPublicKey, params),
new ECPrivateKey(ecP.getN().bitLength(), 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());
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy