Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }