summary refs log tree commit diff
path: root/crypto/src/asn1/cryptopro/GOST3410NamedParameters.cs
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/src/asn1/cryptopro/GOST3410NamedParameters.cs')
-rw-r--r--crypto/src/asn1/cryptopro/GOST3410NamedParameters.cs91
1 files changed, 38 insertions, 53 deletions
diff --git a/crypto/src/asn1/cryptopro/GOST3410NamedParameters.cs b/crypto/src/asn1/cryptopro/GOST3410NamedParameters.cs
index 66dba51d7..2d183a4f9 100644
--- a/crypto/src/asn1/cryptopro/GOST3410NamedParameters.cs
+++ b/crypto/src/asn1/cryptopro/GOST3410NamedParameters.cs
@@ -1,25 +1,14 @@
 using System;
-using System.Collections;
+using System.Collections.Generic;
 
-using Org.BouncyCastle.Asn1;
 using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Utilities;
 using Org.BouncyCastle.Utilities.Collections;
 
 namespace Org.BouncyCastle.Asn1.CryptoPro
 {
-    /**
-    * table of the available named parameters for GOST 3410-94.
-    */
-    public sealed class Gost3410NamedParameters
+    /// <summary>Registry of available named parameters for GOST 3410-94.</summary>
+    public static class Gost3410NamedParameters
     {
-		private Gost3410NamedParameters()
-		{
-		}
-
-        private static readonly IDictionary objIds = Platform.CreateHashtable();
-        private static readonly IDictionary parameters = Platform.CreateHashtable();
-
         private static readonly Gost3410ParamSetParameters cryptoProA = new Gost3410ParamSetParameters(
             1024,
             new BigInteger("127021248288932417465907042777176443525787653508916535812817507265705031260985098497423188333483401180925999995120988934130659205614996724254121049274349357074920312769561451689224110579311248812610229678534638401693520013288995000362260684222750813532307004517341633685004541062586971416883686778842537820383"),
@@ -65,59 +54,55 @@ namespace Org.BouncyCastle.Asn1.CryptoPro
             new BigInteger("133531813272720673433859519948319001217942375967847486899482359599369642528734712461590403327731821410328012529253871914788598993103310567744136196364803064721377826656898686468463277710150809401182608770201615324990468332931294920912776241137878030224355746606283971659376426832674269780880061631528163475887")
             );
 
-		static Gost3410NamedParameters()
-        {
-            parameters[CryptoProObjectIdentifiers.GostR3410x94CryptoProA] = cryptoProA;
-            parameters[CryptoProObjectIdentifiers.GostR3410x94CryptoProB] = cryptoProB;
-            //parameters[CryptoProObjectIdentifiers.GostR3410x94CryptoProC] = cryptoProC;
-            //parameters[CryptoProObjectIdentifiers.GostR3410x94CryptoProD] = cryptoProD;
-            parameters[CryptoProObjectIdentifiers.GostR3410x94CryptoProXchA] = cryptoProXchA;
-            //parameters[CryptoProObjectIdentifiers.GostR3410x94CryptoProXchB] = cryptoProXchA;
-            //parameters[CryptoProObjectIdentifiers.GostR3410x94CryptoProXchC] = cryptoProXchA;
+        private static readonly Dictionary<string, DerObjectIdentifier> objIds =
+            new Dictionary<string, DerObjectIdentifier>(StringComparer.OrdinalIgnoreCase);
+        private static readonly Dictionary<DerObjectIdentifier, Gost3410ParamSetParameters> parameters =
+            new Dictionary<DerObjectIdentifier, Gost3410ParamSetParameters>();
 
-			objIds["GostR3410-94-CryptoPro-A"] = CryptoProObjectIdentifiers.GostR3410x94CryptoProA;
-            objIds["GostR3410-94-CryptoPro-B"] = CryptoProObjectIdentifiers.GostR3410x94CryptoProB;
-            objIds["GostR3410-94-CryptoPro-XchA"] = CryptoProObjectIdentifiers.GostR3410x94CryptoProXchA;
+        private static void DefineParameters(string name, DerObjectIdentifier oid,
+            Gost3410ParamSetParameters parameterSet)
+        {
+            objIds.Add(name, oid);
+            parameters.Add(oid, parameterSet);
         }
 
-		/**
-        * return the GOST3410ParamSetParameters object for the given OID, null if it
-        * isn't present.
-        *
-        * @param oid an object identifier representing a named parameters, if present.
-        */
-        public static Gost3410ParamSetParameters GetByOid(
-            DerObjectIdentifier oid)
+        static Gost3410NamedParameters()
         {
-            return (Gost3410ParamSetParameters) parameters[oid];
+            DefineParameters("GostR3410-94-CryptoPro-A", CryptoProObjectIdentifiers.GostR3410x94CryptoProA, cryptoProA);
+            DefineParameters("GostR3410-94-CryptoPro-B", CryptoProObjectIdentifiers.GostR3410x94CryptoProB, cryptoProB);
+            DefineParameters("GostR3410-94-CryptoPro-XchA", CryptoProObjectIdentifiers.GostR3410x94CryptoProXchA,
+                cryptoProXchA);
         }
 
-		/**
-        * returns an enumeration containing the name strings for parameters
-        * contained in this structure.
-        */
-        public static IEnumerable Names
+        /// <summary>Look up the <see cref="Gost3410ParamSetParameters"/> for the parameter set with the given name.
+        /// </summary>
+        /// <param name="name">The name of the parameter set.</param>
+        public static Gost3410ParamSetParameters GetByName(string name)
         {
-			get { return new EnumerableProxy(objIds.Keys); }
+            DerObjectIdentifier oid = GetOid(name);
+            return oid == null ? null : GetByOid(oid);
         }
 
-		public static Gost3410ParamSetParameters GetByName(
-            string name)
+        /// <summary>Look up the <see cref="Gost3410ParamSetParameters"/> for the parameter set with the given
+        /// <see cref="DerObjectIdentifier">OID</see>.</summary>
+        /// <param name="oid">The <see cref="DerObjectIdentifier">OID</see> for the parameter set.</param>
+        public static Gost3410ParamSetParameters GetByOid(DerObjectIdentifier oid)
         {
-            DerObjectIdentifier oid = (DerObjectIdentifier) objIds[name];
-
-            if (oid != null)
-            {
-                return (Gost3410ParamSetParameters) parameters[oid];
-            }
+            return parameters.TryGetValue(oid, out var parameterSet) ? parameterSet : null;
+        }
 
-            return null;
+        /// <summary>Look up the <see cref="DerObjectIdentifier">OID</see> of the parameter set with the given name.
+        /// </summary>
+        /// <param name="name">The name of the parameter set.</param>
+        public static DerObjectIdentifier GetOid(string name)
+        {
+            return objIds.TryGetValue(name, out var oid) ? oid : null;
         }
 
-        public static DerObjectIdentifier GetOid(
-			string name)
+        /// <summary>Enumerate the available parameter set names in this registry.</summary>
+        public static IEnumerable<string> Names
         {
-            return (DerObjectIdentifier) objIds[name];
+            get { return CollectionUtilities.Proxy(objIds.Keys); }
         }
     }
 }