Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / infocard / Client / System / IdentityModel / Selectors / InfoCardAsymmetricCrypto.cs / 1 / InfoCardAsymmetricCrypto.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.IdentityModel.Selectors { using System; using System.Security.Cryptography; using System.Security.Cryptography.Xml; using System.IdentityModel.Tokens; using IDT = Microsoft.InfoCards.Diagnostics.InfoCardTrace; // // For common & resources // using Microsoft.InfoCards; // // Summary: // This class implements the IAsymmetricCrypto interface and is used as an adapter between the // InfoCard system and Indigo. // internal class InfoCardAsymmetricCrypto : AsymmetricSecurityKey, IDisposable { InfoCardRSACryptoProvider m_rsa; // // Summary: // Constructs a new InfoCardAsymmetricCrypto given an InfoCardRSACryptoProvider. // // Parameters: // cryptoHandle - the handle to the asymmetric key to base this crypto object on. public InfoCardAsymmetricCrypto( AsymmetricCryptoHandle cryptoHandle ) { m_rsa = new InfoCardRSACryptoProvider( cryptoHandle ); } // // Summary: // Returns the size of the asymmetric key // public override int KeySize { get { return m_rsa.KeySize; } } // // Summary: // Indicates whether this IAsymmetricCrypto has access to the private key. // In our case, that's the whole point, so it always returns true. // public override bool HasPrivateKey() { return true; } // // Summary: // Returns a reference to the InfoCardRSACryptoProvider that give Indigo access to // the private key associated with the infocard, recipient tuple. // // Parameters: // algorithmUri - The URI of the algorithm being requested. // privateKey - set to true if access to the private key is required. // public override AsymmetricAlgorithm GetAsymmetricAlgorithm( string algorithmUri, bool privateKey ) { switch( algorithmUri ) { case SignedXml.XmlDsigRSASHA1Url: case EncryptedXml.XmlEncRSA15Url: case EncryptedXml.XmlEncRSAOAEPUrl: return m_rsa; default: throw IDT.ThrowHelperError( new NotSupportedException( SR.GetString( SR.ClientUnsupportedCryptoAlgorithm, algorithmUri ) ) ); } } // // Sumamry: // Returns a HashAlgorithm // // Parameters: // algorithmUri - the uri of the hash algorithm being requested. // public override HashAlgorithm GetHashAlgorithmForSignature( string algorithmUri ) { switch (algorithmUri) { case SignedXml.XmlDsigRSASHA1Url: return new SHA1Managed(); default: throw IDT.ThrowHelperError( new NotSupportedException( SR.GetString( SR.ClientUnsupportedCryptoAlgorithm, algorithmUri ) ) ); } } // // Summary: // Returns a Signature deformatter. // // Parameters: // algorithmUri - the uri of signature deformatter being requeted. // public override AsymmetricSignatureDeformatter GetSignatureDeformatter( string algorithmUri ) { switch( algorithmUri) { case SignedXml.XmlDsigRSASHA1Url: return new InfoCardRSAPKCS1SignatureDeformatter( m_rsa ); default: throw IDT.ThrowHelperError( new NotSupportedException( SR.GetString( SR.ClientUnsupportedCryptoAlgorithm, algorithmUri ) ) ); } } // // Summary: // Returns a Signature formatter. // // Parameters: // algorithmUri - the uri of signature formatter being requeted. // public override AsymmetricSignatureFormatter GetSignatureFormatter( string algorithmUri ) { switch( algorithmUri) { case SignedXml.XmlDsigRSASHA1Url: return new InfoCardRSAPKCS1SignatureFormatter( m_rsa ); default: throw IDT.ThrowHelperError( new NotSupportedException( SR.GetString( SR.ClientUnsupportedCryptoAlgorithm, algorithmUri ) ) ); } } // // Summary: // Decrypts a symmetric key using the private key of a public/private key pair. // // Parameters: // algorithmUri - The algorithm to use to decrypt the key. // keyData - the key to decrypt. // public override byte[] DecryptKey( string algorithmUri, byte[] keyData ) { AsymmetricKeyExchangeDeformatter deformatter; switch (algorithmUri) { case EncryptedXml.XmlEncRSA15Url: deformatter = new InfoCardRSAPKCS1KeyExchangeDeformatter( m_rsa ); return deformatter.DecryptKeyExchange( keyData ); case EncryptedXml.XmlEncRSAOAEPUrl: deformatter = new InfoCardRSAOAEPKeyExchangeDeformatter( m_rsa ); return deformatter.DecryptKeyExchange( keyData ); default: throw IDT.ThrowHelperError( new NotSupportedException( SR.GetString( SR.ClientUnsupportedCryptoAlgorithm, algorithmUri ) ) ); } } // // Summary: // Encrypts a symmetric key using the public key of a public/private key pair. // // Parameters: // algorithmUri - The algorithm to use to encrypt the key. // keyData - the key to encrypt. // public override byte[] EncryptKey( string algorithmUri, byte[] keyData ) { AsymmetricKeyExchangeFormatter formatter; switch (algorithmUri) { case EncryptedXml.XmlEncRSA15Url: formatter = new InfoCardRSAPKCS1KeyExchangeFormatter( m_rsa ); return formatter.CreateKeyExchange( keyData ); case EncryptedXml.XmlEncRSAOAEPUrl: formatter = new InfoCardRSAOAEPKeyExchangeFormatter( m_rsa ); return formatter.CreateKeyExchange( keyData ); default: throw IDT.ThrowHelperError( new NotSupportedException( SR.GetString( SR.ClientUnsupportedCryptoAlgorithm, algorithmUri ) ) ); } } public override bool IsSupportedAlgorithm( string algorithmUri ) { switch (algorithmUri) { case SignedXml.XmlDsigRSASHA1Url: case EncryptedXml.XmlEncRSA15Url: case EncryptedXml.XmlEncRSAOAEPUrl: return true; default: return false; } } public override bool IsSymmetricAlgorithm( string algorithmUri ) { return InfoCardCryptoHelper.IsSymmetricAlgorithm(algorithmUri); } public override bool IsAsymmetricAlgorithm( string algorithmUri ) { return InfoCardCryptoHelper.IsAsymmetricAlgorithm(algorithmUri); } public void Dispose() { ((IDisposable)m_rsa).Dispose(); m_rsa = null; } } } // 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
- View.cs
- TypeLoadException.cs
- _SSPISessionCache.cs
- XmlParserContext.cs
- AdRotator.cs
- MetadataProperty.cs
- SymDocumentType.cs
- FrameworkPropertyMetadata.cs
- PeerNameRecord.cs
- QueryHandler.cs
- SimpleWorkerRequest.cs
- TextFindEngine.cs
- WebPartDescriptionCollection.cs
- Rijndael.cs
- IntMinMaxAggregationOperator.cs
- SecurityKeyType.cs
- AttributeData.cs
- TabControlDesigner.cs
- PolicyVersion.cs
- SchemaCreator.cs
- DBProviderConfigurationHandler.cs
- TypeLoader.cs
- CounterSet.cs
- ClientBuildManager.cs
- DataKey.cs
- odbcmetadatacollectionnames.cs
- LinearGradientBrush.cs
- OpenFileDialog.cs
- MutableAssemblyCacheEntry.cs
- DesignerAutoFormatCollection.cs
- ObjectIDGenerator.cs
- DisposableCollectionWrapper.cs
- FrameworkObject.cs
- WebPartExportVerb.cs
- DelimitedListTraceListener.cs
- WebResponse.cs
- BamlRecordReader.cs
- CategoryNameCollection.cs
- CompoundFileDeflateTransform.cs
- MultilineStringConverter.cs
- hwndwrapper.cs
- SqlDataSourceView.cs
- ImageMapEventArgs.cs
- TextFormatterContext.cs
- XPathNavigator.cs
- PolyQuadraticBezierSegment.cs
- DebugTraceHelper.cs
- PathGradientBrush.cs
- XPathArrayIterator.cs
- ResourcePermissionBaseEntry.cs
- BufferedWebEventProvider.cs
- CharAnimationBase.cs
- ToolStripPanelSelectionGlyph.cs
- WebPartsPersonalization.cs
- EncryptedReference.cs
- ToolStripSplitButton.cs
- TextBoxRenderer.cs
- InstallerTypeAttribute.cs
- TextPointerBase.cs
- MetadataImporterQuotas.cs
- ChannelSinkStacks.cs
- LocationReferenceValue.cs
- TypeToTreeConverter.cs
- SqlDataSource.cs
- DoWhileDesigner.xaml.cs
- RuleSettingsCollection.cs
- ProxyManager.cs
- AppDomainGrammarProxy.cs
- LeftCellWrapper.cs
- HttpResponse.cs
- TextDecorations.cs
- ListViewItem.cs
- httpserverutility.cs
- CodePrimitiveExpression.cs
- Literal.cs
- PartBasedPackageProperties.cs
- CodeMethodReturnStatement.cs
- LayoutEngine.cs
- InputLanguageCollection.cs
- SimpleExpression.cs
- SqlTrackingWorkflowInstance.cs
- PartEditor.cs
- HistoryEventArgs.cs
- X509RecipientCertificateServiceElement.cs
- DataListItemEventArgs.cs
- TextSpan.cs
- DataTemplateSelector.cs
- ResourcesChangeInfo.cs
- InvalidCommandTreeException.cs
- RawUIStateInputReport.cs
- ToolStripItemClickedEventArgs.cs
- iisPickupDirectory.cs
- IntSecurity.cs
- DataControlHelper.cs
- RelationshipType.cs
- IPHostEntry.cs
- UnsafeNativeMethods.cs
- EpmTargetTree.cs
- RoleManagerModule.cs
- DataGrid.cs