예제 #1
0
        public void PaddingNone_PaddedEncrypt()
        {
            Gost28147CryptoServiceProvider key =
                new Gost28147CryptoServiceProvider();

            key.GenerateKey();
            key.Mode    = CipherMode.ECB;
            key.Padding = PaddingMode.None;

            ICryptoTransform encryptor = key.CreateEncryptor();

            Assert.Equal(8, encryptor.InputBlockSize);
            Assert.Equal(8, encryptor.OutputBlockSize);

            byte[] encypted = encryptor.TransformFinalBlock(WellKnownData,
                                                            0, WellKnownData.Length);
            Assert.Equal(WellKnownData.Length, encypted.Length);

            ICryptoTransform decryptor = key.CreateDecryptor();

            Assert.Equal(8, decryptor.InputBlockSize);
            Assert.Equal(8, decryptor.OutputBlockSize);

            byte[] decrypted = decryptor.TransformFinalBlock(encypted,
                                                             0, encypted.Length);
            Assert.Equal(WellKnownData, decrypted);
        }
예제 #2
0
        public void PaddingISO10126_PaddedCheckValidBlock()
        {
            byte[] invalidPadding = new byte[] {
                0x11, 0x22, 0x33,
                0x0D, 0x0D, 0x0D, 0x0D,
                0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,
                0x0D // Ошибка!
            };

            // Шифруем без padding
            Gost28147CryptoServiceProvider key =
                new Gost28147CryptoServiceProvider();

            key.GenerateKey();
            key.Mode    = CipherMode.ECB;
            key.Padding = PaddingMode.None;
            ICryptoTransform encryptor = key.CreateEncryptor();

            byte[] encypted = encryptor.TransformFinalBlock(invalidPadding,
                                                            0, invalidPadding.Length);
            Assert.Equal(16, encypted.Length);

            // Расшифровываем как бы с padding
            key.Padding = PaddingMode.ISO10126;
            ICryptoTransform decryptor = key.CreateDecryptor();

            // Не пользуемся ExpectedExceptionAttribute он может случится на encrypt
            Assert.ThrowsAny <CryptographicException>(() => decryptor.TransformFinalBlock(encypted,
                                                                                          0, encypted.Length));
        }
예제 #3
0
        public void PaddingISO10126_PaddedSetValid()
        {
            Gost28147CryptoServiceProvider key =
                new Gost28147CryptoServiceProvider();

            key.GenerateKey();
            key.Mode    = CipherMode.ECB;
            key.Padding = PaddingMode.ISO10126;
            ICryptoTransform encryptor = key.CreateEncryptor();

            byte[] encypted = encryptor.TransformFinalBlock(WellKnownUnpaddedData,
                                                            0, WellKnownUnpaddedData.Length);
            Assert.Equal(8, encypted.Length);

            // Расшифровываем без padding
            key.Padding = PaddingMode.None;
            ICryptoTransform decryptor = key.CreateDecryptor();

            byte[] decrypted = decryptor.TransformFinalBlock(encypted,
                                                             0, encypted.Length);

            // проверяем что ожидаем из текста.
            Assert.Equal(WellKnownUnpaddedData, decrypted.Take(WellKnownUnpaddedData.Length));
            // проверяем что ожидаем из длины.
            Assert.Equal(5, decrypted[7]);
        }
예제 #4
0
        public void PaddingPKCS7_PaddedSetValid()
        {
            Gost28147CryptoServiceProvider key =
                new Gost28147CryptoServiceProvider();

            key.GenerateKey();
            key.Mode    = CipherMode.ECB;
            key.Padding = PaddingMode.PKCS7;
            ICryptoTransform encryptor = key.CreateEncryptor();

            byte[] encypted = encryptor.TransformFinalBlock(WellKnownUnpaddedData,
                                                            0, WellKnownUnpaddedData.Length);
            Assert.Equal(8, encypted.Length);

            // Расшифровываем без padding
            key.Padding = PaddingMode.None;
            ICryptoTransform decryptor = key.CreateDecryptor();

            byte[] decrypted = decryptor.TransformFinalBlock(encypted,
                                                             0, encypted.Length);

            // Один в один проверяем что ожидаем.
            byte[] expected = new byte[] {
                0x11, 0x22, 0x33,
                0x05, 0x05, 0x05, 0x05,
                0x05
            };
            Assert.Equal <byte>(expected, decrypted);
        }
예제 #5
0
        public void PaddingNone_UnpaddedEncrypt()
        {
            Gost28147CryptoServiceProvider key =
                new Gost28147CryptoServiceProvider();

            key.GenerateKey();
            key.Mode    = CipherMode.ECB;
            key.Padding = PaddingMode.None;
            ICryptoTransform encryptor = key.CreateEncryptor();

            Assert.ThrowsAny <CryptographicException>(() => encryptor.TransformFinalBlock(WellKnownUnpaddedData,
                                                                                          0, WellKnownUnpaddedData.Length));
        }
예제 #6
0
        public void PaddingISO10126_Unpadded()
        {
            Gost28147CryptoServiceProvider key =
                new Gost28147CryptoServiceProvider();

            key.GenerateKey();
            key.Mode    = CipherMode.ECB;
            key.Padding = PaddingMode.ISO10126;
            ICryptoTransform encryptor = key.CreateEncryptor();

            byte[] encypted = encryptor.TransformFinalBlock(WellKnownUnpaddedData,
                                                            0, WellKnownUnpaddedData.Length);
            ICryptoTransform decryptor = key.CreateDecryptor();

            byte[] decrypted = decryptor.TransformFinalBlock(encypted, 0, encypted.Length);
            Assert.Equal(WellKnownUnpaddedData, decrypted);
        }
예제 #7
0
        public void PaddingZero_Unpadded()
        {
            Gost28147CryptoServiceProvider key =
                new Gost28147CryptoServiceProvider();

            key.GenerateKey();
            key.Mode    = CipherMode.ECB;
            key.Padding = PaddingMode.Zeros;
            ICryptoTransform encryptor = key.CreateEncryptor();

            byte[] encypted = encryptor.TransformFinalBlock(WellKnownUnpaddedData,
                                                            0, WellKnownUnpaddedData.Length);
            ICryptoTransform decryptor = key.CreateDecryptor();

            byte[] decrypted = decryptor.TransformFinalBlock(encypted, 0, encypted.Length);
            byte[] expected  = new byte[] { 0x11, 0x22, 0x33, 0, 0, 0, 0, 0 };
            Assert.Equal(expected, decrypted);
        }
예제 #8
0
        public void ResetNormal()
        {
            Gost28147CryptoServiceProvider key =
                new Gost28147CryptoServiceProvider();

            key.GenerateKey();
            key.Mode    = CipherMode.ECB;
            key.Padding = PaddingMode.ANSIX923;
            ICryptoTransform encryptor = key.CreateEncryptor();
            ICryptoTransform decryptor = key.CreateDecryptor();

            // Первое преобразование.
            byte[] encrypted = encryptor.TransformFinalBlock(WellKnownUnpaddedData,
                                                             0, WellKnownUnpaddedData.Length);
            byte[] decrypted = decryptor.TransformFinalBlock(encrypted, 0, encrypted.Length);
            Assert.Equal(WellKnownUnpaddedData, decrypted);

            // Второе преобразование, на тех же encryptor и decryptor
            encrypted = encryptor.TransformFinalBlock(WellKnownUnpaddedData,
                                                      0, WellKnownUnpaddedData.Length);
            decrypted = decryptor.TransformFinalBlock(encrypted, 0, encrypted.Length);
            Assert.Equal(WellKnownUnpaddedData, decrypted);
        }