Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / BCL / System / Security / Cryptography / RijndaelManaged.cs / 1305376 / RijndaelManaged.cs
using System.Diagnostics.Contracts; // ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== //[....] // // // RijndaelManaged.cs // namespace System.Security.Cryptography { [System.Runtime.InteropServices.ComVisible(true)] public sealed class RijndaelManaged : Rijndael { public RijndaelManaged () { #if FEATURE_CRYPTO if (CryptoConfig.AllowOnlyFipsAlgorithms) throw new InvalidOperationException(Environment.GetResourceString("Cryptography_NonCompliantFIPSAlgorithm")); Contract.EndContractBlock(); #endif // FEATURE_CRYPTO } // #CoreCLRRijndaelModes // // On CoreCLR we limit the supported cipher modes and padding modes for the AES algorithm to a // single hard coded value. This allows us to remove a lot of code by removing support for the // uncommon cases and forcing everyone to use the same common padding and ciper modes: // // - CipherMode: CipherMode.CBC // - PaddingMode: PaddingMode.PKCS7 public override ICryptoTransform CreateEncryptor (byte[] rgbKey, byte[] rgbIV) { return NewEncryptor(rgbKey, ModeValue, rgbIV, FeedbackSizeValue, RijndaelManagedTransformMode.Encrypt); } public override ICryptoTransform CreateDecryptor (byte[] rgbKey, byte[] rgbIV) { return NewEncryptor(rgbKey, ModeValue, rgbIV, FeedbackSizeValue, RijndaelManagedTransformMode.Decrypt); } public override void GenerateKey () { KeyValue = Utils.GenerateRandom(KeySizeValue / 8); } public override void GenerateIV () { IVValue = Utils.GenerateRandom(BlockSizeValue / 8); } private ICryptoTransform NewEncryptor (byte[] rgbKey, CipherMode mode, byte[] rgbIV, int feedbackSize, RijndaelManagedTransformMode encryptMode) { // Build the key if one does not already exist if (rgbKey == null) { rgbKey = Utils.GenerateRandom(KeySizeValue / 8); } // If not ECB mode, make sure we have an IV. In CoreCLR we do not support ECB, so we must have // an IV in all cases. #if !FEATURE_CRYPTO if (mode != CipherMode.ECB) { #endif // !FEATURE_CRYPTO if (rgbIV == null) { rgbIV = Utils.GenerateRandom(BlockSizeValue / 8); } #if !FEATURE_CRYPTO } #endif // !FEATURE_CRYPTO // Create the encryptor/decryptor object return new RijndaelManagedTransform (rgbKey, mode, rgbIV, BlockSizeValue, feedbackSize, PaddingValue, encryptMode); } } } // 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. // // ==--== //[....] // // // RijndaelManaged.cs // namespace System.Security.Cryptography { [System.Runtime.InteropServices.ComVisible(true)] public sealed class RijndaelManaged : Rijndael { public RijndaelManaged () { #if FEATURE_CRYPTO if (CryptoConfig.AllowOnlyFipsAlgorithms) throw new InvalidOperationException(Environment.GetResourceString("Cryptography_NonCompliantFIPSAlgorithm")); Contract.EndContractBlock(); #endif // FEATURE_CRYPTO } // #CoreCLRRijndaelModes // // On CoreCLR we limit the supported cipher modes and padding modes for the AES algorithm to a // single hard coded value. This allows us to remove a lot of code by removing support for the // uncommon cases and forcing everyone to use the same common padding and ciper modes: // // - CipherMode: CipherMode.CBC // - PaddingMode: PaddingMode.PKCS7 public override ICryptoTransform CreateEncryptor (byte[] rgbKey, byte[] rgbIV) { return NewEncryptor(rgbKey, ModeValue, rgbIV, FeedbackSizeValue, RijndaelManagedTransformMode.Encrypt); } public override ICryptoTransform CreateDecryptor (byte[] rgbKey, byte[] rgbIV) { return NewEncryptor(rgbKey, ModeValue, rgbIV, FeedbackSizeValue, RijndaelManagedTransformMode.Decrypt); } public override void GenerateKey () { KeyValue = Utils.GenerateRandom(KeySizeValue / 8); } public override void GenerateIV () { IVValue = Utils.GenerateRandom(BlockSizeValue / 8); } private ICryptoTransform NewEncryptor (byte[] rgbKey, CipherMode mode, byte[] rgbIV, int feedbackSize, RijndaelManagedTransformMode encryptMode) { // Build the key if one does not already exist if (rgbKey == null) { rgbKey = Utils.GenerateRandom(KeySizeValue / 8); } // If not ECB mode, make sure we have an IV. In CoreCLR we do not support ECB, so we must have // an IV in all cases. #if !FEATURE_CRYPTO if (mode != CipherMode.ECB) { #endif // !FEATURE_CRYPTO if (rgbIV == null) { rgbIV = Utils.GenerateRandom(BlockSizeValue / 8); } #if !FEATURE_CRYPTO } #endif // !FEATURE_CRYPTO // Create the encryptor/decryptor object return new RijndaelManagedTransform (rgbKey, mode, rgbIV, BlockSizeValue, feedbackSize, PaddingValue, encryptMode); } } } // 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
- ToolStripItemEventArgs.cs
- MailSettingsSection.cs
- RIPEMD160.cs
- DomNameTable.cs
- DeclaredTypeElement.cs
- FileUtil.cs
- ItemList.cs
- DataColumnSelectionConverter.cs
- BamlResourceContent.cs
- TextBoxBase.cs
- SqlExpressionNullability.cs
- Cursor.cs
- MetadataImporter.cs
- ValueQuery.cs
- CacheForPrimitiveTypes.cs
- XmlSortKeyAccumulator.cs
- DummyDataSource.cs
- PerformanceCounterLib.cs
- ProviderManager.cs
- serverconfig.cs
- SessionPageStatePersister.cs
- RotateTransform3D.cs
- XmlWellformedWriter.cs
- UIElementHelper.cs
- DataBinding.cs
- TableRowGroup.cs
- ComponentTray.cs
- RectangleGeometry.cs
- _UriTypeConverter.cs
- FontCollection.cs
- DataSourceDesigner.cs
- RuntimeHelpers.cs
- CryptoStream.cs
- HMAC.cs
- HeaderElement.cs
- entitydatasourceentitysetnameconverter.cs
- AppDomainFactory.cs
- DataGridItem.cs
- WebPartUserCapability.cs
- ImageMap.cs
- _Connection.cs
- SqlLiftWhereClauses.cs
- Transform3DGroup.cs
- RequestCache.cs
- RawTextInputReport.cs
- GradientBrush.cs
- FilterEventArgs.cs
- VirtualPathProvider.cs
- HashStream.cs
- Int32Converter.cs
- PropertyGroupDescription.cs
- XmlSchemaSimpleTypeList.cs
- COM2ICategorizePropertiesHandler.cs
- DbConnectionHelper.cs
- XsdBuilder.cs
- CompoundFileStorageReference.cs
- PasswordTextNavigator.cs
- Constants.cs
- HttpHeaderCollection.cs
- BlockingCollection.cs
- HttpCacheVaryByContentEncodings.cs
- HtmlWindow.cs
- DataControlCommands.cs
- MailMessage.cs
- MessageDirection.cs
- Optimizer.cs
- DerivedKeySecurityToken.cs
- Int16AnimationUsingKeyFrames.cs
- HtmlInputReset.cs
- LocationReferenceEnvironment.cs
- OleTxTransaction.cs
- TransactionManager.cs
- BindingContext.cs
- SpeechAudioFormatInfo.cs
- DSACryptoServiceProvider.cs
- SmiMetaDataProperty.cs
- DataGridViewRowConverter.cs
- BitmapSourceSafeMILHandle.cs
- DataGridViewCellStateChangedEventArgs.cs
- MetadataArtifactLoaderCompositeResource.cs
- XmlTypeMapping.cs
- SmtpSection.cs
- TreeNode.cs
- EntityContainerRelationshipSetEnd.cs
- ProcessHostMapPath.cs
- QuadraticBezierSegment.cs
- SQLBinary.cs
- WeakHashtable.cs
- GuidelineCollection.cs
- SafeUserTokenHandle.cs
- ResolveDuplex11AsyncResult.cs
- ThemeDirectoryCompiler.cs
- MessageDecoder.cs
- RepeatInfo.cs
- ResourceExpressionEditorSheet.cs
- ValueType.cs
- BamlStream.cs
- Button.cs
- cryptoapiTransform.cs
- SafeNativeMethods.cs