Beispiel #1
0
        public static GostProviderParams ParamsForOids(params string[] oids)
        {
            if (oids == null || oids.Length == 0)
            {
                throw new ArgumentException();
            }
            var providerInfo = Providers.FirstOrDefault(x => x.IsCompatible(oids));

            if (providerInfo == null)
            {
                return(null);
            }
            ProviderAlgo signAlgo = null, hashAlgo = null;

            foreach (var oid in oids)
            {
                var algo = providerInfo.FirstOrDefault(x => x.Oid == oid);
                if (algo != null)
                {
                    if (algo.Class == CryptoApiEx.AlgClass.Hash)
                    {
                        hashAlgo = algo;
                    }
                    if (algo.Class == CryptoApiEx.AlgClass.Signature)
                    {
                        signAlgo = algo;
                    }
                }
                else
                {
                    var sign = providerInfo.SignGroups.First(x => x.Oid == oid);
                    signAlgo = signAlgo ?? sign.SignAlgo;
                    hashAlgo = hashAlgo ?? sign.HashAlgo;
                }
                if (hashAlgo != null && signAlgo != null)
                {
                    break;
                }
            }
            //
            if (hashAlgo == null && signAlgo == null)
            {
                return(null);
            }
            //
            var result = new ConfigurableProviderParams()
            {
                Info     = providerInfo,
                SignAlgo = signAlgo,
                HashAlgo = hashAlgo
            };

            return(result);
        }
Beispiel #2
0
 protected override void DoDispose()
 {
     Info     = null;
     SignAlgo = null;
     HashAlgo = null;
 }