public void Sm4Vector1() { var key = new byte[] { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 }; var expected = new byte[] { 0x68, 0x1e, 0xdf, 0x34, 0xd2, 0x06, 0x96, 0x5e, 0x86, 0xb3, 0xe9, 0x4f, 0x53, 0x6e, 0x42, 0x46 }; var enc = new SM4Transform(key, false); var dec = new SM4Transform(key, true); var cipherText = enc.TransformFinalBlock(key, 0, key.Length); Assert.Equal(expected.AsEnumerable(), cipherText); var plaintext = dec.TransformFinalBlock(cipherText, 0, cipherText.Length); Assert.Equal(key.AsEnumerable(), plaintext); }
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); }