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); }
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); }