<PackageReference Include="BouncyCastle.Cryptography" Version="2.6.1" />

Sha512Digest

public class Sha512Digest : LongDigest
using Org.BouncyCastle.Crypto.Utilities; using Org.BouncyCastle.Utilities; using System; namespace Org.BouncyCastle.Crypto.Digests { public class Sha512Digest : LongDigest { private const int DigestLength = 64; public override string AlgorithmName => "SHA-512"; public Sha512Digest() { } public Sha512Digest(Sha512Digest t) : base(t) { } public override int GetDigestSize() { return 64; } public override int DoFinal(byte[] output, int outOff) { Finish(); Pack.UInt64_To_BE(H1, output, outOff); Pack.UInt64_To_BE(H2, output, outOff + 8); Pack.UInt64_To_BE(H3, output, outOff + 16); Pack.UInt64_To_BE(H4, output, outOff + 24); Pack.UInt64_To_BE(H5, output, outOff + 32); Pack.UInt64_To_BE(H6, output, outOff + 40); Pack.UInt64_To_BE(H7, output, outOff + 48); Pack.UInt64_To_BE(H8, output, outOff + 56); Reset(); return 64; } public override int DoFinal(Span<byte> output) { Finish(); Pack.UInt64_To_BE(H1, output); Pack.UInt64_To_BE(H2, output.Slice(8, output.Length - 8)); Pack.UInt64_To_BE(H3, output.Slice(16, output.Length - 16)); Pack.UInt64_To_BE(H4, output.Slice(24, output.Length - 24)); Pack.UInt64_To_BE(H5, output.Slice(32, output.Length - 32)); Pack.UInt64_To_BE(H6, output.Slice(40, output.Length - 40)); Pack.UInt64_To_BE(H7, output.Slice(48, output.Length - 48)); Pack.UInt64_To_BE(H8, output.Slice(56, output.Length - 56)); Reset(); return 64; } public override void Reset() { base.Reset(); H1 = 7640891576956012808; H2 = 13503953896175478587; H3 = 4354685564936845355; H4 = 11912009170470909681; H5 = 5840696475078001361; H6 = 11170449401992604703; H7 = 2270897969802886507; H8 = 6620516959819538809; } public override IMemoable Copy() { return new Sha512Digest(this); } public override void Reset(IMemoable other) { Sha512Digest t = (Sha512Digest)other; CopyIn(t); } } }