# System.Security.Cryptography ``` diff +namespace System.Security.Cryptography { + public abstract class Aes : SymmetricAlgorithm { + protected Aes(); + public override KeySizes[] LegalBlockSizes { get; } + public override KeySizes[] LegalKeySizes { get; } + public static Aes Create(); + } + public sealed class AesCng : Aes { + public AesCng(); + public AesCng(string keyName); + public AesCng(string keyName, CngProvider provider); + public AesCng(string keyName, CngProvider provider, CngKeyOpenOptions openOptions); + public override byte[] Key { get; set; } + public override int KeySize { get; set; } + public override ICryptoTransform CreateDecryptor(); + public override ICryptoTransform CreateDecryptor(byte[] rgbKey, byte[] rgbIV); + public override ICryptoTransform CreateEncryptor(); + public override ICryptoTransform CreateEncryptor(byte[] rgbKey, byte[] rgbIV); + protected override void Dispose(bool disposing); + public override void GenerateIV(); + public override void GenerateKey(); + } + public class AsnEncodedData { + protected AsnEncodedData(); + public AsnEncodedData(byte[] rawData); + public AsnEncodedData(AsnEncodedData asnEncodedData); + public AsnEncodedData(Oid oid, byte[] rawData); + public AsnEncodedData(string oid, byte[] rawData); + public Oid Oid { get; set; } + public byte[] RawData { get; set; } + public virtual void CopyFrom(AsnEncodedData asnEncodedData); + public virtual string Format(bool multiLine); + } + public sealed class AsnEncodedDataCollection : ICollection, IEnumerable { + public AsnEncodedDataCollection(); + public AsnEncodedDataCollection(AsnEncodedData asnEncodedData); + public int Count { get; } + bool System.Collections.ICollection.IsSynchronized { get; } + object System.Collections.ICollection.SyncRoot { get; } + public AsnEncodedData this[int index] { get; } + public int Add(AsnEncodedData asnEncodedData); + public void CopyTo(AsnEncodedData[] array, int index); + public AsnEncodedDataEnumerator GetEnumerator(); + public void Remove(AsnEncodedData asnEncodedData); + void System.Collections.ICollection.CopyTo(Array array, int index); + IEnumerator System.Collections.IEnumerable.GetEnumerator(); + } + public sealed class AsnEncodedDataEnumerator : IEnumerator { + public AsnEncodedData Current { get; } + object System.Collections.IEnumerator.Current { get; } + public bool MoveNext(); + public void Reset(); + } + public abstract class AsymmetricAlgorithm : IDisposable { + protected int KeySizeValue; + protected KeySizes[] LegalKeySizesValue; + protected AsymmetricAlgorithm(); + public virtual int KeySize { get; set; } + public virtual KeySizes[] LegalKeySizes { get; } + public void Dispose(); + protected virtual void Dispose(bool disposing); + } + public enum CipherMode { + CBC = 1, + CTS = 5, + ECB = 2, + } + public sealed class CngAlgorithm : IEquatable { + public CngAlgorithm(string algorithm); + public string Algorithm { get; } + public static CngAlgorithm ECDiffieHellman { get; } + public static CngAlgorithm ECDiffieHellmanP256 { get; } + public static CngAlgorithm ECDiffieHellmanP384 { get; } + public static CngAlgorithm ECDiffieHellmanP521 { get; } + public static CngAlgorithm ECDsa { get; } + public static CngAlgorithm ECDsaP256 { get; } + public static CngAlgorithm ECDsaP384 { get; } + public static CngAlgorithm ECDsaP521 { get; } + public static CngAlgorithm MD5 { get; } + public static CngAlgorithm Rsa { get; } + public static CngAlgorithm Sha1 { get; } + public static CngAlgorithm Sha256 { get; } + public static CngAlgorithm Sha384 { get; } + public static CngAlgorithm Sha512 { get; } + public override bool Equals(object obj); + public bool Equals(CngAlgorithm other); + public override int GetHashCode(); + public static bool operator ==(CngAlgorithm left, CngAlgorithm right); + public static bool operator !=(CngAlgorithm left, CngAlgorithm right); + public override string ToString(); + } + public sealed class CngAlgorithmGroup : IEquatable { + public CngAlgorithmGroup(string algorithmGroup); + public string AlgorithmGroup { get; } + public static CngAlgorithmGroup DiffieHellman { get; } + public static CngAlgorithmGroup Dsa { get; } + public static CngAlgorithmGroup ECDiffieHellman { get; } + public static CngAlgorithmGroup ECDsa { get; } + public static CngAlgorithmGroup Rsa { get; } + public override bool Equals(object obj); + public bool Equals(CngAlgorithmGroup other); + public override int GetHashCode(); + public static bool operator ==(CngAlgorithmGroup left, CngAlgorithmGroup right); + public static bool operator !=(CngAlgorithmGroup left, CngAlgorithmGroup right); + public override string ToString(); + } + public enum CngExportPolicies { + AllowArchiving = 4, + AllowExport = 1, + AllowPlaintextArchiving = 8, + AllowPlaintextExport = 2, + None = 0, + } + public sealed class CngKey : IDisposable { + public CngAlgorithm Algorithm { get; } + public CngAlgorithmGroup AlgorithmGroup { get; } + public CngExportPolicies ExportPolicy { get; } + public SafeNCryptKeyHandle Handle { get; } + public bool IsEphemeral { get; } + public bool IsMachineKey { get; } + public string KeyName { get; } + public int KeySize { get; } + public CngKeyUsages KeyUsage { get; } + public IntPtr ParentWindowHandle { get; set; } + public CngProvider Provider { get; } + public SafeNCryptProviderHandle ProviderHandle { get; } + public CngUIPolicy UIPolicy { get; } + public string UniqueName { get; } + public static CngKey Create(CngAlgorithm algorithm); + public static CngKey Create(CngAlgorithm algorithm, string keyName); + public static CngKey Create(CngAlgorithm algorithm, string keyName, CngKeyCreationParameters creationParameters); + public void Delete(); + public void Dispose(); + public static bool Exists(string keyName); + public static bool Exists(string keyName, CngProvider provider); + public static bool Exists(string keyName, CngProvider provider, CngKeyOpenOptions options); + public byte[] Export(CngKeyBlobFormat format); + public CngProperty GetProperty(string name, CngPropertyOptions options); + public bool HasProperty(string name, CngPropertyOptions options); + public static CngKey Import(byte[] keyBlob, CngKeyBlobFormat format); + public static CngKey Import(byte[] keyBlob, CngKeyBlobFormat format, CngProvider provider); + public static CngKey Open(SafeNCryptKeyHandle keyHandle, CngKeyHandleOpenOptions keyHandleOpenOptions); + public static CngKey Open(string keyName); + public static CngKey Open(string keyName, CngProvider provider); + public static CngKey Open(string keyName, CngProvider provider, CngKeyOpenOptions openOptions); + public void SetProperty(CngProperty property); + } + public sealed class CngKeyBlobFormat : IEquatable { + public CngKeyBlobFormat(string format); + public static CngKeyBlobFormat EccFullPrivateBlob { get; } + public static CngKeyBlobFormat EccFullPublicBlob { get; } + public static CngKeyBlobFormat EccPrivateBlob { get; } + public static CngKeyBlobFormat EccPublicBlob { get; } + public string Format { get; } + public static CngKeyBlobFormat GenericPrivateBlob { get; } + public static CngKeyBlobFormat GenericPublicBlob { get; } + public static CngKeyBlobFormat OpaqueTransportBlob { get; } + public static CngKeyBlobFormat Pkcs8PrivateBlob { get; } + public override bool Equals(object obj); + public bool Equals(CngKeyBlobFormat other); + public override int GetHashCode(); + public static bool operator ==(CngKeyBlobFormat left, CngKeyBlobFormat right); + public static bool operator !=(CngKeyBlobFormat left, CngKeyBlobFormat right); + public override string ToString(); + } + public enum CngKeyCreationOptions { + MachineKey = 32, + None = 0, + OverwriteExistingKey = 128, + } + public sealed class CngKeyCreationParameters { + public CngKeyCreationParameters(); + public Nullable ExportPolicy { get; set; } + public CngKeyCreationOptions KeyCreationOptions { get; set; } + public Nullable KeyUsage { get; set; } + public CngPropertyCollection Parameters { get; } + public IntPtr ParentWindowHandle { get; set; } + public CngProvider Provider { get; set; } + public CngUIPolicy UIPolicy { get; set; } + } + public enum CngKeyHandleOpenOptions { + EphemeralKey = 1, + None = 0, + } + public enum CngKeyOpenOptions { + MachineKey = 32, + None = 0, + Silent = 64, + UserKey = 0, + } + public enum CngKeyUsages { + AllUsages = 16777215, + Decryption = 1, + KeyAgreement = 4, + None = 0, + Signing = 2, + } + [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)] + public struct CngProperty : IEquatable { + public CngProperty(string name, byte[] value, CngPropertyOptions options); + public string Name { get; } + public CngPropertyOptions Options { get; } + public override bool Equals(object obj); + public bool Equals(CngProperty other); + public override int GetHashCode(); + public byte[] GetValue(); + public static bool operator ==(CngProperty left, CngProperty right); + public static bool operator !=(CngProperty left, CngProperty right); + } + public sealed class CngPropertyCollection : Collection { + public CngPropertyCollection(); + } + public enum CngPropertyOptions { + CustomProperty = 1073741824, + None = 0, + Persist = -2147483648, + } + public sealed class CngProvider : IEquatable { + public CngProvider(string provider); + public static CngProvider MicrosoftSmartCardKeyStorageProvider { get; } + public static CngProvider MicrosoftSoftwareKeyStorageProvider { get; } + public string Provider { get; } + public override bool Equals(object obj); + public bool Equals(CngProvider other); + public override int GetHashCode(); + public static bool operator ==(CngProvider left, CngProvider right); + public static bool operator !=(CngProvider left, CngProvider right); + public override string ToString(); + } + public sealed class CngUIPolicy { + public CngUIPolicy(CngUIProtectionLevels protectionLevel); + public CngUIPolicy(CngUIProtectionLevels protectionLevel, string friendlyName); + public CngUIPolicy(CngUIProtectionLevels protectionLevel, string friendlyName, string description); + public CngUIPolicy(CngUIProtectionLevels protectionLevel, string friendlyName, string description, string useContext); + public CngUIPolicy(CngUIProtectionLevels protectionLevel, string friendlyName, string description, string useContext, string creationTitle); + public string CreationTitle { get; } + public string Description { get; } + public string FriendlyName { get; } + public CngUIProtectionLevels ProtectionLevel { get; } + public string UseContext { get; } + } + public enum CngUIProtectionLevels { + ForceHighProtection = 2, + None = 0, + ProtectKey = 1, + } + public sealed class CryptographicAttributeObject { + public CryptographicAttributeObject(Oid oid); + public CryptographicAttributeObject(Oid oid, AsnEncodedDataCollection values); + public Oid Oid { get; } + public AsnEncodedDataCollection Values { get; } + } + public sealed class CryptographicAttributeObjectCollection : ICollection, IEnumerable { + public CryptographicAttributeObjectCollection(); + public CryptographicAttributeObjectCollection(CryptographicAttributeObject attribute); + public int Count { get; } + bool System.Collections.ICollection.IsSynchronized { get; } + object System.Collections.ICollection.SyncRoot { get; } + public CryptographicAttributeObject this[int index] { get; } + public int Add(AsnEncodedData asnEncodedData); + public int Add(CryptographicAttributeObject attribute); + public void CopyTo(CryptographicAttributeObject[] array, int index); + public CryptographicAttributeObjectEnumerator GetEnumerator(); + public void Remove(CryptographicAttributeObject attribute); + void System.Collections.ICollection.CopyTo(Array array, int index); + IEnumerator System.Collections.IEnumerable.GetEnumerator(); + } + public sealed class CryptographicAttributeObjectEnumerator : IEnumerator { + public CryptographicAttributeObject Current { get; } + object System.Collections.IEnumerator.Current { get; } + public bool MoveNext(); + public void Reset(); + } + public class CryptographicException : Exception { + public CryptographicException(); + public CryptographicException(int hr); + public CryptographicException(string message); + public CryptographicException(string message, Exception inner); + public CryptographicException(string format, string insert); + } + public class CryptoStream : Stream, IDisposable { + public CryptoStream(Stream stream, ICryptoTransform transform, CryptoStreamMode mode); + public override bool CanRead { get; } + public override bool CanSeek { get; } + public override bool CanWrite { get; } + public bool HasFlushedFinalBlock { get; } + public override long Length { get; } + public override long Position { get; set; } + protected override void Dispose(bool disposing); + public override void Flush(); + public override Task FlushAsync(CancellationToken cancellationToken); + public void FlushFinalBlock(); + public override int Read(byte[] buffer, int offset, int count); + public override Task ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken); + public override long Seek(long offset, SeekOrigin origin); + public override void SetLength(long value); + public override void Write(byte[] buffer, int offset, int count); + public override Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken); + } + public enum CryptoStreamMode { + Read = 0, + Write = 1, + } + public sealed class CspKeyContainerInfo { + public CspKeyContainerInfo(CspParameters parameters); + public bool Accessible { get; } + public bool Exportable { get; } + public bool HardwareDevice { get; } + public string KeyContainerName { get; } + public KeyNumber KeyNumber { get; } + public bool MachineKeyStore { get; } + public bool Protected { get; } + public string ProviderName { get; } + public int ProviderType { get; } + public bool RandomlyGenerated { get; } + public bool Removable { get; } + public string UniqueKeyContainerName { get; } + } + public sealed class CspParameters { + public int KeyNumber; + public int ProviderType; + public string KeyContainerName; + public string ProviderName; + public CspParameters(); + public CspParameters(int dwTypeIn); + public CspParameters(int dwTypeIn, string strProviderNameIn); + public CspParameters(int dwTypeIn, string strProviderNameIn, string strContainerNameIn); + public CspProviderFlags Flags { get; set; } + public IntPtr ParentWindowHandle { get; set; } + } + public enum CspProviderFlags { + CreateEphemeralKey = 128, + NoFlags = 0, + NoPrompt = 64, + UseArchivableKey = 16, + UseDefaultKeyContainer = 2, + UseExistingKey = 8, + UseMachineKeyStore = 1, + UseNonExportableKey = 4, + UseUserProtectedKey = 32, + } + public enum DataProtectionScope { + CurrentUser = 0, + LocalMachine = 1, + } + public abstract class DeriveBytes : IDisposable { + protected DeriveBytes(); + public void Dispose(); + protected virtual void Dispose(bool disposing); + public abstract byte[] GetBytes(int cb); + public abstract void Reset(); + } + [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)] + public struct ECCurve { + public ECCurve.ECCurveType CurveType; + public byte[] A; + public byte[] B; + public byte[] Cofactor; + public byte[] Order; + public byte[] Polynomial; + public byte[] Prime; + public byte[] Seed; + public Nullable Hash; + public ECPoint G; + public bool IsCharacteristic2 { get; } + public bool IsExplicit { get; } + public bool IsNamed { get; } + public bool IsPrime { get; } + public Oid Oid { get; } + public static ECCurve CreateFromFriendlyName(string oidFriendlyName); + public static ECCurve CreateFromOid(Oid curveOid); + public static ECCurve CreateFromValue(string oidValue); + public void Validate(); + public enum ECCurveType { + Characteristic2 = 4, + Implicit = 0, + Named = 5, + PrimeMontgomery = 3, + PrimeShortWeierstrass = 1, + PrimeTwistedEdwards = 2, + } + public static class NamedCurves { + public static ECCurve brainpoolP160r1 { get; } + public static ECCurve brainpoolP160t1 { get; } + public static ECCurve brainpoolP192r1 { get; } + public static ECCurve brainpoolP192t1 { get; } + public static ECCurve brainpoolP224r1 { get; } + public static ECCurve brainpoolP224t1 { get; } + public static ECCurve brainpoolP256r1 { get; } + public static ECCurve brainpoolP256t1 { get; } + public static ECCurve brainpoolP320r1 { get; } + public static ECCurve brainpoolP320t1 { get; } + public static ECCurve brainpoolP384r1 { get; } + public static ECCurve brainpoolP384t1 { get; } + public static ECCurve brainpoolP512r1 { get; } + public static ECCurve brainpoolP512t1 { get; } + public static ECCurve nistP256 { get; } + public static ECCurve nistP384 { get; } + public static ECCurve nistP521 { get; } + } + } + public abstract class ECDsa : AsymmetricAlgorithm { + protected ECDsa(); + public static ECDsa Create(); + public static ECDsa Create(ECCurve curve); + public static ECDsa Create(ECParameters parameters); + public virtual ECParameters ExportExplicitParameters(bool includePrivateParameters); + public virtual ECParameters ExportParameters(bool includePrivateParameters); + public virtual void GenerateKey(ECCurve curve); + protected abstract byte[] HashData(byte[] data, int offset, int count, HashAlgorithmName hashAlgorithm); + protected abstract byte[] HashData(Stream data, HashAlgorithmName hashAlgorithm); + public virtual void ImportParameters(ECParameters parameters); + public virtual byte[] SignData(byte[] data, int offset, int count, HashAlgorithmName hashAlgorithm); + public virtual byte[] SignData(byte[] data, HashAlgorithmName hashAlgorithm); + public virtual byte[] SignData(Stream data, HashAlgorithmName hashAlgorithm); + public abstract byte[] SignHash(byte[] hash); + public bool VerifyData(byte[] data, byte[] signature, HashAlgorithmName hashAlgorithm); + public virtual bool VerifyData(byte[] data, int offset, int count, byte[] signature, HashAlgorithmName hashAlgorithm); + public bool VerifyData(Stream data, byte[] signature, HashAlgorithmName hashAlgorithm); + public abstract bool VerifyHash(byte[] hash, byte[] signature); + } + public sealed class ECDsaCng : ECDsa { + public ECDsaCng(); + public ECDsaCng(int keySize); + public ECDsaCng(CngKey key); + public ECDsaCng(ECCurve curve); + public CngKey Key { get; } + public override int KeySize { get; set; } + public override KeySizes[] LegalKeySizes { get; } + protected override void Dispose(bool disposing); + public override ECParameters ExportExplicitParameters(bool includePrivateParameters); + public override ECParameters ExportParameters(bool includePrivateParameters); + public override void GenerateKey(ECCurve curve); + protected override byte[] HashData(byte[] data, int offset, int count, HashAlgorithmName hashAlgorithm); + protected override byte[] HashData(Stream data, HashAlgorithmName hashAlgorithm); + public override void ImportParameters(ECParameters parameters); + public override byte[] SignHash(byte[] hash); + public override bool VerifyHash(byte[] hash, byte[] signature); + } + public sealed class ECDsaOpenSsl : ECDsa { + public ECDsaOpenSsl(); + public ECDsaOpenSsl(int keySize); + public ECDsaOpenSsl(IntPtr handle); + public ECDsaOpenSsl(ECCurve curve); + public ECDsaOpenSsl(SafeEvpPKeyHandle pkeyHandle); + public override int KeySize { get; set; } + public override KeySizes[] LegalKeySizes { get; } + protected override void Dispose(bool disposing); + public SafeEvpPKeyHandle DuplicateKeyHandle(); + public override ECParameters ExportExplicitParameters(bool includePrivateParameters); + public override ECParameters ExportParameters(bool includePrivateParameters); + public override void GenerateKey(ECCurve curve); + protected override byte[] HashData(byte[] data, int offset, int count, HashAlgorithmName hashAlgorithm); + protected override byte[] HashData(Stream data, HashAlgorithmName hashAlgorithm); + public override void ImportParameters(ECParameters parameters); + public override byte[] SignHash(byte[] hash); + public override bool VerifyHash(byte[] hash, byte[] signature); + } + [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)] + public struct ECParameters { + public byte[] D; + public ECCurve Curve; + public ECPoint Q; + public void Validate(); + } + [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)] + public struct ECPoint { + public byte[] X; + public byte[] Y; + } + public abstract class HashAlgorithm : IDisposable { + protected HashAlgorithm(); + public virtual int HashSize { get; } + public byte[] ComputeHash(byte[] buffer); + public byte[] ComputeHash(byte[] buffer, int offset, int count); + public byte[] ComputeHash(Stream inputStream); + public void Dispose(); + protected virtual void Dispose(bool disposing); + protected abstract void HashCore(byte[] array, int ibStart, int cbSize); + protected abstract byte[] HashFinal(); + public abstract void Initialize(); + } + [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)] + public struct HashAlgorithmName : IEquatable { + public HashAlgorithmName(string name); + public static HashAlgorithmName MD5 { get; } + public string Name { get; } + public static HashAlgorithmName SHA1 { get; } + public static HashAlgorithmName SHA256 { get; } + public static HashAlgorithmName SHA384 { get; } + public static HashAlgorithmName SHA512 { get; } + public override bool Equals(object obj); + public bool Equals(HashAlgorithmName other); + public override int GetHashCode(); + public static bool operator ==(HashAlgorithmName left, HashAlgorithmName right); + public static bool operator !=(HashAlgorithmName left, HashAlgorithmName right); + public override string ToString(); + } + public abstract class HMAC : KeyedHashAlgorithm { + protected HMAC(); + public string HashName { get; set; } + public override byte[] Key { get; set; } + protected override void Dispose(bool disposing); + protected override void HashCore(byte[] rgb, int ib, int cb); + protected override byte[] HashFinal(); + public override void Initialize(); + } + public class HMACMD5 : HMAC { + public HMACMD5(); + public HMACMD5(byte[] key); + public override int HashSize { get; } + public override byte[] Key { get; set; } + protected override void Dispose(bool disposing); + protected override void HashCore(byte[] rgb, int ib, int cb); + protected override byte[] HashFinal(); + public override void Initialize(); + } + public class HMACSHA1 : HMAC { + public HMACSHA1(); + public HMACSHA1(byte[] key); + public override int HashSize { get; } + public override byte[] Key { get; set; } + protected override void Dispose(bool disposing); + protected override void HashCore(byte[] rgb, int ib, int cb); + protected override byte[] HashFinal(); + public override void Initialize(); + } + public class HMACSHA256 : HMAC { + public HMACSHA256(); + public HMACSHA256(byte[] key); + public override int HashSize { get; } + public override byte[] Key { get; set; } + protected override void Dispose(bool disposing); + protected override void HashCore(byte[] rgb, int ib, int cb); + protected override byte[] HashFinal(); + public override void Initialize(); + } + public class HMACSHA384 : HMAC { + public HMACSHA384(); + public HMACSHA384(byte[] key); + public override int HashSize { get; } + public override byte[] Key { get; set; } + protected override void Dispose(bool disposing); + protected override void HashCore(byte[] rgb, int ib, int cb); + protected override byte[] HashFinal(); + public override void Initialize(); + } + public class HMACSHA512 : HMAC { + public HMACSHA512(); + public HMACSHA512(byte[] key); + public override int HashSize { get; } + public override byte[] Key { get; set; } + protected override void Dispose(bool disposing); + protected override void HashCore(byte[] rgb, int ib, int cb); + protected override byte[] HashFinal(); + public override void Initialize(); + } + public interface ICryptoTransform : IDisposable { + bool CanReuseTransform { get; } + bool CanTransformMultipleBlocks { get; } + int InputBlockSize { get; } + int OutputBlockSize { get; } + int TransformBlock(byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset); + byte[] TransformFinalBlock(byte[] inputBuffer, int inputOffset, int inputCount); + } + public interface ICspAsymmetricAlgorithm { + CspKeyContainerInfo CspKeyContainerInfo { get; } + byte[] ExportCspBlob(bool includePrivateParameters); + void ImportCspBlob(byte[] rawData); + } + public sealed class IncrementalHash : IDisposable { + public HashAlgorithmName AlgorithmName { get; } + public void AppendData(byte[] data); + public void AppendData(byte[] data, int offset, int count); + public static IncrementalHash CreateHash(HashAlgorithmName hashAlgorithm); + public static IncrementalHash CreateHMAC(HashAlgorithmName hashAlgorithm, byte[] key); + public void Dispose(); + public byte[] GetHashAndReset(); + } + public abstract class KeyedHashAlgorithm : HashAlgorithm { + protected KeyedHashAlgorithm(); + public virtual byte[] Key { get; set; } + protected override void Dispose(bool disposing); + } + public enum KeyNumber { + Exchange = 1, + Signature = 2, + } + public sealed class KeySizes { + public KeySizes(int minSize, int maxSize, int skipSize); + public int MaxSize { get; } + public int MinSize { get; } + public int SkipSize { get; } + } + public abstract class MD5 : HashAlgorithm { + protected MD5(); + public static MD5 Create(); + } + public sealed class Oid { + public Oid(Oid oid); + public Oid(string oid); + public Oid(string value, string friendlyName); + public string FriendlyName { get; set; } + public string Value { get; set; } + public static Oid FromFriendlyName(string friendlyName, OidGroup group); + public static Oid FromOidValue(string oidValue, OidGroup group); + } + public sealed class OidCollection : ICollection, IEnumerable { + public OidCollection(); + public int Count { get; } + bool System.Collections.ICollection.IsSynchronized { get; } + object System.Collections.ICollection.SyncRoot { get; } + public Oid this[int index] { get; } + public Oid this[string oid] { get; } + public int Add(Oid oid); + public void CopyTo(Oid[] array, int index); + public OidEnumerator GetEnumerator(); + void System.Collections.ICollection.CopyTo(Array array, int index); + IEnumerator System.Collections.IEnumerable.GetEnumerator(); + } + public sealed class OidEnumerator : IEnumerator { + public Oid Current { get; } + object System.Collections.IEnumerator.Current { get; } + public bool MoveNext(); + public void Reset(); + } + public enum OidGroup { + All = 0, + Attribute = 5, + EncryptionAlgorithm = 2, + EnhancedKeyUsage = 7, + ExtensionOrAttribute = 6, + HashAlgorithm = 1, + KeyDerivationFunction = 10, + Policy = 8, + PublicKeyAlgorithm = 3, + SignatureAlgorithm = 4, + Template = 9, + } + public enum PaddingMode { + None = 1, + PKCS7 = 2, + Zeros = 3, + } + public static class ProtectedData { + public static byte[] Protect(byte[] userData, byte[] optionalEntropy, DataProtectionScope scope); + public static byte[] Unprotect(byte[] encryptedData, byte[] optionalEntropy, DataProtectionScope scope); + } + public abstract class RandomNumberGenerator : IDisposable { + protected RandomNumberGenerator(); + public static RandomNumberGenerator Create(); + public void Dispose(); + protected virtual void Dispose(bool disposing); + public abstract void GetBytes(byte[] data); + } + public class Rfc2898DeriveBytes : DeriveBytes { + public Rfc2898DeriveBytes(byte[] password, byte[] salt, int iterations); + public Rfc2898DeriveBytes(string password, byte[] salt); + public Rfc2898DeriveBytes(string password, byte[] salt, int iterations); + public Rfc2898DeriveBytes(string password, int saltSize); + public Rfc2898DeriveBytes(string password, int saltSize, int iterations); + public int IterationCount { get; set; } + public byte[] Salt { get; set; } + protected override void Dispose(bool disposing); + public override byte[] GetBytes(int cb); + public override void Reset(); + } + public abstract class RSA : AsymmetricAlgorithm { + protected RSA(); + public static RSA Create(); + public abstract byte[] Decrypt(byte[] data, RSAEncryptionPadding padding); + public abstract byte[] Encrypt(byte[] data, RSAEncryptionPadding padding); + public abstract RSAParameters ExportParameters(bool includePrivateParameters); + protected abstract byte[] HashData(byte[] data, int offset, int count, HashAlgorithmName hashAlgorithm); + protected abstract byte[] HashData(Stream data, HashAlgorithmName hashAlgorithm); + public abstract void ImportParameters(RSAParameters parameters); + public virtual byte[] SignData(byte[] data, int offset, int count, HashAlgorithmName hashAlgorithm, RSASignaturePadding padding); + public byte[] SignData(byte[] data, HashAlgorithmName hashAlgorithm, RSASignaturePadding padding); + public virtual byte[] SignData(Stream data, HashAlgorithmName hashAlgorithm, RSASignaturePadding padding); + public abstract byte[] SignHash(byte[] hash, HashAlgorithmName hashAlgorithm, RSASignaturePadding padding); + public bool VerifyData(byte[] data, byte[] signature, HashAlgorithmName hashAlgorithm, RSASignaturePadding padding); + public virtual bool VerifyData(byte[] data, int offset, int count, byte[] signature, HashAlgorithmName hashAlgorithm, RSASignaturePadding padding); + public bool VerifyData(Stream data, byte[] signature, HashAlgorithmName hashAlgorithm, RSASignaturePadding padding); + public abstract bool VerifyHash(byte[] hash, byte[] signature, HashAlgorithmName hashAlgorithm, RSASignaturePadding padding); + } + public sealed class RSACng : RSA { + public RSACng(); + public RSACng(int keySize); + public RSACng(CngKey key); + public CngKey Key { get; } + public override KeySizes[] LegalKeySizes { get; } + public override byte[] Decrypt(byte[] data, RSAEncryptionPadding padding); + protected override void Dispose(bool disposing); + public override byte[] Encrypt(byte[] data, RSAEncryptionPadding padding); + public override RSAParameters ExportParameters(bool includePrivateParameters); + protected override byte[] HashData(byte[] data, int offset, int count, HashAlgorithmName hashAlgorithm); + protected override byte[] HashData(Stream data, HashAlgorithmName hashAlgorithm); + public override void ImportParameters(RSAParameters parameters); + public override byte[] SignHash(byte[] hash, HashAlgorithmName hashAlgorithm, RSASignaturePadding padding); + public override bool VerifyHash(byte[] hash, byte[] signature, HashAlgorithmName hashAlgorithm, RSASignaturePadding padding); + } + public sealed class RSACryptoServiceProvider : RSA, ICspAsymmetricAlgorithm { + public RSACryptoServiceProvider(); + public RSACryptoServiceProvider(int dwKeySize); + public RSACryptoServiceProvider(int dwKeySize, CspParameters parameters); + public RSACryptoServiceProvider(CspParameters parameters); + public CspKeyContainerInfo CspKeyContainerInfo { get; } + public override int KeySize { get; } + public override KeySizes[] LegalKeySizes { get; } + public bool PersistKeyInCsp { get; set; } + public bool PublicOnly { get; } + public static bool UseMachineKeyStore { get; set; } + public byte[] Decrypt(byte[] rgb, bool fOAEP); + public override byte[] Decrypt(byte[] data, RSAEncryptionPadding padding); + protected override void Dispose(bool disposing); + public byte[] Encrypt(byte[] rgb, bool fOAEP); + public override byte[] Encrypt(byte[] data, RSAEncryptionPadding padding); + public byte[] ExportCspBlob(bool includePrivateParameters); + public override RSAParameters ExportParameters(bool includePrivateParameters); + protected override byte[] HashData(byte[] data, int offset, int count, HashAlgorithmName hashAlgorithm); + protected override byte[] HashData(Stream data, HashAlgorithmName hashAlgorithm); + public void ImportCspBlob(byte[] keyBlob); + public override void ImportParameters(RSAParameters parameters); + public byte[] SignData(byte[] buffer, int offset, int count, object halg); + public byte[] SignData(byte[] buffer, object halg); + public byte[] SignData(Stream inputStream, object halg); + public override byte[] SignHash(byte[] hash, HashAlgorithmName hashAlgorithm, RSASignaturePadding padding); + public byte[] SignHash(byte[] rgbHash, string str); + public bool VerifyData(byte[] buffer, object halg, byte[] signature); + public override bool VerifyHash(byte[] hash, byte[] signature, HashAlgorithmName hashAlgorithm, RSASignaturePadding padding); + public bool VerifyHash(byte[] rgbHash, string str, byte[] rgbSignature); + } + public sealed class RSAEncryptionPadding : IEquatable { + public RSAEncryptionPaddingMode Mode { get; } + public HashAlgorithmName OaepHashAlgorithm { get; } + public static RSAEncryptionPadding OaepSHA1 { get; } + public static RSAEncryptionPadding OaepSHA256 { get; } + public static RSAEncryptionPadding OaepSHA384 { get; } + public static RSAEncryptionPadding OaepSHA512 { get; } + public static RSAEncryptionPadding Pkcs1 { get; } + public static RSAEncryptionPadding CreateOaep(HashAlgorithmName hashAlgorithm); + public override bool Equals(object obj); + public bool Equals(RSAEncryptionPadding other); + public override int GetHashCode(); + public static bool operator ==(RSAEncryptionPadding left, RSAEncryptionPadding right); + public static bool operator !=(RSAEncryptionPadding left, RSAEncryptionPadding right); + public override string ToString(); + } + public enum RSAEncryptionPaddingMode { + Oaep = 1, + Pkcs1 = 0, + } + public sealed class RSAOpenSsl : RSA { + public RSAOpenSsl(); + public RSAOpenSsl(int keySize); + public RSAOpenSsl(IntPtr handle); + public RSAOpenSsl(RSAParameters parameters); + public RSAOpenSsl(SafeEvpPKeyHandle pkeyHandle); + public override int KeySize { set; } + public override KeySizes[] LegalKeySizes { get; } + public override byte[] Decrypt(byte[] data, RSAEncryptionPadding padding); + protected override void Dispose(bool disposing); + public SafeEvpPKeyHandle DuplicateKeyHandle(); + public override byte[] Encrypt(byte[] data, RSAEncryptionPadding padding); + public override RSAParameters ExportParameters(bool includePrivateParameters); + protected override byte[] HashData(byte[] data, int offset, int count, HashAlgorithmName hashAlgorithm); + protected override byte[] HashData(Stream data, HashAlgorithmName hashAlgorithm); + public override void ImportParameters(RSAParameters parameters); + public override byte[] SignHash(byte[] hash, HashAlgorithmName hashAlgorithm, RSASignaturePadding padding); + public override bool VerifyHash(byte[] hash, byte[] signature, HashAlgorithmName hashAlgorithm, RSASignaturePadding padding); + } + [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)] + public struct RSAParameters { + public byte[] D; + public byte[] DP; + public byte[] DQ; + public byte[] Exponent; + public byte[] InverseQ; + public byte[] Modulus; + public byte[] P; + public byte[] Q; + } + public sealed class RSASignaturePadding : IEquatable { + public RSASignaturePaddingMode Mode { get; } + public static RSASignaturePadding Pkcs1 { get; } + public static RSASignaturePadding Pss { get; } + public override bool Equals(object obj); + public bool Equals(RSASignaturePadding other); + public override int GetHashCode(); + public static bool operator ==(RSASignaturePadding left, RSASignaturePadding right); + public static bool operator !=(RSASignaturePadding left, RSASignaturePadding right); + public override string ToString(); + } + public enum RSASignaturePaddingMode { + Pkcs1 = 0, + Pss = 1, + } + public sealed class SafeEvpPKeyHandle : SafeHandle { + public SafeEvpPKeyHandle(IntPtr handle, bool ownsHandle); + public override bool IsInvalid { get; } + public SafeEvpPKeyHandle DuplicateHandle(); + protected override bool ReleaseHandle(); + } + public abstract class SHA1 : HashAlgorithm { + protected SHA1(); + public static SHA1 Create(); + } + public abstract class SHA256 : HashAlgorithm { + protected SHA256(); + public static SHA256 Create(); + } + public abstract class SHA384 : HashAlgorithm { + protected SHA384(); + public static SHA384 Create(); + } + public abstract class SHA512 : HashAlgorithm { + protected SHA512(); + public static SHA512 Create(); + } + public abstract class SymmetricAlgorithm : IDisposable { + protected byte[] IVValue; + protected byte[] KeyValue; + protected int BlockSizeValue; + protected int KeySizeValue; + protected CipherMode ModeValue; + protected KeySizes[] LegalBlockSizesValue; + protected KeySizes[] LegalKeySizesValue; + protected PaddingMode PaddingValue; + protected SymmetricAlgorithm(); + public virtual int BlockSize { get; set; } + public virtual byte[] IV { get; set; } + public virtual byte[] Key { get; set; } + public virtual int KeySize { get; set; } + public virtual KeySizes[] LegalBlockSizes { get; } + public virtual KeySizes[] LegalKeySizes { get; } + public virtual CipherMode Mode { get; set; } + public virtual PaddingMode Padding { get; set; } + public virtual ICryptoTransform CreateDecryptor(); + public abstract ICryptoTransform CreateDecryptor(byte[] rgbKey, byte[] rgbIV); + public virtual ICryptoTransform CreateEncryptor(); + public abstract ICryptoTransform CreateEncryptor(byte[] rgbKey, byte[] rgbIV); + public void Dispose(); + protected virtual void Dispose(bool disposing); + public abstract void GenerateIV(); + public abstract void GenerateKey(); + } + public abstract class TripleDES : SymmetricAlgorithm { + protected TripleDES(); + public override byte[] Key { get; set; } + public override KeySizes[] LegalBlockSizes { get; } + public override KeySizes[] LegalKeySizes { get; } + public static TripleDES Create(); + public static bool IsWeakKey(byte[] rgbKey); + } + public sealed class TripleDESCng : TripleDES { + public TripleDESCng(); + public TripleDESCng(string keyName); + public TripleDESCng(string keyName, CngProvider provider); + public TripleDESCng(string keyName, CngProvider provider, CngKeyOpenOptions openOptions); + public override byte[] Key { get; set; } + public override int KeySize { get; set; } + public override KeySizes[] LegalKeySizes { get; } + public override ICryptoTransform CreateDecryptor(); + public override ICryptoTransform CreateDecryptor(byte[] rgbKey, byte[] rgbIV); + public override ICryptoTransform CreateEncryptor(); + public override ICryptoTransform CreateEncryptor(byte[] rgbKey, byte[] rgbIV); + protected override void Dispose(bool disposing); + public override void GenerateIV(); + public override void GenerateKey(); + } +} ```