Ejemplo n.º 1
0
        internal static int GetDefaultKeySize(string algorithm)
        {
            string canonicalKeyGeneratorAlgorithm = GeneratorUtilities.GetCanonicalKeyGeneratorAlgorithm(algorithm);

            if (canonicalKeyGeneratorAlgorithm == null)
            {
                throw new SecurityUtilityException("KeyGenerator " + algorithm + " not recognised.");
            }
            int num = GeneratorUtilities.FindDefaultKeySize(canonicalKeyGeneratorAlgorithm);

            if (num == -1)
            {
                throw new SecurityUtilityException(string.Concat(new string[]
                {
                    "KeyGenerator ",
                    algorithm,
                    " (",
                    canonicalKeyGeneratorAlgorithm,
                    ") not supported."
                }));
            }
            return(num);
        }
Ejemplo n.º 2
0
        public static ICipherParameters GenerateCipherParameters(string algorithm, char[] password, bool wrongPkcs12Zero, Asn1Encodable pbeParameters)
        {
            string text = (string)algorithms.get_Item((object)Platform.ToUpperInvariant(algorithm));

            byte[] array          = null;
            byte[] salt           = null;
            int    iterationCount = 0;

            if (IsPkcs12(text))
            {
                Pkcs12PbeParams instance = Pkcs12PbeParams.GetInstance(pbeParameters);
                salt           = instance.GetIV();
                iterationCount = instance.Iterations.IntValue;
                array          = PbeParametersGenerator.Pkcs12PasswordToBytes(password, wrongPkcs12Zero);
            }
            else if (!IsPkcs5Scheme2(text))
            {
                PbeParameter instance2 = PbeParameter.GetInstance(pbeParameters);
                salt           = instance2.GetSalt();
                iterationCount = instance2.IterationCount.IntValue;
                array          = PbeParametersGenerator.Pkcs5PasswordToBytes(password);
            }
            ICipherParameters parameters = null;

            if (IsPkcs5Scheme2(text))
            {
                PbeS2Parameters     instance3        = PbeS2Parameters.GetInstance(pbeParameters.ToAsn1Object());
                AlgorithmIdentifier encryptionScheme = instance3.EncryptionScheme;
                DerObjectIdentifier algorithm2       = encryptionScheme.Algorithm;
                Asn1Object          obj       = encryptionScheme.Parameters.ToAsn1Object();
                Pbkdf2Params        instance4 = Pbkdf2Params.GetInstance(instance3.KeyDerivationFunc.Parameters.ToAsn1Object());
                byte[] array2;
                if (algorithm2.Equals(PkcsObjectIdentifiers.RC2Cbc))
                {
                    RC2CbcParameter instance5 = RC2CbcParameter.GetInstance(obj);
                    array2 = instance5.GetIV();
                }
                else
                {
                    array2 = Asn1OctetString.GetInstance(obj).GetOctets();
                }
                salt           = instance4.GetSalt();
                iterationCount = instance4.IterationCount.IntValue;
                array          = PbeParametersGenerator.Pkcs5PasswordToBytes(password);
                int keySize = ((instance4.KeyLength != null) ? (instance4.KeyLength.IntValue * 8) : GeneratorUtilities.GetDefaultKeySize(algorithm2));
                PbeParametersGenerator pbeParametersGenerator = MakePbeGenerator((string)algorithmType.get_Item((object)text), null, array, salt, iterationCount);
                parameters = pbeParametersGenerator.GenerateDerivedParameters(algorithm2.Id, keySize);
                if (array2 != null && !Arrays.AreEqual(array2, new byte[array2.Length]))
                {
                    parameters = new ParametersWithIV(parameters, array2);
                }
            }
            else if (Platform.StartsWith(text, "PBEwithSHA-1"))
            {
                PbeParametersGenerator pbeParametersGenerator2 = MakePbeGenerator((string)algorithmType.get_Item((object)text), new Sha1Digest(), array, salt, iterationCount);
                if (text.Equals("PBEwithSHA-1and128bitAES-CBC-BC"))
                {
                    parameters = pbeParametersGenerator2.GenerateDerivedParameters("AES", 128, 128);
                }
                else if (text.Equals("PBEwithSHA-1and192bitAES-CBC-BC"))
                {
                    parameters = pbeParametersGenerator2.GenerateDerivedParameters("AES", 192, 128);
                }
                else if (text.Equals("PBEwithSHA-1and256bitAES-CBC-BC"))
                {
                    parameters = pbeParametersGenerator2.GenerateDerivedParameters("AES", 256, 128);
                }
                else if (text.Equals("PBEwithSHA-1and128bitRC4"))
                {
                    parameters = pbeParametersGenerator2.GenerateDerivedParameters("RC4", 128);
                }
                else if (text.Equals("PBEwithSHA-1and40bitRC4"))
                {
                    parameters = pbeParametersGenerator2.GenerateDerivedParameters("RC4", 40);
                }
                else if (text.Equals("PBEwithSHA-1and3-keyDESEDE-CBC"))
                {
                    parameters = pbeParametersGenerator2.GenerateDerivedParameters("DESEDE", 192, 64);
                }
                else if (text.Equals("PBEwithSHA-1and2-keyDESEDE-CBC"))
                {
                    parameters = pbeParametersGenerator2.GenerateDerivedParameters("DESEDE", 128, 64);
                }
                else if (text.Equals("PBEwithSHA-1and128bitRC2-CBC"))
                {
                    parameters = pbeParametersGenerator2.GenerateDerivedParameters("RC2", 128, 64);
                }
                else if (text.Equals("PBEwithSHA-1and40bitRC2-CBC"))
                {
                    parameters = pbeParametersGenerator2.GenerateDerivedParameters("RC2", 40, 64);
                }
                else if (text.Equals("PBEwithSHA-1andDES-CBC"))
                {
                    parameters = pbeParametersGenerator2.GenerateDerivedParameters("DES", 64, 64);
                }
                else if (text.Equals("PBEwithSHA-1andRC2-CBC"))
                {
                    parameters = pbeParametersGenerator2.GenerateDerivedParameters("RC2", 64, 64);
                }
            }
            else if (Platform.StartsWith(text, "PBEwithSHA-256"))
            {
                PbeParametersGenerator pbeParametersGenerator3 = MakePbeGenerator((string)algorithmType.get_Item((object)text), new Sha256Digest(), array, salt, iterationCount);
                if (text.Equals("PBEwithSHA-256and128bitAES-CBC-BC"))
                {
                    parameters = pbeParametersGenerator3.GenerateDerivedParameters("AES", 128, 128);
                }
                else if (text.Equals("PBEwithSHA-256and192bitAES-CBC-BC"))
                {
                    parameters = pbeParametersGenerator3.GenerateDerivedParameters("AES", 192, 128);
                }
                else if (text.Equals("PBEwithSHA-256and256bitAES-CBC-BC"))
                {
                    parameters = pbeParametersGenerator3.GenerateDerivedParameters("AES", 256, 128);
                }
            }
            else if (Platform.StartsWith(text, "PBEwithMD5"))
            {
                PbeParametersGenerator pbeParametersGenerator4 = MakePbeGenerator((string)algorithmType.get_Item((object)text), new MD5Digest(), array, salt, iterationCount);
                if (text.Equals("PBEwithMD5andDES-CBC"))
                {
                    parameters = pbeParametersGenerator4.GenerateDerivedParameters("DES", 64, 64);
                }
                else if (text.Equals("PBEwithMD5andRC2-CBC"))
                {
                    parameters = pbeParametersGenerator4.GenerateDerivedParameters("RC2", 64, 64);
                }
                else if (text.Equals("PBEwithMD5and128bitAES-CBC-OpenSSL"))
                {
                    parameters = pbeParametersGenerator4.GenerateDerivedParameters("AES", 128, 128);
                }
                else if (text.Equals("PBEwithMD5and192bitAES-CBC-OpenSSL"))
                {
                    parameters = pbeParametersGenerator4.GenerateDerivedParameters("AES", 192, 128);
                }
                else if (text.Equals("PBEwithMD5and256bitAES-CBC-OpenSSL"))
                {
                    parameters = pbeParametersGenerator4.GenerateDerivedParameters("AES", 256, 128);
                }
            }
            else if (Platform.StartsWith(text, "PBEwithMD2"))
            {
                PbeParametersGenerator pbeParametersGenerator5 = MakePbeGenerator((string)algorithmType.get_Item((object)text), new MD2Digest(), array, salt, iterationCount);
                if (text.Equals("PBEwithMD2andDES-CBC"))
                {
                    parameters = pbeParametersGenerator5.GenerateDerivedParameters("DES", 64, 64);
                }
                else if (text.Equals("PBEwithMD2andRC2-CBC"))
                {
                    parameters = pbeParametersGenerator5.GenerateDerivedParameters("RC2", 64, 64);
                }
            }
            else if (Platform.StartsWith(text, "PBEwithHmac"))
            {
                string  algorithm3 = text.Substring("PBEwithHmac".get_Length());
                IDigest digest     = DigestUtilities.GetDigest(algorithm3);
                PbeParametersGenerator pbeParametersGenerator6 = MakePbeGenerator((string)algorithmType.get_Item((object)text), digest, array, salt, iterationCount);
                int keySize2 = digest.GetDigestSize() * 8;
                parameters = pbeParametersGenerator6.GenerateDerivedMacParameters(keySize2);
            }
            global::System.Array.Clear((global::System.Array)array, 0, array.Length);
            return(FixDesParity(text, parameters));
        }
