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
- MetadataWorkspace.cs
- Metafile.cs
- PieceNameHelper.cs
- MarshalDirectiveException.cs
- QueryableDataSourceEditData.cs
- TabOrder.cs
- AutomationEvent.cs
- OdbcEnvironment.cs
- XmlSignatureProperties.cs
- AuditLogLocation.cs
- DataAdapter.cs
- TimeEnumHelper.cs
- MailAddress.cs
- GroupDescription.cs
- InvokerUtil.cs
- InOutArgumentConverter.cs
- XmlDigitalSignatureProcessor.cs
- DuplicateWaitObjectException.cs
- EntityDataSourceDataSelection.cs
- XmlQueryTypeFactory.cs
- HandlerFactoryWrapper.cs
- GeneralTransformGroup.cs
- IndentedTextWriter.cs
- MethodCallConverter.cs
- AnnotationComponentManager.cs
- ResXDataNode.cs
- SafeNativeMethodsMilCoreApi.cs
- InteropAutomationProvider.cs
- EncryptedPackageFilter.cs
- ListBase.cs
- ClientScriptItem.cs
- SessionParameter.cs
- QueryExpression.cs
- MailMessage.cs
- NotifyCollectionChangedEventArgs.cs
- CreateUserWizardStep.cs
- X500Name.cs
- ColumnWidthChangingEvent.cs
- OAVariantLib.cs
- SecurityHeaderLayout.cs
- LogFlushAsyncResult.cs
- DocumentViewerAutomationPeer.cs
- DBConnection.cs
- DesignerCapabilities.cs
- TextRenderer.cs
- DesignParameter.cs
- SqlWebEventProvider.cs
- DataGridAutoFormat.cs
- sqlser.cs
- DataTableMapping.cs
- ExpressionBinding.cs
- ReadWriteSpinLock.cs
- ToggleButton.cs
- MetadataArtifactLoaderCompositeResource.cs
- TextTreeUndoUnit.cs
- ProtectedConfigurationSection.cs
- BindToObject.cs
- DocumentGrid.cs
- KeyedByTypeCollection.cs
- CachingParameterInspector.cs
- Cursors.cs
- DbConnectionHelper.cs
- PackUriHelper.cs
- HttpCachePolicyElement.cs
- SetStateEventArgs.cs
- SqlGenericUtil.cs
- Crypto.cs
- LinkLabelLinkClickedEvent.cs
- PtsCache.cs
- ColorMap.cs
- ContentDesigner.cs
- ParentQuery.cs
- EndpointDiscoveryBehavior.cs
- HashCodeCombiner.cs
- ToolBarButton.cs
- TextPointer.cs
- TextLine.cs
- ManipulationPivot.cs
- XmlArrayAttribute.cs
- OrderedDictionary.cs
- DelegatingConfigHost.cs
- NameObjectCollectionBase.cs
- UnaryOperationBinder.cs
- MemberAssignmentAnalysis.cs
- PropertyValueChangedEvent.cs
- FilterException.cs
- UrlMappingsModule.cs
- LocalBuilder.cs
- PointLight.cs
- Token.cs
- EndpointAddressMessageFilter.cs
- Executor.cs
- ObjectViewQueryResultData.cs
- ComplexTypeEmitter.cs
- SqlCommand.cs
- ipaddressinformationcollection.cs
- HtmlFormWrapper.cs
- Table.cs
- VariantWrapper.cs
- SystemIcmpV6Statistics.cs