diff --git a/scripts/copy_from_pqclean/copy_from_pqclean.py b/scripts/copy_from_pqclean/copy_from_pqclean.py index 275267518..6bb164bbe 100755 --- a/scripts/copy_from_pqclean/copy_from_pqclean.py +++ b/scripts/copy_from_pqclean/copy_from_pqclean.py @@ -57,12 +57,14 @@ def load_instructions(): instructions = yaml.safe_load(instructions) for family in instructions['kems']: family['type'] = 'kem' + family['pqclean_type'] = 'kem' family['family'] = family['name'] for scheme in family['schemes']: scheme['metadata'] = yaml.safe_load(file_get_contents(os.path.join(os.environ['PQCLEAN_DIR'], 'crypto_kem', scheme['pqclean_scheme'], 'META.yml'))) scheme['metadata']['ind_cca'] = 'true' for family in instructions['sigs']: family['type'] = 'sig' + family['pqclean_type'] = 'sign' family['family'] = family['name'] for scheme in family['schemes']: scheme['metadata'] = yaml.safe_load(file_get_contents(os.path.join(os.environ['PQCLEAN_DIR'], 'crypto_sign', scheme['pqclean_scheme'], 'META.yml'))) @@ -71,7 +73,7 @@ def load_instructions(): instructions = load_instructions() -for family in instructions['kems']: +for family in instructions['kems'] + instructions['sigs']: for scheme in family['schemes']: try: os.mkdir(os.path.join('src', family['type'], family['name'])) @@ -81,7 +83,7 @@ for family in instructions['kems']: subprocess.run([ 'cp', '-pr', - os.path.join(os.environ['PQCLEAN_DIR'], 'crypto_' + family['type'], scheme['pqclean_scheme'], scheme['implementation']), + os.path.join(os.environ['PQCLEAN_DIR'], 'crypto_' + family['pqclean_type'], scheme['pqclean_scheme'], scheme['implementation']), os.path.join('src', family['type'], family['name'], 'pqclean_{}_clean'.format(scheme['pqclean_scheme'])) ]) os.remove(os.path.join('src', family['type'], family['name'], 'pqclean_{}_clean'.format(scheme['pqclean_scheme']), 'Makefile')) diff --git a/scripts/copy_from_pqclean/src/sig/family/Makefile.am b/scripts/copy_from_pqclean/src/sig/family/Makefile.am new file mode 100644 index 000000000..8470233e8 --- /dev/null +++ b/scripts/copy_from_pqclean/src/sig/family/Makefile.am @@ -0,0 +1,12 @@ +AUTOMAKE_OPTIONS = foreign +noinst_LTLIBRARIES = libsig{{ family }}.la +noinst_LTLIBRARIES += {% for scheme in schemes %}libsig{{ scheme['pqclean_scheme'] }}.la {%endfor %} + +libsig{{ family }}_la_LIBADD = {% for scheme in schemes %}libsig{{ scheme['pqclean_scheme'] }}.la {%endfor %} +libsig{{ family }}_la_SOURCES = + +{% for scheme in schemes -%} +libsig{{ scheme['pqclean_scheme'] }}_la_SOURCES = sig_{{ scheme['pqclean_scheme'] }}.c {% for source in scheme['sources'] %}pqclean_{{ scheme['pqclean_scheme'] }}_clean/{{ source }} {% endfor %} +libsig{{ scheme['pqclean_scheme'] }}_la_CFLAGS = $(AM_CFLAGS) -I../../common/pqclean_shims + +{% endfor -%} diff --git a/scripts/copy_from_pqclean/src/sig/family/sig_family.h b/scripts/copy_from_pqclean/src/sig/family/sig_family.h new file mode 100644 index 000000000..574b13281 --- /dev/null +++ b/scripts/copy_from_pqclean/src/sig/family/sig_family.h @@ -0,0 +1,20 @@ +#ifndef __OQS_SIG_{{ family|upper }}_H +#define __OQS_SIG_{{ family|upper }}_H + +#include + +{% for scheme in schemes -%} +#ifdef OQS_ENABLE_SIG_{{ family }}_{{ scheme['scheme'] }} +#define OQS_SIG_{{ family }}_{{ scheme['scheme'] }}_length_public_key {{ scheme['metadata']['length-public-key'] }} +#define OQS_SIG_{{ family }}_{{ scheme['scheme'] }}_length_secret_key {{ scheme['metadata']['length-secret-key'] }} +#define OQS_SIG_{{ family }}_{{ scheme['scheme'] }}_length_signature {{ scheme['metadata']['length-signature'] }} + +OQS_SIG *OQS_SIG_{{ family }}_{{ scheme['scheme'] }}_new(); +OQS_API OQS_STATUS OQS_SIG_{{ family }}_{{ scheme['scheme'] }}_keypair(uint8_t *public_key, uint8_t *secret_key); +OQS_API OQS_STATUS OQS_SIG_{{ family }}_{{ scheme['scheme'] }}_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key); +OQS_API OQS_STATUS OQS_SIG_{{ family }}_{{ scheme['scheme'] }}_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key); +#endif + +{% endfor -%} + +#endif diff --git a/scripts/copy_from_pqclean/src/sig/family/sig_scheme.c b/scripts/copy_from_pqclean/src/sig/family/sig_scheme.c new file mode 100644 index 000000000..60d2d0f36 --- /dev/null +++ b/scripts/copy_from_pqclean/src/sig/family/sig_scheme.c @@ -0,0 +1,46 @@ +#include + +#include + +{% for scheme in schemes -%} +#ifdef OQS_ENABLE_SIG_{{ family }}_{{ scheme['scheme'] }} + +OQS_SIG *OQS_SIG_{{ family }}_{{ scheme['scheme'] }}_new() { + + OQS_SIG *sig = malloc(sizeof(OQS_SIG)); + if (sig == NULL) { + return NULL; + } + sig->method_name = OQS_SIG_alg_{{ family }}_{{ scheme['scheme'] }}; + sig->alg_version = "{{ scheme['metadata']['implementations'][0]['version'] }}"; + + sig->claimed_nist_level = {{ scheme['metadata']['claimed-nist-level'] }}; + sig->euf_cma = {{ scheme['metadata']['euf_cma'] }}; + + sig->length_public_key = OQS_SIG_{{ family }}_{{ scheme['scheme'] }}_length_public_key; + sig->length_secret_key = OQS_SIG_{{ family }}_{{ scheme['scheme'] }}_length_secret_key; + sig->length_signature = OQS_SIG_{{ family }}_{{ scheme['scheme'] }}_length_signature; + + sig->keypair = OQS_SIG_{{ family }}_{{ scheme['scheme'] }}_keypair; + sig->sign = OQS_SIG_{{ family }}_{{ scheme['scheme'] }}_sign; + sig->verify = OQS_SIG_{{ family }}_{{ scheme['scheme'] }}_verify; + + return sig; +} + +int PQCLEAN_{{ scheme['pqclean_scheme']|upper }}_CLEAN_crypto_sign_keypair(uint8_t *pk, uint8_t *sk); +int PQCLEAN_{{ scheme['pqclean_scheme']|upper }}_CLEAN_crypto_sign_signature(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen, const uint8_t *sk); +int PQCLEAN_{{ scheme['pqclean_scheme']|upper }}_CLEAN_crypto_sign_verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen, const uint8_t *pk); + +OQS_API OQS_STATUS OQS_SIG_{{ family }}_{{ scheme['scheme'] }}_keypair(uint8_t *public_key, uint8_t *secret_key) { + return (OQS_STATUS) PQCLEAN_{{ scheme['pqclean_scheme']|upper }}_CLEAN_crypto_sign_keypair(public_key, secret_key); +} +OQS_API OQS_STATUS OQS_SIG_{{ family }}_{{ scheme['scheme'] }}_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) { + return (OQS_STATUS) PQCLEAN_{{ scheme['pqclean_scheme']|upper }}_CLEAN_crypto_sign_signature(signature, signature_len, message, message_len, secret_key); +} +OQS_API OQS_STATUS OQS_SIG_{{ family }}_{{ scheme['scheme'] }}_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) { + return (OQS_STATUS) PQCLEAN_{{ scheme['pqclean_scheme']|upper }}_CLEAN_crypto_sign_verify(signature, signature_len, message, message_len, public_key); +} + +#endif +{% endfor -%} diff --git a/src/sig/dilithium/Makefile.am b/src/sig/dilithium/Makefile.am index f024666a1..52aa15774 100644 --- a/src/sig/dilithium/Makefile.am +++ b/src/sig/dilithium/Makefile.am @@ -1,29 +1,16 @@ AUTOMAKE_OPTIONS = foreign -noinst_LTLIBRARIES = libdilithium.la -libdilithium_la_LIBADD= -libdilithium_la_SOURCES = sig_dilithium.c -libdilithium_la_CFLAGS = $(AM_CFLAGS) +noinst_LTLIBRARIES = libsigdilithium.la +noinst_LTLIBRARIES += libsigdilithium2.la libsigdilithium3.la libsigdilithium4.la +libsigdilithium_la_LIBADD = libsigdilithium2.la libsigdilithium3.la libsigdilithium4.la +libsigdilithium_la_SOURCES = -noinst_LTLIBRARIES += libdilithium2.la -libdilithium_la_LIBADD += libdilithium2.la +libsigdilithium2_la_SOURCES = sig_dilithium2.c pqclean_dilithium2_clean/sign.c pqclean_dilithium2_clean/polyvec.c pqclean_dilithium2_clean/poly.c pqclean_dilithium2_clean/packing.c pqclean_dilithium2_clean/ntt.c pqclean_dilithium2_clean/reduce.c pqclean_dilithium2_clean/rounding.c pqclean_dilithium2_clean/symmetric.c +libsigdilithium2_la_CFLAGS = $(AM_CFLAGS) -I../../common/pqclean_shims -libdilithium2_la_SOURCES = pqclean_dilithium2_clean/ntt.c pqclean_dilithium2_clean/packing.c pqclean_dilithium2_clean/poly.c pqclean_dilithium2_clean/polyvec.c pqclean_dilithium2_clean/reduce.c pqclean_dilithium2_clean/rounding.c pqclean_dilithium2_clean/sign.c pqclean_dilithium2_clean/symmetric.c -libdilithium2_la_CFLAGS = $(AM_CFLAGS) -I../../common/pqclean_shims - - - -noinst_LTLIBRARIES += libdilithium3.la -libdilithium_la_LIBADD += libdilithium3.la - -libdilithium3_la_SOURCES = pqclean_dilithium3_clean/ntt.c pqclean_dilithium3_clean/packing.c pqclean_dilithium3_clean/poly.c pqclean_dilithium3_clean/polyvec.c pqclean_dilithium3_clean/reduce.c pqclean_dilithium3_clean/rounding.c pqclean_dilithium3_clean/sign.c pqclean_dilithium3_clean/symmetric.c -libdilithium3_la_CFLAGS = $(AM_CFLAGS) -I../../common/pqclean_shims - - -noinst_LTLIBRARIES += libdilithium4.la -libdilithium_la_LIBADD += libdilithium4.la - -libdilithium4_la_SOURCES = pqclean_dilithium4_clean/ntt.c pqclean_dilithium4_clean/packing.c pqclean_dilithium4_clean/poly.c pqclean_dilithium4_clean/polyvec.c pqclean_dilithium4_clean/reduce.c pqclean_dilithium4_clean/rounding.c pqclean_dilithium4_clean/sign.c pqclean_dilithium4_clean/symmetric.c -libdilithium4_la_CFLAGS = $(AM_CFLAGS) -I../../common/pqclean_shims +libsigdilithium3_la_SOURCES = sig_dilithium3.c pqclean_dilithium3_clean/sign.c pqclean_dilithium3_clean/polyvec.c pqclean_dilithium3_clean/poly.c pqclean_dilithium3_clean/packing.c pqclean_dilithium3_clean/ntt.c pqclean_dilithium3_clean/reduce.c pqclean_dilithium3_clean/rounding.c pqclean_dilithium3_clean/symmetric.c +libsigdilithium3_la_CFLAGS = $(AM_CFLAGS) -I../../common/pqclean_shims +libsigdilithium4_la_SOURCES = sig_dilithium4.c pqclean_dilithium4_clean/sign.c pqclean_dilithium4_clean/polyvec.c pqclean_dilithium4_clean/poly.c pqclean_dilithium4_clean/packing.c pqclean_dilithium4_clean/ntt.c pqclean_dilithium4_clean/reduce.c pqclean_dilithium4_clean/rounding.c pqclean_dilithium4_clean/symmetric.c +libsigdilithium4_la_CFLAGS = $(AM_CFLAGS) -I../../common/pqclean_shims diff --git a/src/sig/dilithium/pqclean_dilithium2_clean/sign.c b/src/sig/dilithium/pqclean_dilithium2_clean/sign.c index 7b4d818cc..4fc469ef0 100644 --- a/src/sig/dilithium/pqclean_dilithium2_clean/sign.c +++ b/src/sig/dilithium/pqclean_dilithium2_clean/sign.c @@ -180,10 +180,6 @@ int PQCLEAN_DILITHIUM2_CLEAN_crypto_sign_signature( shake256_inc_finalize(&state); shake256_inc_squeeze(mu, CRHBYTES, &state); - for (i = 0; i < CRHBYTES; ++i) { - sig[CRYPTO_BYTES - CRHBYTES + i] = tr[i]; - } - crh(rhoprime, key, SEEDBYTES + CRHBYTES); /* Expand matrix and transform vectors */ diff --git a/src/sig/dilithium/pqclean_dilithium3_clean/sign.c b/src/sig/dilithium/pqclean_dilithium3_clean/sign.c index 6fbee7ada..057ee1bb8 100644 --- a/src/sig/dilithium/pqclean_dilithium3_clean/sign.c +++ b/src/sig/dilithium/pqclean_dilithium3_clean/sign.c @@ -180,10 +180,6 @@ int PQCLEAN_DILITHIUM3_CLEAN_crypto_sign_signature( shake256_inc_finalize(&state); shake256_inc_squeeze(mu, CRHBYTES, &state); - for (i = 0; i < CRHBYTES; ++i) { - sig[CRYPTO_BYTES - CRHBYTES + i] = tr[i]; - } - crh(rhoprime, key, SEEDBYTES + CRHBYTES); /* Expand matrix and transform vectors */ diff --git a/src/sig/dilithium/pqclean_dilithium4_clean/sign.c b/src/sig/dilithium/pqclean_dilithium4_clean/sign.c index b47c370bf..3961bb7cc 100644 --- a/src/sig/dilithium/pqclean_dilithium4_clean/sign.c +++ b/src/sig/dilithium/pqclean_dilithium4_clean/sign.c @@ -180,10 +180,6 @@ int PQCLEAN_DILITHIUM4_CLEAN_crypto_sign_signature( shake256_inc_finalize(&state); shake256_inc_squeeze(mu, CRHBYTES, &state); - for (i = 0; i < CRHBYTES; ++i) { - sig[CRYPTO_BYTES - CRHBYTES + i] = tr[i]; - } - crh(rhoprime, key, SEEDBYTES + CRHBYTES); /* Expand matrix and transform vectors */ diff --git a/src/sig/dilithium/sig_dilithium.c b/src/sig/dilithium/sig_dilithium.c deleted file mode 100644 index bcbb67721..000000000 --- a/src/sig/dilithium/sig_dilithium.c +++ /dev/null @@ -1,126 +0,0 @@ -#include - -#include - -#ifdef OQS_ENABLE_SIG_dilithium_2 - -OQS_SIG *OQS_SIG_dilithium_2_new() { - OQS_SIG *sig = malloc(sizeof(OQS_SIG)); - - if (sig == NULL) { - return NULL; - } - - sig->method_name = OQS_SIG_alg_dilithium_2; - sig->alg_version = "https://github.com/PQClean/PQClean/commit/e56b2e5556934963cae177062fca17798760afd2"; - sig->claimed_nist_level = 1; - sig->euf_cma = true; - - sig->length_public_key = OQS_SIG_dilithium_2_length_public_key; - sig->length_secret_key = OQS_SIG_dilithium_2_length_secret_key; - sig->length_signature = OQS_SIG_dilithium_2_length_signature; - - sig->keypair = OQS_SIG_dilithium_2_keypair; - sig->sign = OQS_SIG_dilithium_2_sign; - sig->verify = OQS_SIG_dilithium_2_verify; - - return sig; -} - -int PQCLEAN_DILITHIUM2_CLEAN_crypto_sign_keypair(uint8_t *pk, uint8_t *sk); -int PQCLEAN_DILITHIUM2_CLEAN_crypto_sign_signature(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen, const uint8_t *sk); -int PQCLEAN_DILITHIUM2_CLEAN_crypto_sign_verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen, const uint8_t *pk); - -OQS_API OQS_STATUS OQS_SIG_dilithium_2_keypair(uint8_t *public_key, uint8_t *secret_key) { - return (OQS_STATUS) PQCLEAN_DILITHIUM2_CLEAN_crypto_sign_keypair(public_key, secret_key); -} -OQS_API OQS_STATUS OQS_SIG_dilithium_2_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) { - return (OQS_STATUS) PQCLEAN_DILITHIUM2_CLEAN_crypto_sign_signature(signature, signature_len, message, message_len, secret_key); -} -OQS_API OQS_STATUS OQS_SIG_dilithium_2_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) { - return (OQS_STATUS) PQCLEAN_DILITHIUM2_CLEAN_crypto_sign_verify(signature, signature_len, message, message_len, public_key); -} - -#endif - -#ifdef OQS_ENABLE_SIG_dilithium_3 - -OQS_SIG *OQS_SIG_dilithium_3_new() { - OQS_SIG *sig = malloc(sizeof(OQS_SIG)); - - if (sig == NULL) { - return NULL; - } - - sig->method_name = OQS_SIG_alg_dilithium_3; - sig->alg_version = "https://github.com/PQClean/PQClean/commit/e56b2e5556934963cae177062fca17798760afd2"; - sig->claimed_nist_level = 2; - sig->euf_cma = true; - - sig->length_public_key = OQS_SIG_dilithium_3_length_public_key; - sig->length_secret_key = OQS_SIG_dilithium_3_length_secret_key; - sig->length_signature = OQS_SIG_dilithium_3_length_signature; - - sig->keypair = OQS_SIG_dilithium_3_keypair; - sig->sign = OQS_SIG_dilithium_3_sign; - sig->verify = OQS_SIG_dilithium_3_verify; - - return sig; -} - -int PQCLEAN_DILITHIUM3_CLEAN_crypto_sign_keypair(uint8_t *pk, uint8_t *sk); -int PQCLEAN_DILITHIUM3_CLEAN_crypto_sign_signature(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen, const uint8_t *sk); -int PQCLEAN_DILITHIUM3_CLEAN_crypto_sign_verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen, const uint8_t *pk); - -OQS_API OQS_STATUS OQS_SIG_dilithium_3_keypair(uint8_t *public_key, uint8_t *secret_key) { - return (OQS_STATUS) PQCLEAN_DILITHIUM3_CLEAN_crypto_sign_keypair(public_key, secret_key); -} -OQS_API OQS_STATUS OQS_SIG_dilithium_3_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) { - return (OQS_STATUS) PQCLEAN_DILITHIUM3_CLEAN_crypto_sign_signature(signature, signature_len, message, message_len, secret_key); -} -OQS_API OQS_STATUS OQS_SIG_dilithium_3_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) { - return (OQS_STATUS) PQCLEAN_DILITHIUM3_CLEAN_crypto_sign_verify(signature, signature_len, message, message_len, public_key); -} - -#endif - -#ifdef OQS_ENABLE_SIG_dilithium_4 - -OQS_SIG *OQS_SIG_dilithium_4_new() { - OQS_SIG *sig = malloc(sizeof(OQS_SIG)); - - if (sig == NULL) { - return NULL; - } - - sig->method_name = OQS_SIG_alg_dilithium_4; - sig->alg_version = "https://github.com/PQClean/PQClean/commit/e56b2e5556934963cae177062fca17798760afd2"; - sig->claimed_nist_level = 3; - sig->euf_cma = true; - - sig->length_public_key = OQS_SIG_dilithium_4_length_public_key; - sig->length_secret_key = OQS_SIG_dilithium_4_length_secret_key; - sig->length_signature = OQS_SIG_dilithium_4_length_signature; - - sig->keypair = OQS_SIG_dilithium_4_keypair; - sig->sign = OQS_SIG_dilithium_4_sign; - sig->verify = OQS_SIG_dilithium_4_verify; - - return sig; -} - -int PQCLEAN_DILITHIUM4_CLEAN_crypto_sign_keypair(uint8_t *pk, uint8_t *sk); -int PQCLEAN_DILITHIUM4_CLEAN_crypto_sign_signature(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen, const uint8_t *sk); -int PQCLEAN_DILITHIUM4_CLEAN_crypto_sign_verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen, const uint8_t *pk); - -OQS_API OQS_STATUS OQS_SIG_dilithium_4_keypair(uint8_t *public_key, uint8_t *secret_key) { - return (OQS_STATUS) PQCLEAN_DILITHIUM4_CLEAN_crypto_sign_keypair(public_key, secret_key); -} -OQS_API OQS_STATUS OQS_SIG_dilithium_4_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) { - return (OQS_STATUS) PQCLEAN_DILITHIUM4_CLEAN_crypto_sign_signature(signature, signature_len, message, message_len, secret_key); -} -OQS_API OQS_STATUS OQS_SIG_dilithium_4_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) { - return (OQS_STATUS) PQCLEAN_DILITHIUM4_CLEAN_crypto_sign_verify(signature, signature_len, message, message_len, public_key); -} - -#endif diff --git a/src/sig/dilithium/sig_dilithium.h b/src/sig/dilithium/sig_dilithium.h index 45f9c7d84..4dcfa2411 100644 --- a/src/sig/dilithium/sig_dilithium.h +++ b/src/sig/dilithium/sig_dilithium.h @@ -12,7 +12,6 @@ OQS_SIG *OQS_SIG_dilithium_2_new(); OQS_API OQS_STATUS OQS_SIG_dilithium_2_keypair(uint8_t *public_key, uint8_t *secret_key); OQS_API OQS_STATUS OQS_SIG_dilithium_2_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key); OQS_API OQS_STATUS OQS_SIG_dilithium_2_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key); - #endif #ifdef OQS_ENABLE_SIG_dilithium_3 @@ -24,7 +23,6 @@ OQS_SIG *OQS_SIG_dilithium_3_new(); OQS_API OQS_STATUS OQS_SIG_dilithium_3_keypair(uint8_t *public_key, uint8_t *secret_key); OQS_API OQS_STATUS OQS_SIG_dilithium_3_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key); OQS_API OQS_STATUS OQS_SIG_dilithium_3_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key); - #endif #ifdef OQS_ENABLE_SIG_dilithium_4 @@ -36,7 +34,6 @@ OQS_SIG *OQS_SIG_dilithium_4_new(); OQS_API OQS_STATUS OQS_SIG_dilithium_4_keypair(uint8_t *public_key, uint8_t *secret_key); OQS_API OQS_STATUS OQS_SIG_dilithium_4_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key); OQS_API OQS_STATUS OQS_SIG_dilithium_4_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key); - #endif #endif \ No newline at end of file diff --git a/src/sig/dilithium/sig_dilithium2.c b/src/sig/dilithium/sig_dilithium2.c new file mode 100644 index 000000000..9a9ec2d43 --- /dev/null +++ b/src/sig/dilithium/sig_dilithium2.c @@ -0,0 +1,44 @@ +#include + +#include + +#ifdef OQS_ENABLE_SIG_dilithium_2 + +OQS_SIG *OQS_SIG_dilithium_2_new() { + + OQS_SIG *sig = malloc(sizeof(OQS_SIG)); + if (sig == NULL) { + return NULL; + } + sig->method_name = OQS_SIG_alg_dilithium_2; + sig->alg_version = "https://github.com/pq-crystals/dilithium/commit/40f79645879b5c69835cd91d06945d7c24f39922"; + + sig->claimed_nist_level = 1; + sig->euf_cma = true; + + sig->length_public_key = OQS_SIG_dilithium_2_length_public_key; + sig->length_secret_key = OQS_SIG_dilithium_2_length_secret_key; + sig->length_signature = OQS_SIG_dilithium_2_length_signature; + + sig->keypair = OQS_SIG_dilithium_2_keypair; + sig->sign = OQS_SIG_dilithium_2_sign; + sig->verify = OQS_SIG_dilithium_2_verify; + + return sig; +} + +int PQCLEAN_DILITHIUM2_CLEAN_crypto_sign_keypair(uint8_t *pk, uint8_t *sk); +int PQCLEAN_DILITHIUM2_CLEAN_crypto_sign_signature(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen, const uint8_t *sk); +int PQCLEAN_DILITHIUM2_CLEAN_crypto_sign_verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen, const uint8_t *pk); + +OQS_API OQS_STATUS OQS_SIG_dilithium_2_keypair(uint8_t *public_key, uint8_t *secret_key) { + return (OQS_STATUS) PQCLEAN_DILITHIUM2_CLEAN_crypto_sign_keypair(public_key, secret_key); +} +OQS_API OQS_STATUS OQS_SIG_dilithium_2_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) { + return (OQS_STATUS) PQCLEAN_DILITHIUM2_CLEAN_crypto_sign_signature(signature, signature_len, message, message_len, secret_key); +} +OQS_API OQS_STATUS OQS_SIG_dilithium_2_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) { + return (OQS_STATUS) PQCLEAN_DILITHIUM2_CLEAN_crypto_sign_verify(signature, signature_len, message, message_len, public_key); +} + +#endif diff --git a/src/sig/dilithium/sig_dilithium3.c b/src/sig/dilithium/sig_dilithium3.c new file mode 100644 index 000000000..c3419f7eb --- /dev/null +++ b/src/sig/dilithium/sig_dilithium3.c @@ -0,0 +1,44 @@ +#include + +#include + +#ifdef OQS_ENABLE_SIG_dilithium_3 + +OQS_SIG *OQS_SIG_dilithium_3_new() { + + OQS_SIG *sig = malloc(sizeof(OQS_SIG)); + if (sig == NULL) { + return NULL; + } + sig->method_name = OQS_SIG_alg_dilithium_3; + sig->alg_version = "https://github.com/pq-crystals/dilithium/commit/40f79645879b5c69835cd91d06945d7c24f39922"; + + sig->claimed_nist_level = 2; + sig->euf_cma = true; + + sig->length_public_key = OQS_SIG_dilithium_3_length_public_key; + sig->length_secret_key = OQS_SIG_dilithium_3_length_secret_key; + sig->length_signature = OQS_SIG_dilithium_3_length_signature; + + sig->keypair = OQS_SIG_dilithium_3_keypair; + sig->sign = OQS_SIG_dilithium_3_sign; + sig->verify = OQS_SIG_dilithium_3_verify; + + return sig; +} + +int PQCLEAN_DILITHIUM3_CLEAN_crypto_sign_keypair(uint8_t *pk, uint8_t *sk); +int PQCLEAN_DILITHIUM3_CLEAN_crypto_sign_signature(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen, const uint8_t *sk); +int PQCLEAN_DILITHIUM3_CLEAN_crypto_sign_verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen, const uint8_t *pk); + +OQS_API OQS_STATUS OQS_SIG_dilithium_3_keypair(uint8_t *public_key, uint8_t *secret_key) { + return (OQS_STATUS) PQCLEAN_DILITHIUM3_CLEAN_crypto_sign_keypair(public_key, secret_key); +} +OQS_API OQS_STATUS OQS_SIG_dilithium_3_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) { + return (OQS_STATUS) PQCLEAN_DILITHIUM3_CLEAN_crypto_sign_signature(signature, signature_len, message, message_len, secret_key); +} +OQS_API OQS_STATUS OQS_SIG_dilithium_3_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) { + return (OQS_STATUS) PQCLEAN_DILITHIUM3_CLEAN_crypto_sign_verify(signature, signature_len, message, message_len, public_key); +} + +#endif diff --git a/src/sig/dilithium/sig_dilithium4.c b/src/sig/dilithium/sig_dilithium4.c new file mode 100644 index 000000000..06f0038da --- /dev/null +++ b/src/sig/dilithium/sig_dilithium4.c @@ -0,0 +1,44 @@ +#include + +#include + +#ifdef OQS_ENABLE_SIG_dilithium_4 + +OQS_SIG *OQS_SIG_dilithium_4_new() { + + OQS_SIG *sig = malloc(sizeof(OQS_SIG)); + if (sig == NULL) { + return NULL; + } + sig->method_name = OQS_SIG_alg_dilithium_4; + sig->alg_version = "https://github.com/pq-crystals/dilithium/commit/40f79645879b5c69835cd91d06945d7c24f39922"; + + sig->claimed_nist_level = 3; + sig->euf_cma = true; + + sig->length_public_key = OQS_SIG_dilithium_4_length_public_key; + sig->length_secret_key = OQS_SIG_dilithium_4_length_secret_key; + sig->length_signature = OQS_SIG_dilithium_4_length_signature; + + sig->keypair = OQS_SIG_dilithium_4_keypair; + sig->sign = OQS_SIG_dilithium_4_sign; + sig->verify = OQS_SIG_dilithium_4_verify; + + return sig; +} + +int PQCLEAN_DILITHIUM4_CLEAN_crypto_sign_keypair(uint8_t *pk, uint8_t *sk); +int PQCLEAN_DILITHIUM4_CLEAN_crypto_sign_signature(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen, const uint8_t *sk); +int PQCLEAN_DILITHIUM4_CLEAN_crypto_sign_verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen, const uint8_t *pk); + +OQS_API OQS_STATUS OQS_SIG_dilithium_4_keypair(uint8_t *public_key, uint8_t *secret_key) { + return (OQS_STATUS) PQCLEAN_DILITHIUM4_CLEAN_crypto_sign_keypair(public_key, secret_key); +} +OQS_API OQS_STATUS OQS_SIG_dilithium_4_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) { + return (OQS_STATUS) PQCLEAN_DILITHIUM4_CLEAN_crypto_sign_signature(signature, signature_len, message, message_len, secret_key); +} +OQS_API OQS_STATUS OQS_SIG_dilithium_4_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) { + return (OQS_STATUS) PQCLEAN_DILITHIUM4_CLEAN_crypto_sign_verify(signature, signature_len, message, message_len, public_key); +} + +#endif