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);
159 switch (base.PaddingMode)
164 if (num <= 0 || num > base.InputBlockSize)
168 for (
int j = block.
Length - num; j < block.Length - 1; j++)
179 if (num <= 0 || num > base.InputBlockSize)
187 if (num <= 0 || num > base.InputBlockSize)
191 for (
int i = block.
Length - num; i < block.Length - 1; i++)
207 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 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)
void CopyTo(Span< T > destination)
ReadOnlySpan< T > Slice(int start)
Span< T > Slice(int start)