Ejemplo n.º 3
0
        public static ICipherParameters GenerateCipherParameters(
            string algorithm,
            char[]          password,
            bool wrongPkcs12Zero,
            Asn1Encodable pbeParameters)
        {
            string mechanism = (string)algorithms[algorithm.ToUpper(CultureInfo.InvariantCulture)];

            byte[] keyBytes       = null;
            byte[] salt           = null;
            int    iterationCount = 0;

            if (IsPkcs12(mechanism))
            {
                Pkcs12PbeParams pbeParams = Pkcs12PbeParams.GetInstance(pbeParameters);
                salt           = pbeParams.GetIV();
                iterationCount = pbeParams.Iterations.IntValue;
                keyBytes       = PbeParametersGenerator.Pkcs12PasswordToBytes(password, wrongPkcs12Zero);
            }
            else if (IsPkcs5Scheme2(mechanism))
            {
                // See below
            }
            else
            {
                PbeParameter pbeParams = PbeParameter.GetInstance(pbeParameters);
                salt           = pbeParams.GetSalt();
                iterationCount = pbeParams.IterationCount.IntValue;
                keyBytes       = PbeParametersGenerator.Pkcs5PasswordToBytes(password);
            }

            ICipherParameters parameters = null;

            if (IsPkcs5Scheme2(mechanism))
            {
                PbeS2Parameters     s2p       = PbeS2Parameters.GetInstance(pbeParameters.ToAsn1Object());
                AlgorithmIdentifier encScheme = s2p.EncryptionScheme;
                DerObjectIdentifier encOid    = encScheme.ObjectID;
                Asn1Object          encParams = encScheme.Parameters.ToAsn1Object();

                // TODO What about s2p.KeyDerivationFunc.ObjectID?
                Pbkdf2Params pbeParams = Pbkdf2Params.GetInstance(s2p.KeyDerivationFunc.Parameters.ToAsn1Object());

                byte[] iv;
                if (encOid.Equals(PkcsObjectIdentifiers.RC2Cbc))                 // PKCS5.B.2.3
                {
                    RC2CbcParameter rc2Params = RC2CbcParameter.GetInstance(encParams);
                    iv = rc2Params.GetIV();
                }
                else
                {
                    iv = Asn1OctetString.GetInstance(encParams).GetOctets();
                }

                salt           = pbeParams.GetSalt();
                iterationCount = pbeParams.IterationCount.IntValue;
                keyBytes       = PbeParametersGenerator.Pkcs5PasswordToBytes(password);

                int keyLength = pbeParams.KeyLength != null
                                        ?       pbeParams.KeyLength.IntValue * 8
                                        :       GeneratorUtilities.GetDefaultKeySize(encOid);

                PbeParametersGenerator gen = MakePbeGenerator(
                    (string)algorithmType[mechanism], null, keyBytes, salt, iterationCount);

                parameters = gen.GenerateDerivedParameters(encOid.Id, keyLength);

                if (iv != null)
                {
                    // FIXME? OpenSSL weirdness with IV of zeros (for ECB keys?)
                    if (Arrays.AreEqual(iv, new byte[iv.Length]))
                    {
                        //Console.Error.Write("***** IV all 0 (length " + iv.Length + ") *****");
                    }
                    else
                    {
                        parameters = new ParametersWithIV(parameters, iv);
                    }
                }
            }
            else if (mechanism.StartsWith("PBEwithSHA-1"))
            {
                PbeParametersGenerator generator = MakePbeGenerator(
                    (string)algorithmType[mechanism], new Sha1Digest(), keyBytes, salt, iterationCount);

                if (mechanism.Equals("PBEwithSHA-1and128bitRC4"))
                {
                    parameters = generator.GenerateDerivedParameters("RC4", 128);
                }
                else if (mechanism.Equals("PBEwithSHA-1and40bitRC4"))
                {
                    parameters = generator.GenerateDerivedParameters("RC4", 40);
                }
                else if (mechanism.Equals("PBEwithSHA-1and3-keyDESEDE-CBC"))
                {
                    parameters = generator.GenerateDerivedParameters("DESEDE", 192, 64);
                }
                else if (mechanism.Equals("PBEwithSHA-1and2-keyDESEDE-CBC"))
                {
                    parameters = generator.GenerateDerivedParameters("DESEDE", 128, 64);
                }
                else if (mechanism.Equals("PBEwithSHA-1and128bitRC2-CBC"))
                {
                    parameters = generator.GenerateDerivedParameters("RC2", 128, 64);
                }
                else if (mechanism.Equals("PBEwithSHA-1and40bitRC2-CBC"))
                {
                    parameters = generator.GenerateDerivedParameters("RC2", 40, 64);
                }
                else if (mechanism.Equals("PBEwithSHA-1andDES-CBC"))
                {
                    parameters = generator.GenerateDerivedParameters("DES", 64, 64);
                }
                else if (mechanism.Equals("PBEwithSHA-1andRC2-CBC"))
                {
                    parameters = generator.GenerateDerivedParameters("RC2", 64, 64);
                }
                else if (mechanism.Equals("PBEwithSHA-1and128bitAES-CBC-BC"))
                {
                    parameters = generator.GenerateDerivedParameters("AES", 128, 128);
                }
                else if (mechanism.Equals("PBEwithSHA-1and192bitAES-CBC-BC"))
                {
                    parameters = generator.GenerateDerivedParameters("AES", 192, 128);
                }
                else if (mechanism.Equals("PBEwithSHA-1and256bitAES-CBC-BC"))
                {
                    parameters = generator.GenerateDerivedParameters("AES", 256, 128);
                }
            }
            else if (mechanism.StartsWith("PBEwithSHA-256"))
            {
                PbeParametersGenerator generator = MakePbeGenerator(
                    (string)algorithmType[mechanism], new Sha256Digest(), keyBytes, salt, iterationCount);

                if (mechanism.Equals("PBEwithSHA-256and128bitAES-CBC-BC"))
                {
                    parameters = generator.GenerateDerivedParameters("AES", 128, 128);
                }
                else if (mechanism.Equals("PBEwithSHA-256and192bitAES-CBC-BC"))
                {
                    parameters = generator.GenerateDerivedParameters("AES", 192, 128);
                }
                else if (mechanism.Equals("PBEwithSHA-256and256bitAES-CBC-BC"))
                {
                    parameters = generator.GenerateDerivedParameters("AES", 256, 128);
                }
            }
            else if (mechanism.StartsWith("PBEwithMD5"))
            {
                PbeParametersGenerator generator = MakePbeGenerator(
                    (string)algorithmType[mechanism], new MD5Digest(), keyBytes, salt, iterationCount);

                if (mechanism.Equals("PBEwithMD5andDES-CBC"))
                {
                    parameters = generator.GenerateDerivedParameters("DES", 64, 64);
                }
                else if (mechanism.Equals("PBEwithMD5andRC2-CBC"))
                {
                    parameters = generator.GenerateDerivedParameters("RC2", 64, 64);
                }
                else if (mechanism.Equals("PBEwithMD5and128bitAES-CBC-OpenSSL"))
                {
                    parameters = generator.GenerateDerivedParameters("AES", 128, 128);
                }
                else if (mechanism.Equals("PBEwithMD5and192bitAES-CBC-OpenSSL"))
                {
                    parameters = generator.GenerateDerivedParameters("AES", 192, 128);
                }
                else if (mechanism.Equals("PBEwithMD5and256bitAES-CBC-OpenSSL"))
                {
                    parameters = generator.GenerateDerivedParameters("AES", 256, 128);
                }
            }
            else if (mechanism.StartsWith("PBEwithMD2"))
            {
                PbeParametersGenerator generator = MakePbeGenerator(
                    (string)algorithmType[mechanism], new MD2Digest(), keyBytes, salt, iterationCount);
                if (mechanism.Equals("PBEwithMD2andDES-CBC"))
                {
                    parameters = generator.GenerateDerivedParameters("DES", 64, 64);
                }
                else if (mechanism.Equals("PBEwithMD2andRC2-CBC"))
                {
                    parameters = generator.GenerateDerivedParameters("RC2", 64, 64);
                }
            }
            else if (mechanism.StartsWith("PBEwithHmac"))
            {
                string  digestName = mechanism.Substring("PBEwithHmac".Length);
                IDigest digest     = DigestUtilities.GetDigest(digestName);

                PbeParametersGenerator generator = MakePbeGenerator(
                    (string)algorithmType[mechanism], digest, keyBytes, salt, iterationCount);

                int bitLen = digest.GetDigestSize() * 8;
                parameters = generator.GenerateDerivedMacParameters(bitLen);
            }

            Array.Clear(keyBytes, 0, keyBytes.Length);

            return(FixDesParity(mechanism, parameters));
        }
