public void AddIssuerSerial(string issuerName, string serialNumber) { if (string.IsNullOrEmpty(issuerName)) { throw new ArgumentException(SR.Arg_EmptyOrNullString, "issuerName"); } if (string.IsNullOrEmpty(serialNumber)) { throw new ArgumentException(SR.Arg_EmptyOrNullString, "serialNumber"); } BigInteger h; try { h = new BigInteger(serialNumber); } catch (Exception) { throw new ArgumentException(SR.Cryptography_Xml_InvalidX509IssuerSerialNumber, "serialNumber"); } if (_issuerSerials == null) { _issuerSerials = new ArrayList(); } _issuerSerials.Add(Utils.CreateX509IssuerSerial(issuerName, h.ToString())); }
// When we load an X509Data from Xml, we know the serial number is in decimal representation. internal void InternalAddIssuerSerial(string issuerName, string serialNumber) { if (_issuerSerials == null) { _issuerSerials = new ArrayList(); } _issuerSerials.Add(Utils.CreateX509IssuerSerial(issuerName, serialNumber)); }
internal static IList <X509Certificate> BuildBagOfCerts(KeyInfoX509Data keyInfoX509Data, CertUsageType certUsageType) { var collection = new List <X509Certificate>(); ArrayList decryptionIssuerSerials = (certUsageType == CertUsageType.Decryption ? new ArrayList() : null); if (keyInfoX509Data.Certificates != null) { foreach (X509Certificate certificate in keyInfoX509Data.Certificates) { switch (certUsageType) { case CertUsageType.Verification: collection.Add(certificate); break; case CertUsageType.Decryption: decryptionIssuerSerials.Add(Utils.CreateX509IssuerSerial(certificate.IssuerDN.ToString(), certificate.SerialNumber.ToString())); break; } } } if (keyInfoX509Data.SubjectNames == null && keyInfoX509Data.IssuerSerials == null && keyInfoX509Data.SubjectKeyIds == null && decryptionIssuerSerials == null) { return(collection); } // Open LocalMachine and CurrentUser "Other People"/"My" stores. /* * X509Store[] stores = new X509Store[2]; * string storeName = (certUsageType == CertUsageType.Verification ? "AddressBook" : "My"); * stores[0] = new X509Store(storeName, StoreLocation.CurrentUser); * stores[1] = new X509Store(storeName, StoreLocation.LocalMachine); * * for (int index = 0; index < stores.Length; index++) * { * if (stores[index] != null) * { * X509Certificate2Collection filters = null; * // We don't care if we can't open the store. * try * { * stores[index].Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly); * filters = stores[index].Certificates; * stores[index].Close(); * if (keyInfoX509Data.SubjectNames != null) * { * foreach (string subjectName in keyInfoX509Data.SubjectNames) * { * filters = filters.Find(X509FindType.FindBySubjectDistinguishedName, subjectName, false); * } * } * if (keyInfoX509Data.IssuerSerials != null) * { * foreach (X509IssuerSerial issuerSerial in keyInfoX509Data.IssuerSerials) * { * filters = filters.Find(X509FindType.FindByIssuerDistinguishedName, issuerSerial.IssuerName, false); * filters = filters.Find(X509FindType.FindBySerialNumber, issuerSerial.SerialNumber, false); * } * } * if (keyInfoX509Data.SubjectKeyIds != null) * { * foreach (byte[] ski in keyInfoX509Data.SubjectKeyIds) * { * string hex = EncodeHexString(ski); * filters = filters.Find(X509FindType.FindBySubjectKeyIdentifier, hex, false); * } * } * if (decryptionIssuerSerials != null) * { * foreach (X509IssuerSerial issuerSerial in decryptionIssuerSerials) * { * filters = filters.Find(X509FindType.FindByIssuerDistinguishedName, issuerSerial.IssuerName, false); * filters = filters.Find(X509FindType.FindBySerialNumber, issuerSerial.SerialNumber, false); * } * } * } * // Store doesn't exist, no read permissions, other system error * catch (System.Security.Cryptography.CryptographicException) { } * // Opening LocalMachine stores (other than Root or CertificateAuthority) on Linux * catch (PlatformNotSupportedException) { } * * if (filters != null) * collection.AddRange(filters); * } * } */ return(collection); }