Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / IdentityModel / System / IdentityModel / Tokens / X509IssuerSerialKeyIdentifierClause.cs / 1305376 / X509IssuerSerialKeyIdentifierClause.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.IdentityModel.Tokens { using System.Diagnostics; using System.Globalization; using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates; public class X509IssuerSerialKeyIdentifierClause : SecurityKeyIdentifierClause { readonly string issuerName; readonly string issuerSerialNumber; public X509IssuerSerialKeyIdentifierClause(string issuerName, string issuerSerialNumber) : base(null) { if (String.IsNullOrEmpty(issuerName)) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("issuerName"); if (String.IsNullOrEmpty(issuerSerialNumber)) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("issuerSerialNumber"); this.issuerName = issuerName; this.issuerSerialNumber = issuerSerialNumber; } public X509IssuerSerialKeyIdentifierClause(X509Certificate2 certificate) : base(null) { if (certificate == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("certificate"); this.issuerName = certificate.Issuer; this.issuerSerialNumber = Asn1IntegerConverter.Asn1IntegerToDecimalString(certificate.GetSerialNumber()); } public string IssuerName { get { return this.issuerName; } } public string IssuerSerialNumber { get { return this.issuerSerialNumber; } } public override bool Matches(SecurityKeyIdentifierClause keyIdentifierClause) { X509IssuerSerialKeyIdentifierClause that = keyIdentifierClause as X509IssuerSerialKeyIdentifierClause; // PreSharp Bug: Parameter 'that' to this public method must be validated: A null-dereference can occur here. #pragma warning suppress 56506 return ReferenceEquals(this, that) || (that != null && that.Matches(this.issuerName, this.issuerSerialNumber)); } public bool Matches(X509Certificate2 certificate) { if (certificate == null) return false; return Matches(certificate.Issuer, Asn1IntegerConverter.Asn1IntegerToDecimalString(certificate.GetSerialNumber())); } public bool Matches(string issuerName, string issuerSerialNumber) { if (issuerName == null) { return false; } // If serial numbers dont match, we can avoid the potentially expensive issuer name comparison if (this.issuerSerialNumber != issuerSerialNumber) { return false; } // Serial numbers match. Do a string comparison of issuer names if (this.issuerName == issuerName) { return true; } // String equality comparison for issuer names failed // Do a byte-level comparison of the X500 distinguished names corresponding to the issuer names. // X500DistinguishedName constructor can throw for malformed inputs bool x500IssuerNameMatch = false; try { if (CryptoHelper.IsEqual(new X500DistinguishedName(this.issuerName).RawData, new X500DistinguishedName(issuerName).RawData)) { x500IssuerNameMatch = true; } } catch (CryptographicException e) { // Absorb and log exception. Fallthrough and return false from method. if (DiagnosticUtility.ShouldTraceWarning) { DiagnosticUtility.ExceptionUtility.TraceHandledException(e, TraceEventType.Warning); } } return x500IssuerNameMatch; } public override string ToString() { return string.Format(CultureInfo.InvariantCulture, "X509IssuerSerialKeyIdentifierClause(Issuer = '{0}', Serial = '{1}')", this.IssuerName, this.IssuerSerialNumber); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.IdentityModel.Tokens { using System.Diagnostics; using System.Globalization; using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates; public class X509IssuerSerialKeyIdentifierClause : SecurityKeyIdentifierClause { readonly string issuerName; readonly string issuerSerialNumber; public X509IssuerSerialKeyIdentifierClause(string issuerName, string issuerSerialNumber) : base(null) { if (String.IsNullOrEmpty(issuerName)) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("issuerName"); if (String.IsNullOrEmpty(issuerSerialNumber)) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("issuerSerialNumber"); this.issuerName = issuerName; this.issuerSerialNumber = issuerSerialNumber; } public X509IssuerSerialKeyIdentifierClause(X509Certificate2 certificate) : base(null) { if (certificate == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("certificate"); this.issuerName = certificate.Issuer; this.issuerSerialNumber = Asn1IntegerConverter.Asn1IntegerToDecimalString(certificate.GetSerialNumber()); } public string IssuerName { get { return this.issuerName; } } public string IssuerSerialNumber { get { return this.issuerSerialNumber; } } public override bool Matches(SecurityKeyIdentifierClause keyIdentifierClause) { X509IssuerSerialKeyIdentifierClause that = keyIdentifierClause as X509IssuerSerialKeyIdentifierClause; // PreSharp Bug: Parameter 'that' to this public method must be validated: A null-dereference can occur here. #pragma warning suppress 56506 return ReferenceEquals(this, that) || (that != null && that.Matches(this.issuerName, this.issuerSerialNumber)); } public bool Matches(X509Certificate2 certificate) { if (certificate == null) return false; return Matches(certificate.Issuer, Asn1IntegerConverter.Asn1IntegerToDecimalString(certificate.GetSerialNumber())); } public bool Matches(string issuerName, string issuerSerialNumber) { if (issuerName == null) { return false; } // If serial numbers dont match, we can avoid the potentially expensive issuer name comparison if (this.issuerSerialNumber != issuerSerialNumber) { return false; } // Serial numbers match. Do a string comparison of issuer names if (this.issuerName == issuerName) { return true; } // String equality comparison for issuer names failed // Do a byte-level comparison of the X500 distinguished names corresponding to the issuer names. // X500DistinguishedName constructor can throw for malformed inputs bool x500IssuerNameMatch = false; try { if (CryptoHelper.IsEqual(new X500DistinguishedName(this.issuerName).RawData, new X500DistinguishedName(issuerName).RawData)) { x500IssuerNameMatch = true; } } catch (CryptographicException e) { // Absorb and log exception. Fallthrough and return false from method. if (DiagnosticUtility.ShouldTraceWarning) { DiagnosticUtility.ExceptionUtility.TraceHandledException(e, TraceEventType.Warning); } } return x500IssuerNameMatch; } public override string ToString() { return string.Format(CultureInfo.InvariantCulture, "X509IssuerSerialKeyIdentifierClause(Issuer = '{0}', Serial = '{1}')", this.IssuerName, this.IssuerSerialNumber); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Graphics.cs
- WorkflowMarkupSerializationProvider.cs
- CannotUnloadAppDomainException.cs
- QilCloneVisitor.cs
- StructuredTypeInfo.cs
- UInt16Storage.cs
- TraceRecord.cs
- ToolStripMenuItem.cs
- InvalidMessageContractException.cs
- XmlILConstructAnalyzer.cs
- WinFormsUtils.cs
- DefaultValueAttribute.cs
- SqlLiftWhereClauses.cs
- WSSecureConversationFeb2005.cs
- FontCacheLogic.cs
- ListenerUnsafeNativeMethods.cs
- formatter.cs
- storepermission.cs
- HierarchicalDataSourceIDConverter.cs
- CharUnicodeInfo.cs
- coordinatorfactory.cs
- XhtmlMobileTextWriter.cs
- PagesSection.cs
- RectAnimationClockResource.cs
- EncoderReplacementFallback.cs
- BitmapEffect.cs
- ByteAnimationUsingKeyFrames.cs
- UseLicense.cs
- BoolExpressionVisitors.cs
- RijndaelCryptoServiceProvider.cs
- SqlClientWrapperSmiStreamChars.cs
- WindowsPrincipal.cs
- ThrowOnMultipleAssignment.cs
- WebPartChrome.cs
- Ipv6Element.cs
- ping.cs
- URLString.cs
- GridViewRow.cs
- ReferentialConstraint.cs
- _Semaphore.cs
- QilName.cs
- BridgeDataRecord.cs
- SequentialUshortCollection.cs
- DotExpr.cs
- AppSettingsExpressionBuilder.cs
- ListViewTableRow.cs
- TrackingStringDictionary.cs
- LedgerEntryCollection.cs
- PreservationFileReader.cs
- XPathAncestorIterator.cs
- RegexStringValidator.cs
- NavigateEvent.cs
- HostedElements.cs
- EncryptedPackageFilter.cs
- PropertyCollection.cs
- TimelineGroup.cs
- DesignerContextDescriptor.cs
- SqlSelectClauseBuilder.cs
- LabelLiteral.cs
- WindowsAuthenticationEventArgs.cs
- ActivityExecutionContextCollection.cs
- InputMethodStateTypeInfo.cs
- MatrixIndependentAnimationStorage.cs
- SourceFileBuildProvider.cs
- XmlUrlResolver.cs
- SendMessageContent.cs
- SplitContainer.cs
- BaseAddressPrefixFilterElement.cs
- ThemeDirectoryCompiler.cs
- BinaryObjectReader.cs
- GraphicsState.cs
- InputLanguageSource.cs
- DynamicILGenerator.cs
- MatrixTransform.cs
- UserControlCodeDomTreeGenerator.cs
- EventItfInfo.cs
- HitTestFilterBehavior.cs
- UndoManager.cs
- SiteMapNode.cs
- BamlTreeNode.cs
- SHA512.cs
- SelectionItemProviderWrapper.cs
- FormViewModeEventArgs.cs
- LZCodec.cs
- EmptyElement.cs
- CustomError.cs
- SafeTimerHandle.cs
- baseaxisquery.cs
- WebBrowserEvent.cs
- RelationshipEndMember.cs
- TextServicesCompartment.cs
- GregorianCalendarHelper.cs
- WebPartMinimizeVerb.cs
- DrawingBrush.cs
- RoutedEventConverter.cs
- ProviderMetadataCachedInformation.cs
- ConnectionInterfaceCollection.cs
- SecurityPermission.cs
- Matrix3D.cs
- _LoggingObject.cs