public void AddCertificate() { FileInfo[] files = this.getAllCerts(); foreach (var file in files) { System.Security.Cryptography.X509Certificates.X509Certificate2 cert = new System.Security.Cryptography.X509Certificates.X509Certificate2(file.FullName); byte[] hashBytes = cert.GetRawCertData(); X509CertificateStore certstore = new X509CertificateStore(); certstore.Import(hashBytes); IEnumerable <X509Certificate> ix509Cert = certstore.Certificates; foreach (var item in ix509Cert) { X509Certificate cert2 = item; X509CertificateRecord certrecord = _database.Find(cert2, X509CertificateRecordFields.Certificate); if (certrecord == null) { certrecord = new X509CertificateRecord(cert2); _database.Add(certrecord); } } } }
/// <summary> /// Check whether or not a particular mailbox address can be used for signing. /// </summary> /// <remarks> /// Checks whether or not as particular mailbocx address can be used for signing. /// </remarks> /// <returns><c>true</c> if the mailbox address can be used for signing; otherwise, <c>false</c>.</returns> /// <param name="signer">The signer.</param> /// <exception cref="System.ArgumentNullException"> /// <paramref name="signer"/> is <c>null</c>. /// </exception> public override bool CanSign(MailboxAddress signer) { if (signer == null) { throw new ArgumentNullException(nameof(signer)); } foreach (var record in dbase.Find(signer, DateTime.UtcNow, true, CmsSignerFields)) { if (record.KeyUsage != X509KeyUsageFlags.None && (record.KeyUsage & SecureMimeContext.DigitalSignatureKeyUsageFlags) == 0) { continue; } return(true); } return(false); }
/// <summary> /// Gets the trusted anchors. /// </summary> /// <remarks> /// A trusted anchor is a trusted root-level X.509 certificate, /// generally issued by a Certificate Authority (CA). /// </remarks> /// <returns>The trusted anchors.</returns> protected override Org.BouncyCastle.Utilities.Collections.HashSet GetTrustedAnchors() { var anchors = new Org.BouncyCastle.Utilities.Collections.HashSet(); var selector = new X509CertStoreSelector(); var keyUsage = new bool[9]; keyUsage[(int)X509KeyUsageBits.KeyCertSign] = true; selector.KeyUsage = keyUsage; foreach (var record in dbase.Find(selector, true, X509CertificateRecordFields.Certificate)) { anchors.Add(new TrustAnchor(record.Certificate, null)); } return(anchors); }