Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Core / System / Security / Cryptography / AesManaged.cs / 1305376 / AesManaged.cs
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
using System;
#if !SILVERLIGHT
using System.Diagnostics.Contracts;
#endif // !SILVERLIGHT
namespace System.Security.Cryptography {
///
/// Managed implementation of the AES algorithm. AES is esentially Rijndael with a fixed block size
/// and iteration count, so we just wrap the RijndaelManaged class and allow only 128 bit blocks to
/// be used.
///
public sealed class AesManaged : Aes {
private RijndaelManaged m_rijndael;
public AesManaged() {
#if !SILVERLIGHT
Contract.Ensures(m_rijndael != null);
if (CryptoConfig.AllowOnlyFipsAlgorithms) {
throw new InvalidOperationException(SR.GetString(SR.Cryptography_NonCompliantFIPSAlgorithm));
}
#endif // !SILVERLIGHT
m_rijndael = new RijndaelManaged();
m_rijndael.BlockSize = BlockSize;
m_rijndael.KeySize = KeySize;
}
#if !SILVERLIGHT
public override int FeedbackSize {
get { return m_rijndael.FeedbackSize; }
set { m_rijndael.FeedbackSize = value; }
}
#endif // !SILVERLIGHT
public override byte[] IV {
get { return m_rijndael.IV; }
set { m_rijndael.IV = value; }
}
public override byte[] Key {
get { return m_rijndael.Key; }
set { m_rijndael.Key = value; }
}
public override int KeySize {
get { return m_rijndael.KeySize; }
set { m_rijndael.KeySize = value; }
}
#if !SILVERLIGHT
public override CipherMode Mode {
get { return m_rijndael.Mode; }
set {
Contract.Ensures(m_rijndael.Mode != CipherMode.CFB && m_rijndael.Mode != CipherMode.OFB);
// RijndaelManaged will implicitly change the block size of an algorithm to match the number
// of feedback bits being used. Since AES requires a block size of 128 bits, we cannot allow
// the user to use the feedback modes, as this will end up breaking that invarient.
if (value == CipherMode.CFB || value == CipherMode.OFB) {
throw new CryptographicException(SR.GetString(SR.Cryptography_InvalidCipherMode));
}
m_rijndael.Mode = value;
}
}
public override PaddingMode Padding {
get { return m_rijndael.Padding; }
set { m_rijndael.Padding = value; }
}
#endif // !SILVERLIGHT
public override ICryptoTransform CreateDecryptor() {
return m_rijndael.CreateDecryptor();
}
public override ICryptoTransform CreateDecryptor(byte[] key, byte[] iv) {
if (key == null) {
throw new ArgumentNullException("key");
}
#if !SILVERLIGHT
if (!ValidKeySize(key.Length * 8)) {
throw new ArgumentException(SR.GetString(SR.Cryptography_InvalidKeySize), "key");
}
if (iv != null && iv.Length * 8 != BlockSizeValue) {
throw new ArgumentException(SR.GetString(SR.Cryptography_InvalidIVSize), "iv");
}
#endif
return m_rijndael.CreateDecryptor(key, iv);
}
public override ICryptoTransform CreateEncryptor() {
return m_rijndael.CreateEncryptor();
}
public override ICryptoTransform CreateEncryptor(byte[] key, byte[] iv) {
if (key == null) {
throw new ArgumentNullException("key");
}
#if !SILVERLIGHT
if (!ValidKeySize(key.Length * 8)) {
throw new ArgumentException(SR.GetString(SR.Cryptography_InvalidKeySize), "key");
}
if (iv != null && iv.Length * 8 != BlockSizeValue) {
throw new ArgumentException(SR.GetString(SR.Cryptography_InvalidIVSize), "iv");
}
#endif // SILVERLIGHT
return m_rijndael.CreateEncryptor(key, iv);
}
protected override void Dispose(bool disposing) {
try {
if (disposing) {
(m_rijndael as IDisposable).Dispose();
}
}
finally {
base.Dispose(disposing);
}
}
public override void GenerateIV() {
m_rijndael.GenerateIV();
}
public override void GenerateKey() {
m_rijndael.GenerateKey();
}
}
}
// 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
- XmlSchemaObjectCollection.cs
- DesignSurfaceCollection.cs
- DefaultProxySection.cs
- ImageEditor.cs
- UserControlCodeDomTreeGenerator.cs
- BezierSegment.cs
- InfoCardSymmetricCrypto.cs
- StatusBarItemAutomationPeer.cs
- XsdBuilder.cs
- DataGridViewTopRowAccessibleObject.cs
- XmlAttributeOverrides.cs
- DataGridViewRowHeightInfoNeededEventArgs.cs
- XmlSchemaDatatype.cs
- NativeMethodsOther.cs
- EntityContainerEntitySet.cs
- TimersDescriptionAttribute.cs
- EntityDataSourceEntitySetNameItem.cs
- DataTablePropertyDescriptor.cs
- EntityDataSourceContextDisposingEventArgs.cs
- sqlpipe.cs
- DrawingAttributes.cs
- ComplusEndpointConfigContainer.cs
- Thread.cs
- HandlerFactoryCache.cs
- lengthconverter.cs
- SEHException.cs
- GeometryConverter.cs
- ControlAdapter.cs
- MenuRenderer.cs
- TableRowCollection.cs
- FigureParaClient.cs
- UnmanagedHandle.cs
- BitStack.cs
- SortDescriptionCollection.cs
- JpegBitmapEncoder.cs
- CodeVariableDeclarationStatement.cs
- FormViewPageEventArgs.cs
- DispatcherExceptionFilterEventArgs.cs
- SqlDependencyUtils.cs
- MetadataArtifactLoaderResource.cs
- Vector.cs
- XmlWellformedWriter.cs
- ClientSettingsSection.cs
- DetailsViewPagerRow.cs
- TypeDelegator.cs
- CollectionViewGroupRoot.cs
- LocalizationComments.cs
- DrawingVisualDrawingContext.cs
- MetadataItemEmitter.cs
- NameValueSectionHandler.cs
- OrderedDictionaryStateHelper.cs
- LoginDesignerUtil.cs
- NetCodeGroup.cs
- SequentialUshortCollection.cs
- MailAddress.cs
- SqlInternalConnection.cs
- RowUpdatedEventArgs.cs
- XmlSchemaType.cs
- BooleanToVisibilityConverter.cs
- ADRoleFactoryConfiguration.cs
- WinFormsComponentEditor.cs
- ProtocolElement.cs
- ListenerConnectionModeReader.cs
- ProcessProtocolHandler.cs
- regiisutil.cs
- ValueUtilsSmi.cs
- SeparatorAutomationPeer.cs
- securitymgrsite.cs
- QueryExpression.cs
- XPathPatternParser.cs
- Convert.cs
- SoapInteropTypes.cs
- RewritingSimplifier.cs
- NullableConverter.cs
- ConstraintManager.cs
- ValidationResult.cs
- TypeUtils.cs
- BrowserDefinitionCollection.cs
- QilInvoke.cs
- TcpDuplicateContext.cs
- InstanceBehavior.cs
- WindowsPrincipal.cs
- Span.cs
- ImportDesigner.xaml.cs
- DesignTimeTemplateParser.cs
- CodeArgumentReferenceExpression.cs
- Triangle.cs
- NativeMethods.cs
- Missing.cs
- Validator.cs
- SafeFileMappingHandle.cs
- GroupItem.cs
- SchemaImporterExtensionElement.cs
- SamlConditions.cs
- HierarchicalDataSourceControl.cs
- NameValuePermission.cs
- TableHeaderCell.cs
- CubicEase.cs
- SecurityTokenResolver.cs
- SQLCharsStorage.cs