]> Cypherpunks.ru repositories - pygost.git/blobdiff - pygost/test_mgm.py
Fix MGM tag_size usage
[pygost.git] / pygost / test_mgm.py
index a2c5e5e81af78ca7dbe88d39d62eb2a2790597ea..c84be2b682e50cef5c775eb9514be714d1ab2dc1 100644 (file)
@@ -39,7 +39,7 @@ class TestVector(TestCase):
 
 
 class TestSymmetric(TestCase):
-    def _itself(self, mgm, bs):
+    def _itself(self, mgm, bs, tag_size):
         for _ in range(1000):
             nonce = nonce_prepare(urandom(bs))
             ad = urandom(randint(0, 20))
@@ -47,18 +47,29 @@ class TestSymmetric(TestCase):
             if len(ad) + len(pt) == 0:
                 continue
             ct = mgm.seal(nonce, pt, ad)
+            self.assertEqual(len(ct) - tag_size, len(pt))
             self.assertSequenceEqual(mgm.open(nonce, ct, ad), pt)
 
     def test_magma(self):
-        mgm = MGM(
-            GOST3412Magma(urandom(KEYSIZE)).encrypt,
-            GOST3412Magma.blocksize,
-        )
-        self._itself(mgm, GOST3412Magma.blocksize)
+        for tag_size in (
+                GOST3412Magma.blocksize,
+                GOST3412Magma.blocksize - 2,
+        ):
+            mgm = MGM(
+                GOST3412Magma(urandom(KEYSIZE)).encrypt,
+                GOST3412Magma.blocksize,
+                tag_size,
+            )
+            self._itself(mgm, GOST3412Magma.blocksize, tag_size)
 
     def test_kuznechik(self):
-        mgm = MGM(
-            GOST3412Kuznechik(urandom(KEYSIZE)).encrypt,
-            GOST3412Kuznechik.blocksize,
-        )
-        self._itself(mgm, GOST3412Kuznechik.blocksize)
+        for tag_size in (
+                GOST3412Kuznechik.blocksize,
+                GOST3412Kuznechik.blocksize - 2,
+        ):
+            mgm = MGM(
+                GOST3412Kuznechik(urandom(KEYSIZE)).encrypt,
+                GOST3412Kuznechik.blocksize,
+                tag_size,
+            )
+            self._itself(mgm, GOST3412Kuznechik.blocksize, tag_size)