public ECDomainParameters( ECCurve curve, ECPoint g, BigInteger n) : this(curve, g, n, BigInteger.One) { }
public X9ECParameters( ECCurve curve, ECPoint g, BigInteger n) : this(curve, g, n, BigInteger.One, null) { }
public ECDomainParameters( ECCurve curve, ECPoint g, BigInteger n, BigInteger h) : this(curve, g, n, h, null) { }
public X9Curve( X9FieldID fieldID, Asn1Sequence seq) { if (fieldID == null) throw new ArgumentNullException("fieldID"); if (seq == null) throw new ArgumentNullException("seq"); this.fieldIdentifier = fieldID.Identifier; if (fieldIdentifier.Equals(X9ObjectIdentifiers.PrimeField)) { BigInteger q = ((DerInteger) fieldID.Parameters).Value; X9FieldElement x9A = new X9FieldElement(q, (Asn1OctetString) seq[0]); X9FieldElement x9B = new X9FieldElement(q, (Asn1OctetString) seq[1]); curve = new FpCurve(q, x9A.Value.ToBigInteger(), x9B.Value.ToBigInteger()); } else { if (fieldIdentifier.Equals(X9ObjectIdentifiers.CharacteristicTwoField)) { // Characteristic two field DerSequence parameters = (DerSequence)fieldID.Parameters; int m = ((DerInteger)parameters[0]).Value.IntValue; DerObjectIdentifier representation = (DerObjectIdentifier)parameters[1]; int k1 = 0; int k2 = 0; int k3 = 0; if (representation.Equals(X9ObjectIdentifiers.TPBasis)) { // Trinomial basis representation k1 = ((DerInteger)parameters[2]).Value.IntValue; } else { // Pentanomial basis representation DerSequence pentanomial = (DerSequence) parameters[2]; k1 = ((DerInteger) pentanomial[0]).Value.IntValue; k2 = ((DerInteger) pentanomial[1]).Value.IntValue; k3 = ((DerInteger) pentanomial[2]).Value.IntValue; } X9FieldElement x9A = new X9FieldElement(m, k1, k2, k3, (Asn1OctetString)seq[0]); X9FieldElement x9B = new X9FieldElement(m, k1, k2, k3, (Asn1OctetString)seq[1]); // TODO Is it possible to get the order (n) and cofactor(h) too? curve = new F2mCurve(m, k1, k2, k3, x9A.Value.ToBigInteger(), x9B.Value.ToBigInteger()); } } if (seq.Count == 3) { seed = ((DerBitString) seq[2]).GetBytes(); } }
protected internal ECPoint( ECCurve curve, ECFieldElement x, ECFieldElement y, bool withCompression) { if (curve == null) throw new ArgumentNullException("curve"); this.curve = curve; this.x = x; this.y = y; this.withCompression = withCompression; }
public X9ECParameters( Asn1Sequence seq) { if (!(seq[0] is DerInteger) || !((DerInteger) seq[0]).Value.Equals(BigInteger.One)) { throw new ArgumentException("bad version in X9ECParameters"); } X9Curve x9c = null; if (seq[2] is X9Curve) { x9c = (X9Curve) seq[2]; } else { x9c = new X9Curve( new X9FieldID( (Asn1Sequence) seq[1]), (Asn1Sequence) seq[2]); } this.curve = x9c.Curve; if (seq[3] is X9ECPoint) { this.g = ((X9ECPoint) seq[3]).Point; } else { this.g = new X9ECPoint(curve, (Asn1OctetString) seq[3]).Point; } this.n = ((DerInteger) seq[4]).Value; this.seed = x9c.GetSeed(); if (seq.Count == 6) { this.h = ((DerInteger) seq[5]).Value; } }
public ECDomainParameters( ECCurve curve, ECPoint g, BigInteger n, BigInteger h, byte[] seed) { if (curve == null) throw new ArgumentNullException("curve"); if (g == null) throw new ArgumentNullException("g"); if (n == null) throw new ArgumentNullException("n"); if (h == null) throw new ArgumentNullException("h"); this.curve = curve; this.g = g; this.n = n; this.h = h; this.seed = Arrays.Clone(seed); }
public X9Curve( ECCurve curve, byte[] seed) { if (curve == null) throw new ArgumentNullException("curve"); this.curve = curve; this.seed = Arrays.Clone(seed); if (curve is FpCurve) { this.fieldIdentifier = X9ObjectIdentifiers.PrimeField; } else if (curve is F2mCurve) { this.fieldIdentifier = X9ObjectIdentifiers.CharacteristicTwoField; } else { throw new ArgumentException("This type of ECCurve is not implemented"); } }
public X9ECParameters( ECCurve curve, ECPoint g, BigInteger n, BigInteger h, byte[] seed) { this.curve = curve; this.g = g; this.n = n; this.h = h; this.seed = seed; if (curve is FpCurve) { this.fieldID = new X9FieldID(((FpCurve) curve).Q); } else if (curve is F2mCurve) { F2mCurve curveF2m = (F2mCurve) curve; this.fieldID = new X9FieldID(curveF2m.M, curveF2m.K1, curveF2m.K2, curveF2m.K3); } }
/** * Create a point that encodes with or without point compresion. * * @param curve the curve to use * @param x affine x co-ordinate * @param y affine y co-ordinate * @param withCompression if true encode with point compression */ public FpPoint( ECCurve curve, ECFieldElement x, ECFieldElement y, bool withCompression) : base(curve, x, y, withCompression) { if ((x != null && y == null) || (x == null && y != null)) throw new ArgumentException("Exactly one of the field elements is null"); }
protected internal ECPointBase( ECCurve curve, ECFieldElement x, ECFieldElement y, bool withCompression) : base(curve, x, y, withCompression) { }
protected bool Equals( ECCurve other) { return a.Equals(other.a) && b.Equals(other.b); }
public F2mPoint( ECCurve curve) : this(curve, null, null) { }
public X9Curve( ECCurve curve) : this(curve, null) { this.curve = curve; }
/** * @param curve base curve * @param x x point * @param y y point */ public F2mPoint( ECCurve curve, ECFieldElement x, ECFieldElement y) : this(curve, x, y, false) { }
/** * @param curve base curve * @param x x point * @param y y point * @param withCompression true if encode with point compression. */ public F2mPoint( ECCurve curve, ECFieldElement x, ECFieldElement y, bool withCompression) : base(curve, x, y, withCompression) { if ((x != null && y == null) || (x == null && y != null)) { throw new ArgumentException("Exactly one of the field elements is null"); } if (x != null) { // Check if x and y are elements of the same field F2mFieldElement.CheckFieldElements(this.x, this.y); // Check if x and a are elements of the same field F2mFieldElement.CheckFieldElements(this.x, this.curve.A); } }
public static int GetByteLength( ECCurve c) { return (c.FieldSize + 7) / 8; }
public X9ECPoint( ECCurve c, Asn1OctetString s) { this.p = c.DecodePoint(s.GetOctets()); }