# System.Security.Cryptography ``` diff namespace System.Security.Cryptography { public sealed class AesManaged : Aes { - public override ICryptoTransform CreateDecryptor(byte[] key, byte[] iv); + public override ICryptoTransform CreateDecryptor(byte[] rgbKey, byte[] rgbIV); - public override ICryptoTransform CreateEncryptor(byte[] key, byte[] iv); + public override ICryptoTransform CreateEncryptor(byte[] rgbKey, byte[] rgbIV); } public class AsnEncodedData { + public AsnEncodedData(ReadOnlySpan rawData); + public AsnEncodedData(Oid oid, ReadOnlySpan rawData); + public AsnEncodedData(string oid, ReadOnlySpan rawData); } public abstract class AsymmetricAlgorithm : IDisposable { + public virtual void ImportFromEncryptedPem(ReadOnlySpan input, ReadOnlySpan passwordBytes); + public virtual void ImportFromEncryptedPem(ReadOnlySpan input, ReadOnlySpan password); + public virtual void ImportFromPem(ReadOnlySpan input); } public class CryptoStream : Stream, IDisposable { + public ValueTask FlushFinalBlockAsync(CancellationToken cancellationToken = default(CancellationToken)); } public abstract class DSA : AsymmetricAlgorithm { + public byte[] CreateSignature(byte[] rgbHash, DSASignatureFormat signatureFormat); + protected virtual byte[] CreateSignatureCore(ReadOnlySpan hash, DSASignatureFormat signatureFormat); + public int GetMaxSignatureSize(DSASignatureFormat signatureFormat); + public override void ImportEncryptedPkcs8PrivateKey(ReadOnlySpan passwordBytes, ReadOnlySpan source, out int bytesRead); + public override void ImportEncryptedPkcs8PrivateKey(ReadOnlySpan password, ReadOnlySpan source, out int bytesRead); + public override void ImportFromEncryptedPem(ReadOnlySpan input, ReadOnlySpan passwordBytes); + public override void ImportFromEncryptedPem(ReadOnlySpan input, ReadOnlySpan password); + public override void ImportFromPem(ReadOnlySpan input); + public override void ImportPkcs8PrivateKey(ReadOnlySpan source, out int bytesRead); + public override void ImportSubjectPublicKeyInfo(ReadOnlySpan source, out int bytesRead); + public byte[] SignData(byte[] data, int offset, int count, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat); + public byte[] SignData(byte[] data, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat); + public byte[] SignData(Stream data, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat); + protected virtual byte[] SignDataCore(Stream data, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat); + protected virtual byte[] SignDataCore(ReadOnlySpan data, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat); + public bool TryCreateSignature(ReadOnlySpan hash, Span destination, DSASignatureFormat signatureFormat, out int bytesWritten); + protected virtual bool TryCreateSignatureCore(ReadOnlySpan hash, Span destination, DSASignatureFormat signatureFormat, out int bytesWritten); + public override bool TryExportEncryptedPkcs8PrivateKey(ReadOnlySpan passwordBytes, PbeParameters pbeParameters, Span destination, out int bytesWritten); + public override bool TryExportEncryptedPkcs8PrivateKey(ReadOnlySpan password, PbeParameters pbeParameters, Span destination, out int bytesWritten); + public override bool TryExportPkcs8PrivateKey(Span destination, out int bytesWritten); + public override bool TryExportSubjectPublicKeyInfo(Span destination, out int bytesWritten); + public bool TrySignData(ReadOnlySpan data, Span destination, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat, out int bytesWritten); + protected virtual bool TrySignDataCore(ReadOnlySpan data, Span destination, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat, out int bytesWritten); + public bool VerifyData(byte[] data, byte[] signature, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat); + public bool VerifyData(byte[] data, int offset, int count, byte[] signature, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat); + public bool VerifyData(Stream data, byte[] signature, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat); + public bool VerifyData(ReadOnlySpan data, ReadOnlySpan signature, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat); + protected virtual bool VerifyDataCore(Stream data, ReadOnlySpan signature, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat); + protected virtual bool VerifyDataCore(ReadOnlySpan data, ReadOnlySpan signature, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat); + public bool VerifySignature(byte[] rgbHash, byte[] rgbSignature, DSASignatureFormat signatureFormat); + public bool VerifySignature(ReadOnlySpan hash, ReadOnlySpan signature, DSASignatureFormat signatureFormat); + protected virtual bool VerifySignatureCore(ReadOnlySpan hash, ReadOnlySpan signature, DSASignatureFormat signatureFormat); } + public enum DSASignatureFormat { + IeeeP1363FixedFieldConcatenation = 0, + Rfc3279DerSequence = 1, + } public abstract class ECDiffieHellman : AsymmetricAlgorithm { + public override void ImportEncryptedPkcs8PrivateKey(ReadOnlySpan passwordBytes, ReadOnlySpan source, out int bytesRead); + public override void ImportEncryptedPkcs8PrivateKey(ReadOnlySpan password, ReadOnlySpan source, out int bytesRead); + public override void ImportFromEncryptedPem(ReadOnlySpan input, ReadOnlySpan passwordBytes); + public override void ImportFromEncryptedPem(ReadOnlySpan input, ReadOnlySpan password); + public override void ImportFromPem(ReadOnlySpan input); + public override void ImportPkcs8PrivateKey(ReadOnlySpan source, out int bytesRead); + public override void ImportSubjectPublicKeyInfo(ReadOnlySpan source, out int bytesRead); + public override bool TryExportEncryptedPkcs8PrivateKey(ReadOnlySpan passwordBytes, PbeParameters pbeParameters, Span destination, out int bytesWritten); + public override bool TryExportEncryptedPkcs8PrivateKey(ReadOnlySpan password, PbeParameters pbeParameters, Span destination, out int bytesWritten); + public override bool TryExportPkcs8PrivateKey(Span destination, out int bytesWritten); + public override bool TryExportSubjectPublicKeyInfo(Span destination, out int bytesWritten); } public abstract class ECDsa : AsymmetricAlgorithm { + public int GetMaxSignatureSize(DSASignatureFormat signatureFormat); + public override void ImportEncryptedPkcs8PrivateKey(ReadOnlySpan passwordBytes, ReadOnlySpan source, out int bytesRead); + public override void ImportEncryptedPkcs8PrivateKey(ReadOnlySpan password, ReadOnlySpan source, out int bytesRead); + public override void ImportFromEncryptedPem(ReadOnlySpan input, ReadOnlySpan passwordBytes); + public override void ImportFromEncryptedPem(ReadOnlySpan input, ReadOnlySpan password); + public override void ImportFromPem(ReadOnlySpan input); + public override void ImportPkcs8PrivateKey(ReadOnlySpan source, out int bytesRead); + public override void ImportSubjectPublicKeyInfo(ReadOnlySpan source, out int bytesRead); + public byte[] SignData(byte[] data, int offset, int count, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat); + public byte[] SignData(byte[] data, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat); + public byte[] SignData(Stream data, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat); + protected virtual byte[] SignDataCore(Stream data, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat); + protected virtual byte[] SignDataCore(ReadOnlySpan data, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat); + public byte[] SignHash(byte[] hash, DSASignatureFormat signatureFormat); + protected virtual byte[] SignHashCore(ReadOnlySpan hash, DSASignatureFormat signatureFormat); + public override bool TryExportEncryptedPkcs8PrivateKey(ReadOnlySpan passwordBytes, PbeParameters pbeParameters, Span destination, out int bytesWritten); + public override bool TryExportEncryptedPkcs8PrivateKey(ReadOnlySpan password, PbeParameters pbeParameters, Span destination, out int bytesWritten); + public override bool TryExportPkcs8PrivateKey(Span destination, out int bytesWritten); + public override bool TryExportSubjectPublicKeyInfo(Span destination, out int bytesWritten); + public bool TrySignData(ReadOnlySpan data, Span destination, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat, out int bytesWritten); + protected virtual bool TrySignDataCore(ReadOnlySpan data, Span destination, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat, out int bytesWritten); + public bool TrySignHash(ReadOnlySpan hash, Span destination, DSASignatureFormat signatureFormat, out int bytesWritten); + protected virtual bool TrySignHashCore(ReadOnlySpan hash, Span destination, DSASignatureFormat signatureFormat, out int bytesWritten); + public bool VerifyData(byte[] data, byte[] signature, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat); + public bool VerifyData(byte[] data, int offset, int count, byte[] signature, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat); + public bool VerifyData(Stream data, byte[] signature, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat); + public bool VerifyData(ReadOnlySpan data, ReadOnlySpan signature, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat); + protected virtual bool VerifyDataCore(Stream data, ReadOnlySpan signature, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat); + protected virtual bool VerifyDataCore(ReadOnlySpan data, ReadOnlySpan signature, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat); + public bool VerifyHash(byte[] hash, byte[] signature, DSASignatureFormat signatureFormat); + public bool VerifyHash(ReadOnlySpan hash, ReadOnlySpan signature, DSASignatureFormat signatureFormat); + protected virtual bool VerifyHashCore(ReadOnlySpan hash, ReadOnlySpan signature, DSASignatureFormat signatureFormat); } public abstract class HashAlgorithm : ICryptoTransform, IDisposable { + public Task ComputeHashAsync(Stream inputStream, CancellationToken cancellationToken = default(CancellationToken)); } public readonly struct HashAlgorithmName : IEquatable { + public static HashAlgorithmName FromOid(string oidValue); + public static bool TryFromOid(string oidValue, out HashAlgorithmName value); } + public static class HKDF { + public static byte[] DeriveKey(HashAlgorithmName hashAlgorithmName, byte[] ikm, int outputLength, byte[] salt = null, byte[] info = null); + public static void DeriveKey(HashAlgorithmName hashAlgorithmName, ReadOnlySpan ikm, Span output, ReadOnlySpan salt, ReadOnlySpan info); + public static byte[] Expand(HashAlgorithmName hashAlgorithmName, byte[] prk, int outputLength, byte[] info = null); + public static void Expand(HashAlgorithmName hashAlgorithmName, ReadOnlySpan prk, Span output, ReadOnlySpan info); + public static byte[] Extract(HashAlgorithmName hashAlgorithmName, byte[] ikm, byte[] salt = null); + public static int Extract(HashAlgorithmName hashAlgorithmName, ReadOnlySpan ikm, ReadOnlySpan salt, Span prk); + } public sealed class IncrementalHash : IDisposable { + public int HashLengthInBytes { get; } + public static IncrementalHash CreateHMAC(HashAlgorithmName hashAlgorithm, ReadOnlySpan key); + public byte[] GetCurrentHash(); + public int GetCurrentHash(Span destination); + public int GetHashAndReset(Span destination); + public bool TryGetCurrentHash(Span destination, out int bytesWritten); } public abstract class MD5 : HashAlgorithm { + public static byte[] HashData(byte[] source); + public static byte[] HashData(ReadOnlySpan source); + public static int HashData(ReadOnlySpan source, Span destination); + public static bool TryHashData(ReadOnlySpan source, Span destination, out int bytesWritten); } public sealed class MD5CryptoServiceProvider : MD5 { - protected override void HashCore(byte[] rgb, int ibStart, int cbSize); + protected override void HashCore(byte[] array, int ibStart, int cbSize); } + public static class PemEncoding { + public static PemFields Find(ReadOnlySpan pemData); + public static int GetEncodedSize(int labelLength, int dataLength); + public static bool TryFind(ReadOnlySpan pemData, out PemFields fields); + public static bool TryWrite(ReadOnlySpan label, ReadOnlySpan data, Span destination, out int charsWritten); + public static char[] Write(ReadOnlySpan label, ReadOnlySpan data); + } + public readonly struct PemFields { + public Range Base64Data { get; } + public int DecodedDataLength { get; } + public Range Label { get; } + public Range Location { get; } + } public abstract class RSA : AsymmetricAlgorithm { + public override void ImportEncryptedPkcs8PrivateKey(ReadOnlySpan passwordBytes, ReadOnlySpan source, out int bytesRead); + public override void ImportEncryptedPkcs8PrivateKey(ReadOnlySpan password, ReadOnlySpan source, out int bytesRead); + public override void ImportFromEncryptedPem(ReadOnlySpan input, ReadOnlySpan passwordBytes); + public override void ImportFromEncryptedPem(ReadOnlySpan input, ReadOnlySpan password); + public override void ImportFromPem(ReadOnlySpan input); + public override void ImportPkcs8PrivateKey(ReadOnlySpan source, out int bytesRead); + public override void ImportSubjectPublicKeyInfo(ReadOnlySpan source, out int bytesRead); + public override bool TryExportEncryptedPkcs8PrivateKey(ReadOnlySpan passwordBytes, PbeParameters pbeParameters, Span destination, out int bytesWritten); + public override bool TryExportEncryptedPkcs8PrivateKey(ReadOnlySpan password, PbeParameters pbeParameters, Span destination, out int bytesWritten); + public override bool TryExportPkcs8PrivateKey(Span destination, out int bytesWritten); + public override bool TryExportSubjectPublicKeyInfo(Span destination, out int bytesWritten); } public abstract class SHA1 : HashAlgorithm { + public static byte[] HashData(byte[] source); + public static byte[] HashData(ReadOnlySpan source); + public static int HashData(ReadOnlySpan source, Span destination); + public static bool TryHashData(ReadOnlySpan source, Span destination, out int bytesWritten); } public sealed class SHA1CryptoServiceProvider : SHA1 { - protected override void HashCore(byte[] rgb, int ibStart, int cbSize); + protected override void HashCore(byte[] array, int ibStart, int cbSize); } public sealed class SHA1Managed : SHA1 { - protected override void Dispose(bool disposing); + protected sealed override void Dispose(bool disposing); - protected override void HashCore(byte[] rgb, int ibStart, int cbSize); + protected sealed override void HashCore(byte[] array, int ibStart, int cbSize); - protected override void HashCore(ReadOnlySpan source); + protected sealed override void HashCore(ReadOnlySpan source); - protected override byte[] HashFinal(); + protected sealed override byte[] HashFinal(); - public override void Initialize(); + public sealed override void Initialize(); - protected override bool TryHashFinal(Span destination, out int bytesWritten); + protected sealed override bool TryHashFinal(Span destination, out int bytesWritten); } public abstract class SHA256 : HashAlgorithm { + public static byte[] HashData(byte[] source); + public static byte[] HashData(ReadOnlySpan source); + public static int HashData(ReadOnlySpan source, Span destination); + public static bool TryHashData(ReadOnlySpan source, Span destination, out int bytesWritten); } public sealed class SHA256Managed : SHA256 { - protected override void Dispose(bool disposing); + protected sealed override void Dispose(bool disposing); - protected override void HashCore(byte[] rgb, int ibStart, int cbSize); + protected sealed override void HashCore(byte[] array, int ibStart, int cbSize); - protected override void HashCore(ReadOnlySpan source); + protected sealed override void HashCore(ReadOnlySpan source); - protected override byte[] HashFinal(); + protected sealed override byte[] HashFinal(); - public override void Initialize(); + public sealed override void Initialize(); - protected override bool TryHashFinal(Span destination, out int bytesWritten); + protected sealed override bool TryHashFinal(Span destination, out int bytesWritten); } public abstract class SHA384 : HashAlgorithm { + public static byte[] HashData(byte[] source); + public static byte[] HashData(ReadOnlySpan source); + public static int HashData(ReadOnlySpan source, Span destination); + public static bool TryHashData(ReadOnlySpan source, Span destination, out int bytesWritten); } public sealed class SHA384Managed : SHA384 { - protected override void Dispose(bool disposing); + protected sealed override void Dispose(bool disposing); - protected override void HashCore(byte[] rgb, int ibStart, int cbSize); + protected sealed override void HashCore(byte[] array, int ibStart, int cbSize); - protected override void HashCore(ReadOnlySpan source); + protected sealed override void HashCore(ReadOnlySpan source); - protected override byte[] HashFinal(); + protected sealed override byte[] HashFinal(); - public override void Initialize(); + public sealed override void Initialize(); - protected override bool TryHashFinal(Span destination, out int bytesWritten); + protected sealed override bool TryHashFinal(Span destination, out int bytesWritten); } public abstract class SHA512 : HashAlgorithm { + public static byte[] HashData(byte[] source); + public static byte[] HashData(ReadOnlySpan source); + public static int HashData(ReadOnlySpan source, Span destination); + public static bool TryHashData(ReadOnlySpan source, Span destination, out int bytesWritten); } public sealed class SHA512Managed : SHA512 { - protected override void Dispose(bool disposing); + protected sealed override void Dispose(bool disposing); - protected override void HashCore(byte[] rgb, int ibStart, int cbSize); + protected sealed override void HashCore(byte[] array, int ibStart, int cbSize); - protected override void HashCore(ReadOnlySpan source); + protected sealed override void HashCore(ReadOnlySpan source); - protected override byte[] HashFinal(); + protected sealed override byte[] HashFinal(); - public override void Initialize(); + public sealed override void Initialize(); - protected override bool TryHashFinal(Span destination, out int bytesWritten); + protected sealed override bool TryHashFinal(Span destination, out int bytesWritten); } } ```