Пример #1
0
        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()));
        }
Пример #2
0
 // 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));
 }
Пример #3
0
        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);
        }