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); }
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); }