public void ZeroPaddingVector(byte[] input, int blockSize, byte[] reference)
        {
            var blkCipher = new NoOpSingleBlockTransform(blockSize);
            var enc       = new ZerosPaddingTransform(blkCipher, false);
            var padded    = enc.TransformFinalBlock(input, 0, input.Length);

            Assert.Equal(reference.AsEnumerable(), padded);

            Assert.True(enc.CanReuseTransform);
            Assert.False(enc.CanTransformMultipleBlocks);
        }
Example #2
0
        private ICryptoTransform CreateXfrm(byte[] rgbKey, byte[] rgbIV, bool decrypt)
        {
            ICryptoTransform xfrm = new SM4Transform(rgbKey, decrypt);

            switch (Mode)
            {
            case CipherMode.ECB:
                break;

            case CipherMode.CBC:
                xfrm = new CbcTransform(xfrm, rgbIV, decrypt);
                break;

            default:
                throw new NotSupportedException("Only CBC/ECB is supported");
            }

            switch (PaddingValue)
            {
            case PaddingMode.None:
                break;

            case PaddingMode.PKCS7:
#pragma warning disable 618
            case PaddingTransform.Iso10126:
            case PaddingTransform.AnsiX923:
#pragma warning restore 618
                xfrm = new PaddingTransform(xfrm, PaddingValue, decrypt);
                break;

            case PaddingMode.Zeros:
                xfrm = new ZerosPaddingTransform(xfrm, decrypt);
                break;

            default:
                throw new NotSupportedException("Only PKCS#7 padding is supported");
            }

            return(xfrm);
        }