/////////////////////////////////////////////////////////////////////// #region Private Trusted Certificate Support Methods private static bool IsTrustedCertificate( X509Certificate certificate ) { bool result = false; string name = null; // // NOTE: Make sure the certificate public key matches what // we expect it to be for our own software updates. // if (certificate != null) { // // NOTE: Grab the public key of the certificate. // byte[] certificatePublicKey = certificate.GetPublicKey(); if ((certificatePublicKey != null) && (certificatePublicKey.Length > 0)) { lock (syncRoot) /* TRANSACTIONAL */ { // // NOTE: Compare the public key of the certificate to // one(s) that we trust for our software updates. // if (!result && (PublicKey1 != null) && (PublicKey1.Length > 0) && ArrayOps.Equals(certificatePublicKey, PublicKey1)) { name = "PublicKey1"; result = true; } if (!result && (PublicKey2 != null) && (PublicKey2.Length > 0) && ArrayOps.Equals(certificatePublicKey, PublicKey2)) { name = "PublicKey2"; result = true; } if (!result && (PublicKey3 != null) && (PublicKey3.Length > 0) && ArrayOps.Equals(certificatePublicKey, PublicKey3)) { name = "PublicKey3"; result = true; } if (!result && (PublicKey4 != null) && (PublicKey4.Length > 0) && ArrayOps.Equals(certificatePublicKey, PublicKey4)) { name = "PublicKey4"; result = true; } // // NOTE: Compare the public key of the certificate to // the auxiliary one that we trust for use by // third-party applications and plugins. // if (!result && (PublicKey5 != null) && (PublicKey5.Length > 0) && ArrayOps.Equals(certificatePublicKey, PublicKey5)) { name = "PublicKey5"; result = true; } } } } // // NOTE: Report this trust result to any trace listeners. // TraceOps.DebugTrace(String.Format( "IsTrustedCertificate: certificate = {0}, name = {1}, " + "result = {2}", FormatOps.Certificate(certificate, false, true), FormatOps.WrapOrNull(name), result), typeof(UpdateOps).Name, TracePriority.SecurityDebug); return(result); }