Files
SuperVPN/output/Libraries/BouncyCastle.Crypto/Org/BouncyCastle/Crypto/Digests/SkeinDigest.cs
2025-10-09 09:57:24 +09:00

75 lines
1.3 KiB
C#

using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Utilities;
namespace Org.BouncyCastle.Crypto.Digests;
public class SkeinDigest : IDigest, IMemoable
{
public const int SKEIN_256 = 256;
public const int SKEIN_512 = 512;
public const int SKEIN_1024 = 1024;
private readonly SkeinEngine engine;
public string AlgorithmName => "Skein-" + engine.BlockSize * 8 + "-" + engine.OutputSize * 8;
public SkeinDigest(int stateSizeBits, int digestSizeBits)
{
engine = new SkeinEngine(stateSizeBits, digestSizeBits);
Init(null);
}
public SkeinDigest(SkeinDigest digest)
{
engine = new SkeinEngine(digest.engine);
}
public void Reset(IMemoable other)
{
SkeinDigest skeinDigest = (SkeinDigest)other;
engine.Reset(skeinDigest.engine);
}
public IMemoable Copy()
{
return new SkeinDigest(this);
}
public int GetDigestSize()
{
return engine.OutputSize;
}
public int GetByteLength()
{
return engine.BlockSize;
}
public void Init(SkeinParameters parameters)
{
engine.Init(parameters);
}
public void Reset()
{
engine.Reset();
}
public void Update(byte inByte)
{
engine.Update(inByte);
}
public void BlockUpdate(byte[] inBytes, int inOff, int len)
{
engine.Update(inBytes, inOff, len);
}
public int DoFinal(byte[] outBytes, int outOff)
{
return engine.DoFinal(outBytes, outOff);
}
}