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
- UriSectionReader.cs
- LayoutDump.cs
- SymbolPair.cs
- MarkupWriter.cs
- ObjectDataSourceStatusEventArgs.cs
- FileLogRecordHeader.cs
- DoubleAnimation.cs
- PassportAuthentication.cs
- DiscoveryOperationContextExtension.cs
- Encoder.cs
- _SSPISessionCache.cs
- Configuration.cs
- InterleavedZipPartStream.cs
- OpCodes.cs
- PrintDialog.cs
- RowsCopiedEventArgs.cs
- CapabilitiesSection.cs
- TextTreeObjectNode.cs
- ByteAnimationUsingKeyFrames.cs
- ImageListUtils.cs
- LogicalChannel.cs
- ElementProxy.cs
- EntitySetRetriever.cs
- SuppressMessageAttribute.cs
- LocationReference.cs
- ScaleTransform.cs
- InfoCardKeyedHashAlgorithm.cs
- DoubleConverter.cs
- ScrollContentPresenter.cs
- ProfilePropertySettings.cs
- GeneratedCodeAttribute.cs
- Geometry.cs
- ResXResourceReader.cs
- PolygonHotSpot.cs
- CustomLineCap.cs
- PresentationUIStyleResources.cs
- FixedSOMPageConstructor.cs
- EventPrivateKey.cs
- SaveLedgerEntryRequest.cs
- DataTableCollection.cs
- GlobalEventManager.cs
- TextParagraph.cs
- WebMethodAttribute.cs
- DurableInstanceProvider.cs
- FixedSOMLineCollection.cs
- DefaultAssemblyResolver.cs
- XamlStyleSerializer.cs
- KeyManager.cs
- DiscoveryClientDuplexChannel.cs
- MobileRedirect.cs
- XmlCDATASection.cs
- SendSecurityHeader.cs
- BinaryConverter.cs
- DependencyPropertyConverter.cs
- PageContentCollection.cs
- FindCriteria11.cs
- StylusCaptureWithinProperty.cs
- LookupBindingPropertiesAttribute.cs
- NameScope.cs
- DbgUtil.cs
- SettingsPropertyValueCollection.cs
- DesignTimeVisibleAttribute.cs
- ElementFactory.cs
- IpcManager.cs
- FilterEventArgs.cs
- UnSafeCharBuffer.cs
- SourceFileBuildProvider.cs
- ClientRequest.cs
- WebPartDisplayModeCollection.cs
- DesignerEditorPartChrome.cs
- WorkflowCommandExtensionItem.cs
- SerializationObjectManager.cs
- BindUriHelper.cs
- CodeStatementCollection.cs
- DataListItem.cs
- GlyphRunDrawing.cs
- DataGridViewRowCancelEventArgs.cs
- SinglePageViewer.cs
- MimeMapping.cs
- WindowsRichEditRange.cs
- MatrixAnimationUsingPath.cs
- BitmapMetadataBlob.cs
- SqlCacheDependency.cs
- TraceHandlerErrorFormatter.cs
- DoubleLinkListEnumerator.cs
- MultiSelector.cs
- BindingsCollection.cs
- ListSortDescription.cs
- SystemUdpStatistics.cs
- BamlBinaryReader.cs
- ImageField.cs
- MaskedTextBox.cs
- SiteMapDataSourceView.cs
- StateDesignerConnector.cs
- HttpResponse.cs
- ImageConverter.cs
- SecurityAlgorithmSuiteConverter.cs
- TrackingParameters.cs
- StylusDownEventArgs.cs
- RegexWriter.cs