Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / IdentityModel / System / IdentityModel / Tokens / RsaSecurityKey.cs / 1 / RsaSecurityKey.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.IdentityModel.Tokens { using System.IdentityModel.Selectors; using System.Security.Cryptography; using System.Security.Cryptography.Xml; sealed public class RsaSecurityKey : AsymmetricSecurityKey { PrivateKeyStatus privateKeyStatus = PrivateKeyStatus.AvailabilityNotDetermined; readonly RSA rsa; public RsaSecurityKey(RSA rsa) { if (rsa == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("rsa"); this.rsa = rsa; } public override int KeySize { get { return this.rsa.KeySize; } } public override byte[] DecryptKey(string algorithm, byte[] keyData) { switch (algorithm) { case SecurityAlgorithms.RsaV15KeyWrap: return EncryptedXml.DecryptKey(keyData, rsa, false); case SecurityAlgorithms.RsaOaepKeyWrap: return EncryptedXml.DecryptKey(keyData, rsa, true); default: throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new CryptographicException(SR.GetString(SR.UnsupportedAlgorithmForCryptoOperation, algorithm, "DecryptKey"))); } } public override byte[] EncryptKey(string algorithm, byte[] keyData) { switch (algorithm) { case SecurityAlgorithms.RsaV15KeyWrap: return EncryptedXml.EncryptKey(keyData, rsa, false); case SecurityAlgorithms.RsaOaepKeyWrap: return EncryptedXml.EncryptKey(keyData, rsa, true); default: throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new CryptographicException(SR.GetString(SR.UnsupportedAlgorithmForCryptoOperation, algorithm, "EncryptKey"))); } } public override AsymmetricAlgorithm GetAsymmetricAlgorithm(string algorithm, bool requiresPrivateKey) { if (requiresPrivateKey && !HasPrivateKey()) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new CryptographicException(SR.GetString(SR.NoPrivateKeyAvailable))); } return this.rsa; } public override HashAlgorithm GetHashAlgorithmForSignature(string algorithm) { switch (algorithm) { case SecurityAlgorithms.RsaSha1Signature: return CryptoHelper.NewSha1HashAlgorithm(); default: throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new CryptographicException(SR.GetString(SR.UnsupportedAlgorithmForCryptoOperation, algorithm, "GetHashAlgorithmForSignature"))); } } public override AsymmetricSignatureDeformatter GetSignatureDeformatter(string algorithm) { switch (algorithm) { case SecurityAlgorithms.RsaSha1Signature: return new RSAPKCS1SignatureDeformatter(rsa); default: throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new CryptographicException(SR.GetString(SR.UnsupportedAlgorithmForCryptoOperation, algorithm, "GetSignatureDeformatter"))); } } public override AsymmetricSignatureFormatter GetSignatureFormatter(string algorithm) { switch (algorithm) { case SecurityAlgorithms.RsaSha1Signature: return new RSAPKCS1SignatureFormatter(rsa); default: throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new CryptographicException(SR.GetString(SR.UnsupportedAlgorithmForCryptoOperation, algorithm, "GetSignatureFormatter"))); } } public override bool HasPrivateKey() { if (this.privateKeyStatus == PrivateKeyStatus.AvailabilityNotDetermined) { RSACryptoServiceProvider rsaCryptoServiceProvider = this.rsa as RSACryptoServiceProvider; if (rsaCryptoServiceProvider != null) { this.privateKeyStatus = rsaCryptoServiceProvider.PublicOnly ? PrivateKeyStatus.DoesNotHavePrivateKey : PrivateKeyStatus.HasPrivateKey; } else { try { byte[] hash = new byte[20]; this.rsa.DecryptValue(hash); // imitate signing this.privateKeyStatus = PrivateKeyStatus.HasPrivateKey; } catch (CryptographicException) { this.privateKeyStatus = PrivateKeyStatus.DoesNotHavePrivateKey; } } } return this.privateKeyStatus == PrivateKeyStatus.HasPrivateKey; } public override bool IsAsymmetricAlgorithm(string algorithm) { return CryptoHelper.IsAsymmetricAlgorithm(algorithm); } public override bool IsSupportedAlgorithm(string algorithm) { switch (algorithm) { case SecurityAlgorithms.RsaV15KeyWrap: case SecurityAlgorithms.RsaOaepKeyWrap: case SecurityAlgorithms.RsaSha1Signature: return true; default: return false; } } public override bool IsSymmetricAlgorithm(string algorithm) { return CryptoHelper.IsSymmetricAlgorithm(algorithm); } enum PrivateKeyStatus { AvailabilityNotDetermined, HasPrivateKey, DoesNotHavePrivateKey } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DeploymentSectionCache.cs
- ConfigurationValidatorBase.cs
- DataComponentNameHandler.cs
- TextOutput.cs
- RepeatInfo.cs
- ParserOptions.cs
- EdmItemError.cs
- BuildProvider.cs
- GcHandle.cs
- DatagridviewDisplayedBandsData.cs
- Label.cs
- CommandEventArgs.cs
- Operand.cs
- DocumentPageTextView.cs
- CanExecuteRoutedEventArgs.cs
- PolicyStatement.cs
- HostedBindingBehavior.cs
- HttpContext.cs
- MenuItemCollection.cs
- InputScopeConverter.cs
- CommandArguments.cs
- FileAuthorizationModule.cs
- Html32TextWriter.cs
- DynamicActivityProperty.cs
- ComboBoxDesigner.cs
- SelectedDatesCollection.cs
- ManifestBasedResourceGroveler.cs
- DropDownList.cs
- ButtonFieldBase.cs
- ZeroOpNode.cs
- GCHandleCookieTable.cs
- SimpleMailWebEventProvider.cs
- GlobalProxySelection.cs
- PropertyRecord.cs
- DPCustomTypeDescriptor.cs
- DetailsViewDesigner.cs
- SqlTriggerAttribute.cs
- XmlMtomReader.cs
- TemplateBaseAction.cs
- LocalizationComments.cs
- DesignerDataColumn.cs
- SamlNameIdentifierClaimResource.cs
- TemplateXamlParser.cs
- ServiceProviders.cs
- StreamingContext.cs
- ControlBuilderAttribute.cs
- DataServiceRequestException.cs
- ModuleBuilder.cs
- XsltOutput.cs
- NamedObject.cs
- RayHitTestParameters.cs
- AssociatedControlConverter.cs
- LookupBindingPropertiesAttribute.cs
- NavigatorOutput.cs
- PrivilegeNotHeldException.cs
- Cursors.cs
- RegistrySecurity.cs
- CodeParameterDeclarationExpression.cs
- CallContext.cs
- IpcManager.cs
- safex509handles.cs
- DirectoryNotFoundException.cs
- WizardStepBase.cs
- WeakReferenceKey.cs
- LinkLabel.cs
- TempFiles.cs
- DataComponentNameHandler.cs
- NodeLabelEditEvent.cs
- WorkflowRuntimeElement.cs
- Label.cs
- DataRowCollection.cs
- BamlStream.cs
- EntityKeyElement.cs
- SqlDesignerDataSourceView.cs
- IDispatchConstantAttribute.cs
- HtmlInputSubmit.cs
- _NestedSingleAsyncResult.cs
- DocumentPageView.cs
- IdentitySection.cs
- DataGridViewRowCollection.cs
- SuppressMessageAttribute.cs
- EventWaitHandleSecurity.cs
- HandlerBase.cs
- XamlPointCollectionSerializer.cs
- SqlServices.cs
- Color.cs
- StyleXamlParser.cs
- EntityDataSourceWrapperPropertyDescriptor.cs
- BaseTemplateBuildProvider.cs
- CellTreeNode.cs
- SortFieldComparer.cs
- HostProtectionPermission.cs
- EmissiveMaterial.cs
- TextEvent.cs
- HtmlTableRow.cs
- DataGridViewRowEventArgs.cs
- WebFormDesignerActionService.cs
- PerformanceCounters.cs
- Viewport3DVisual.cs
- InkCanvasAutomationPeer.cs