public override int Transform(ReadOnlySpan <byte> input, Span <byte> output) { int outputCount = 0; int blockSize = BlockSizeInBytes; while (input.Length > 0) { blockTransform.Transform(FR, FRE); // TODO: Vectorize for (int i = 0; i < blockSize; i++) { FRE[i] ^= input[i]; } if (encryption) { FRE.AsSpan(0, blockSize).CopyTo(FR.AsSpan()); } else { input.Slice(0, blockSize).CopyTo(FR.AsSpan()); } FRE.AsSpan(0, blockSize).CopyTo(output); input = input.Slice(blockSize); output = output.Slice(blockSize); outputCount += blockSize; } return(outputCount); }
public override int Transform(ReadOnlySpan <byte> input, Span <byte> output) { int outputCount = 0; int blockSize = blockTransform.BlockSizeInBytes; while (input.Length >= blockSize) { blockTransform.Transform(input.Slice(0, blockSize), output.Slice(0, blockSize)); outputCount += blockSize; input = input.Slice(blockSize); output = output.Slice(blockSize); } return(outputCount); }