More work on signature templating

This commit is contained in:
Douglas Stebila 2019-07-01 14:34:11 -04:00
parent 350880a2b8
commit ee64cf8bf0
13 changed files with 224 additions and 166 deletions

View File

@ -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'))

View File

@ -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 -%}

View File

@ -0,0 +1,20 @@
#ifndef __OQS_SIG_{{ family|upper }}_H
#define __OQS_SIG_{{ family|upper }}_H
#include <oqs/oqs.h>
{% 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

View File

@ -0,0 +1,46 @@
#include <stdlib.h>
#include <oqs/sig_{{ family }}.h>
{% 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 -%}

View File

@ -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

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -1,126 +0,0 @@
#include <stdlib.h>
#include <oqs/sig_dilithium.h>
#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

View File

@ -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

View File

@ -0,0 +1,44 @@
#include <stdlib.h>
#include <oqs/sig_dilithium.h>
#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

View File

@ -0,0 +1,44 @@
#include <stdlib.h>
#include <oqs/sig_dilithium.h>
#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

View File

@ -0,0 +1,44 @@
#include <stdlib.h>
#include <oqs/sig_dilithium.h>
#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