Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / clr / src / BCL / System / Security / Cryptography / SymmetricAlgorithm.cs / 1 / SymmetricAlgorithm.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== // // SymmetricAlgorithm.cs // namespace System.Security.Cryptography { [System.Runtime.InteropServices.ComVisible(true)] public abstract class SymmetricAlgorithm : IDisposable { protected int BlockSizeValue; protected int FeedbackSizeValue; protected byte[] IVValue; protected byte[] KeyValue; protected KeySizes[] LegalBlockSizesValue; protected KeySizes[] LegalKeySizesValue; protected int KeySizeValue; protected CipherMode ModeValue; protected PaddingMode PaddingValue; // // protected constructors // protected SymmetricAlgorithm() { // Default to cipher block chaining (CipherMode.CBC) and // PKCS-style padding (pad n bytes with value n) ModeValue = CipherMode.CBC; PaddingValue = PaddingMode.PKCS7; } // SymmetricAlgorithm implements IDisposable ///void IDisposable.Dispose() { Dispose(true); GC.SuppressFinalize(this); } public void Clear() { ((IDisposable) this).Dispose(); } protected virtual void Dispose(bool disposing) { if (disposing) { // Note: we always want to zeroize the sensitive key material if (KeyValue != null) { Array.Clear(KeyValue, 0, KeyValue.Length); KeyValue = null; } if (IVValue != null) { Array.Clear(IVValue, 0, IVValue.Length); IVValue = null; } } } // // public properties // public virtual int BlockSize { get { return BlockSizeValue; } set { int i; int j; for (i=0; i BlockSizeValue || (value % 8) != 0) throw new CryptographicException(Environment.GetResourceString("Cryptography_InvalidFeedbackSize")); FeedbackSizeValue = value; } } public virtual byte[] IV { get { if (IVValue == null) GenerateIV(); return (byte[]) IVValue.Clone(); } set { if (value == null) throw new ArgumentNullException("value"); if (value.Length != BlockSizeValue / 8) throw new CryptographicException(Environment.GetResourceString("Cryptography_InvalidIVSize")); IVValue = (byte[]) value.Clone(); } } public virtual byte[] Key { get { if (KeyValue == null) GenerateKey(); return (byte[]) KeyValue.Clone(); } set { if (value == null) throw new ArgumentNullException("value"); if (!ValidKeySize(value.Length * 8)) throw new CryptographicException(Environment.GetResourceString("Cryptography_InvalidKeySize")); // must convert bytes to bits KeyValue = (byte[]) value.Clone(); KeySizeValue = value.Length * 8; } } public virtual KeySizes[] LegalBlockSizes { get { return (KeySizes[]) LegalBlockSizesValue.Clone(); } } public virtual KeySizes[] LegalKeySizes { get { return (KeySizes[]) LegalKeySizesValue.Clone(); } } public virtual int KeySize { get { return KeySizeValue; } set { if (!ValidKeySize(value)) throw new CryptographicException(Environment.GetResourceString("Cryptography_InvalidKeySize")); KeySizeValue = value; KeyValue = null; } } public virtual CipherMode Mode { get { return ModeValue; } set { if ((value < CipherMode.CBC) || (CipherMode.CFB < value)) throw new CryptographicException(Environment.GetResourceString("Cryptography_InvalidCipherMode")); ModeValue = value; } } public virtual PaddingMode Padding { get { return PaddingValue; } set { if ((value < PaddingMode.None) || (PaddingMode.ISO10126 < value)) throw new CryptographicException(Environment.GetResourceString("Cryptography_InvalidPaddingMode")); PaddingValue = value; } } // // public methods // // The following method takes a bit length input and returns whether that length is a valid size // according to LegalKeySizes public bool ValidKeySize(int bitLength) { KeySizes[] validSizes = this.LegalKeySizes; int i,j; if (validSizes == null) return false; for (i=0; i< validSizes.Length; i++) { if (validSizes[i].SkipSize == 0) { if (validSizes[i].MinSize == bitLength) { // assume MinSize = MaxSize return true; } } else { for (j = validSizes[i].MinSize; j<= validSizes[i].MaxSize; j += validSizes[i].SkipSize) { if (j == bitLength) { return true; } } } } return false; } static public SymmetricAlgorithm Create() { // use the crypto config system to return an instance of // the default SymmetricAlgorithm on this machine return Create("System.Security.Cryptography.SymmetricAlgorithm"); } static public SymmetricAlgorithm Create(String algName) { return (SymmetricAlgorithm) CryptoConfig.CreateFromName(algName); } public virtual ICryptoTransform CreateEncryptor() { return CreateEncryptor(Key, IV); } public abstract ICryptoTransform CreateEncryptor(byte[] rgbKey, byte[] rgbIV); public virtual ICryptoTransform CreateDecryptor() { return CreateDecryptor(Key, IV); } public abstract ICryptoTransform CreateDecryptor(byte[] rgbKey, byte[] rgbIV); public abstract void GenerateKey(); public abstract void GenerateIV(); } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== // // SymmetricAlgorithm.cs // namespace System.Security.Cryptography { [System.Runtime.InteropServices.ComVisible(true)] public abstract class SymmetricAlgorithm : IDisposable { protected int BlockSizeValue; protected int FeedbackSizeValue; protected byte[] IVValue; protected byte[] KeyValue; protected KeySizes[] LegalBlockSizesValue; protected KeySizes[] LegalKeySizesValue; protected int KeySizeValue; protected CipherMode ModeValue; protected PaddingMode PaddingValue; // // protected constructors // protected SymmetricAlgorithm() { // Default to cipher block chaining (CipherMode.CBC) and // PKCS-style padding (pad n bytes with value n) ModeValue = CipherMode.CBC; PaddingValue = PaddingMode.PKCS7; } // SymmetricAlgorithm implements IDisposable /// void IDisposable.Dispose() { Dispose(true); GC.SuppressFinalize(this); } public void Clear() { ((IDisposable) this).Dispose(); } protected virtual void Dispose(bool disposing) { if (disposing) { // Note: we always want to zeroize the sensitive key material if (KeyValue != null) { Array.Clear(KeyValue, 0, KeyValue.Length); KeyValue = null; } if (IVValue != null) { Array.Clear(IVValue, 0, IVValue.Length); IVValue = null; } } } // // public properties // public virtual int BlockSize { get { return BlockSizeValue; } set { int i; int j; for (i=0; i BlockSizeValue || (value % 8) != 0) throw new CryptographicException(Environment.GetResourceString("Cryptography_InvalidFeedbackSize")); FeedbackSizeValue = value; } } public virtual byte[] IV { get { if (IVValue == null) GenerateIV(); return (byte[]) IVValue.Clone(); } set { if (value == null) throw new ArgumentNullException("value"); if (value.Length != BlockSizeValue / 8) throw new CryptographicException(Environment.GetResourceString("Cryptography_InvalidIVSize")); IVValue = (byte[]) value.Clone(); } } public virtual byte[] Key { get { if (KeyValue == null) GenerateKey(); return (byte[]) KeyValue.Clone(); } set { if (value == null) throw new ArgumentNullException("value"); if (!ValidKeySize(value.Length * 8)) throw new CryptographicException(Environment.GetResourceString("Cryptography_InvalidKeySize")); // must convert bytes to bits KeyValue = (byte[]) value.Clone(); KeySizeValue = value.Length * 8; } } public virtual KeySizes[] LegalBlockSizes { get { return (KeySizes[]) LegalBlockSizesValue.Clone(); } } public virtual KeySizes[] LegalKeySizes { get { return (KeySizes[]) LegalKeySizesValue.Clone(); } } public virtual int KeySize { get { return KeySizeValue; } set { if (!ValidKeySize(value)) throw new CryptographicException(Environment.GetResourceString("Cryptography_InvalidKeySize")); KeySizeValue = value; KeyValue = null; } } public virtual CipherMode Mode { get { return ModeValue; } set { if ((value < CipherMode.CBC) || (CipherMode.CFB < value)) throw new CryptographicException(Environment.GetResourceString("Cryptography_InvalidCipherMode")); ModeValue = value; } } public virtual PaddingMode Padding { get { return PaddingValue; } set { if ((value < PaddingMode.None) || (PaddingMode.ISO10126 < value)) throw new CryptographicException(Environment.GetResourceString("Cryptography_InvalidPaddingMode")); PaddingValue = value; } } // // public methods // // The following method takes a bit length input and returns whether that length is a valid size // according to LegalKeySizes public bool ValidKeySize(int bitLength) { KeySizes[] validSizes = this.LegalKeySizes; int i,j; if (validSizes == null) return false; for (i=0; i< validSizes.Length; i++) { if (validSizes[i].SkipSize == 0) { if (validSizes[i].MinSize == bitLength) { // assume MinSize = MaxSize return true; } } else { for (j = validSizes[i].MinSize; j<= validSizes[i].MaxSize; j += validSizes[i].SkipSize) { if (j == bitLength) { return true; } } } } return false; } static public SymmetricAlgorithm Create() { // use the crypto config system to return an instance of // the default SymmetricAlgorithm on this machine return Create("System.Security.Cryptography.SymmetricAlgorithm"); } static public SymmetricAlgorithm Create(String algName) { return (SymmetricAlgorithm) CryptoConfig.CreateFromName(algName); } public virtual ICryptoTransform CreateEncryptor() { return CreateEncryptor(Key, IV); } public abstract ICryptoTransform CreateEncryptor(byte[] rgbKey, byte[] rgbIV); public virtual ICryptoTransform CreateDecryptor() { return CreateDecryptor(Key, IV); } public abstract ICryptoTransform CreateDecryptor(byte[] rgbKey, byte[] rgbIV); public abstract void GenerateKey(); public abstract void GenerateIV(); } } // 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
- DynamicObject.cs
- MimeMultiPart.cs
- GraphicsContainer.cs
- DatePickerAutomationPeer.cs
- TreeViewBindingsEditorForm.cs
- ColumnResult.cs
- AnimationTimeline.cs
- RoutingBehavior.cs
- FigureHelper.cs
- ChildTable.cs
- PropertyChangedEventArgs.cs
- LocalizableAttribute.cs
- WinEventTracker.cs
- DataStorage.cs
- EntityContainerAssociationSetEnd.cs
- CapacityStreamGeometryContext.cs
- DataServiceRequestArgs.cs
- NumberSubstitution.cs
- Int32Rect.cs
- UInt32.cs
- UrlMapping.cs
- ViewRendering.cs
- IntellisenseTextBox.cs
- AuthenticationService.cs
- BookmarkEventArgs.cs
- XmlSchemaSimpleTypeList.cs
- UriSectionReader.cs
- ComplexPropertyEntry.cs
- CodeParameterDeclarationExpression.cs
- CallbackHandler.cs
- DataMisalignedException.cs
- ArgumentException.cs
- WebWorkflowRole.cs
- XmlNamedNodeMap.cs
- RuleDefinitions.cs
- DbMetaDataFactory.cs
- RouteData.cs
- CustomMenuItemCollection.cs
- ButtonColumn.cs
- CompoundFileIOPermission.cs
- NameSpaceExtractor.cs
- DataFormat.cs
- MobileRedirect.cs
- ResourceKey.cs
- DataList.cs
- StorageEndPropertyMapping.cs
- CursorConverter.cs
- FontClient.cs
- StreamResourceInfo.cs
- EntityCommandCompilationException.cs
- IpcChannel.cs
- AnnotationComponentManager.cs
- ComPlusInstanceProvider.cs
- BackgroundWorker.cs
- XmlWrappingReader.cs
- ChineseLunisolarCalendar.cs
- ASCIIEncoding.cs
- QualificationDataAttribute.cs
- ProtocolsConfigurationHandler.cs
- EventListenerClientSide.cs
- DataGridViewSelectedRowCollection.cs
- DataGridViewDataErrorEventArgs.cs
- OdbcRowUpdatingEvent.cs
- Operators.cs
- Ray3DHitTestResult.cs
- DecoderBestFitFallback.cs
- EncryptedHeaderXml.cs
- ProxyHelper.cs
- FeatureAttribute.cs
- NativeMethods.cs
- ReceiveContextCollection.cs
- ContextBase.cs
- CompletionProxy.cs
- ObjectCloneHelper.cs
- NullableBoolConverter.cs
- DataServiceException.cs
- TabPage.cs
- CellParaClient.cs
- CommandID.cs
- GridViewDeleteEventArgs.cs
- activationcontext.cs
- WebServiceParameterData.cs
- SafeThreadHandle.cs
- SchemaImporter.cs
- VersionedStreamOwner.cs
- CurrencyManager.cs
- FigureParaClient.cs
- EntityFrameworkVersions.cs
- httpstaticobjectscollection.cs
- WorkflowOperationFault.cs
- Expression.cs
- InputBinding.cs
- LinearKeyFrames.cs
- ParameterBuilder.cs
- CallbackException.cs
- EqualityComparer.cs
- OrderPreservingPipeliningSpoolingTask.cs
- MetadataItemCollectionFactory.cs
- baseshape.cs
- DependencyStoreSurrogate.cs