private X509Certificate2 FindBestCertificate(byte[][] certBlobs, IEnumerable <string> emails, bool iscontact) { if (certBlobs == null) { return(null); } X509CertificateCollection x509CertificateCollection = new X509CertificateCollection(); foreach (byte[] rawData in certBlobs) { if (iscontact) { x509CertificateCollection.ImportFromContact(rawData); } else { x509CertificateCollection.Import(rawData); } } X509Store x509Store = null; if (this.smimeConfiguration != null) { string text = this.smimeConfiguration.SMIMECertificateIssuingCAFull(); if (!string.IsNullOrWhiteSpace(text)) { x509Store = CertificateStore.Open(StoreType.Memory, null, OpenFlags.ReadWrite); X509Certificate2Collection x509Certificate2Collection = new X509Certificate2Collection(); x509Certificate2Collection.Import(Convert.FromBase64String(text)); x509Store.AddRange(x509Certificate2Collection); } } return(x509CertificateCollection.FindSMimeCertificate(emails, X509KeyUsageFlags.KeyEncipherment, false, x509Store, this.organizationId.ToString())); }
private X509Certificate2 FindBestCert(IEnumerable <string> emails, bool isContact, params byte[][][] paramsCertsRawData) { X509Certificate2 result; try { X509CertificateCollection x509CertificateCollection = new X509CertificateCollection(); foreach (byte[][] array in paramsCertsRawData) { if (array != null) { foreach (byte[] array3 in array) { try { if (isContact) { x509CertificateCollection.ImportFromContact(array3); } else { x509CertificateCollection.Import(array3); } } catch (Exception ex) { this.LogException(ex, "Error occurred when parsing cert raw data {0}", new object[] { Convert.ToBase64String(array3) }); } } } } X509Store x509Store = null; if (!string.IsNullOrEmpty(this.smimeAdminOptions.SMIMECertificateIssuingCAFull)) { x509Store = CertificateStore.Open(StoreType.Memory, null, OpenFlags.ReadWrite); X509Certificate2Collection x509Certificate2Collection = new X509Certificate2Collection(); x509Certificate2Collection.Import(Convert.FromBase64String(this.smimeAdminOptions.SMIMECertificateIssuingCAFull)); x509Store.AddRange(x509Certificate2Collection); } result = x509CertificateCollection.FindSMimeCertificate(emails, X509KeyUsageFlags.DataEncipherment | X509KeyUsageFlags.KeyEncipherment, false, TimeSpan.FromMilliseconds(this.smimeAdminOptions.CRLConnectionTimeout), TimeSpan.FromMilliseconds(this.smimeAdminOptions.CRLRetrievalTimeout), x509Store, base.CallContext.AccessingPrincipal.MailboxInfo.OrganizationId.ToString()); } catch (Exception ex2) { StringBuilder stringBuilder = new StringBuilder(); foreach (byte[][] array4 in paramsCertsRawData) { if (array4 != null) { foreach (byte[] array6 in array4) { if (array6 != null) { stringBuilder.AppendLine(Convert.ToBase64String(array6)); } } } } this.LogException(ex2, "Error occurred when finding best cert from: {0}", new object[] { stringBuilder }); result = null; } return(result); }