Exemplo n.º 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);
        }
Exemplo n.º 2
0
        public static GostProviderParams ParamsForSignAlgoOid(string oid)
        {
            if (string.IsNullOrEmpty(oid))
            {
                throw new ArgumentException();
            }
            var providerInfo = Providers.FirstOrDefault(x => x.SignGroups.Any(y => y.Oid == oid));

            if (providerInfo == null)
            {
                return(null);
            }
            var signGroup = providerInfo.SignGroups.First(x => x.Oid == oid);
            var result    = new ConfigurableProviderParams()
            {
                Info     = providerInfo,
                SignAlgo = signGroup.SignAlgo,
                HashAlgo = signGroup.HashAlgo
            };

            return(result);
        }