This repository contains a Python3 implementation of Hawk signature scheme. Its purpose is to support the specification document and high-level understanding of Hawk. For performance evaluation, please refer to the C implementations.
warning: This project makes use of Falcon NTRUSolve
in Python3 hence is using floating-points. This implementation generates valid priv/pub key pairs, but is not compliant with the
reference implementation / specifications that leverage fixed-point NTRUSolve
.
Next we detail the content of each files on a high level. Most of the functions contain a reference to the algorithm it implements in the specification document.
keygen.py
: Key generation algorithm for Hawk.sign.py
: Signature generation algorithm for Hawk.verify.py
: Signature verification algorithm for Hawk.codec.py
: Helper function to encode keys and signatures.params.py
: Parameters for Hawk-(256,512,1024).poly.py
: Several helper functions for integer polynomials.rngcontext.py
: Wrappers around SHAKE256.ntrugen/
:NTRUSolve
from Falcon Python3 implementation. This uses floating points, which can/should be avoided. To do so, please refer to the specifications and C implementation.ref/
: The reference C implementation of Hawk. This is used during testing.
Tests are available in test.py
. It compares the output of the Python3 implementation with the reference implementation from ref/
.
The code under ntrugen
is derived from Falcon Python3 implementation licensed under MIT. The code under ref
is derived from Hawk C implementation licensed under MIT.
This code is licensed under MIT.
This code does not provide any guarantee and should not be used in production.