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