org.testifyproject.bouncycastle.jce.spec.ECNamedCurveSpec Maven / Gradle / Ivy
The newest version!
package org.testifyproject.bouncycastle.jce.spec;
import java.math.BigInteger;
import java.security.spec.ECFieldF2m;
import java.security.spec.ECFieldFp;
import java.security.spec.ECPoint;
import java.security.spec.EllipticCurve;
import org.testifyproject.bouncycastle.math.ec.ECAlgorithms;
import org.testifyproject.bouncycastle.math.ec.ECCurve;
/**
* specification signifying that the curve parameters can also be
* referred to by name.
*/
public class ECNamedCurveSpec
extends java.security.spec.ECParameterSpec
{
private String name;
private static EllipticCurve convertCurve(
ECCurve curve,
byte[] seed)
{
if (ECAlgorithms.isFpCurve(curve))
{
return new EllipticCurve(new ECFieldFp(curve.getField().getCharacteristic()), curve.getA().toBigInteger(), curve.getB().toBigInteger(), seed);
}
else
{
ECCurve.F2m curveF2m = (ECCurve.F2m)curve;
int ks[];
if (curveF2m.isTrinomial())
{
ks = new int[] { curveF2m.getK1() };
return new EllipticCurve(new ECFieldF2m(curveF2m.getM(), ks), curve.getA().toBigInteger(), curve.getB().toBigInteger(), seed);
}
else
{
ks = new int[] { curveF2m.getK3(), curveF2m.getK2(), curveF2m.getK1() };
return new EllipticCurve(new ECFieldF2m(curveF2m.getM(), ks), curve.getA().toBigInteger(), curve.getB().toBigInteger(), seed);
}
}
}
private static ECPoint convertPoint(
org.testifyproject.bouncycastle.math.ec.ECPoint g)
{
g = g.normalize();
return new ECPoint(g.getAffineXCoord().toBigInteger(), g.getAffineYCoord().toBigInteger());
}
public ECNamedCurveSpec(
String name,
ECCurve curve,
org.testifyproject.bouncycastle.math.ec.ECPoint g,
BigInteger n)
{
super(convertCurve(curve, null), convertPoint(g), n, 1);
this.name = name;
}
public ECNamedCurveSpec(
String name,
EllipticCurve curve,
ECPoint g,
BigInteger n)
{
super(curve, g, n, 1);
this.name = name;
}
public ECNamedCurveSpec(
String name,
ECCurve curve,
org.testifyproject.bouncycastle.math.ec.ECPoint g,
BigInteger n,
BigInteger h)
{
super(convertCurve(curve, null), convertPoint(g), n, h.intValue());
this.name = name;
}
public ECNamedCurveSpec(
String name,
EllipticCurve curve,
ECPoint g,
BigInteger n,
BigInteger h)
{
super(curve, g, n, h.intValue());
this.name = name;
}
public ECNamedCurveSpec(
String name,
ECCurve curve,
org.testifyproject.bouncycastle.math.ec.ECPoint g,
BigInteger n,
BigInteger h,
byte[] seed)
{
super(convertCurve(curve, seed), convertPoint(g), n, h.intValue());
this.name = name;
}
/**
* return the name of the curve the EC domain parameters belong to.
*/
public String getName()
{
return name;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy