mirror of
https://github.com/open-quantum-safe/liboqs.git
synced 2025-10-04 00:02:01 -04:00
75 lines
2.6 KiB
Python
75 lines
2.6 KiB
Python
# SPDX-License-Identifier: MIT
|
|
|
|
import helpers
|
|
import os
|
|
import pytest
|
|
import re
|
|
import sys
|
|
|
|
# Ensure every key-exchange algorithm in the code
|
|
# is mentioned in the documentation.
|
|
@helpers.filtered_test
|
|
@pytest.mark.skipif(sys.platform.startswith("win"), reason="Not needed on Windows")
|
|
@pytest.mark.parametrize('kem_name', helpers.available_kems_by_name())
|
|
def test_datasheet_kem(kem_name):
|
|
helpers.run_subprocess(
|
|
['grep', '-r', kem_name, 'docs/algorithms']
|
|
)
|
|
|
|
# Ensure every signature algorithm in the code
|
|
# is mentioned in the documentation.
|
|
@helpers.filtered_test
|
|
@pytest.mark.skipif(sys.platform.startswith("win"), reason="Not needed on Windows")
|
|
@pytest.mark.parametrize('sig_name', helpers.available_sigs_by_name())
|
|
def test_datasheet_sig(sig_name):
|
|
helpers.run_subprocess(
|
|
['grep', '-r', sig_name, 'docs/algorithms']
|
|
)
|
|
|
|
# Ensure astyle agrees with the formatting.
|
|
@helpers.filtered_test
|
|
@pytest.mark.skipif(sys.platform.startswith("win"), reason="Not needed on Windows")
|
|
def test_style():
|
|
|
|
result = helpers.run_subprocess(
|
|
['tests/run_astyle.sh']
|
|
)
|
|
assert 'Formatted' not in result
|
|
|
|
@helpers.filtered_test
|
|
@pytest.mark.skipif(sys.platform.startswith("win"), reason="Not needed on Windows")
|
|
def test_spdx():
|
|
|
|
result = helpers.run_subprocess(
|
|
['tests/test_spdx.sh']
|
|
)
|
|
if len(result) != 0:
|
|
print("The following files do not have proper SPDX-License-Identifier headers:")
|
|
print(result)
|
|
assert False
|
|
|
|
# Ensure "free" is not used unprotected in the main OQS code.
|
|
@helpers.filtered_test
|
|
@pytest.mark.skipif(sys.platform.startswith("win"), reason="Not needed on Windows")
|
|
def test_free():
|
|
c_files = []
|
|
for path, _, files in os.walk('src'):
|
|
if os.path.join('picnic','external') in path: continue
|
|
c_files += [os.path.join(path,f) for f in files if f[-2:] == '.c']
|
|
okay = True
|
|
for fn in c_files:
|
|
with open(fn) as f:
|
|
# Find all lines that contain 'free(' but not '_free('
|
|
for no, line in enumerate(f,1):
|
|
if not re.match(r'^.*[^_]free\(.*$', line):
|
|
continue
|
|
if 'IGNORE free-check' in line:
|
|
continue
|
|
okay = False
|
|
print("Suspicious `free` in {}:{}:{}".format(fn,no,line))
|
|
assert okay, "'free' is used in some files. These should be changed to 'OQS_MEM_secure_free' or 'OQS_MEM_insecure_free' as appropriate. If you are sure you want to use 'free' in a particular spot, add the comment '// IGNORE free-check' on the line where 'free' occurs."
|
|
|
|
if __name__ == "__main__":
|
|
import sys
|
|
pytest.main(sys.argv)
|