diff options
author | Peter Dettman <peter.dettman@bouncycastle.org> | 2014-01-21 16:19:11 +0700 |
---|---|---|
committer | Peter Dettman <peter.dettman@bouncycastle.org> | 2014-01-21 16:19:11 +0700 |
commit | 0d74a23f78cc18401b5f746a97faf1f43003655f (patch) | |
tree | a4aee2333d364a49b947f371924d2e5d3bc53bd6 /crypto/src/asn1/x9 | |
parent | Use ECCurve.CreatePoint (diff) | |
download | BouncyCastle.NET-ed25519-0d74a23f78cc18401b5f746a97faf1f43003655f.tar.xz |
Add new classes in Math.Field and some other EC-related stuff from Java
Diffstat (limited to 'crypto/src/asn1/x9')
-rw-r--r-- | crypto/src/asn1/x9/ECNamedCurveTable.cs | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/crypto/src/asn1/x9/ECNamedCurveTable.cs b/crypto/src/asn1/x9/ECNamedCurveTable.cs new file mode 100644 index 000000000..0030d376b --- /dev/null +++ b/crypto/src/asn1/x9/ECNamedCurveTable.cs @@ -0,0 +1,118 @@ +using System; +using System.Collections; + +using Org.BouncyCastle.Asn1.Nist; +using Org.BouncyCastle.Asn1.Sec; +using Org.BouncyCastle.Asn1.TeleTrust; +using Org.BouncyCastle.Utilities; +using Org.BouncyCastle.Utilities.Collections; + +namespace Org.BouncyCastle.Asn1.X9 +{ + /** + * A general class that reads all X9.62 style EC curve tables. + */ + public class ECNamedCurveTable + { + /** + * return a X9ECParameters object representing the passed in named + * curve. The routine returns null if the curve is not present. + * + * @param name the name of the curve requested + * @return an X9ECParameters object or null if the curve is not available. + */ + public static X9ECParameters GetByName(string name) + { + X9ECParameters ecP = X962NamedCurves.GetByName(name); + + if (ecP == null) + { + ecP = SecNamedCurves.GetByName(name); + } + + if (ecP == null) + { + ecP = TeleTrusTNamedCurves.GetByName(name); + } + + if (ecP == null) + { + ecP = NistNamedCurves.GetByName(name); + } + + return ecP; + } + + /** + * return the object identifier signified by the passed in name. Null + * if there is no object identifier associated with name. + * + * @return the object identifier associated with name, if present. + */ + public static DerObjectIdentifier GetOid(string name) + { + DerObjectIdentifier oid = X962NamedCurves.GetOid(name); + + if (oid == null) + { + oid = SecNamedCurves.GetOid(name); + } + + if (oid == null) + { + oid = TeleTrusTNamedCurves.GetOid(name); + } + + if (oid == null) + { + oid = NistNamedCurves.GetOid(name); + } + + return oid; + } + + /** + * return a X9ECParameters object representing the passed in named + * curve. + * + * @param oid the object id of the curve requested + * @return an X9ECParameters object or null if the curve is not available. + */ + public static X9ECParameters GetByOid(DerObjectIdentifier oid) + { + X9ECParameters ecP = X962NamedCurves.GetByOid(oid); + + if (ecP == null) + { + ecP = SecNamedCurves.GetByOid(oid); + } + + if (ecP == null) + { + ecP = TeleTrusTNamedCurves.GetByOid(oid); + } + + // NOTE: All the NIST curves are currently from SEC, so no point in redundant OID lookup + + return ecP; + } + + /** + * return an enumeration of the names of the available curves. + * + * @return an enumeration of the names of the available curves. + */ + public static IEnumerable Names + { + get + { + IList v = Platform.CreateArrayList(); + CollectionUtilities.AddRange(v, X962NamedCurves.Names); + CollectionUtilities.AddRange(v, SecNamedCurves.Names); + CollectionUtilities.AddRange(v, NistNamedCurves.Names); + CollectionUtilities.AddRange(v, TeleTrusTNamedCurves.Names); + return v; + } + } + } +} |