diff --git a/src/sig/slh_dsa/sig_slh_dsa.h b/src/sig/slh_dsa/sig_slh_dsa.h index f56ee2ef74..c7980194bc 100644 --- a/src/sig/slh_dsa/sig_slh_dsa.h +++ b/src/sig/slh_dsa/sig_slh_dsa.h @@ -13,6 +13,7 @@ OQS_SIG *OQS_SIG_slh_dsa_pure_sha2_128s_new(void); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128s_keypair(uint8_t *public_key, uint8_t *secret_key); +OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128s_keypair_from_seed(uint8_t *public_key, uint8_t *secret_key, const uint8_t *seed, size_t seed_len); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128s_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_slh_dsa_pure_sha2_128s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key); @@ -27,6 +28,7 @@ OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128s_verify_with_ctx_str(const uint OQS_SIG *OQS_SIG_slh_dsa_pure_shake_128s_new(void); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128s_keypair(uint8_t *public_key, uint8_t *secret_key); +OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128s_keypair_from_seed(uint8_t *public_key, uint8_t *secret_key, const uint8_t *seed, size_t seed_len); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128s_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_slh_dsa_pure_shake_128s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key); @@ -41,6 +43,7 @@ OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128s_verify_with_ctx_str(const uin OQS_SIG *OQS_SIG_slh_dsa_pure_sha2_128f_new(void); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128f_keypair(uint8_t *public_key, uint8_t *secret_key); +OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128f_keypair_from_seed(uint8_t *public_key, uint8_t *secret_key, const uint8_t *seed, size_t seed_len); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128f_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_slh_dsa_pure_sha2_128f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key); @@ -55,6 +58,7 @@ OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128f_verify_with_ctx_str(const uint OQS_SIG *OQS_SIG_slh_dsa_pure_shake_128f_new(void); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128f_keypair(uint8_t *public_key, uint8_t *secret_key); +OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128f_keypair_from_seed(uint8_t *public_key, uint8_t *secret_key, const uint8_t *seed, size_t seed_len); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128f_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_slh_dsa_pure_shake_128f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key); @@ -69,6 +73,7 @@ OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128f_verify_with_ctx_str(const uin OQS_SIG *OQS_SIG_slh_dsa_pure_sha2_192s_new(void); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192s_keypair(uint8_t *public_key, uint8_t *secret_key); +OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192s_keypair_from_seed(uint8_t *public_key, uint8_t *secret_key, const uint8_t *seed, size_t seed_len); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192s_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_slh_dsa_pure_sha2_192s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key); @@ -83,6 +88,7 @@ OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192s_verify_with_ctx_str(const uint OQS_SIG *OQS_SIG_slh_dsa_pure_shake_192s_new(void); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192s_keypair(uint8_t *public_key, uint8_t *secret_key); +OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192s_keypair_from_seed(uint8_t *public_key, uint8_t *secret_key, const uint8_t *seed, size_t seed_len); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192s_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_slh_dsa_pure_shake_192s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key); @@ -97,6 +103,7 @@ OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192s_verify_with_ctx_str(const uin OQS_SIG *OQS_SIG_slh_dsa_pure_sha2_192f_new(void); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192f_keypair(uint8_t *public_key, uint8_t *secret_key); +OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192f_keypair_from_seed(uint8_t *public_key, uint8_t *secret_key, const uint8_t *seed, size_t seed_len); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192f_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_slh_dsa_pure_sha2_192f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key); @@ -111,6 +118,7 @@ OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192f_verify_with_ctx_str(const uint OQS_SIG *OQS_SIG_slh_dsa_pure_shake_192f_new(void); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192f_keypair(uint8_t *public_key, uint8_t *secret_key); +OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192f_keypair_from_seed(uint8_t *public_key, uint8_t *secret_key, const uint8_t *seed, size_t seed_len); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192f_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_slh_dsa_pure_shake_192f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key); @@ -125,6 +133,7 @@ OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192f_verify_with_ctx_str(const uin OQS_SIG *OQS_SIG_slh_dsa_pure_sha2_256s_new(void); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256s_keypair(uint8_t *public_key, uint8_t *secret_key); +OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256s_keypair_from_seed(uint8_t *public_key, uint8_t *secret_key, const uint8_t *seed, size_t seed_len); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256s_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_slh_dsa_pure_sha2_256s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key); @@ -139,6 +148,7 @@ OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256s_verify_with_ctx_str(const uint OQS_SIG *OQS_SIG_slh_dsa_pure_shake_256s_new(void); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_256s_keypair(uint8_t *public_key, uint8_t *secret_key); +OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_256s_keypair_from_seed(uint8_t *public_key, uint8_t *secret_key, const uint8_t *seed, size_t seed_len); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_256s_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_slh_dsa_pure_shake_256s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_256s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key); @@ -153,6 +163,7 @@ OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_256s_verify_with_ctx_str(const uin OQS_SIG *OQS_SIG_slh_dsa_pure_sha2_256f_new(void); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256f_keypair(uint8_t *public_key, uint8_t *secret_key); +OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256f_keypair_from_seed(uint8_t *public_key, uint8_t *secret_key, const uint8_t *seed, size_t seed_len); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256f_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_slh_dsa_pure_sha2_256f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key); @@ -167,6 +178,7 @@ OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256f_verify_with_ctx_str(const uint OQS_SIG *OQS_SIG_slh_dsa_pure_shake_256f_new(void); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_256f_keypair(uint8_t *public_key, uint8_t *secret_key); +OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_256f_keypair_from_seed(uint8_t *public_key, uint8_t *secret_key, const uint8_t *seed, size_t seed_len); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_256f_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_slh_dsa_pure_shake_256f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key); OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_256f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key); diff --git a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_128f.c b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_128f.c index fce89ba2d0..bec86e7dba 100644 --- a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_128f.c +++ b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_128f.c @@ -4,6 +4,7 @@ #include "../../sig_slh_dsa.h" #include "../../slh_dsa_c/slh_dsa.h" +#include "../../slh_dsa_c/slh_param.h" #include "../../slh_dsa_c/slh_prehash.h" #include @@ -29,7 +30,7 @@ OQS_SIG *OQS_SIG_slh_dsa_pure_sha2_128f_new(void) { sig->length_signature = OQS_SIG_slh_dsa_pure_sha2_128f_length_signature; sig->keypair = OQS_SIG_slh_dsa_pure_sha2_128f_keypair; - sig->keypair_from_seed = NULL; + sig->keypair_from_seed = OQS_SIG_slh_dsa_pure_sha2_128f_keypair_from_seed; sig->sign = OQS_SIG_slh_dsa_pure_sha2_128f_sign; sig->verify = OQS_SIG_slh_dsa_pure_sha2_128f_verify; sig->sign_with_ctx_str = OQS_SIG_slh_dsa_pure_sha2_128f_sign_with_ctx_str; @@ -51,6 +52,18 @@ OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128f_keypair(uint8_t *public_key, u return slh_keygen(secret_key, public_key, rbg, prm); } +OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128f_keypair_from_seed( + uint8_t *public_key, uint8_t *secret_key, + const uint8_t *seed, size_t seed_len) { + + const slh_param_t *prm = &slh_dsa_sha2_128f; + if (seed_len != 3 * prm->n) { + return OQS_ERROR; + } + return slh_keygen_internal(secret_key, public_key, + seed, seed + prm->n, seed + 2 * prm->n, prm); +} + OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) { diff --git a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_128s.c b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_128s.c index c2c7af63c6..5f315dd8c3 100644 --- a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_128s.c +++ b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_128s.c @@ -4,6 +4,7 @@ #include "../../sig_slh_dsa.h" #include "../../slh_dsa_c/slh_dsa.h" +#include "../../slh_dsa_c/slh_param.h" #include "../../slh_dsa_c/slh_prehash.h" #include @@ -29,7 +30,7 @@ OQS_SIG *OQS_SIG_slh_dsa_pure_sha2_128s_new(void) { sig->length_signature = OQS_SIG_slh_dsa_pure_sha2_128s_length_signature; sig->keypair = OQS_SIG_slh_dsa_pure_sha2_128s_keypair; - sig->keypair_from_seed = NULL; + sig->keypair_from_seed = OQS_SIG_slh_dsa_pure_sha2_128s_keypair_from_seed; sig->sign = OQS_SIG_slh_dsa_pure_sha2_128s_sign; sig->verify = OQS_SIG_slh_dsa_pure_sha2_128s_verify; sig->sign_with_ctx_str = OQS_SIG_slh_dsa_pure_sha2_128s_sign_with_ctx_str; @@ -51,6 +52,18 @@ OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128s_keypair(uint8_t *public_key, u return slh_keygen(secret_key, public_key, rbg, prm); } +OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128s_keypair_from_seed( + uint8_t *public_key, uint8_t *secret_key, + const uint8_t *seed, size_t seed_len) { + + const slh_param_t *prm = &slh_dsa_sha2_128s; + if (seed_len != 3 * prm->n) { + return OQS_ERROR; + } + return slh_keygen_internal(secret_key, public_key, + seed, seed + prm->n, seed + 2 * prm->n, prm); +} + OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) { diff --git a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_192f.c b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_192f.c index 23cddd2ec3..21c59ca230 100644 --- a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_192f.c +++ b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_192f.c @@ -4,6 +4,7 @@ #include "../../sig_slh_dsa.h" #include "../../slh_dsa_c/slh_dsa.h" +#include "../../slh_dsa_c/slh_param.h" #include "../../slh_dsa_c/slh_prehash.h" #include @@ -29,7 +30,7 @@ OQS_SIG *OQS_SIG_slh_dsa_pure_sha2_192f_new(void) { sig->length_signature = OQS_SIG_slh_dsa_pure_sha2_192f_length_signature; sig->keypair = OQS_SIG_slh_dsa_pure_sha2_192f_keypair; - sig->keypair_from_seed = NULL; + sig->keypair_from_seed = OQS_SIG_slh_dsa_pure_sha2_192f_keypair_from_seed; sig->sign = OQS_SIG_slh_dsa_pure_sha2_192f_sign; sig->verify = OQS_SIG_slh_dsa_pure_sha2_192f_verify; sig->sign_with_ctx_str = OQS_SIG_slh_dsa_pure_sha2_192f_sign_with_ctx_str; @@ -51,6 +52,18 @@ OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192f_keypair(uint8_t *public_key, u return slh_keygen(secret_key, public_key, rbg, prm); } +OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192f_keypair_from_seed( + uint8_t *public_key, uint8_t *secret_key, + const uint8_t *seed, size_t seed_len) { + + const slh_param_t *prm = &slh_dsa_sha2_192f; + if (seed_len != 3 * prm->n) { + return OQS_ERROR; + } + return slh_keygen_internal(secret_key, public_key, + seed, seed + prm->n, seed + 2 * prm->n, prm); +} + OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) { diff --git a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_192s.c b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_192s.c index de46450d7f..5bffe6f8da 100644 --- a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_192s.c +++ b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_192s.c @@ -4,6 +4,7 @@ #include "../../sig_slh_dsa.h" #include "../../slh_dsa_c/slh_dsa.h" +#include "../../slh_dsa_c/slh_param.h" #include "../../slh_dsa_c/slh_prehash.h" #include @@ -29,7 +30,7 @@ OQS_SIG *OQS_SIG_slh_dsa_pure_sha2_192s_new(void) { sig->length_signature = OQS_SIG_slh_dsa_pure_sha2_192s_length_signature; sig->keypair = OQS_SIG_slh_dsa_pure_sha2_192s_keypair; - sig->keypair_from_seed = NULL; + sig->keypair_from_seed = OQS_SIG_slh_dsa_pure_sha2_192s_keypair_from_seed; sig->sign = OQS_SIG_slh_dsa_pure_sha2_192s_sign; sig->verify = OQS_SIG_slh_dsa_pure_sha2_192s_verify; sig->sign_with_ctx_str = OQS_SIG_slh_dsa_pure_sha2_192s_sign_with_ctx_str; @@ -51,6 +52,18 @@ OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192s_keypair(uint8_t *public_key, u return slh_keygen(secret_key, public_key, rbg, prm); } +OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192s_keypair_from_seed( + uint8_t *public_key, uint8_t *secret_key, + const uint8_t *seed, size_t seed_len) { + + const slh_param_t *prm = &slh_dsa_sha2_192s; + if (seed_len != 3 * prm->n) { + return OQS_ERROR; + } + return slh_keygen_internal(secret_key, public_key, + seed, seed + prm->n, seed + 2 * prm->n, prm); +} + OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) { diff --git a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_256f.c b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_256f.c index 3e3a6e1563..3ddb9c4b35 100644 --- a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_256f.c +++ b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_256f.c @@ -4,6 +4,7 @@ #include "../../sig_slh_dsa.h" #include "../../slh_dsa_c/slh_dsa.h" +#include "../../slh_dsa_c/slh_param.h" #include "../../slh_dsa_c/slh_prehash.h" #include @@ -29,7 +30,7 @@ OQS_SIG *OQS_SIG_slh_dsa_pure_sha2_256f_new(void) { sig->length_signature = OQS_SIG_slh_dsa_pure_sha2_256f_length_signature; sig->keypair = OQS_SIG_slh_dsa_pure_sha2_256f_keypair; - sig->keypair_from_seed = NULL; + sig->keypair_from_seed = OQS_SIG_slh_dsa_pure_sha2_256f_keypair_from_seed; sig->sign = OQS_SIG_slh_dsa_pure_sha2_256f_sign; sig->verify = OQS_SIG_slh_dsa_pure_sha2_256f_verify; sig->sign_with_ctx_str = OQS_SIG_slh_dsa_pure_sha2_256f_sign_with_ctx_str; @@ -51,6 +52,18 @@ OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256f_keypair(uint8_t *public_key, u return slh_keygen(secret_key, public_key, rbg, prm); } +OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256f_keypair_from_seed( + uint8_t *public_key, uint8_t *secret_key, + const uint8_t *seed, size_t seed_len) { + + const slh_param_t *prm = &slh_dsa_sha2_256f; + if (seed_len != 3 * prm->n) { + return OQS_ERROR; + } + return slh_keygen_internal(secret_key, public_key, + seed, seed + prm->n, seed + 2 * prm->n, prm); +} + OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) { diff --git a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_256s.c b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_256s.c index d194630ed5..6415677e61 100644 --- a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_256s.c +++ b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_256s.c @@ -4,6 +4,7 @@ #include "../../sig_slh_dsa.h" #include "../../slh_dsa_c/slh_dsa.h" +#include "../../slh_dsa_c/slh_param.h" #include "../../slh_dsa_c/slh_prehash.h" #include @@ -29,7 +30,7 @@ OQS_SIG *OQS_SIG_slh_dsa_pure_sha2_256s_new(void) { sig->length_signature = OQS_SIG_slh_dsa_pure_sha2_256s_length_signature; sig->keypair = OQS_SIG_slh_dsa_pure_sha2_256s_keypair; - sig->keypair_from_seed = NULL; + sig->keypair_from_seed = OQS_SIG_slh_dsa_pure_sha2_256s_keypair_from_seed; sig->sign = OQS_SIG_slh_dsa_pure_sha2_256s_sign; sig->verify = OQS_SIG_slh_dsa_pure_sha2_256s_verify; sig->sign_with_ctx_str = OQS_SIG_slh_dsa_pure_sha2_256s_sign_with_ctx_str; @@ -51,6 +52,18 @@ OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256s_keypair(uint8_t *public_key, u return slh_keygen(secret_key, public_key, rbg, prm); } +OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256s_keypair_from_seed( + uint8_t *public_key, uint8_t *secret_key, + const uint8_t *seed, size_t seed_len) { + + const slh_param_t *prm = &slh_dsa_sha2_256s; + if (seed_len != 3 * prm->n) { + return OQS_ERROR; + } + return slh_keygen_internal(secret_key, public_key, + seed, seed + prm->n, seed + 2 * prm->n, prm); +} + OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) { diff --git a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_128f.c b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_128f.c index 140a525c0f..4b0b3f8e1c 100644 --- a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_128f.c +++ b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_128f.c @@ -4,6 +4,7 @@ #include "../../sig_slh_dsa.h" #include "../../slh_dsa_c/slh_dsa.h" +#include "../../slh_dsa_c/slh_param.h" #include "../../slh_dsa_c/slh_prehash.h" #include @@ -29,7 +30,7 @@ OQS_SIG *OQS_SIG_slh_dsa_pure_shake_128f_new(void) { sig->length_signature = OQS_SIG_slh_dsa_pure_shake_128f_length_signature; sig->keypair = OQS_SIG_slh_dsa_pure_shake_128f_keypair; - sig->keypair_from_seed = NULL; + sig->keypair_from_seed = OQS_SIG_slh_dsa_pure_shake_128f_keypair_from_seed; sig->sign = OQS_SIG_slh_dsa_pure_shake_128f_sign; sig->verify = OQS_SIG_slh_dsa_pure_shake_128f_verify; sig->sign_with_ctx_str = OQS_SIG_slh_dsa_pure_shake_128f_sign_with_ctx_str; @@ -51,6 +52,18 @@ OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128f_keypair(uint8_t *public_key, return slh_keygen(secret_key, public_key, rbg, prm); } +OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128f_keypair_from_seed( + uint8_t *public_key, uint8_t *secret_key, + const uint8_t *seed, size_t seed_len) { + + const slh_param_t *prm = &slh_dsa_shake_128f; + if (seed_len != 3 * prm->n) { + return OQS_ERROR; + } + return slh_keygen_internal(secret_key, public_key, + seed, seed + prm->n, seed + 2 * prm->n, prm); +} + OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) { diff --git a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_128s.c b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_128s.c index 8c7c7fdc1f..f57e505425 100644 --- a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_128s.c +++ b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_128s.c @@ -4,6 +4,7 @@ #include "../../sig_slh_dsa.h" #include "../../slh_dsa_c/slh_dsa.h" +#include "../../slh_dsa_c/slh_param.h" #include "../../slh_dsa_c/slh_prehash.h" #include @@ -29,7 +30,7 @@ OQS_SIG *OQS_SIG_slh_dsa_pure_shake_128s_new(void) { sig->length_signature = OQS_SIG_slh_dsa_pure_shake_128s_length_signature; sig->keypair = OQS_SIG_slh_dsa_pure_shake_128s_keypair; - sig->keypair_from_seed = NULL; + sig->keypair_from_seed = OQS_SIG_slh_dsa_pure_shake_128s_keypair_from_seed; sig->sign = OQS_SIG_slh_dsa_pure_shake_128s_sign; sig->verify = OQS_SIG_slh_dsa_pure_shake_128s_verify; sig->sign_with_ctx_str = OQS_SIG_slh_dsa_pure_shake_128s_sign_with_ctx_str; @@ -51,6 +52,18 @@ OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128s_keypair(uint8_t *public_key, return slh_keygen(secret_key, public_key, rbg, prm); } +OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128s_keypair_from_seed( + uint8_t *public_key, uint8_t *secret_key, + const uint8_t *seed, size_t seed_len) { + + const slh_param_t *prm = &slh_dsa_shake_128s; + if (seed_len != 3 * prm->n) { + return OQS_ERROR; + } + return slh_keygen_internal(secret_key, public_key, + seed, seed + prm->n, seed + 2 * prm->n, prm); +} + OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) { diff --git a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_192f.c b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_192f.c index 837e0a4598..9ba524220c 100644 --- a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_192f.c +++ b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_192f.c @@ -4,6 +4,7 @@ #include "../../sig_slh_dsa.h" #include "../../slh_dsa_c/slh_dsa.h" +#include "../../slh_dsa_c/slh_param.h" #include "../../slh_dsa_c/slh_prehash.h" #include @@ -29,7 +30,7 @@ OQS_SIG *OQS_SIG_slh_dsa_pure_shake_192f_new(void) { sig->length_signature = OQS_SIG_slh_dsa_pure_shake_192f_length_signature; sig->keypair = OQS_SIG_slh_dsa_pure_shake_192f_keypair; - sig->keypair_from_seed = NULL; + sig->keypair_from_seed = OQS_SIG_slh_dsa_pure_shake_192f_keypair_from_seed; sig->sign = OQS_SIG_slh_dsa_pure_shake_192f_sign; sig->verify = OQS_SIG_slh_dsa_pure_shake_192f_verify; sig->sign_with_ctx_str = OQS_SIG_slh_dsa_pure_shake_192f_sign_with_ctx_str; @@ -51,6 +52,18 @@ OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192f_keypair(uint8_t *public_key, return slh_keygen(secret_key, public_key, rbg, prm); } +OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192f_keypair_from_seed( + uint8_t *public_key, uint8_t *secret_key, + const uint8_t *seed, size_t seed_len) { + + const slh_param_t *prm = &slh_dsa_shake_192f; + if (seed_len != 3 * prm->n) { + return OQS_ERROR; + } + return slh_keygen_internal(secret_key, public_key, + seed, seed + prm->n, seed + 2 * prm->n, prm); +} + OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) { diff --git a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_192s.c b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_192s.c index d6a8ca4ad2..92a6e43b18 100644 --- a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_192s.c +++ b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_192s.c @@ -4,6 +4,7 @@ #include "../../sig_slh_dsa.h" #include "../../slh_dsa_c/slh_dsa.h" +#include "../../slh_dsa_c/slh_param.h" #include "../../slh_dsa_c/slh_prehash.h" #include @@ -29,7 +30,7 @@ OQS_SIG *OQS_SIG_slh_dsa_pure_shake_192s_new(void) { sig->length_signature = OQS_SIG_slh_dsa_pure_shake_192s_length_signature; sig->keypair = OQS_SIG_slh_dsa_pure_shake_192s_keypair; - sig->keypair_from_seed = NULL; + sig->keypair_from_seed = OQS_SIG_slh_dsa_pure_shake_192s_keypair_from_seed; sig->sign = OQS_SIG_slh_dsa_pure_shake_192s_sign; sig->verify = OQS_SIG_slh_dsa_pure_shake_192s_verify; sig->sign_with_ctx_str = OQS_SIG_slh_dsa_pure_shake_192s_sign_with_ctx_str; @@ -51,6 +52,18 @@ OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192s_keypair(uint8_t *public_key, return slh_keygen(secret_key, public_key, rbg, prm); } +OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192s_keypair_from_seed( + uint8_t *public_key, uint8_t *secret_key, + const uint8_t *seed, size_t seed_len) { + + const slh_param_t *prm = &slh_dsa_shake_192s; + if (seed_len != 3 * prm->n) { + return OQS_ERROR; + } + return slh_keygen_internal(secret_key, public_key, + seed, seed + prm->n, seed + 2 * prm->n, prm); +} + OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) { diff --git a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_256f.c b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_256f.c index f49d8d0ccf..3e36fec6c6 100644 --- a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_256f.c +++ b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_256f.c @@ -4,6 +4,7 @@ #include "../../sig_slh_dsa.h" #include "../../slh_dsa_c/slh_dsa.h" +#include "../../slh_dsa_c/slh_param.h" #include "../../slh_dsa_c/slh_prehash.h" #include @@ -29,7 +30,7 @@ OQS_SIG *OQS_SIG_slh_dsa_pure_shake_256f_new(void) { sig->length_signature = OQS_SIG_slh_dsa_pure_shake_256f_length_signature; sig->keypair = OQS_SIG_slh_dsa_pure_shake_256f_keypair; - sig->keypair_from_seed = NULL; + sig->keypair_from_seed = OQS_SIG_slh_dsa_pure_shake_256f_keypair_from_seed; sig->sign = OQS_SIG_slh_dsa_pure_shake_256f_sign; sig->verify = OQS_SIG_slh_dsa_pure_shake_256f_verify; sig->sign_with_ctx_str = OQS_SIG_slh_dsa_pure_shake_256f_sign_with_ctx_str; @@ -51,6 +52,18 @@ OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_256f_keypair(uint8_t *public_key, return slh_keygen(secret_key, public_key, rbg, prm); } +OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_256f_keypair_from_seed( + uint8_t *public_key, uint8_t *secret_key, + const uint8_t *seed, size_t seed_len) { + + const slh_param_t *prm = &slh_dsa_shake_256f; + if (seed_len != 3 * prm->n) { + return OQS_ERROR; + } + return slh_keygen_internal(secret_key, public_key, + seed, seed + prm->n, seed + 2 * prm->n, prm); +} + OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_256f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) { diff --git a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_256s.c b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_256s.c index 314fe57105..44d0e8eba2 100644 --- a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_256s.c +++ b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_256s.c @@ -4,6 +4,7 @@ #include "../../sig_slh_dsa.h" #include "../../slh_dsa_c/slh_dsa.h" +#include "../../slh_dsa_c/slh_param.h" #include "../../slh_dsa_c/slh_prehash.h" #include @@ -29,7 +30,7 @@ OQS_SIG *OQS_SIG_slh_dsa_pure_shake_256s_new(void) { sig->length_signature = OQS_SIG_slh_dsa_pure_shake_256s_length_signature; sig->keypair = OQS_SIG_slh_dsa_pure_shake_256s_keypair; - sig->keypair_from_seed = NULL; + sig->keypair_from_seed = OQS_SIG_slh_dsa_pure_shake_256s_keypair_from_seed; sig->sign = OQS_SIG_slh_dsa_pure_shake_256s_sign; sig->verify = OQS_SIG_slh_dsa_pure_shake_256s_verify; sig->sign_with_ctx_str = OQS_SIG_slh_dsa_pure_shake_256s_sign_with_ctx_str; @@ -51,6 +52,18 @@ OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_256s_keypair(uint8_t *public_key, return slh_keygen(secret_key, public_key, rbg, prm); } +OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_256s_keypair_from_seed( + uint8_t *public_key, uint8_t *secret_key, + const uint8_t *seed, size_t seed_len) { + + const slh_param_t *prm = &slh_dsa_shake_256s; + if (seed_len != 3 * prm->n) { + return OQS_ERROR; + } + return slh_keygen_internal(secret_key, public_key, + seed, seed + prm->n, seed + 2 * prm->n, prm); +} + OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_256s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {