From b773fc08fe7b20b46a810b6eca85e489a69fb8ac Mon Sep 17 00:00:00 2001 From: Michał Górny Date: Sun, 12 Mar 2017 17:50:48 +0100 Subject: Support STREEBOG{256,512} hash function (from pygcrypt), #597736 --- pym/portage/checksum.py | 5 ++++- pym/portage/const.py | 3 ++- pym/portage/tests/util/test_checksum.py | 18 ++++++++++++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/pym/portage/checksum.py b/pym/portage/checksum.py index 92b41b133..3ee100c3f 100644 --- a/pym/portage/checksum.py +++ b/pym/portage/checksum.py @@ -137,7 +137,8 @@ if "SHA3_256" not in hashfunc_map or "SHA3_512" not in hashfunc_map: # Support pygcrypt as fallback using optimized routines from libgcrypt # (GnuPG). -gcrypt_algos = frozenset(('RMD160', 'WHIRLPOOL', 'SHA3_256', 'SHA3_512')) +gcrypt_algos = frozenset(('RMD160', 'WHIRLPOOL', 'SHA3_256', 'SHA3_512', + 'STREEBOG256', 'STREEBOG512')) if gcrypt_algos.difference(hashfunc_map): try: import binascii @@ -158,6 +159,8 @@ if gcrypt_algos.difference(hashfunc_map): 'WHIRLPOOL': 'whirlpool', 'SHA3_256': 'sha3-256', 'SHA3_512': 'sha3-512', + 'STREEBOG256': 'stribog256', + 'STREEBOG512': 'stribog512', } for local_name, gcry_name in name_mapping.items(): diff --git a/pym/portage/const.py b/pym/portage/const.py index 0cef2e8ae..7e415ba9c 100644 --- a/pym/portage/const.py +++ b/pym/portage/const.py @@ -232,7 +232,8 @@ MANIFEST1_REQUIRED_HASH = "MD5" # - Remove redundant settings from gentoo-x86/metadata/layout.conf. MANIFEST2_HASH_FUNCTIONS = ("SHA256", "SHA512", "WHIRLPOOL", - "BLAKE2B", "BLAKE2S", "SHA3_256", "SHA3_512") + "BLAKE2B", "BLAKE2S", "SHA3_256", "SHA3_512", + "STREEBOG256", "STREEBOG512") MANIFEST2_HASH_DEFAULTS = frozenset(["SHA256", "SHA512", "WHIRLPOOL"]) MANIFEST2_REQUIRED_HASH = "SHA256" diff --git a/pym/portage/tests/util/test_checksum.py b/pym/portage/tests/util/test_checksum.py index 72b8cef3f..01ac8f9d0 100644 --- a/pym/portage/tests/util/test_checksum.py +++ b/pym/portage/tests/util/test_checksum.py @@ -86,3 +86,21 @@ class ChecksumTestCase(TestCase): '6634c004dc31822fa65c2f1e2e3bbf0cfa35085653cca1ca9ca42f8f3f13c908405e0b665918146181c9fc9a9d793fc05429d669c35a55517820dfaa071425ca') except DigestException: self.skipTest('SHA3_512 implementation not available') + + def test_streebog256(self): + try: + self.assertEqual(checksum_str(b'', 'STREEBOG256'), + '3f539a213e97c802cc229d474c6aa32a825a360b2a933a949fd925208d9ce1bb') + self.assertEqual(checksum_str(self.text, 'STREEBOG256'), + '4992f1239c46f15b89e7b83ded4d83fb5966da3692788a4a1a6d118f78c08444') + except DigestException: + self.skipTest('STREEBOG256 implementation not available') + + def test_streebog512(self): + try: + self.assertEqual(checksum_str(b'', 'STREEBOG512'), + '8e945da209aa869f0455928529bcae4679e9873ab707b55315f56ceb98bef0a7362f715528356ee83cda5f2aac4c6ad2ba3a715c1bcd81cb8e9f90bf4c1c1a8a') + self.assertEqual(checksum_str(self.text, 'STREEBOG512'), + '330f5c26437f4e22c0163c72b12e93b8c27202f0750627355bdee43a0e0b253c90fbf0a27adbe5414019ff01ed84b7b240a1da1cbe10fae3adffc39c2d87a51f') + except DigestException: + self.skipTest('STREEBOG512 implementation not available') -- cgit v1.2.3-65-gdbad