1 package org.bouncycastle.asn1.nist;
2 
3 import java.util.Enumeration;
4 import java.util.Hashtable;
5 
6 import org.bouncycastle.asn1.ASN1ObjectIdentifier;
7 import org.bouncycastle.asn1.sec.SECNamedCurves;
8 import org.bouncycastle.asn1.sec.SECObjectIdentifiers;
9 import org.bouncycastle.asn1.x9.X9ECParameters;
10 import org.bouncycastle.util.Strings;
11 
12 /**
13  * Utility class for fetching curves using their NIST names as published in FIPS-PUB 186-3
14  */
15 public class NISTNamedCurves
16 {
17     static final Hashtable objIds = new Hashtable();
18     static final Hashtable names = new Hashtable();
19 
defineCurve(String name, ASN1ObjectIdentifier oid)20     static void defineCurve(String name, ASN1ObjectIdentifier oid)
21     {
22         objIds.put(name, oid);
23         names.put(oid, name);
24     }
25 
26     static
27     {
28         defineCurve("B-571", SECObjectIdentifiers.sect571r1);
29         defineCurve("B-409", SECObjectIdentifiers.sect409r1);
30         defineCurve("B-283", SECObjectIdentifiers.sect283r1);
31         defineCurve("B-233", SECObjectIdentifiers.sect233r1);
32         defineCurve("B-163", SECObjectIdentifiers.sect163r2);
33         defineCurve("K-571", SECObjectIdentifiers.sect571k1);
34         defineCurve("K-409", SECObjectIdentifiers.sect409k1);
35         defineCurve("K-283", SECObjectIdentifiers.sect283k1);
36         defineCurve("K-233", SECObjectIdentifiers.sect233k1);
37         defineCurve("K-163", SECObjectIdentifiers.sect163k1);
38         defineCurve("P-521", SECObjectIdentifiers.secp521r1);
39         defineCurve("P-384", SECObjectIdentifiers.secp384r1);
40         defineCurve("P-256", SECObjectIdentifiers.secp256r1);
41         defineCurve("P-224", SECObjectIdentifiers.secp224r1);
42         defineCurve("P-192", SECObjectIdentifiers.secp192r1);
43     }
44 
getByName( String name)45     public static X9ECParameters getByName(
46         String  name)
47     {
48         ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)objIds.get(Strings.toUpperCase(name));
49 
50         if (oid != null)
51         {
52             return getByOID(oid);
53         }
54 
55         return null;
56     }
57 
58     /**
59      * return the X9ECParameters object for the named curve represented by
60      * the passed in object identifier. Null if the curve isn't present.
61      *
62      * @param oid an object identifier representing a named curve, if present.
63      */
getByOID( ASN1ObjectIdentifier oid)64     public static X9ECParameters getByOID(
65         ASN1ObjectIdentifier  oid)
66     {
67         return SECNamedCurves.getByOID(oid);
68     }
69 
70     /**
71      * return the object identifier signified by the passed in name. Null
72      * if there is no object identifier associated with name.
73      *
74      * @return the object identifier associated with name, if present.
75      */
getOID( String name)76     public static ASN1ObjectIdentifier getOID(
77         String  name)
78     {
79         return (ASN1ObjectIdentifier)objIds.get(Strings.toUpperCase(name));
80     }
81 
82     /**
83      * return the named curve name represented by the given object identifier.
84      */
getName( ASN1ObjectIdentifier oid)85     public static String getName(
86         ASN1ObjectIdentifier  oid)
87     {
88         return (String)names.get(oid);
89     }
90 
91     /**
92      * returns an enumeration containing the name strings for curves
93      * contained in this structure.
94      */
getNames()95     public static Enumeration getNames()
96     {
97         return objIds.keys();
98     }
99 }
100