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