18212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrompackage org.bouncycastle.asn1.x9;
28212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
34c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Object;
48212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport org.bouncycastle.asn1.ASN1OctetString;
54c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Primitive;
68212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport org.bouncycastle.asn1.DEROctetString;
78212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport org.bouncycastle.math.ec.ECCurve;
88212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport org.bouncycastle.math.ec.ECPoint;
98212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
108212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom/**
118212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * class for describing an ECPoint as a DER object.
128212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom */
138212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrompublic class X9ECPoint
144c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    extends ASN1Object
158212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom{
168212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    ECPoint p;
178212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
188212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    public X9ECPoint(
198212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        ECPoint p)
208212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    {
215db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        this.p = p.normalize();
228212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    }
238212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
248212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    public X9ECPoint(
258212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        ECCurve          c,
268212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        ASN1OctetString  s)
278212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    {
288212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        this.p = c.decodePoint(s.getOctets());
298212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    }
308212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
318212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    public ECPoint getPoint()
328212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    {
338212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        return p;
348212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    }
358212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
368212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    /**
378212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     * Produce an object suitable for an ASN1OutputStream.
388212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     * <pre>
398212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     *  ECPoint ::= OCTET STRING
408212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     * </pre>
418212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     * <p>
428212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     * Octet string produced using ECPoint.getEncoded().
438212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     */
444c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public ASN1Primitive toASN1Primitive()
458212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    {
468212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        return new DEROctetString(p.getEncoded());
478212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    }
488212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom}
49