public byte[] TransformFinalBlock(byte[] inputBuffer, int inputOffset, int inputCount) { // inputCount <= InputBlockSize is allowed ThrowHelper.ValidateTransformBlock(inputBuffer, inputOffset, inputCount); // Convert.ToBase64CharArray already does padding, so all we have to check is that // the inputCount wasn't 0 if (inputCount == 0) { return(Array.Empty <byte>()); } else if (inputCount > InputBlockSize) { ThrowHelper.ThrowArgumentOutOfRange(ThrowHelper.ExceptionArgument.inputCount); } // Again, for now only a block at a time Span <byte> input = inputBuffer.AsSpan(inputOffset, inputCount); byte[] output = new byte[OutputBlockSize]; OperationStatus status = Base64.EncodeToUtf8(input, output, out int consumed, out int written, isFinalBlock: true); if (written != OutputBlockSize) { ThrowHelper.ThrowCryptographicException(); } Debug.Assert(status == OperationStatus.Done); Debug.Assert(consumed == inputCount); return(output); }
public int TransformBlock(byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset) { // inputCount < InputBlockSize is not allowed ThrowHelper.ValidateTransformBlock(inputBuffer, inputOffset, inputCount, InputBlockSize); if (outputBuffer == null) { ThrowHelper.ThrowArgumentNull(ThrowHelper.ExceptionArgument.outputBuffer); } // For now, only convert 3 bytes to 4 Span <byte> input = inputBuffer.AsSpan(inputOffset, InputBlockSize); Span <byte> output = outputBuffer.AsSpan(outputOffset, OutputBlockSize); OperationStatus status = Base64.EncodeToUtf8(input, output, out int consumed, out int written, isFinalBlock: false); if (written != OutputBlockSize) { ThrowHelper.ThrowCryptographicException(); } Debug.Assert(status == OperationStatus.NeedMoreData); Debug.Assert(consumed == InputBlockSize); return(written); }