summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikola Forró <nforro@redhat.com>2020-10-26 18:54:22 +0100
committerNikola Forró <nforro@redhat.com>2020-10-29 08:42:35 +0100
commit14c6e451edcf65d412443c7fb045ab706daf3b73 (patch)
treedc8a575e4ae7855e2a72e5af248fcfd5ba280b84
parentab22e0076608f4825bf9a3ca1b6a0a6a7a670d14 (diff)
downloadnumpy-14c6e451edcf65d412443c7fb045ab706daf3b73.tar.gz
TST: Make test suite work in FIPS (140-2) Mode
Tests using MD5 algorithms fail in FIPS Mode because MD5 is not FIPS compliant. Replace MD5 with SHA256 to overcome that. Signed-off-by: Nikola Forró <nforro@redhat.com>
-rw-r--r--numpy/core/tests/test_regression.py4
-rw-r--r--numpy/f2py/tests/util.py2
-rw-r--r--numpy/random/tests/test_generator_mt19937.py50
-rw-r--r--numpy/random/tests/test_random.py24
-rw-r--r--numpy/random/tests/test_randomstate.py64
5 files changed, 71 insertions, 73 deletions
diff --git a/numpy/core/tests/test_regression.py b/numpy/core/tests/test_regression.py
index 2e731d4fa..831e48e8b 100644
--- a/numpy/core/tests/test_regression.py
+++ b/numpy/core/tests/test_regression.py
@@ -1506,10 +1506,10 @@ class TestRegression:
test_type(t)
def test_buffer_hashlib(self):
- from hashlib import md5
+ from hashlib import sha256
x = np.array([1, 2, 3], dtype=np.dtype('<i4'))
- assert_equal(md5(x).hexdigest(), '2a1dd1e1e59d0a384c26951e316cd7e6')
+ assert_equal(sha256(x).hexdigest(), '4636993d3e1da4e9d6b8f87b79e8f7c6d018580d52661950eabc3845c5897a4d')
def test_0d_string_scalar(self):
# Bug #1436; the following should succeed
diff --git a/numpy/f2py/tests/util.py b/numpy/f2py/tests/util.py
index c5b06697d..d5fa76fed 100644
--- a/numpy/f2py/tests/util.py
+++ b/numpy/f2py/tests/util.py
@@ -19,8 +19,6 @@ from numpy.compat import asbytes, asstr
from numpy.testing import temppath
from importlib import import_module
-from hashlib import md5
-
#
# Maintaining a temporary module directory
#
diff --git a/numpy/random/tests/test_generator_mt19937.py b/numpy/random/tests/test_generator_mt19937.py
index 6be7d852b..b69cd38d4 100644
--- a/numpy/random/tests/test_generator_mt19937.py
+++ b/numpy/random/tests/test_generator_mt19937.py
@@ -18,20 +18,20 @@ JUMP_TEST_DATA = [
{
"seed": 0,
"steps": 10,
- "initial": {"key_md5": "64eaf265d2203179fb5ffb73380cd589", "pos": 9},
- "jumped": {"key_md5": "8cb7b061136efceef5217a9ce2cc9a5a", "pos": 598},
+ "initial": {"key_sha256": "bb1636883c2707b51c5b7fc26c6927af4430f2e0785a8c7bc886337f919f9edf", "pos": 9},
+ "jumped": {"key_sha256": "ff682ac12bb140f2d72fba8d3506cf4e46817a0db27aae1683867629031d8d55", "pos": 598},
},
{
"seed":384908324,
"steps":312,
- "initial": {"key_md5": "e99708a47b82ff51a2c7b0625b81afb5", "pos": 311},
- "jumped": {"key_md5": "2ecdbfc47a895b253e6e19ccb2e74b90", "pos": 276},
+ "initial": {"key_sha256": "16b791a1e04886ccbbb4d448d6ff791267dc458ae599475d08d5cced29d11614", "pos": 311},
+ "jumped": {"key_sha256": "a0110a2cf23b56be0feaed8f787a7fc84bef0cb5623003d75b26bdfa1c18002c", "pos": 276},
},
{
"seed": [839438204, 980239840, 859048019, 821],
"steps": 511,
- "initial": {"key_md5": "9fcd6280df9199785e17e93162ce283c", "pos": 510},
- "jumped": {"key_md5": "433b85229f2ed853cde06cd872818305", "pos": 475},
+ "initial": {"key_sha256": "d306cf01314d51bd37892d874308200951a35265ede54d200f1e065004c3e9ea", "pos": 510},
+ "jumped": {"key_sha256": "0e00ab449f01a5195a83b4aee0dfbc2ce8d46466a640b92e33977d2e42f777f8", "pos": 475},
},
]
@@ -483,18 +483,18 @@ class TestIntegers:
assert_array_equal(scalar, array)
def test_repeatability(self, endpoint):
- # We use a md5 hash of generated sequences of 1000 samples
+ # We use a sha256 hash of generated sequences of 1000 samples
# in the range [0, 6) for all but bool, where the range
# is [0, 2). Hashes are for little endian numbers.
- tgt = {'bool': 'b3300e66d2bb59e493d255d47c3a6cbe',
- 'int16': '39624ead49ad67e37545744024d2648b',
- 'int32': '5c4810373f979336c6c0c999996e47a1',
- 'int64': 'ab126c15edff26f55c50d2b7e37391ac',
- 'int8': 'ba71ccaffeeeb9eeb1860f8075020b9c',
- 'uint16': '39624ead49ad67e37545744024d2648b',
- 'uint32': '5c4810373f979336c6c0c999996e47a1',
- 'uint64': 'ab126c15edff26f55c50d2b7e37391ac',
- 'uint8': 'ba71ccaffeeeb9eeb1860f8075020b9c'}
+ tgt = {'bool': '053594a9b82d656f967c54869bc6970aa0358cf94ad469c81478459c6a90eee3',
+ 'int16': '54de9072b6ee9ff7f20b58329556a46a447a8a29d67db51201bf88baa6e4e5d4',
+ 'int32': 'd3a0d5efb04542b25ac712e50d21f39ac30f312a5052e9bbb1ad3baa791ac84b',
+ 'int64': '14e224389ac4580bfbdccb5697d6190b496f91227cf67df60989de3d546389b1',
+ 'int8': '0e203226ff3fbbd1580f15da4621e5f7164d0d8d6b51696dd42d004ece2cbec1',
+ 'uint16': '54de9072b6ee9ff7f20b58329556a46a447a8a29d67db51201bf88baa6e4e5d4',
+ 'uint32': 'd3a0d5efb04542b25ac712e50d21f39ac30f312a5052e9bbb1ad3baa791ac84b',
+ 'uint64': '14e224389ac4580bfbdccb5697d6190b496f91227cf67df60989de3d546389b1',
+ 'uint8': '0e203226ff3fbbd1580f15da4621e5f7164d0d8d6b51696dd42d004ece2cbec1'}
for dt in self.itype[1:]:
random = Generator(MT19937(1234))
@@ -507,14 +507,14 @@ class TestIntegers:
val = random.integers(0, 6 - endpoint, size=1000, endpoint=endpoint,
dtype=dt).byteswap()
- res = hashlib.md5(val).hexdigest()
+ res = hashlib.sha256(val).hexdigest()
assert_(tgt[np.dtype(dt).name] == res)
# bools do not depend on endianness
random = Generator(MT19937(1234))
val = random.integers(0, 2 - endpoint, size=1000, endpoint=endpoint,
dtype=bool).view(np.int8)
- res = hashlib.md5(val).hexdigest()
+ res = hashlib.sha256(val).hexdigest()
assert_(tgt[np.dtype(bool).name] == res)
def test_repeatability_broadcasting(self, endpoint):
@@ -905,12 +905,12 @@ class TestRandomDist:
assert actual.dtype == np.int64
def test_choice_large_sample(self):
- choice_hash = 'd44962a0b1e92f4a3373c23222244e21'
+ choice_hash = '4266599d12bfcfb815213303432341c06b4349f5455890446578877bb322e222'
random = Generator(MT19937(self.seed))
actual = random.choice(10000, 5000, replace=False)
if sys.byteorder != 'little':
actual = actual.byteswap()
- res = hashlib.md5(actual.view(np.int8)).hexdigest()
+ res = hashlib.sha256(actual.view(np.int8)).hexdigest()
assert_(choice_hash == res)
def test_bytes(self):
@@ -2424,7 +2424,7 @@ class TestSingleEltArrayInput:
@pytest.mark.parametrize("config", JUMP_TEST_DATA)
def test_jumped(config):
# Each config contains the initial seed, a number of raw steps
- # the md5 hashes of the initial and the final states' keys and
+ # the sha256 hashes of the initial and the final states' keys and
# the position of of the initial and the final state.
# These were produced using the original C implementation.
seed = config["seed"]
@@ -2436,17 +2436,17 @@ def test_jumped(config):
key = mt19937.state["state"]["key"]
if sys.byteorder == 'big':
key = key.byteswap()
- md5 = hashlib.md5(key)
+ sha256 = hashlib.sha256(key)
assert mt19937.state["state"]["pos"] == config["initial"]["pos"]
- assert md5.hexdigest() == config["initial"]["key_md5"]
+ assert sha256.hexdigest() == config["initial"]["key_sha256"]
jumped = mt19937.jumped()
key = jumped.state["state"]["key"]
if sys.byteorder == 'big':
key = key.byteswap()
- md5 = hashlib.md5(key)
+ sha256 = hashlib.sha256(key)
assert jumped.state["state"]["pos"] == config["jumped"]["pos"]
- assert md5.hexdigest() == config["jumped"]["key_md5"]
+ assert sha256.hexdigest() == config["jumped"]["key_sha256"]
def test_broadcast_size_error():
diff --git a/numpy/random/tests/test_random.py b/numpy/random/tests/test_random.py
index 276b5bc81..c13fc39e3 100644
--- a/numpy/random/tests/test_random.py
+++ b/numpy/random/tests/test_random.py
@@ -211,18 +211,18 @@ class TestRandint:
def test_repeatability(self):
import hashlib
- # We use a md5 hash of generated sequences of 1000 samples
+ # We use a sha256 hash of generated sequences of 1000 samples
# in the range [0, 6) for all but bool, where the range
# is [0, 2). Hashes are for little endian numbers.
- tgt = {'bool': '7dd3170d7aa461d201a65f8bcf3944b0',
- 'int16': '1b7741b80964bb190c50d541dca1cac1',
- 'int32': '4dc9fcc2b395577ebb51793e58ed1a05',
- 'int64': '17db902806f448331b5a758d7d2ee672',
- 'int8': '27dd30c4e08a797063dffac2490b0be6',
- 'uint16': '1b7741b80964bb190c50d541dca1cac1',
- 'uint32': '4dc9fcc2b395577ebb51793e58ed1a05',
- 'uint64': '17db902806f448331b5a758d7d2ee672',
- 'uint8': '27dd30c4e08a797063dffac2490b0be6'}
+ tgt = {'bool': '509aea74d792fb931784c4b0135392c65aec64beee12b0cc167548a2c3d31e71',
+ 'int16': '7b07f1a920e46f6d0fe02314155a2330bcfd7635e708da50e536c5ebb631a7d4',
+ 'int32': 'e577bfed6c935de944424667e3da285012e741892dcb7051a8f1ce68ab05c92f',
+ 'int64': '0fbead0b06759df2cfb55e43148822d4a1ff953c7eb19a5b08445a63bb64fa9e',
+ 'int8': '001aac3a5acb935a9b186cbe14a1ca064b8bb2dd0b045d48abeacf74d0203404',
+ 'uint16': '7b07f1a920e46f6d0fe02314155a2330bcfd7635e708da50e536c5ebb631a7d4',
+ 'uint32': 'e577bfed6c935de944424667e3da285012e741892dcb7051a8f1ce68ab05c92f',
+ 'uint64': '0fbead0b06759df2cfb55e43148822d4a1ff953c7eb19a5b08445a63bb64fa9e',
+ 'uint8': '001aac3a5acb935a9b186cbe14a1ca064b8bb2dd0b045d48abeacf74d0203404'}
for dt in self.itype[1:]:
np.random.seed(1234)
@@ -233,13 +233,13 @@ class TestRandint:
else:
val = self.rfunc(0, 6, size=1000, dtype=dt).byteswap()
- res = hashlib.md5(val.view(np.int8)).hexdigest()
+ res = hashlib.sha256(val.view(np.int8)).hexdigest()
assert_(tgt[np.dtype(dt).name] == res)
# bools do not depend on endianness
np.random.seed(1234)
val = self.rfunc(0, 2, size=1000, dtype=bool).view(np.int8)
- res = hashlib.md5(val).hexdigest()
+ res = hashlib.sha256(val).hexdigest()
assert_(tgt[np.dtype(bool).name] == res)
def test_int64_uint64_corner_case(self):
diff --git a/numpy/random/tests/test_randomstate.py b/numpy/random/tests/test_randomstate.py
index 23dbbed6a..b70a04347 100644
--- a/numpy/random/tests/test_randomstate.py
+++ b/numpy/random/tests/test_randomstate.py
@@ -26,24 +26,24 @@ INT_FUNCS = {'binomial': (100.0, 0.6),
if np.iinfo(int).max < 2**32:
# Windows and some 32-bit platforms, e.g., ARM
- INT_FUNC_HASHES = {'binomial': '670e1c04223ffdbab27e08fbbad7bdba',
- 'logseries': '6bd0183d2f8030c61b0d6e11aaa60caf',
- 'geometric': '6e9df886f3e1e15a643168568d5280c0',
- 'hypergeometric': '7964aa611b046aecd33063b90f4dec06',
- 'multinomial': '68a0b049c16411ed0aa4aff3572431e4',
- 'negative_binomial': 'dc265219eec62b4338d39f849cd36d09',
- 'poisson': '7b4dce8e43552fc82701c2fa8e94dc6e',
- 'zipf': 'fcd2a2095f34578723ac45e43aca48c5',
+ INT_FUNC_HASHES = {'binomial': '2fbead005fc63942decb5326d36a1f32fe2c9d32c904ee61e46866b88447c263',
+ 'logseries': '23ead5dcde35d4cfd4ef2c105e4c3d43304b45dc1b1444b7823b9ee4fa144ebb',
+ 'geometric': '0d764db64f5c3bad48c8c33551c13b4d07a1e7b470f77629bef6c985cac76fcf',
+ 'hypergeometric': '7b59bf2f1691626c5815cdcd9a49e1dd68697251d4521575219e4d2a1b8b2c67',
+ 'multinomial': 'd754fa5b92943a38ec07630de92362dd2e02c43577fc147417dc5b9db94ccdd3',
+ 'negative_binomial': '8eb216f7cb2a63cf55605422845caaff002fddc64a7dc8b2d45acd477a49e824',
+ 'poisson': '70c891d76104013ebd6f6bcf30d403a9074b886ff62e4e6b8eb605bf1a4673b7',
+ 'zipf': '01f074f97517cd5d21747148ac6ca4074dde7fcb7acbaec0a936606fecacd93f',
}
else:
- INT_FUNC_HASHES = {'binomial': 'b5f8dcd74f172836536deb3547257b14',
- 'geometric': '8814571f45c87c59699d62ccd3d6c350',
- 'hypergeometric': 'bc64ae5976eac452115a16dad2dcf642',
- 'logseries': '84be924b37485a27c4a98797bc88a7a4',
- 'multinomial': 'ec3c7f9cf9664044bb0c6fb106934200',
- 'negative_binomial': '210533b2234943591364d0117a552969',
- 'poisson': '0536a8850c79da0c78defd742dccc3e0',
- 'zipf': 'f2841f504dd2525cd67cdcad7561e532',
+ INT_FUNC_HASHES = {'binomial': '8626dd9d052cb608e93d8868de0a7b347258b199493871a1dc56e2a26cacb112',
+ 'geometric': '8edd53d272e49c4fc8fbbe6c7d08d563d62e482921f3131d0a0e068af30f0db9',
+ 'hypergeometric': '83496cc4281c77b786c9b7ad88b74d42e01603a55c60577ebab81c3ba8d45657',
+ 'logseries': '65878a38747c176bc00e930ebafebb69d4e1e16cd3a704e264ea8f5e24f548db',
+ 'multinomial': '7a984ae6dca26fd25374479e118b22f55db0aedccd5a0f2584ceada33db98605',
+ 'negative_binomial': 'd636d968e6a24ae92ab52fe11c46ac45b0897e98714426764e820a7d77602a61',
+ 'poisson': '956552176f77e7c9cb20d0118fc9cf690be488d790ed4b4c4747b965e61b0bb4',
+ 'zipf': 'f84ba7feffda41e606e20b28dfc0f1ea9964a74574513d4a4cbc98433a8bfa45',
}
@@ -319,18 +319,18 @@ class TestRandint:
assert_(vals.min() >= 0)
def test_repeatability(self):
- # We use a md5 hash of generated sequences of 1000 samples
+ # We use a sha256 hash of generated sequences of 1000 samples
# in the range [0, 6) for all but bool, where the range
# is [0, 2). Hashes are for little endian numbers.
- tgt = {'bool': '7dd3170d7aa461d201a65f8bcf3944b0',
- 'int16': '1b7741b80964bb190c50d541dca1cac1',
- 'int32': '4dc9fcc2b395577ebb51793e58ed1a05',
- 'int64': '17db902806f448331b5a758d7d2ee672',
- 'int8': '27dd30c4e08a797063dffac2490b0be6',
- 'uint16': '1b7741b80964bb190c50d541dca1cac1',
- 'uint32': '4dc9fcc2b395577ebb51793e58ed1a05',
- 'uint64': '17db902806f448331b5a758d7d2ee672',
- 'uint8': '27dd30c4e08a797063dffac2490b0be6'}
+ tgt = {'bool': '509aea74d792fb931784c4b0135392c65aec64beee12b0cc167548a2c3d31e71',
+ 'int16': '7b07f1a920e46f6d0fe02314155a2330bcfd7635e708da50e536c5ebb631a7d4',
+ 'int32': 'e577bfed6c935de944424667e3da285012e741892dcb7051a8f1ce68ab05c92f',
+ 'int64': '0fbead0b06759df2cfb55e43148822d4a1ff953c7eb19a5b08445a63bb64fa9e',
+ 'int8': '001aac3a5acb935a9b186cbe14a1ca064b8bb2dd0b045d48abeacf74d0203404',
+ 'uint16': '7b07f1a920e46f6d0fe02314155a2330bcfd7635e708da50e536c5ebb631a7d4',
+ 'uint32': 'e577bfed6c935de944424667e3da285012e741892dcb7051a8f1ce68ab05c92f',
+ 'uint64': '0fbead0b06759df2cfb55e43148822d4a1ff953c7eb19a5b08445a63bb64fa9e',
+ 'uint8': '001aac3a5acb935a9b186cbe14a1ca064b8bb2dd0b045d48abeacf74d0203404'}
for dt in self.itype[1:]:
random.seed(1234)
@@ -341,13 +341,13 @@ class TestRandint:
else:
val = self.rfunc(0, 6, size=1000, dtype=dt).byteswap()
- res = hashlib.md5(val.view(np.int8)).hexdigest()
+ res = hashlib.sha256(val.view(np.int8)).hexdigest()
assert_(tgt[np.dtype(dt).name] == res)
# bools do not depend on endianness
random.seed(1234)
val = self.rfunc(0, 2, size=1000, dtype=bool).view(np.int8)
- res = hashlib.md5(val).hexdigest()
+ res = hashlib.sha256(val).hexdigest()
assert_(tgt[np.dtype(bool).name] == res)
@pytest.mark.skipif(np.iinfo('l').max < 2**32,
@@ -1974,7 +1974,7 @@ class TestSingleEltArrayInput:
# Ensure returned array dtype is correct for platform
def test_integer_dtype(int_func):
random.seed(123456789)
- fname, args, md5 = int_func
+ fname, args, sha256 = int_func
f = getattr(random, fname)
actual = f(*args, size=2)
assert_(actual.dtype == np.dtype('l'))
@@ -1982,13 +1982,13 @@ def test_integer_dtype(int_func):
def test_integer_repeat(int_func):
random.seed(123456789)
- fname, args, md5 = int_func
+ fname, args, sha256 = int_func
f = getattr(random, fname)
val = f(*args, size=1000000)
if sys.byteorder != 'little':
val = val.byteswap()
- res = hashlib.md5(val.view(np.int8)).hexdigest()
- assert_(res == md5)
+ res = hashlib.sha256(val.view(np.int8)).hexdigest()
+ assert_(res == sha256)
def test_broadcast_size_error():