18212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrompackage org.bouncycastle.asn1.nist;
28212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
34c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport java.util.Enumeration;
44c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport java.util.Hashtable;
54c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
64c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1ObjectIdentifier;
78212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport org.bouncycastle.asn1.sec.SECNamedCurves;
88212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport org.bouncycastle.asn1.sec.SECObjectIdentifiers;
98212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport org.bouncycastle.asn1.x9.X9ECParameters;
108212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport org.bouncycastle.util.Strings;
118212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
128212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom/**
13a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom * Utility class for fetching curves using their NIST names as published in FIPS-PUB 186-3
148212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom */
158212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrompublic class NISTNamedCurves
168212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom{
178212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    static final Hashtable objIds = new Hashtable();
188212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    static final Hashtable names = new Hashtable();
198212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
204c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    static void defineCurve(String name, ASN1ObjectIdentifier oid)
218212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    {
228212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        objIds.put(name, oid);
238212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        names.put(oid, name);
248212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    }
258212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
268212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    static
278212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    {
288212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        defineCurve("B-571", SECObjectIdentifiers.sect571r1);
298212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        defineCurve("B-409", SECObjectIdentifiers.sect409r1);
308212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        defineCurve("B-283", SECObjectIdentifiers.sect283r1);
318212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        defineCurve("B-233", SECObjectIdentifiers.sect233r1);
328212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        defineCurve("B-163", SECObjectIdentifiers.sect163r2);
33a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        defineCurve("K-571", SECObjectIdentifiers.sect571k1);
34a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        defineCurve("K-409", SECObjectIdentifiers.sect409k1);
35a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        defineCurve("K-283", SECObjectIdentifiers.sect283k1);
36a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        defineCurve("K-233", SECObjectIdentifiers.sect233k1);
37a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        defineCurve("K-163", SECObjectIdentifiers.sect163k1);
388212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        defineCurve("P-521", SECObjectIdentifiers.secp521r1);
398212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        defineCurve("P-384", SECObjectIdentifiers.secp384r1);
408212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        defineCurve("P-256", SECObjectIdentifiers.secp256r1);
418212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        defineCurve("P-224", SECObjectIdentifiers.secp224r1);
428212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        defineCurve("P-192", SECObjectIdentifiers.secp192r1);
438212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    }
448212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
458212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    public static X9ECParameters getByName(
468212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        String  name)
478212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    {
484c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)objIds.get(Strings.toUpperCase(name));
498212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
508212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        if (oid != null)
518212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        {
528212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            return getByOID(oid);
538212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        }
548212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
558212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        return null;
568212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    }
578212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
588212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    /**
598212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     * return the X9ECParameters object for the named curve represented by
608212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     * the passed in object identifier. Null if the curve isn't present.
618212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     *
628212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     * @param oid an object identifier representing a named curve, if present.
638212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     */
648212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    public static X9ECParameters getByOID(
654c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        ASN1ObjectIdentifier  oid)
668212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    {
678212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        return SECNamedCurves.getByOID(oid);
688212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    }
698212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
708212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    /**
718212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     * return the object identifier signified by the passed in name. Null
728212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     * if there is no object identifier associated with name.
738212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     *
748212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     * @return the object identifier associated with name, if present.
758212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     */
764c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public static ASN1ObjectIdentifier getOID(
778212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        String  name)
788212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    {
794c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        return (ASN1ObjectIdentifier)objIds.get(Strings.toUpperCase(name));
808212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    }
818212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
828212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    /**
838212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     * return the named curve name represented by the given object identifier.
848212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     */
858212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    public static String getName(
864c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        ASN1ObjectIdentifier  oid)
878212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    {
888212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        return (String)names.get(oid);
898212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    }
908212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
918212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    /**
928212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     * returns an enumeration containing the name strings for curves
938212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     * contained in this structure.
948212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     */
958212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    public static Enumeration getNames()
968212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    {
978212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        return objIds.keys();
988212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    }
998212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom}
100