<PackageReference Include="BouncyCastle.Cryptography" Version="2.3.0" />

BufferedCipherBase

public abstract class BufferedCipherBase : IBufferedCipher
using System; namespace Org.BouncyCastle.Crypto { public abstract class BufferedCipherBase : IBufferedCipher { protected static readonly byte[] EmptyBuffer = new byte[0]; public abstract string AlgorithmName { get; } public abstract void Init(bool forEncryption, ICipherParameters parameters); public abstract int GetBlockSize(); public abstract int GetOutputSize(int inputLen); public abstract int GetUpdateOutputSize(int inputLen); public abstract byte[] ProcessByte(byte input); public virtual int ProcessByte(byte input, byte[] output, int outOff) { byte[] array = ProcessByte(input); if (array == null) return 0; if (outOff + array.Length > output.Length) throw new DataLengthException("output buffer too short"); array.CopyTo(output, outOff); return array.Length; } public abstract int ProcessByte(byte input, Span<byte> output); public virtual byte[] ProcessBytes(byte[] input) { return ProcessBytes(input, 0, input.Length); } public abstract byte[] ProcessBytes(byte[] input, int inOff, int length); public virtual int ProcessBytes(byte[] input, byte[] output, int outOff) { return ProcessBytes(input, 0, input.Length, output, outOff); } public virtual int ProcessBytes(byte[] input, int inOff, int length, byte[] output, int outOff) { byte[] array = ProcessBytes(input, inOff, length); if (array == null) return 0; if (outOff + array.Length > output.Length) throw new DataLengthException("output buffer too short"); array.CopyTo(output, outOff); return array.Length; } public abstract int ProcessBytes(ReadOnlySpan<byte> input, Span<byte> output); public abstract byte[] DoFinal(); public virtual byte[] DoFinal(byte[] input) { return DoFinal(input, 0, input.Length); } public abstract byte[] DoFinal(byte[] input, int inOff, int length); public virtual int DoFinal(byte[] output, int outOff) { byte[] array = DoFinal(); if (outOff + array.Length > output.Length) throw new DataLengthException("output buffer too short"); array.CopyTo(output, outOff); return array.Length; } public virtual int DoFinal(byte[] input, byte[] output, int outOff) { return DoFinal(input, 0, input.Length, output, outOff); } public virtual int DoFinal(byte[] input, int inOff, int length, byte[] output, int outOff) { int num = ProcessBytes(input, inOff, length, output, outOff); return num + DoFinal(output, outOff + num); } public abstract int DoFinal(Span<byte> output); public virtual int DoFinal(ReadOnlySpan<byte> input, Span<byte> output) { int num = ProcessBytes(input, output); int num2 = num; int num3 = num; return num2 + DoFinal(output.Slice(num3, output.Length - num3)); } public abstract void Reset(); } }