init commit
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
using System;
|
||||
using Org.BouncyCastle.Crypto.Digests;
|
||||
using Org.BouncyCastle.Crypto.Parameters;
|
||||
using Org.BouncyCastle.Utilities;
|
||||
|
||||
namespace Org.BouncyCastle.Crypto.Macs;
|
||||
|
||||
public class SkeinMac : IMac
|
||||
{
|
||||
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-MAC-" + engine.BlockSize * 8 + "-" + engine.OutputSize * 8;
|
||||
|
||||
public SkeinMac(int stateSizeBits, int digestSizeBits)
|
||||
{
|
||||
engine = new SkeinEngine(stateSizeBits, digestSizeBits);
|
||||
}
|
||||
|
||||
public SkeinMac(SkeinMac mac)
|
||||
{
|
||||
engine = new SkeinEngine(mac.engine);
|
||||
}
|
||||
|
||||
public void Init(ICipherParameters parameters)
|
||||
{
|
||||
SkeinParameters skeinParameters;
|
||||
if (parameters is SkeinParameters)
|
||||
{
|
||||
skeinParameters = (SkeinParameters)parameters;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!(parameters is KeyParameter))
|
||||
{
|
||||
throw new ArgumentException("Invalid parameter passed to Skein MAC init - " + Platform.GetTypeName(parameters));
|
||||
}
|
||||
skeinParameters = new SkeinParameters.Builder().SetKey(((KeyParameter)parameters).GetKey()).Build();
|
||||
}
|
||||
if (skeinParameters.GetKey() == null)
|
||||
{
|
||||
throw new ArgumentException("Skein MAC requires a key parameter.");
|
||||
}
|
||||
engine.Init(skeinParameters);
|
||||
}
|
||||
|
||||
public int GetMacSize()
|
||||
{
|
||||
return engine.OutputSize;
|
||||
}
|
||||
|
||||
public void Reset()
|
||||
{
|
||||
engine.Reset();
|
||||
}
|
||||
|
||||
public void Update(byte inByte)
|
||||
{
|
||||
engine.Update(inByte);
|
||||
}
|
||||
|
||||
public void BlockUpdate(byte[] input, int inOff, int len)
|
||||
{
|
||||
engine.Update(input, inOff, len);
|
||||
}
|
||||
|
||||
public int DoFinal(byte[] output, int outOff)
|
||||
{
|
||||
return engine.DoFinal(output, outOff);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user