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
- validation.cs
- SafeHGlobalHandleCritical.cs
- StateBag.cs
- PriorityItem.cs
- EntityDataSourceConfigureObjectContext.cs
- RectangleF.cs
- ProcessManager.cs
- WebServiceEnumData.cs
- CompiledRegexRunnerFactory.cs
- MultiSelectRootGridEntry.cs
- ProvideValueServiceProvider.cs
- GcSettings.cs
- DrawingGroup.cs
- SHA1CryptoServiceProvider.cs
- Propagator.JoinPropagator.SubstitutingCloneVisitor.cs
- EntityAdapter.cs
- XpsFontSerializationService.cs
- AutoResetEvent.cs
- OdbcConnectionString.cs
- DataRelation.cs
- DetailsViewAutoFormat.cs
- OverrideMode.cs
- EventLog.cs
- TitleStyle.cs
- TypeDescriptor.cs
- DragAssistanceManager.cs
- QueryInterceptorAttribute.cs
- ModelPerspective.cs
- FrameSecurityDescriptor.cs
- ComplusTypeValidator.cs
- _DynamicWinsockMethods.cs
- PrincipalPermission.cs
- DataBoundControlHelper.cs
- StorageBasedPackageProperties.cs
- CategoryGridEntry.cs
- ScrollChrome.cs
- InvokeProviderWrapper.cs
- IndexOutOfRangeException.cs
- PersonalizationAdministration.cs
- BuildManagerHost.cs
- PTUtility.cs
- ListBoxItem.cs
- RIPEMD160Managed.cs
- HttpHandlerActionCollection.cs
- InternalsVisibleToAttribute.cs
- namescope.cs
- SqlCacheDependencySection.cs
- AppDomainShutdownMonitor.cs
- WbmpConverter.cs
- DataTable.cs
- SwitchLevelAttribute.cs
- EventHandlersStore.cs
- bidPrivateBase.cs
- System.Data_BID.cs
- AttachedPropertyBrowsableWhenAttributePresentAttribute.cs
- AppDomainUnloadedException.cs
- MinimizableAttributeTypeConverter.cs
- SharedPerformanceCounter.cs
- SqlDataReaderSmi.cs
- FontStretchConverter.cs
- ObjectDesignerDataSourceView.cs
- ServicePointManager.cs
- _ChunkParse.cs
- MenuScrollingVisibilityConverter.cs
- DatagridviewDisplayedBandsData.cs
- CodeIdentifier.cs
- PropertyItemInternal.cs
- XslCompiledTransform.cs
- RadioButtonStandardAdapter.cs
- GenericsInstances.cs
- AtomServiceDocumentSerializer.cs
- LoadItemsEventArgs.cs
- Padding.cs
- OdbcConnectionPoolProviderInfo.cs
- NativeMethods.cs
- UrlAuthorizationModule.cs
- QilFunction.cs
- DataTableExtensions.cs
- NodeInfo.cs
- SHA1CryptoServiceProvider.cs
- WebBrowserUriTypeConverter.cs
- OdbcDataReader.cs
- DesignerSerializationOptionsAttribute.cs
- OleDbStruct.cs
- EntityTransaction.cs
- RijndaelManagedTransform.cs
- TextSerializer.cs
- FileDialog.cs
- WindowsAuthenticationEventArgs.cs
- SocketAddress.cs
- SQLDateTimeStorage.cs
- ActivityExecutionContextCollection.cs
- MyContact.cs
- Substitution.cs
- QuaternionAnimation.cs
- AspNetHostingPermission.cs
- ListViewItemSelectionChangedEvent.cs
- OperationAbortedException.cs
- ChannelDispatcherBase.cs
- ParserHooks.cs