]> Cypherpunks.ru repositories - pygost.git/commitdiff
Fix MGM tag_size usage 5.7
authorSergey Matveev <stargrave@stargrave.org>
Thu, 25 Nov 2021 18:11:25 +0000 (21:11 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Fri, 26 Nov 2021 07:57:47 +0000 (10:57 +0300)
news.texi
pygost/__init__.py
pygost/mgm.py
pygost/test_mgm.py

index 7e21260b13355a7fd26a932090642cccc853068c..f5752e6b14e3d39f16e465afc4022d5e24be6485 100644 (file)
--- a/news.texi
+++ b/news.texi
@@ -3,6 +3,10 @@
 
 @table @strong
 
+@anchor{Release 5.7}
+@item 5.7
+Fixed MGM ignoring of the set tag size.
+
 @anchor{Release 5.6}
 @item 5.6
 Fixed lint errors for previous release.
index 6fc85a3ee41a8140976218f7be1f2fd5c7b90391..12d2bade5befab7ad4d3cb580e73d923ea13883e 100644 (file)
@@ -3,4 +3,4 @@
 PyGOST is free software: see the file COPYING for copying conditions.
 """
 
-__version__ = "5.6"
+__version__ = "5.7"
index 49c478dc2619b5a00bc40de3e5c3dc5f4294453f..aabce95bbd04ad9504505352350cee8cff53179b 100644 (file)
@@ -58,7 +58,7 @@ class MGM(object):
         """
         if bs not in (8, 16):
             raise ValueError("Only 64/128-bit blocksizes allowed")
-        self.tag_size = bs if tag_size is None else bs
+        self.tag_size = bs if tag_size is None else tag_size
         if self.tag_size < 4 or self.tag_size > bs:
             raise ValueError("Invalid tag_size")
         self.encrypter = encrypter
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)