Ejemplo n.º 4
0
 internal static int GetDefaultKeySize(DerObjectIdentifier oid)
 {
     return(GeneratorUtilities.GetDefaultKeySize(oid.Id));
 }
Ejemplo n.º 5
0
 public static IAsymmetricCipherKeyPairGenerator GetKeyPairGenerator(DerObjectIdentifier oid)
 {
     return(GeneratorUtilities.GetKeyPairGenerator(oid.Id));
 }
Ejemplo n.º 6
0
 static GeneratorUtilities()
 {
     GeneratorUtilities.kgAlgorithms    = Platform.CreateHashtable();
     GeneratorUtilities.kpgAlgorithms   = Platform.CreateHashtable();
     GeneratorUtilities.defaultKeySizes = Platform.CreateHashtable();
     GeneratorUtilities.AddKgAlgorithm("AES", new object[]
     {
         "AESWRAP"
     });
     GeneratorUtilities.AddKgAlgorithm("AES128", new object[]
     {
         "2.16.840.1.101.3.4.2",
         NistObjectIdentifiers.IdAes128Cbc,
         NistObjectIdentifiers.IdAes128Cfb,
         NistObjectIdentifiers.IdAes128Ecb,
         NistObjectIdentifiers.IdAes128Ofb,
         NistObjectIdentifiers.IdAes128Wrap
     });
     GeneratorUtilities.AddKgAlgorithm("AES192", new object[]
     {
         "2.16.840.1.101.3.4.22",
         NistObjectIdentifiers.IdAes192Cbc,
         NistObjectIdentifiers.IdAes192Cfb,
         NistObjectIdentifiers.IdAes192Ecb,
         NistObjectIdentifiers.IdAes192Ofb,
         NistObjectIdentifiers.IdAes192Wrap
     });
     GeneratorUtilities.AddKgAlgorithm("AES256", new object[]
     {
         "2.16.840.1.101.3.4.42",
         NistObjectIdentifiers.IdAes256Cbc,
         NistObjectIdentifiers.IdAes256Cfb,
         NistObjectIdentifiers.IdAes256Ecb,
         NistObjectIdentifiers.IdAes256Ofb,
         NistObjectIdentifiers.IdAes256Wrap
     });
     GeneratorUtilities.AddKgAlgorithm("BLOWFISH", new object[]
     {
         "1.3.6.1.4.1.3029.1.2"
     });
     GeneratorUtilities.AddKgAlgorithm("CAMELLIA", new object[]
     {
         "CAMELLIAWRAP"
     });
     GeneratorUtilities.AddKgAlgorithm("CAMELLIA128", new object[]
     {
         NttObjectIdentifiers.IdCamellia128Cbc,
         NttObjectIdentifiers.IdCamellia128Wrap
     });
     GeneratorUtilities.AddKgAlgorithm("CAMELLIA192", new object[]
     {
         NttObjectIdentifiers.IdCamellia192Cbc,
         NttObjectIdentifiers.IdCamellia192Wrap
     });
     GeneratorUtilities.AddKgAlgorithm("CAMELLIA256", new object[]
     {
         NttObjectIdentifiers.IdCamellia256Cbc,
         NttObjectIdentifiers.IdCamellia256Wrap
     });
     GeneratorUtilities.AddKgAlgorithm("CAST5", new object[]
     {
         "1.2.840.113533.7.66.10"
     });
     GeneratorUtilities.AddKgAlgorithm("CAST6", new object[0]);
     GeneratorUtilities.AddKgAlgorithm("DES", new object[]
     {
         OiwObjectIdentifiers.DesCbc,
         OiwObjectIdentifiers.DesCfb,
         OiwObjectIdentifiers.DesEcb,
         OiwObjectIdentifiers.DesOfb
     });
     GeneratorUtilities.AddKgAlgorithm("DESEDE", new object[]
     {
         "DESEDEWRAP",
         "TDEA",
         OiwObjectIdentifiers.DesEde
     });
     GeneratorUtilities.AddKgAlgorithm("DESEDE3", new object[]
     {
         PkcsObjectIdentifiers.DesEde3Cbc,
         PkcsObjectIdentifiers.IdAlgCms3DesWrap
     });
     GeneratorUtilities.AddKgAlgorithm("GOST28147", new object[]
     {
         "GOST",
         "GOST-28147",
         CryptoProObjectIdentifiers.GostR28147Cbc
     });
     GeneratorUtilities.AddKgAlgorithm("HC128", new object[0]);
     GeneratorUtilities.AddKgAlgorithm("HC256", new object[0]);
     GeneratorUtilities.AddKgAlgorithm("IDEA", new object[]
     {
         "1.3.6.1.4.1.188.7.1.1.2"
     });
     GeneratorUtilities.AddKgAlgorithm("NOEKEON", new object[0]);
     GeneratorUtilities.AddKgAlgorithm("RC2", new object[]
     {
         PkcsObjectIdentifiers.RC2Cbc,
         PkcsObjectIdentifiers.IdAlgCmsRC2Wrap
     });
     GeneratorUtilities.AddKgAlgorithm("RC4", new object[]
     {
         "ARC4",
         "1.2.840.113549.3.4"
     });
     GeneratorUtilities.AddKgAlgorithm("RC5", new object[]
     {
         "RC5-32"
     });
     GeneratorUtilities.AddKgAlgorithm("RC5-64", new object[0]);
     GeneratorUtilities.AddKgAlgorithm("RC6", new object[0]);
     GeneratorUtilities.AddKgAlgorithm("RIJNDAEL", new object[0]);
     GeneratorUtilities.AddKgAlgorithm("SALSA20", new object[0]);
     GeneratorUtilities.AddKgAlgorithm("SEED", new object[]
     {
         KisaObjectIdentifiers.IdNpkiAppCmsSeedWrap,
         KisaObjectIdentifiers.IdSeedCbc
     });
     GeneratorUtilities.AddKgAlgorithm("SERPENT", new object[0]);
     GeneratorUtilities.AddKgAlgorithm("SKIPJACK", new object[0]);
     GeneratorUtilities.AddKgAlgorithm("TEA", new object[0]);
     GeneratorUtilities.AddKgAlgorithm("TWOFISH", new object[0]);
     GeneratorUtilities.AddKgAlgorithm("VMPC", new object[0]);
     GeneratorUtilities.AddKgAlgorithm("VMPC-KSA3", new object[0]);
     GeneratorUtilities.AddKgAlgorithm("XTEA", new object[0]);
     GeneratorUtilities.AddHMacKeyGenerator("MD2", new object[0]);
     GeneratorUtilities.AddHMacKeyGenerator("MD4", new object[0]);
     GeneratorUtilities.AddHMacKeyGenerator("MD5", new object[]
     {
         IanaObjectIdentifiers.HmacMD5
     });
     GeneratorUtilities.AddHMacKeyGenerator("SHA1", new object[]
     {
         PkcsObjectIdentifiers.IdHmacWithSha1,
         IanaObjectIdentifiers.HmacSha1
     });
     GeneratorUtilities.AddHMacKeyGenerator("SHA224", new object[]
     {
         PkcsObjectIdentifiers.IdHmacWithSha224
     });
     GeneratorUtilities.AddHMacKeyGenerator("SHA256", new object[]
     {
         PkcsObjectIdentifiers.IdHmacWithSha256
     });
     GeneratorUtilities.AddHMacKeyGenerator("SHA384", new object[]
     {
         PkcsObjectIdentifiers.IdHmacWithSha384
     });
     GeneratorUtilities.AddHMacKeyGenerator("SHA512", new object[]
     {
         PkcsObjectIdentifiers.IdHmacWithSha512
     });
     GeneratorUtilities.AddHMacKeyGenerator("SHA512/224", new object[0]);
     GeneratorUtilities.AddHMacKeyGenerator("SHA512/256", new object[0]);
     GeneratorUtilities.AddHMacKeyGenerator("SHA3-224", new object[0]);
     GeneratorUtilities.AddHMacKeyGenerator("SHA3-256", new object[0]);
     GeneratorUtilities.AddHMacKeyGenerator("SHA3-384", new object[0]);
     GeneratorUtilities.AddHMacKeyGenerator("SHA3-512", new object[0]);
     GeneratorUtilities.AddHMacKeyGenerator("RIPEMD128", new object[0]);
     GeneratorUtilities.AddHMacKeyGenerator("RIPEMD160", new object[]
     {
         IanaObjectIdentifiers.HmacRipeMD160
     });
     GeneratorUtilities.AddHMacKeyGenerator("TIGER", new object[]
     {
         IanaObjectIdentifiers.HmacTiger
     });
     GeneratorUtilities.AddKpgAlgorithm("DH", new object[]
     {
         "DIFFIEHELLMAN"
     });
     GeneratorUtilities.AddKpgAlgorithm("DSA", new object[0]);
     GeneratorUtilities.AddKpgAlgorithm("EC", new object[]
     {
         X9ObjectIdentifiers.DHSinglePassStdDHSha1KdfScheme
     });
     GeneratorUtilities.AddKpgAlgorithm("ECDH", new object[]
     {
         "ECIES"
     });
     GeneratorUtilities.AddKpgAlgorithm("ECDHC", new object[0]);
     GeneratorUtilities.AddKpgAlgorithm("ECMQV", new object[]
     {
         X9ObjectIdentifiers.MqvSinglePassSha1KdfScheme
     });
     GeneratorUtilities.AddKpgAlgorithm("ECDSA", new object[0]);
     GeneratorUtilities.AddKpgAlgorithm("ECGOST3410", new object[]
     {
         "ECGOST-3410",
         "GOST-3410-2001"
     });
     GeneratorUtilities.AddKpgAlgorithm("ELGAMAL", new object[0]);
     GeneratorUtilities.AddKpgAlgorithm("GOST3410", new object[]
     {
         "GOST-3410",
         "GOST-3410-94"
     });
     GeneratorUtilities.AddKpgAlgorithm("RSA", new object[]
     {
         "1.2.840.113549.1.1.1"
     });
     GeneratorUtilities.AddDefaultKeySizeEntries(64, new string[]
     {
         "DES"
     });
     GeneratorUtilities.AddDefaultKeySizeEntries(80, new string[]
     {
         "SKIPJACK"
     });
     GeneratorUtilities.AddDefaultKeySizeEntries(128, new string[]
     {
         "AES128",
         "BLOWFISH",
         "CAMELLIA128",
         "CAST5",
         "DESEDE",
         "HC128",
         "HMACMD2",
         "HMACMD4",
         "HMACMD5",
         "HMACRIPEMD128",
         "IDEA",
         "NOEKEON",
         "RC2",
         "RC4",
         "RC5",
         "SALSA20",
         "SEED",
         "TEA",
         "XTEA",
         "VMPC",
         "VMPC-KSA3"
     });
     GeneratorUtilities.AddDefaultKeySizeEntries(160, new string[]
     {
         "HMACRIPEMD160",
         "HMACSHA1"
     });
     GeneratorUtilities.AddDefaultKeySizeEntries(192, new string[]
     {
         "AES",
         "AES192",
         "CAMELLIA192",
         "DESEDE3",
         "HMACTIGER",
         "RIJNDAEL",
         "SERPENT"
     });
     GeneratorUtilities.AddDefaultKeySizeEntries(224, new string[]
     {
         "HMACSHA224"
     });
     GeneratorUtilities.AddDefaultKeySizeEntries(256, new string[]
     {
         "AES256",
         "CAMELLIA",
         "CAMELLIA256",
         "CAST6",
         "GOST28147",
         "HC256",
         "HMACSHA256",
         "RC5-64",
         "RC6",
         "TWOFISH"
     });
     GeneratorUtilities.AddDefaultKeySizeEntries(384, new string[]
     {
         "HMACSHA384"
     });
     GeneratorUtilities.AddDefaultKeySizeEntries(512, new string[]
     {
         "HMACSHA512"
     });
     GeneratorUtilities.AddDefaultKeySizeEntries(224, new string[]
     {
         "HMACSHA512/224"
     });
     GeneratorUtilities.AddDefaultKeySizeEntries(256, new string[]
     {
         "HMACSHA512/256"
     });
 }