public static SymmCipher Create()

in TPM Parser/Tpm2Lib/CryptoSymm.cs [59:114]


        public static SymmCipher Create(SymDefObject symDef = null, byte[] keyData = null, byte[] iv = null)
        {
            if (symDef == null)
            {
                symDef = new SymDefObject(TpmAlgId.Aes, 128, TpmAlgId.Cfb);
            }

            string algName = "";
            switch (symDef.Algorithm)
            {
                case TpmAlgId.Aes:
                    switch (symDef.Mode)
                    {
                        case TpmAlgId.Cbc:
                            algName = SymmetricAlgorithmNames.AesCbc;
                            break;
                        case TpmAlgId.Ecb:
                            algName = SymmetricAlgorithmNames.AesEcb;
                            break;
                        case TpmAlgId.Cfb:
                            algName = SymmetricAlgorithmNames.AesCbcPkcs7;
                            break;
                        default:
                            Globs.Throw<ArgumentException>("Unsupported mode (" + symDef.Mode + ") for algorithm " + symDef.Algorithm);
                            break;
                    }
                    break;
                case TpmAlgId.Tdes:
                    switch (symDef.Mode)
                    {
                        case TpmAlgId.Cbc:
                            algName = SymmetricAlgorithmNames.TripleDesCbc;
                            break;
                        case TpmAlgId.Ecb:
                            algName = SymmetricAlgorithmNames.TripleDesEcb;
                            break;
                        default:
                            Globs.Throw<ArgumentException>("Unsupported mode (" + symDef.Mode + ") for algorithm " + symDef.Algorithm);
                            break;
                    }
                    break;
                default:
                    Globs.Throw<ArgumentException>("Unsupported symmetric algorithm " + symDef.Algorithm);
                    break;
            }

            if (keyData == null)
            {
                keyData = Globs.GetRandomBytes(symDef.KeyBits / 8);
            }

            SymmetricKeyAlgorithmProvider algProvider = SymmetricKeyAlgorithmProvider.OpenAlgorithm(algName);
            var key = algProvider.CreateSymmetricKey(CryptographicBuffer.CreateFromByteArray(keyData));

            return key == null ? null : new SymmCipher(key, keyData, iv);
        }