blob: 84ebf70a75d4349f391ce8f4297e7096bcb48c2e [file] [log] [blame]
package org.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.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 (curve instanceof ECCurve.Fp)
{
return new EllipticCurve(new ECFieldFp(((ECCurve.Fp)curve).getQ()), 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.bouncycastle.math.ec.ECPoint g)
{
return new ECPoint(g.getX().toBigInteger(), g.getY().toBigInteger());
}
public ECNamedCurveSpec(
String name,
ECCurve curve,
org.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.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.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;
}
}