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
- IconHelper.cs
- TcpChannelFactory.cs
- WindowsProgressbar.cs
- VectorAnimationBase.cs
- DataKey.cs
- NTAccount.cs
- Thickness.cs
- panel.cs
- EraserBehavior.cs
- DefaultMemberAttribute.cs
- HtmlEncodedRawTextWriter.cs
- PaintValueEventArgs.cs
- precedingquery.cs
- SafeEventLogWriteHandle.cs
- DependencyPropertyValueSerializer.cs
- ExpressionEditorSheet.cs
- AsymmetricKeyExchangeFormatter.cs
- GridPattern.cs
- X509CertificateTokenFactoryCredential.cs
- EntityWrapper.cs
- TabPanel.cs
- GetWinFXPath.cs
- WindowsStartMenu.cs
- Debugger.cs
- RadioButtonFlatAdapter.cs
- Function.cs
- DataGridAutomationPeer.cs
- StatementContext.cs
- ToolStripRendererSwitcher.cs
- SiblingIterators.cs
- GradientBrush.cs
- ObjectFullSpanRewriter.cs
- SamlAssertionKeyIdentifierClause.cs
- DbMetaDataFactory.cs
- RsaSecurityTokenAuthenticator.cs
- _DigestClient.cs
- InheritanceService.cs
- SynchronizedDispatch.cs
- NotifyParentPropertyAttribute.cs
- NavigatingCancelEventArgs.cs
- OpCellTreeNode.cs
- CultureInfoConverter.cs
- Site.cs
- ServiceOperationParameter.cs
- RootProfilePropertySettingsCollection.cs
- OpacityConverter.cs
- XmlExtensionFunction.cs
- TypefaceCollection.cs
- XmlCharacterData.cs
- XmlSchemaRedefine.cs
- SQLSingleStorage.cs
- Delegate.cs
- NegotiationTokenAuthenticatorStateCache.cs
- RbTree.cs
- ModifierKeysConverter.cs
- ECDiffieHellmanPublicKey.cs
- EdgeProfileValidation.cs
- PolygonHotSpot.cs
- DownloadProgressEventArgs.cs
- WeakEventManager.cs
- WindowsListViewGroup.cs
- SafeNativeMethods.cs
- Ipv6Element.cs
- FlagsAttribute.cs
- TypeDescriptionProviderAttribute.cs
- UpdateCommand.cs
- SecurityTokenProviderContainer.cs
- UnknownExceptionActionHelper.cs
- ModelUIElement3D.cs
- PriorityQueue.cs
- ToolBarPanel.cs
- DataGridHeadersVisibilityToVisibilityConverter.cs
- LineBreak.cs
- BoolExpr.cs
- ParameterCollection.cs
- FormViewActionList.cs
- DataGridView.cs
- SystemIcons.cs
- SystemEvents.cs
- UrlMapping.cs
- PeerNodeTraceRecord.cs
- _DisconnectOverlappedAsyncResult.cs
- XmlSchemas.cs
- ObjectDataSourceStatusEventArgs.cs
- FontStyles.cs
- DynamicVirtualDiscoSearcher.cs
- DocumentPageTextView.cs
- RecommendedAsConfigurableAttribute.cs
- ObjectViewEntityCollectionData.cs
- OdbcEnvironment.cs
- RelationshipConverter.cs
- ContentDisposition.cs
- ParameterCollection.cs
- XmlSchemaComplexContent.cs
- BitmapMetadataEnumerator.cs
- TextSearch.cs
- FigureParaClient.cs
- ComplexLine.cs
- XPathParser.cs
- Expression.cs