Skip to content

Commit

Permalink
Na stateful macro (#1687)
Browse files Browse the repository at this point in the history
* Use OQS_SIG data struct for verify only capability.

Refactor code via macro

* Fix format issues

* Fix build error

* Fix build error

* Remove comments
  • Loading branch information
ashman-p authored and SWilson4 committed Apr 12, 2024
1 parent 4871bea commit f5e55be
Show file tree
Hide file tree
Showing 34 changed files with 340 additions and 4,800 deletions.
2,954 changes: 176 additions & 2,778 deletions src/sig_stfl/lms/sig_stfl_lms.c

Large diffs are not rendered by default.

17 changes: 0 additions & 17 deletions src/sig_stfl/lms/sig_stfl_lms.h
Original file line number Diff line number Diff line change
Expand Up @@ -96,28 +96,24 @@
#define OQS_SIG_STFL_alg_lms_sha256_h5_w1_length_sk 64
OQS_API OQS_SIG_STFL *OQS_SIG_STFL_alg_lms_sha256_h5_w1_new(void);
OQS_API OQS_SIG_STFL_SECRET_KEY *OQS_SECRET_KEY_LMS_SHA256_H5_W1_new(void);
OQS_API OQS_STATUS OQS_SIG_STFL_alg_lms_sha256_h5_w1_keypair(uint8_t *public_key, OQS_SIG_STFL_SECRET_KEY *secret_key);

#define OQS_SIG_STFL_alg_lms_sha256_h5_w2_length_signature 4464
#define OQS_SIG_STFL_alg_lms_sha256_h5_w2_length_pk 60
#define OQS_SIG_STFL_alg_lms_sha256_h5_w2_length_sk 64
OQS_API OQS_SIG_STFL *OQS_SIG_STFL_alg_lms_sha256_h5_w2_new(void);
OQS_API OQS_SIG_STFL_SECRET_KEY *OQS_SECRET_KEY_LMS_SHA256_H5_W2_new(void);
OQS_API OQS_STATUS OQS_SIG_STFL_alg_lms_sha256_h5_w2_keypair(uint8_t *public_key, OQS_SIG_STFL_SECRET_KEY *secret_key);

#define OQS_SIG_STFL_alg_lms_sha256_h5_w4_length_signature 2352
#define OQS_SIG_STFL_alg_lms_sha256_h5_w4_length_pk 60
#define OQS_SIG_STFL_alg_lms_sha256_h5_w4_length_sk 64
OQS_API OQS_SIG_STFL *OQS_SIG_STFL_alg_lms_sha256_h5_w4_new(void);
OQS_API OQS_SIG_STFL_SECRET_KEY *OQS_SECRET_KEY_LMS_SHA256_H5_W4_new(void);
OQS_API OQS_STATUS OQS_SIG_STFL_alg_lms_sha256_h5_w4_keypair(uint8_t *public_key, OQS_SIG_STFL_SECRET_KEY *secret_key);

#define OQS_SIG_STFL_alg_lms_sha256_h5_w8_length_signature 1296
#define OQS_SIG_STFL_alg_lms_sha256_h5_w8_length_pk 60
#define OQS_SIG_STFL_alg_lms_sha256_h5_w8_length_sk 64
OQS_API OQS_SIG_STFL *OQS_SIG_STFL_alg_lms_sha256_h5_w8_new(void);
OQS_API OQS_SIG_STFL_SECRET_KEY *OQS_SECRET_KEY_LMS_SHA256_H5_W8_new(void);
OQS_API OQS_STATUS OQS_SIG_STFL_alg_lms_sha256_h5_w8_keypair(uint8_t *public_key, OQS_SIG_STFL_SECRET_KEY *secret_key);

//H10
// H10 W1 60 8848 64
Expand Down Expand Up @@ -279,55 +275,42 @@ void OQS_SECRET_KEY_LMS_free(OQS_SIG_STFL_SECRET_KEY *sk);
#define OQS_SIG_STFL_alg_lms_sha256_h20_w8_h15_w8_length_signature 3444
#define OQS_SIG_STFL_alg_lms_sha256_h20_w8_h20_w8_length_signature 3604

OQS_API OQS_STATUS OQS_SIG_STFL_alg_lms_sha256_h5_w8_h5_w8_keypair(uint8_t *public_key, OQS_SIG_STFL_SECRET_KEY *secret_key);
OQS_API OQS_SIG_STFL_SECRET_KEY *OQS_SECRET_KEY_LMS_SHA256_H5_W8_H5_W8_new(void);
OQS_API OQS_SIG_STFL *OQS_SIG_STFL_alg_lms_sha256_h5_w8_h5_w8_new(void);

OQS_API OQS_STATUS OQS_SIG_STFL_alg_lms_sha256_h10_w4_h5_w8_keypair(uint8_t *public_key, OQS_SIG_STFL_SECRET_KEY *secret_key);
OQS_API OQS_SIG_STFL_SECRET_KEY *OQS_SECRET_KEY_LMS_SHA256_H10_W4_H5_W8_new(void);
OQS_API OQS_SIG_STFL *OQS_SIG_STFL_alg_lms_sha256_h10_w4_h5_w8_new(void);

OQS_API OQS_STATUS OQS_SIG_STFL_alg_lms_sha256_h10_w8_h5_w8_keypair(uint8_t *public_key, OQS_SIG_STFL_SECRET_KEY *secret_key);
OQS_API OQS_SIG_STFL_SECRET_KEY *OQS_SECRET_KEY_LMS_SHA256_H10_W8_H5_W8_new(void);
OQS_API OQS_SIG_STFL *OQS_SIG_STFL_alg_lms_sha256_h10_w8_h5_w8_new(void);

OQS_API OQS_STATUS OQS_SIG_STFL_alg_lms_sha256_h10_w2_h10_w2_keypair(uint8_t *public_key, OQS_SIG_STFL_SECRET_KEY *secret_key);
OQS_API OQS_SIG_STFL_SECRET_KEY *OQS_SECRET_KEY_LMS_SHA256_H10_W2_H10_W2_new(void);
OQS_API OQS_SIG_STFL *OQS_SIG_STFL_alg_lms_sha256_h10_w2_h10_w2_new(void);

OQS_API OQS_STATUS OQS_SIG_STFL_alg_lms_sha256_h10_w4_h10_w4_keypair(uint8_t *public_key, OQS_SIG_STFL_SECRET_KEY *secret_key);
OQS_API OQS_SIG_STFL_SECRET_KEY *OQS_SECRET_KEY_LMS_SHA256_H10_W4_H10_W4_new(void);
OQS_API OQS_SIG_STFL *OQS_SIG_STFL_alg_lms_sha256_h10_w4_h10_w4_new(void);

OQS_API OQS_STATUS OQS_SIG_STFL_alg_lms_sha256_h10_w8_h10_w8_keypair(uint8_t *public_key, OQS_SIG_STFL_SECRET_KEY *secret_key);
OQS_API OQS_SIG_STFL_SECRET_KEY *OQS_SECRET_KEY_LMS_SHA256_H10_W8_H10_W8_new(void);
OQS_API OQS_SIG_STFL *OQS_SIG_STFL_alg_lms_sha256_h10_w8_h10_w8_new(void);

OQS_API OQS_STATUS OQS_SIG_STFL_alg_lms_sha256_h15_w8_h5_w8_keypair(uint8_t *public_key, OQS_SIG_STFL_SECRET_KEY *secret_key);
OQS_API OQS_SIG_STFL_SECRET_KEY *OQS_SECRET_KEY_LMS_SHA256_H15_W8_H5_W8_new(void);
OQS_API OQS_SIG_STFL *OQS_SIG_STFL_alg_lms_sha256_h15_w8_h5_w8_new(void);

OQS_API OQS_STATUS OQS_SIG_STFL_alg_lms_sha256_h15_w8_h10_w8_keypair(uint8_t *public_key, OQS_SIG_STFL_SECRET_KEY *secret_key);
OQS_API OQS_SIG_STFL_SECRET_KEY *OQS_SECRET_KEY_LMS_SHA256_H15_W8_H10_W8_new(void);
OQS_API OQS_SIG_STFL *OQS_SIG_STFL_alg_lms_sha256_h15_w8_h10_w8_new(void);

OQS_API OQS_STATUS OQS_SIG_STFL_alg_lms_sha256_h15_w8_h15_w8_keypair(uint8_t *public_key, OQS_SIG_STFL_SECRET_KEY *secret_key);
OQS_API OQS_SIG_STFL_SECRET_KEY *OQS_SECRET_KEY_LMS_SHA256_H15_W8_H15_W8_new(void);
OQS_API OQS_SIG_STFL *OQS_SIG_STFL_alg_lms_sha256_h15_w8_h15_w8_new(void);

OQS_API OQS_STATUS OQS_SIG_STFL_alg_lms_sha256_h20_w8_h5_w8_keypair(uint8_t *public_key, OQS_SIG_STFL_SECRET_KEY *secret_key);
OQS_API OQS_SIG_STFL_SECRET_KEY *OQS_SECRET_KEY_LMS_SHA256_H20_W8_H5_W8_new(void);
OQS_API OQS_SIG_STFL *OQS_SIG_STFL_alg_lms_sha256_h20_w8_h5_w8_new(void);

OQS_API OQS_STATUS OQS_SIG_STFL_alg_lms_sha256_h20_w8_h10_w8_keypair(uint8_t *public_key, OQS_SIG_STFL_SECRET_KEY *secret_key);
OQS_API OQS_SIG_STFL_SECRET_KEY *OQS_SECRET_KEY_LMS_SHA256_H20_W8_H10_W8_new(void);
OQS_API OQS_SIG_STFL *OQS_SIG_STFL_alg_lms_sha256_h20_w8_h10_w8_new(void);

OQS_API OQS_STATUS OQS_SIG_STFL_alg_lms_sha256_h20_w8_h15_w8_keypair(uint8_t *public_key, OQS_SIG_STFL_SECRET_KEY *secret_key);
OQS_API OQS_SIG_STFL_SECRET_KEY *OQS_SECRET_KEY_LMS_SHA256_H20_W8_H15_W8_new(void);
OQS_API OQS_SIG_STFL *OQS_SIG_STFL_alg_lms_sha256_h20_w8_h15_w8_new(void);

OQS_API OQS_STATUS OQS_SIG_STFL_alg_lms_sha256_h20_w8_h20_w8_keypair(uint8_t *public_key, OQS_SIG_STFL_SECRET_KEY *secret_key);
OQS_API OQS_SIG_STFL_SECRET_KEY *OQS_SECRET_KEY_LMS_SHA256_H20_W8_H20_W8_new(void);
OQS_API OQS_SIG_STFL *OQS_SIG_STFL_alg_lms_sha256_h20_w8_h20_w8_new(void);

Expand Down
17 changes: 17 additions & 0 deletions src/sig_stfl/sig_stfl.c
Original file line number Diff line number Diff line change
Expand Up @@ -912,6 +912,7 @@ OQS_API OQS_STATUS OQS_SIG_STFL_sign(const OQS_SIG_STFL *sig, uint8_t *signature
#endif
}


OQS_API OQS_STATUS OQS_SIG_STFL_verify(const OQS_SIG_STFL *sig, const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
if (sig == NULL || sig->verify == NULL || sig->verify(message, message_len, signature, signature_len, public_key) != 0) {
return OQS_ERROR;
Expand All @@ -920,20 +921,36 @@ OQS_API OQS_STATUS OQS_SIG_STFL_verify(const OQS_SIG_STFL *sig, const uint8_t *m
}
}


OQS_API OQS_STATUS OQS_SIG_STFL_sigs_remaining(const OQS_SIG_STFL *sig, unsigned long long *remain, const OQS_SIG_STFL_SECRET_KEY *secret_key) {
#ifndef OQS_ALLOW_SFTL_KEY_AND_SIG_GEN
(void)sig;
(void)remain;
(void)secret_key;
return OQS_ERROR;
#else
if (sig == NULL || sig->sigs_remaining == NULL || sig->sigs_remaining(remain, secret_key) != 0) {
return OQS_ERROR;
} else {
return OQS_SUCCESS;
}
#endif //OQS_ALLOW_SFTL_KEY_AND_SIG_GEN
}


OQS_API OQS_STATUS OQS_SIG_STFL_sigs_total(const OQS_SIG_STFL *sig, unsigned long long *max, const OQS_SIG_STFL_SECRET_KEY *secret_key) {
#ifndef OQS_ALLOW_SFTL_KEY_AND_SIG_GEN
(void)sig;
(void)max;
(void)secret_key;
return OQS_ERROR;
#else
if (sig == NULL || sig->sigs_total == NULL || sig->sigs_total(max, secret_key) != 0) {
return OQS_ERROR;
} else {
return OQS_SUCCESS;
}
#endif //OQS_ALLOW_SFTL_KEY_AND_SIG_GEN
}

OQS_API void OQS_SIG_STFL_free(OQS_SIG_STFL *sig) {
Expand Down
4 changes: 4 additions & 0 deletions src/sig_stfl/sig_stfl.h
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,9 @@ OQS_API int OQS_SIG_STFL_alg_count(void);
*/
OQS_API int OQS_SIG_STFL_alg_is_enabled(const char *method_name);

#ifndef OQS_ALLOW_SFTL_KEY_AND_SIG_GEN
#define OQS_SIG_STFL OQS_SIG
#else
/**
* Stateful signature scheme object
*/
Expand Down Expand Up @@ -281,6 +284,7 @@ typedef struct OQS_SIG_STFL {
OQS_STATUS (*sigs_total)(unsigned long long *total, const OQS_SIG_STFL_SECRET_KEY *secret_key);

} OQS_SIG_STFL;
#endif //OQS_ALLOW_SFTL_KEY_AND_SIG_GEN

/**
* @brief OQS_SIG_STFL_SECRET_KEY object for stateful signature schemes
Expand Down
73 changes: 2 additions & 71 deletions src/sig_stfl/xmss/sig_stfl_xmss_sha256_h10.c
Original file line number Diff line number Diff line change
@@ -1,76 +1,7 @@
// SPDX-License-Identifier: Apache-2.0 AND MIT

#include <string.h>
#include <stdlib.h>

#include <oqs/oqs.h>
#include "sig_stfl_xmss.h"

#include "external/xmss.h"

#if defined(__GNUC__) || defined(__clang__)
#define XMSS_UNUSED_ATT __attribute__((unused))
#else
#define XMSS_UNUSED_ATT
#endif
#include "sig_stfl_xmss_xmssmt.c"

// ======================== XMSS-SHA2_10_256 ======================== //

OQS_SIG_STFL *OQS_SIG_STFL_alg_xmss_sha256_h10_new(void) {

OQS_SIG_STFL *sig = (OQS_SIG_STFL *)malloc(sizeof(OQS_SIG_STFL));
if (sig == NULL) {
return NULL;
}
memset(sig, 0, sizeof(OQS_SIG_STFL));

sig->oid = OQS_SIG_STFL_alg_xmss_sha256_h10_oid;
sig->method_name = "XMSS-SHA2_10_256";
sig->alg_version = "https://datatracker.ietf.org/doc/html/rfc8391";
sig->euf_cma = true;

sig->length_public_key = OQS_SIG_STFL_alg_xmss_sha256_h10_length_pk;
sig->length_secret_key = OQS_SIG_STFL_alg_xmss_sha256_h10_length_sk;
sig->length_signature = OQS_SIG_STFL_alg_xmss_sha256_h10_length_signature;

sig->keypair = OQS_SIG_STFL_alg_xmss_sha256_h10_keypair;
sig->sign = OQS_SIG_STFL_alg_xmss_sha256_h10_sign;
sig->verify = OQS_SIG_STFL_alg_xmss_sha256_h10_verify;
sig->sigs_remaining = OQS_SIG_STFL_alg_xmss_sha256_h10_sigs_remaining;
sig->sigs_total = OQS_SIG_STFL_alg_xmss_sha256_h10_sigs_total;

return sig;
}

OQS_SIG_STFL_SECRET_KEY *OQS_SECRET_KEY_XMSS_SHA256_H10_new(void) {
return OQS_SECRET_KEY_XMSS_new(OQS_SIG_STFL_alg_xmss_sha256_h10_length_sk);
}

OQS_API OQS_STATUS OQS_SIG_STFL_alg_xmss_sha256_h10_keypair(XMSS_UNUSED_ATT uint8_t *public_key, XMSS_UNUSED_ATT OQS_SIG_STFL_SECRET_KEY *secret_key) {

if (public_key == NULL || secret_key == NULL || secret_key->secret_key_data == NULL) {
return OQS_ERROR;
}

if (xmss_keypair(public_key, secret_key->secret_key_data, OQS_SIG_STFL_alg_xmss_sha256_h10_oid)) {
return OQS_ERROR;
}

return OQS_SUCCESS;
}

OQS_API OQS_STATUS OQS_SIG_STFL_alg_xmss_sha256_h10_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, OQS_SIG_STFL_SECRET_KEY *secret_key) {
return OQS_SIG_STFL_alg_xmss_sign(signature, signature_len, message, message_len, secret_key);
}

OQS_API OQS_STATUS OQS_SIG_STFL_alg_xmss_sha256_h10_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
return OQS_SIG_STFL_alg_xmss_verify(message, message_len, signature, signature_len, public_key);
}

OQS_API OQS_STATUS OQS_SIG_STFL_alg_xmss_sha256_h10_sigs_remaining(unsigned long long *remain, const OQS_SIG_STFL_SECRET_KEY *secret_key) {
return OQS_SIG_STFL_alg_xmss_sigs_remaining(remain, secret_key);
}

OQS_API OQS_STATUS OQS_SIG_STFL_alg_xmss_sha256_h10_sigs_total(unsigned long long *total, const OQS_SIG_STFL_SECRET_KEY *secret_key) {
return OQS_SIG_STFL_alg_xmss_sigs_total(total, secret_key);
}
XMSS_ALG(, _sha256_h10, _SHA256_H10)
73 changes: 2 additions & 71 deletions src/sig_stfl/xmss/sig_stfl_xmss_sha256_h16.c
Original file line number Diff line number Diff line change
@@ -1,76 +1,7 @@
// SPDX-License-Identifier: Apache-2.0 AND MIT

#include <string.h>
#include <stdlib.h>

#include <oqs/oqs.h>
#include "sig_stfl_xmss.h"

#include "external/xmss.h"

#if defined(__GNUC__) || defined(__clang__)
#define XMSS_UNUSED_ATT __attribute__((unused))
#else
#define XMSS_UNUSED_ATT
#endif
#include "sig_stfl_xmss_xmssmt.c"

// ======================== XMSS-SHA2_16_256 ======================== //

OQS_SIG_STFL *OQS_SIG_STFL_alg_xmss_sha256_h16_new(void) {

OQS_SIG_STFL *sig = (OQS_SIG_STFL *)malloc(sizeof(OQS_SIG_STFL));
if (sig == NULL) {
return NULL;
}
memset(sig, 0, sizeof(OQS_SIG_STFL));

sig->oid = OQS_SIG_STFL_alg_xmss_sha256_h16_oid;
sig->method_name = "XMSS-SHA2_16_256";
sig->alg_version = "https://datatracker.ietf.org/doc/html/rfc8391";
sig->euf_cma = true;

sig->length_public_key = OQS_SIG_STFL_alg_xmss_sha256_h16_length_pk;
sig->length_secret_key = OQS_SIG_STFL_alg_xmss_sha256_h16_length_sk;
sig->length_signature = OQS_SIG_STFL_alg_xmss_sha256_h16_length_signature;

sig->keypair = OQS_SIG_STFL_alg_xmss_sha256_h16_keypair;
sig->sign = OQS_SIG_STFL_alg_xmss_sha256_h16_sign;
sig->verify = OQS_SIG_STFL_alg_xmss_sha256_h16_verify;
sig->sigs_remaining = OQS_SIG_STFL_alg_xmss_sha256_h16_sigs_remaining;
sig->sigs_total = OQS_SIG_STFL_alg_xmss_sha256_h16_sigs_total;

return sig;
}

OQS_SIG_STFL_SECRET_KEY *OQS_SECRET_KEY_XMSS_SHA256_H16_new(void) {
return OQS_SECRET_KEY_XMSS_new(OQS_SIG_STFL_alg_xmss_sha256_h16_length_sk);
}

OQS_API OQS_STATUS OQS_SIG_STFL_alg_xmss_sha256_h16_keypair(XMSS_UNUSED_ATT uint8_t *public_key, XMSS_UNUSED_ATT OQS_SIG_STFL_SECRET_KEY *secret_key) {

if (public_key == NULL || secret_key == NULL || secret_key->secret_key_data == NULL) {
return OQS_ERROR;
}

if (xmss_keypair(public_key, secret_key->secret_key_data, OQS_SIG_STFL_alg_xmss_sha256_h16_oid)) {
return OQS_ERROR;
}

return OQS_SUCCESS;
}

OQS_API OQS_STATUS OQS_SIG_STFL_alg_xmss_sha256_h16_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, OQS_SIG_STFL_SECRET_KEY *secret_key) {
return OQS_SIG_STFL_alg_xmss_sign(signature, signature_len, message, message_len, secret_key);
}

OQS_API OQS_STATUS OQS_SIG_STFL_alg_xmss_sha256_h16_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
return OQS_SIG_STFL_alg_xmss_verify(message, message_len, signature, signature_len, public_key);
}

OQS_API OQS_STATUS OQS_SIG_STFL_alg_xmss_sha256_h16_sigs_remaining(unsigned long long *remain, const OQS_SIG_STFL_SECRET_KEY *secret_key) {
return OQS_SIG_STFL_alg_xmss_sigs_remaining(remain, secret_key);
}

OQS_API OQS_STATUS OQS_SIG_STFL_alg_xmss_sha256_h16_sigs_total(unsigned long long *total, const OQS_SIG_STFL_SECRET_KEY *secret_key) {
return OQS_SIG_STFL_alg_xmss_sigs_total(total, secret_key);
}
XMSS_ALG(, _sha256_h16, _SHA256_H16)
73 changes: 2 additions & 71 deletions src/sig_stfl/xmss/sig_stfl_xmss_sha256_h20.c
Original file line number Diff line number Diff line change
@@ -1,76 +1,7 @@
// SPDX-License-Identifier: Apache-2.0 AND MIT

#include <string.h>
#include <stdlib.h>

#include <oqs/oqs.h>
#include "sig_stfl_xmss.h"

#include "external/xmss.h"

#if defined(__GNUC__) || defined(__clang__)
#define XMSS_UNUSED_ATT __attribute__((unused))
#else
#define XMSS_UNUSED_ATT
#endif
#include "sig_stfl_xmss_xmssmt.c"

// ======================== XMSS-SHA2_16_256 ======================== //

OQS_SIG_STFL *OQS_SIG_STFL_alg_xmss_sha256_h20_new(void) {

OQS_SIG_STFL *sig = (OQS_SIG_STFL *)malloc(sizeof(OQS_SIG_STFL));
if (sig == NULL) {
return NULL;
}
memset(sig, 0, sizeof(OQS_SIG_STFL));

sig->oid = OQS_SIG_STFL_alg_xmss_sha256_h20_oid;
sig->method_name = "XMSS-SHA2_20_256";
sig->alg_version = "https://datatracker.ietf.org/doc/html/rfc8391";
sig->euf_cma = true;

sig->length_public_key = OQS_SIG_STFL_alg_xmss_sha256_h20_length_pk;
sig->length_secret_key = OQS_SIG_STFL_alg_xmss_sha256_h20_length_sk;
sig->length_signature = OQS_SIG_STFL_alg_xmss_sha256_h20_length_signature;

sig->keypair = OQS_SIG_STFL_alg_xmss_sha256_h20_keypair;
sig->sign = OQS_SIG_STFL_alg_xmss_sha256_h20_sign;
sig->verify = OQS_SIG_STFL_alg_xmss_sha256_h20_verify;
sig->sigs_remaining = OQS_SIG_STFL_alg_xmss_sha256_h20_sigs_remaining;
sig->sigs_total = OQS_SIG_STFL_alg_xmss_sha256_h20_sigs_total;

return sig;
}

OQS_SIG_STFL_SECRET_KEY *OQS_SECRET_KEY_XMSS_SHA256_H20_new(void) {
return OQS_SECRET_KEY_XMSS_new(OQS_SIG_STFL_alg_xmss_sha256_h20_length_sk);
}

OQS_API OQS_STATUS OQS_SIG_STFL_alg_xmss_sha256_h20_keypair(XMSS_UNUSED_ATT uint8_t *public_key, XMSS_UNUSED_ATT OQS_SIG_STFL_SECRET_KEY *secret_key) {

if (public_key == NULL || secret_key == NULL || secret_key->secret_key_data == NULL) {
return OQS_ERROR;
}

if (xmss_keypair(public_key, secret_key->secret_key_data, OQS_SIG_STFL_alg_xmss_sha256_h20_oid)) {
return OQS_ERROR;
}

return OQS_SUCCESS;
}

OQS_API OQS_STATUS OQS_SIG_STFL_alg_xmss_sha256_h20_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, OQS_SIG_STFL_SECRET_KEY *secret_key) {
return OQS_SIG_STFL_alg_xmss_sign(signature, signature_len, message, message_len, secret_key);
}

OQS_API OQS_STATUS OQS_SIG_STFL_alg_xmss_sha256_h20_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
return OQS_SIG_STFL_alg_xmss_verify(message, message_len, signature, signature_len, public_key);
}

OQS_API OQS_STATUS OQS_SIG_STFL_alg_xmss_sha256_h20_sigs_remaining(unsigned long long *remain, const OQS_SIG_STFL_SECRET_KEY *secret_key) {
return OQS_SIG_STFL_alg_xmss_sigs_remaining(remain, secret_key);
}

OQS_API OQS_STATUS OQS_SIG_STFL_alg_xmss_sha256_h20_sigs_total(unsigned long long *total, const OQS_SIG_STFL_SECRET_KEY *secret_key) {
return OQS_SIG_STFL_alg_xmss_sigs_total(total, secret_key);
}
XMSS_ALG(, _sha256_h20, _SHA256_H20)
Loading

0 comments on commit f5e55be

Please sign in to comment.