Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / BCL / System / Security / Cryptography / RSAPKCS1SignatureDeformatter.cs / 1305376 / RSAPKCS1SignatureDeformatter.cs
using System.Diagnostics.Contracts; // ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== //[....] // // // RSAPKCS1SignatureDeformatter.cs // namespace System.Security.Cryptography { [System.Runtime.InteropServices.ComVisible(true)] public class RSAPKCS1SignatureDeformatter : AsymmetricSignatureDeformatter { // // This class provides the PKCS#1 v1.5 signature format processing during // the verification process (i.e. decrypting the object). The class has // some special code for dealing with the CSP based RSA keys as the // formatting and verification is done within the CSP rather than in // managed code. // private RSA _rsaKey; // RSA Key value to do decrypt operation private String _strOID; // OID value for the HASH algorithm // // public constructors // public RSAPKCS1SignatureDeformatter() {} public RSAPKCS1SignatureDeformatter(AsymmetricAlgorithm key) { if (key == null) throw new ArgumentNullException("key"); Contract.EndContractBlock(); _rsaKey = (RSA) key; } // // public methods // public override void SetKey(AsymmetricAlgorithm key) { if (key == null) throw new ArgumentNullException("key"); Contract.EndContractBlock(); _rsaKey = (RSA) key; } public override void SetHashAlgorithm(String strName) { _strOID = CryptoConfig.MapNameToOID(strName); } [System.Security.SecuritySafeCritical] // auto-generated public override bool VerifySignature(byte[] rgbHash, byte[] rgbSignature) { if (rgbHash == null) throw new ArgumentNullException("rgbHash"); if (rgbSignature == null) throw new ArgumentNullException("rgbSignature"); Contract.EndContractBlock(); if (_strOID == null) throw new CryptographicUnexpectedOperationException(Environment.GetResourceString("Cryptography_MissingOID")); if (_rsaKey == null) throw new CryptographicUnexpectedOperationException(Environment.GetResourceString("Cryptography_MissingKey")); // Two cases here -- if we are talking to the CSP version or if we are talking to some other RSA provider. if (_rsaKey is RSACryptoServiceProvider) { return ((RSACryptoServiceProvider) _rsaKey).VerifyHash(rgbHash, _strOID, rgbSignature); } else { byte[] pad = Utils.RsaPkcs1Padding(_rsaKey, CryptoConfig.EncodeOID(_strOID), rgbHash); // Apply the public key to the signature data to get back the padded buffer actually signed. // Compare the two buffers to see if they match; ignoring any leading zeros return Utils.CompareBigIntArrays(_rsaKey.EncryptValue(rgbSignature), pad); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. using System.Diagnostics.Contracts; // ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== //[....] // // // RSAPKCS1SignatureDeformatter.cs // namespace System.Security.Cryptography { [System.Runtime.InteropServices.ComVisible(true)] public class RSAPKCS1SignatureDeformatter : AsymmetricSignatureDeformatter { // // This class provides the PKCS#1 v1.5 signature format processing during // the verification process (i.e. decrypting the object). The class has // some special code for dealing with the CSP based RSA keys as the // formatting and verification is done within the CSP rather than in // managed code. // private RSA _rsaKey; // RSA Key value to do decrypt operation private String _strOID; // OID value for the HASH algorithm // // public constructors // public RSAPKCS1SignatureDeformatter() {} public RSAPKCS1SignatureDeformatter(AsymmetricAlgorithm key) { if (key == null) throw new ArgumentNullException("key"); Contract.EndContractBlock(); _rsaKey = (RSA) key; } // // public methods // public override void SetKey(AsymmetricAlgorithm key) { if (key == null) throw new ArgumentNullException("key"); Contract.EndContractBlock(); _rsaKey = (RSA) key; } public override void SetHashAlgorithm(String strName) { _strOID = CryptoConfig.MapNameToOID(strName); } [System.Security.SecuritySafeCritical] // auto-generated public override bool VerifySignature(byte[] rgbHash, byte[] rgbSignature) { if (rgbHash == null) throw new ArgumentNullException("rgbHash"); if (rgbSignature == null) throw new ArgumentNullException("rgbSignature"); Contract.EndContractBlock(); if (_strOID == null) throw new CryptographicUnexpectedOperationException(Environment.GetResourceString("Cryptography_MissingOID")); if (_rsaKey == null) throw new CryptographicUnexpectedOperationException(Environment.GetResourceString("Cryptography_MissingKey")); // Two cases here -- if we are talking to the CSP version or if we are talking to some other RSA provider. if (_rsaKey is RSACryptoServiceProvider) { return ((RSACryptoServiceProvider) _rsaKey).VerifyHash(rgbHash, _strOID, rgbSignature); } else { byte[] pad = Utils.RsaPkcs1Padding(_rsaKey, CryptoConfig.EncodeOID(_strOID), rgbHash); // Apply the public key to the signature data to get back the padded buffer actually signed. // Compare the two buffers to see if they match; ignoring any leading zeros return Utils.CompareBigIntArrays(_rsaKey.EncryptValue(rgbSignature), pad); } } } } // 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
- WebPartTransformer.cs
- WorkflowItemPresenter.cs
- RootAction.cs
- srgsitem.cs
- SimpleHandlerBuildProvider.cs
- GraphicsContainer.cs
- SqlTypesSchemaImporter.cs
- SqlDataSourceQueryEditorForm.cs
- XmlSchemaComplexType.cs
- LayoutDump.cs
- SqlDataSourceQueryConverter.cs
- Set.cs
- ReflectionTypeLoadException.cs
- MethodExpr.cs
- DoubleConverter.cs
- CompressedStack.cs
- ECDiffieHellmanCng.cs
- Effect.cs
- DbMetaDataCollectionNames.cs
- AssertFilter.cs
- MobileListItemCollection.cs
- IisTraceListener.cs
- Selector.cs
- DataSourceControl.cs
- ListItemConverter.cs
- TextSpan.cs
- HostedNamedPipeTransportManager.cs
- TextElementAutomationPeer.cs
- FontFamily.cs
- ClientProtocol.cs
- SQLSingle.cs
- OutputBuffer.cs
- RankException.cs
- CatalogUtil.cs
- SQLConvert.cs
- SchemaAttDef.cs
- TextServicesCompartmentContext.cs
- ProviderManager.cs
- Delegate.cs
- ISCIIEncoding.cs
- BuildManager.cs
- BamlRecordHelper.cs
- XmlLoader.cs
- PropertyGridCommands.cs
- PageAsyncTaskManager.cs
- SqlDataSourceConfigureSelectPanel.cs
- WebConfigurationFileMap.cs
- embossbitmapeffect.cs
- BitStream.cs
- XmlSchemaNotation.cs
- TransactionChannelFaultConverter.cs
- FlowDocumentPaginator.cs
- DocumentGridContextMenu.cs
- LocationReferenceEnvironment.cs
- TypeConstant.cs
- Tokenizer.cs
- RangeBaseAutomationPeer.cs
- OpCodes.cs
- XmlHelper.cs
- InvalidAsynchronousStateException.cs
- Calendar.cs
- DesignerCommandAdapter.cs
- DataObjectEventArgs.cs
- FileChangeNotifier.cs
- ISAPIApplicationHost.cs
- Trustee.cs
- CallbackException.cs
- LogExtent.cs
- OutKeywords.cs
- DataGridViewRowPostPaintEventArgs.cs
- TTSEvent.cs
- IndexedEnumerable.cs
- ClientTarget.cs
- ReplyAdapterChannelListener.cs
- CodeSubDirectoriesCollection.cs
- XmlCharType.cs
- TextRangeEditLists.cs
- WebHeaderCollection.cs
- Constraint.cs
- NodeLabelEditEvent.cs
- FileDialog.cs
- DummyDataSource.cs
- KeySplineConverter.cs
- UdpSocketReceiveManager.cs
- BaseServiceProvider.cs
- XmlMtomWriter.cs
- DummyDataSource.cs
- ChangesetResponse.cs
- WCFBuildProvider.cs
- ControlHelper.cs
- SafeFileHandle.cs
- Parsers.cs
- ReadWriteObjectLock.cs
- XmlSchemaInclude.cs
- BinaryFormatterWriter.cs
- processwaithandle.cs
- SignatureConfirmations.cs
- HttpGetProtocolImporter.cs
- SqlComparer.cs
- StackOverflowException.cs