1
1
mirror of https://github.com/henrydcase/pqc.git synced 2024-11-26 09:21:28 +00:00

Test for prohibited includes in api.h

This commit is contained in:
Joost Rijneveld 2019-04-09 17:14:34 +02:00
parent 27366d6559
commit 9e5fd74823
No known key found for this signature in database
GPG Key ID: A4FE39CF49CBC553
3 changed files with 33 additions and 1 deletions

View File

@ -7,7 +7,6 @@
<!-- These checkboxes serve for the maintainers of PQClean to verify your submission. Please do not check them yourself. --> <!-- These checkboxes serve for the maintainers of PQClean to verify your submission. Please do not check them yourself. -->
* [ ] `#if`/`#ifdef`s only for header encapsulation * [ ] `#if`/`#ifdef`s only for header encapsulation
* [ ] `api.h` does not include other files
* [ ] No stringification macros * [ ] No stringification macros
* [ ] Output-parameter pointers in functions are on the left * [ ] Output-parameter pointers in functions are on the left
* [ ] Negative return values on failure of API functions (within restrictions of FO transform). * [ ] Negative return values on failure of API functions (within restrictions of FO transform).

View File

@ -34,6 +34,7 @@ _The checking of items on this list is still being developed. Checked items shou
* [x] Code is valid C99 * [x] Code is valid C99
* [x] Passes functional tests * [x] Passes functional tests
* [x] API functions do not write outside provided buffers * [x] API functions do not write outside provided buffers
* [x] `api.h` cannot include external files
* [x] Compiles with `-Wall -Wextra -Wpedantic -Werror` with `gcc` and `clang` * [x] Compiles with `-Wall -Wextra -Wpedantic -Werror` with `gcc` and `clang`
* [x] Consistent test vectors across runs * [x] Consistent test vectors across runs
* [x] Consistent test vectors on big-endian and little-endian machines * [x] Consistent test vectors on big-endian and little-endian machines

32
test/test_api_h.py Normal file
View File

@ -0,0 +1,32 @@
import os
import re
import pqclean
def test_preprocessor():
for scheme in pqclean.Scheme.all_schemes():
for implementation in scheme.implementations:
yield check_preprocessor, implementation
def check_preprocessor(implementation: pqclean.Implementation):
apipath = os.path.join(implementation.path(), 'api.h')
errors = []
p = re.compile(r'^\s*#include\s*"')
with open(apipath) as f:
for i, line in enumerate(f):
if p.match(line):
errors.append("\n at {}:{}".format(apipath, i+1))
if errors:
raise AssertionError(
"Prohibited external include in api.h" + "".join(errors)
)
if __name__ == "__main__":
try:
import nose2
nose2.main()
except ImportError:
import nose
nose.runmodule()