aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichał Górny <mgorny@gentoo.org>2017-03-12 17:50:48 +0100
committerMichał Górny <mgorny@gentoo.org>2017-03-13 22:46:30 +0100
commitb773fc08fe7b20b46a810b6eca85e489a69fb8ac (patch)
treeb3142d9378a1b681ffe7b626d8d99c3665dc590c
parentportage.checksum: Support pygcrypt as optimized fallback (diff)
downloadportage-b773fc08.tar.gz
portage-b773fc08.tar.bz2
portage-b773fc08.zip
Support STREEBOG{256,512} hash function (from pygcrypt), #597736
-rw-r--r--pym/portage/checksum.py5
-rw-r--r--pym/portage/const.py3
-rw-r--r--pym/portage/tests/util/test_checksum.py18
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')