| # SPDX-License-Identifier: MIT |
| |
| import hashlib |
| import helpers |
| import pytest |
| import random |
| import sys |
| |
| @helpers.filtered_test |
| @pytest.mark.skipif(sys.platform.startswith("win"), reason="Not supported on Windows") |
| def test_aes(): |
| helpers.run_subprocess( |
| [helpers.path_to_executable('test_aes')], |
| ) |
| |
| @helpers.filtered_test |
| @pytest.mark.skipif(sys.platform.startswith("win"), reason="Not supported on Windows") |
| def test_sha3(): |
| helpers.run_subprocess( |
| [helpers.path_to_executable('test_sha3')], |
| ) |
| |
| @helpers.filtered_test |
| @pytest.mark.parametrize('algname', ['sha256', 'sha384', 'sha512', 'sha3_256', 'sha3_384', 'sha3_512']) |
| @pytest.mark.skipif(sys.platform.startswith("win"), reason="Not supported on Windows") |
| def test_hash_sha2_random(algname): |
| # hash every size from 0 to 1024, then every 11th size after that |
| # (why 11? it's coprime with powers of 2, so we should land in a |
| # bunch of random-ish spots relative to block boundaries) |
| for i in list(range(0, 1024)) + list(range(1025, 20000, 11)): |
| msg = "".join("1" for j in range(i)).encode() |
| hasher = hashlib.new(algname) |
| hasher.update(msg) |
| output = helpers.run_subprocess( |
| [helpers.path_to_executable('test_hash'), algname], |
| input = msg, |
| ) |
| if output.rstrip() != hasher.hexdigest(): |
| print(msg.hex()) |
| assert False, algname + " hashes don't match for the above " + str(i) + "-byte hex string; liboqs output = " + output.rstrip() + "; Python output = " + hasher.hexdigest() |
| if algname[0:4] == "sha3": continue |
| output = helpers.run_subprocess( |
| [helpers.path_to_executable('test_hash'), algname + 'inc'], |
| input = msg, |
| ) |
| if output.rstrip() != hasher.hexdigest(): |
| print(msg.hex()) |
| assert False, algname + " hashes (using liboqs incremental API) don't match for the above " + str(i) + "-byte hex string; liboqs output = " + output.rstrip() + "; Python output = " + hasher.hexdigest() |
| |
| if __name__ == "__main__": |
| import sys |
| pytest.main(sys.argv) |
| |