// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
using System;
using System.Runtime.CompilerServices;
namespace System.Security.Cryptography {
///
/// Abstract base class for implementations of the AES algorithm
///
#if !FEATURE_CORECLR && !MOBILE
[TypeForwardedFrom("System.Core, Version=3.5.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089")]
#else // FEATURE_CORECLR
[TypeForwardedFrom("System.Core, Version=2.0.5.0, Culture=Neutral, PublicKeyToken=7cec85d7bea7798e")]
#endif // !FEATURE_CORECLR
public abstract class Aes : SymmetricAlgorithm {
private static KeySizes[] s_legalBlockSizes = { new KeySizes(128, 128, 0) };
private static KeySizes[] s_legalKeySizes = { new KeySizes(128, 256, 64) };
///
/// Setup the default values for AES encryption
///
protected Aes() {
LegalBlockSizesValue = s_legalBlockSizes;
LegalKeySizesValue = s_legalKeySizes;
BlockSizeValue = 128;
FeedbackSizeValue = 8;
KeySizeValue = 256;
ModeValue = CipherMode.CBC;
}
public static new Aes Create() {
#if MONOTOUCH
// The Aes base class was moved from System.Core to mscorlib - so we can't just return a new AesCryptoServiceProvider instance
// note: the linker is aware of this condition
return (Aes) Activator.CreateInstance (Type.GetType ("System.Security.Cryptography.AesManaged, " + Consts.AssemblySystem_Core));
#else
return Create("AES");
#endif
}
public static new Aes Create(string algorithmName) {
if (algorithmName == null) {
throw new ArgumentNullException("algorithmName");
}
return CryptoConfig.CreateFromName(algorithmName) as Aes;
}
}
}