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
- SystemWebExtensionsSectionGroup.cs
- CompletionCallbackWrapper.cs
- PriorityItem.cs
- PeerApplication.cs
- ReverseInheritProperty.cs
- RangeValueProviderWrapper.cs
- SqlConnection.cs
- ColorAnimation.cs
- AutomationElementIdentifiers.cs
- KeyPullup.cs
- ParseChildrenAsPropertiesAttribute.cs
- DodSequenceMerge.cs
- NegationPusher.cs
- ToReply.cs
- AxHost.cs
- XsltQilFactory.cs
- MobileUserControlDesigner.cs
- OrderedDictionary.cs
- ComPersistableTypeElementCollection.cs
- FontUnitConverter.cs
- XmlSchemaObject.cs
- AsmxEndpointPickerExtension.cs
- CollectionsUtil.cs
- XamlNamespaceHelper.cs
- DbInsertCommandTree.cs
- PKCS1MaskGenerationMethod.cs
- Queue.cs
- ViewGenResults.cs
- SoapAttributes.cs
- LicenseException.cs
- IpcChannel.cs
- MenuItemStyleCollection.cs
- ControlAdapter.cs
- TextSchema.cs
- SeverityFilter.cs
- Stack.cs
- RawStylusInput.cs
- XmlSerializer.cs
- CodeBlockBuilder.cs
- SchemaElementLookUpTable.cs
- ContextQuery.cs
- RSAProtectedConfigurationProvider.cs
- SchemaNotation.cs
- MetadataArtifactLoaderCompositeFile.cs
- QuerySettings.cs
- DefaultPrintController.cs
- CalendarAutoFormatDialog.cs
- TextSearch.cs
- ItemsPanelTemplate.cs
- Int16.cs
- ColumnResizeUndoUnit.cs
- DataGridViewSelectedColumnCollection.cs
- HitTestResult.cs
- BrushConverter.cs
- TickBar.cs
- DockAndAnchorLayout.cs
- DbProviderFactoriesConfigurationHandler.cs
- WinFormsComponentEditor.cs
- TemplateXamlParser.cs
- MinMaxParagraphWidth.cs
- RoleService.cs
- Win32KeyboardDevice.cs
- AnnotationComponentChooser.cs
- DateTimeParse.cs
- WindowsTokenRoleProvider.cs
- DbModificationCommandTree.cs
- GridViewRowCollection.cs
- GeneratedContractType.cs
- EdmType.cs
- SimpleType.cs
- TreeViewDesigner.cs
- FormViewUpdatedEventArgs.cs
- DataRow.cs
- ParseChildrenAsPropertiesAttribute.cs
- Clipboard.cs
- StagingAreaInputItem.cs
- JapaneseLunisolarCalendar.cs
- XmlSubtreeReader.cs
- CompilerScopeManager.cs
- AssemblyAttributes.cs
- ZipIOExtraField.cs
- HostSecurityManager.cs
- TraceContextRecord.cs
- _AcceptOverlappedAsyncResult.cs
- WSHttpSecurity.cs
- Odbc32.cs
- safex509handles.cs
- TabOrder.cs
- TagNameToTypeMapper.cs
- BuildProvider.cs
- KeyedCollection.cs
- StandardOleMarshalObject.cs
- DBAsyncResult.cs
- TextOnlyOutput.cs
- coordinatorscratchpad.cs
- SqlUDTStorage.cs
- ColorTransformHelper.cs
- RegexStringValidatorAttribute.cs
- WindowsTreeView.cs
- InvokeFunc.cs