Sha512Digest
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);
}
}
}