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

103 lines
1.9 KiB
C#

using System;
using System.IO;
using Org.BouncyCastle.Crypto.Engines;
using Org.BouncyCastle.Utilities;
namespace Org.BouncyCastle.Crypto;
public class BufferedIesCipher : BufferedCipherBase
{
private readonly IesEngine engine;
private bool forEncryption;
private MemoryStream buffer = new MemoryStream();
public override string AlgorithmName => "IES";
public BufferedIesCipher(IesEngine engine)
{
if (engine == null)
{
throw new ArgumentNullException("engine");
}
this.engine = engine;
}
public override void Init(bool forEncryption, ICipherParameters parameters)
{
this.forEncryption = forEncryption;
throw Platform.CreateNotImplementedException("IES");
}
public override int GetBlockSize()
{
return 0;
}
public override int GetOutputSize(int inputLen)
{
if (engine == null)
{
throw new InvalidOperationException("cipher not initialised");
}
int num = inputLen + (int)buffer.Length;
if (!forEncryption)
{
return num - 20;
}
return num + 20;
}
public override int GetUpdateOutputSize(int inputLen)
{
return 0;
}
public override byte[] ProcessByte(byte input)
{
buffer.WriteByte(input);
return null;
}
public override byte[] ProcessBytes(byte[] input, int inOff, int length)
{
if (input == null)
{
throw new ArgumentNullException("input");
}
if (inOff < 0)
{
throw new ArgumentException("inOff");
}
if (length < 0)
{
throw new ArgumentException("length");
}
if (inOff + length > input.Length)
{
throw new ArgumentException("invalid offset/length specified for input array");
}
buffer.Write(input, inOff, length);
return null;
}
public override byte[] DoFinal()
{
byte[] array = buffer.ToArray();
Reset();
return engine.ProcessBlock(array, 0, array.Length);
}
public override byte[] DoFinal(byte[] input, int inOff, int length)
{
ProcessBytes(input, inOff, length);
return DoFinal();
}
public override void Reset()
{
buffer.SetLength(0L);
}
}