FileDocCategorySizeDatePackage
EllipticCurve.javaAPI DocJava SE 5 API5459Fri Aug 26 14:57:18 BST 2005java.security.spec

EllipticCurve

public class EllipticCurve extends Object
This immutable class holds the necessary values needed to represent an elliptic curve.
see
ECField
see
ECFieldFp
see
ECFieldF2m
author
Valerie Peng
version
1.3, 12/19/03
since
1.5

Fields Summary
private final ECField
field
private final BigInteger
a
private final BigInteger
b
private final byte[]
seed
Constructors Summary
public EllipticCurve(ECField field, BigInteger a, BigInteger b)
Creates an elliptic curve with the specified elliptic field field and the coefficients a and b.

param
field the finite field that this elliptic curve is over.
param
a the first coefficient of this elliptic curve.
param
b the second coefficient of this elliptic curve.
exception
NullPointerException if field, a, or b is null.
exception
IllegalArgumentException if a or b is not null and not in field.

	this(field, a, b, null);
    
public EllipticCurve(ECField field, BigInteger a, BigInteger b, byte[] seed)
Creates an elliptic curve with the specified elliptic field field, the coefficients a and b, and the seed used for curve generation.

param
field the finite field that this elliptic curve is over.
param
a the first coefficient of this elliptic curve.
param
b the second coefficient of this elliptic curve.
param
seed the bytes used during curve generation for later validation. Contents of this array are copied to protect against subsequent modification.
exception
NullPointerException if field, a, or b is null.
exception
IllegalArgumentException if a or b is not null and not in field.

        if (field == null) {
            throw new NullPointerException("field is null");
        }
        if (a == null) {
	    throw new NullPointerException("first coefficient is null");
	}
        if (b == null) {
            throw new NullPointerException("second coefficient is null");
        }
        checkValidity(field, a, "first coefficient");
	checkValidity(field, b, "second coefficient");
        this.field = field;
        this.a = a;
        this.b = b;
	if (seed != null) {
	    this.seed = (byte[]) seed.clone();
	} else {
	    this.seed = null;
	}
    
Methods Summary
private static voidcheckValidity(java.security.spec.ECField field, java.math.BigInteger c, java.lang.String cName)

 
	// can only perform check if field is ECFieldFp or ECFieldF2m. 
	if (field instanceof ECFieldFp) {
	    BigInteger p = ((ECFieldFp)field).getP();
	    if (p.compareTo(c) != 1) {
		throw new IllegalArgumentException(cName + " is too large");
	    } else if (c.signum() != 1) {
		throw new IllegalArgumentException(cName + " is negative");
	    }
	} else if (field instanceof ECFieldF2m) {
	    int m = ((ECFieldF2m)field).getM();
	    if (c.bitLength() > m) {
		throw new IllegalArgumentException(cName + " is too large");
	    } 
	}
    
public booleanequals(java.lang.Object obj)
Compares this elliptic curve for equality with the specified object.

param
obj the object to be compared.
return
true if obj is an instance of EllipticCurve and the field, A, B, and seeding bytes match, false otherwise.

	if (this == obj) return true;
	if (obj instanceof EllipticCurve) {
	    EllipticCurve curve = (EllipticCurve) obj;
	    if ((field.equals(curve.field)) &&
		(a.equals(curve.a)) &&
		(b.equals(curve.b)) &&
		(Arrays.equals(seed, curve.seed))) {
		return true;
	    } 
	}
	return false;
    
public java.math.BigIntegergetA()
Returns the first coefficient a of the elliptic curve.

return
the first coefficient a.

	return a;
    
public java.math.BigIntegergetB()
Returns the second coefficient b of the elliptic curve.

return
the second coefficient b.

	return b;
    
public java.security.spec.ECFieldgetField()
Returns the finite field field that this elliptic curve is over.

return
the field field that this curve is over.

	return field;
    
public byte[]getSeed()
Returns the seeding bytes seed used during curve generation. May be null if not specified.

return
the seeding bytes seed. A new array is returned each time this method is called.

	if (seed == null) return null;
	else return (byte[]) seed.clone();
    
public inthashCode()
Returns a hash code value for this elliptic curve.

return
a hash code value.

	return (field.hashCode() << 6 + 
	    (a.hashCode() << 4) +
	    (b.hashCode() << 2) + 
	    (seed==null? 0:seed.length));