init commit

This commit is contained in:
2025-10-09 09:57:24 +09:00
commit 4d551bd74f
6636 changed files with 1218703 additions and 0 deletions

View File

@@ -0,0 +1,83 @@
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Utilities;
namespace Org.BouncyCastle.Crypto.Tls;
public class Ssl3Mac : IMac
{
private const byte IPAD_BYTE = 54;
private const byte OPAD_BYTE = 92;
internal static readonly byte[] IPAD = GenPad(54, 48);
internal static readonly byte[] OPAD = GenPad(92, 48);
private readonly IDigest digest;
private readonly int padLength;
private byte[] secret;
public virtual string AlgorithmName => digest.AlgorithmName + "/SSL3MAC";
public Ssl3Mac(IDigest digest)
{
this.digest = digest;
if (digest.GetDigestSize() == 20)
{
padLength = 40;
}
else
{
padLength = 48;
}
}
public virtual void Init(ICipherParameters parameters)
{
secret = Arrays.Clone(((KeyParameter)parameters).GetKey());
Reset();
}
public virtual int GetMacSize()
{
return digest.GetDigestSize();
}
public virtual void Update(byte input)
{
digest.Update(input);
}
public virtual void BlockUpdate(byte[] input, int inOff, int len)
{
digest.BlockUpdate(input, inOff, len);
}
public virtual int DoFinal(byte[] output, int outOff)
{
byte[] array = new byte[digest.GetDigestSize()];
digest.DoFinal(array, 0);
digest.BlockUpdate(secret, 0, secret.Length);
digest.BlockUpdate(OPAD, 0, padLength);
digest.BlockUpdate(array, 0, array.Length);
int result = digest.DoFinal(output, outOff);
Reset();
return result;
}
public virtual void Reset()
{
digest.Reset();
digest.BlockUpdate(secret, 0, secret.Length);
digest.BlockUpdate(IPAD, 0, padLength);
}
private static byte[] GenPad(byte b, int count)
{
byte[] array = new byte[count];
Arrays.Fill(array, b);
return array;
}
}