public override bool Equals(object obj) { X509AlternateName other = obj as X509AlternateName; if (other == null || other.GetType() != typeof(X509AlternateName)) { return(false); } return(AlternateNameType == other.AlternateNameType); }
public static IList <X509AlternateName> GetAlternateNames(this X509Certificate certificate, Oid2 alternateNameExtensionOid) { if (alternateNameExtensionOid == null) { throw new ArgumentNullException("alternateNameExtensionOid"); } List <X509AlternateName> alternateNames = new List <X509AlternateName>(); using (SafeCertContextHandle certContext = certificate.GetCertificateContext()) { // Make sure we have the extension requested if (X509Native.HasExtension(certContext, alternateNameExtensionOid.Value)) { // If so, get it from the certificate, and decode it into a buffer X509Native.CERT_EXTENSION alternateNameExtension = X509Native.FindExtension(certContext, alternateNameExtensionOid.Value); using (SafeLocalAllocHandle decodedBuffer = X509Native.DecodeExtension(alternateNameExtension)) { // This buffer contains CERT_ALT_NAME_INFO which points us at the alternate names we // were looking for X509Native.CERT_ALT_NAME_INFO altNameInfo = decodedBuffer.Read <X509Native.CERT_ALT_NAME_INFO>(0); for (int i = 0; i < altNameInfo.cAltEntry; ++i) { unsafe { X509Native.CERT_ALT_NAME_ENTRY *pAltNameEntry = (X509Native.CERT_ALT_NAME_ENTRY *)altNameInfo.rgAltEntry; alternateNames.Add(X509AlternateName.FromAltNameEntry(pAltNameEntry[i])); } } } } } return(alternateNames); }