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,93 @@
using System;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Utilities;
namespace Org.BouncyCastle.Crypto.Modes;
public class SicBlockCipher : IBlockCipher
{
private readonly IBlockCipher cipher;
private readonly int blockSize;
private readonly byte[] counter;
private readonly byte[] counterOut;
private byte[] IV;
public virtual string AlgorithmName => cipher.AlgorithmName + "/SIC";
public virtual bool IsPartialBlockOkay => true;
public SicBlockCipher(IBlockCipher cipher)
{
this.cipher = cipher;
blockSize = cipher.GetBlockSize();
counter = new byte[blockSize];
counterOut = new byte[blockSize];
IV = new byte[blockSize];
}
public virtual IBlockCipher GetUnderlyingCipher()
{
return cipher;
}
public virtual void Init(bool forEncryption, ICipherParameters parameters)
{
if (!(parameters is ParametersWithIV parametersWithIV))
{
throw new ArgumentException("CTR/SIC mode requires ParametersWithIV", "parameters");
}
IV = Arrays.Clone(parametersWithIV.GetIV());
if (blockSize < IV.Length)
{
throw new ArgumentException("CTR/SIC mode requires IV no greater than: " + blockSize + " bytes.");
}
int num = System.Math.Min(8, blockSize / 2);
if (blockSize - IV.Length > num)
{
throw new ArgumentException("CTR/SIC mode requires IV of at least: " + (blockSize - num) + " bytes.");
}
if (parametersWithIV.Parameters != null)
{
cipher.Init(forEncryption: true, parametersWithIV.Parameters);
}
Reset();
}
public virtual int GetBlockSize()
{
return cipher.GetBlockSize();
}
public virtual int ProcessBlock(byte[] input, int inOff, byte[] output, int outOff)
{
cipher.ProcessBlock(counter, 0, counterOut, 0);
for (int i = 0; i < counterOut.Length; i++)
{
output[outOff + i] = (byte)(counterOut[i] ^ input[inOff + i]);
}
int num = counter.Length;
while (--num >= 0)
{
byte[] array2;
byte[] array = (array2 = counter);
int num2 = num;
nint num3 = num2;
if ((array[num2] = (byte)(array2[num3] + 1)) != 0)
{
break;
}
}
return counter.Length;
}
public virtual void Reset()
{
Arrays.Fill(counter, 0);
Array.Copy(IV, 0, counter, 0, IV.Length);
cipher.Reset();
}
}