You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

test_metadata_sizes.py 1.6 KiB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import json
  2. import os
  3. import pqclean
  4. import helpers
  5. def test_metadata_sizes():
  6. for scheme in pqclean.Scheme.all_schemes():
  7. for implementation in scheme.implementations:
  8. yield check_metadata_sizes, implementation
  9. @helpers.filtered_test
  10. def check_metadata_sizes(implementation):
  11. metadata = implementation.scheme.metadata()
  12. impl_meta = next((impl for impl in metadata['implementations']
  13. if impl['name'] == implementation.name), None)
  14. helpers.make('printparams',
  15. TYPE=implementation.scheme.type,
  16. SCHEME=implementation.scheme.name,
  17. IMPLEMENTATION=implementation.name,
  18. working_dir=os.path.join('..', 'test'))
  19. out = helpers.run_subprocess(
  20. [os.path.join('..', 'bin', 'printparams_{}_{}{}'.format(
  21. implementation.scheme.name,
  22. implementation.name,
  23. '.exe' if os.name == 'nt' else ''
  24. ))],
  25. os.path.join('..', 'bin'),
  26. ).replace('\r', '')
  27. parsed = json.loads(out)
  28. assert parsed['CRYPTO_SECRETKEYBYTES'] == metadata['length-secret-key']
  29. assert parsed['CRYPTO_PUBLICKEYBYTES'] == metadata['length-public-key']
  30. if implementation.scheme.type == 'kem':
  31. assert (
  32. parsed['CRYPTO_CIPHERTEXTBYTES'] == metadata['length-ciphertext'])
  33. assert parsed['CRYPTO_BYTES'] == metadata['length-shared-secret']
  34. else:
  35. assert parsed['CRYPTO_BYTES'] == metadata['length-signature']
  36. if __name__ == '__main__':
  37. try:
  38. import nose2
  39. nose2.main()
  40. except ImportError:
  41. import nose
  42. nose.runmodule()