6internal sealed class UniversalCryptoDecryptor :
Internal.Cryptography.UniversalCryptoTransform
14 switch (base.PaddingMode)
30 : base(paddingMode, basicSymmetricCipher)
41 int num2 = base.BasicSymmetricCipher.Transform(
_heldoverCipher, outputBuffer);
42 outputBuffer = outputBuffer.
Slice(num2);
52 if (inputBuffer.
Length > 0)
54 num += base.BasicSymmetricCipher.Transform(inputBuffer, outputBuffer);
61 if (inputBuffer.
Length % base.PaddingSizeBytes != 0)
80 num = _heldoverCipher.Length + inputBuffer.
Length;
82 span =
array.AsSpan(0, num);
88 fixed (
byte* ptr = span)
90 Span<byte> span2 = span[..base.BasicSymmetricCipher.TransformFinal(
input, span)];
94 span2.
Slice(0, num2).CopyTo(outputBuffer);
115 fixed (
byte* ptr =
array)
120 return array.AsSpan(0, num).ToArray();
128 byte[] array2 =
GC.AllocateUninitializedArray<
byte>(inputCount);
133 protected sealed override void Dispose(
bool disposing)
139 if (heldoverCipher !=
null)
144 base.Dispose(disposing);
149 if (
input.Length % base.PaddingSizeBytes != 0)
157 bytesWritten = base.BasicSymmetricCipher.TransformFinal(
input, output);
166 fixed (
byte* ptr = output2)
170 span = output2[..base.BasicSymmetricCipher.TransformFinal(
input, output2)];
172 if (paddingLength > output.
Length)
177 span.
Slice(0, paddingLength).CopyTo(output);
178 bytesWritten = paddingLength;
201 switch (base.PaddingMode)
206 if (num <= 0 || num > base.InputBlockSize)
210 for (
int j = block.
Length - num; j < block.Length - 1; j++)
221 if (num <= 0 || num > base.InputBlockSize)
229 if (num <= 0 || num > base.InputBlockSize)
233 for (
int i = block.
Length - num; i < block.Length - 1; i++)
249 return block.Length - num;
override int UncheckedTransformBlock(ReadOnlySpan< byte > inputBuffer, Span< byte > outputBuffer)
UniversalCryptoDecryptor(PaddingMode paddingMode, Internal.Cryptography.BasicSymmetricCipher basicSymmetricCipher)
unsafe override byte[] UncheckedTransformFinalBlock(byte[] inputBuffer, int inputOffset, int inputCount)
override void Dispose(bool disposing)
int GetPaddingLength(ReadOnlySpan< byte > block)
unsafe override bool TransformOneShot(ReadOnlySpan< byte > input, Span< byte > output, out int bytesWritten)
unsafe override int UncheckedTransformFinalBlock(ReadOnlySpan< byte > inputBuffer, Span< byte > outputBuffer)
static unsafe void Clear(Array array)
static string Cryptography_UnknownPaddingMode
static string Cryptography_InvalidPadding
static string Cryptography_PartialBlock
static void Return(byte[] array, int clearSize=-1)
static byte[] Rent(int minimumLength)
static void ZeroMemory(Span< byte > buffer)
void CopyTo(Span< T > destination)
ReadOnlySpan< T > Slice(int start)
Span< T > Slice(int start)