* This file is part of the openHiTLS project.
*
* openHiTLS is licensed under the Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
*
* http://license.coscl.org.cn/MulanPSL2
*
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
#ifndef HSS_PARAMS_H
#define HSS_PARAMS_H
#include "hitls_build.h"
#ifdef HITLS_CRYPTO_HSS
#include <stdint.h>
#include <stdbool.h>
#include <stddef.h>
#include "lms_params.h"
#ifdef __cplusplus
extern "C" {
#endif
* format (and all public API entry points) actually support. It matches the
* compressed-parameter encoding limit so that callers never encounter a value
* that is accepted by the parameter-setting interface but rejected later.
*
* HSS_LEVELS_ARRAY_SIZE is used exclusively for compile-time array sizing.
* It is kept at 8 (the RFC 8554 theoretical maximum) so that internal buffers
* are large enough if the limit is ever raised without requiring a struct-layout
* change. It must NOT be used as a runtime upper-bound in API validation.
*/
#define HSS_LEVELS_ARRAY_SIZE 8
#define HSS_MAX_LEVELS 3
#define HSS_MIN_LEVELS 1
#define HSS_PRVKEY_LEN 48
#define HSS_PUBKEY_LEN 60
#define HSS_PRVKEY_COUNTER_OFFSET 0
#define HSS_PRVKEY_COUNTER_LEN 8
#define HSS_PRVKEY_PARAMS_OFFSET 8
#define HSS_PRVKEY_PARAMS_LEN 8
#define HSS_PRVKEY_SEED_OFFSET 16
#define HSS_PRVKEY_SEED_LEN 32
#define HSS_PUBKEY_LEVELS_OFFSET 0
#define HSS_PUBKEY_LMS_TYPE_OFFSET 4
#define HSS_PUBKEY_OTS_TYPE_OFFSET 8
#define HSS_PUBKEY_I_OFFSET 12
#define HSS_PUBKEY_ROOT_OFFSET 28
#define HSS_SIG_NSPK_OFFSET 0
#define HSS_SIG_NSPK_LEN 4
#define HSS_SIG_DATA_OFFSET 4
#define HSS_SEED_ROOT_I 0x00
#define HSS_SEED_ROOT_SEED 0x01
#define HSS_SEED_CHILD_SUFFIX 0x01
#define HSS_COMPRESSED_PARAMS_LEN 8
#define HSS_MAX_COMPRESSED_LEVELS 3
#define HSS_ROOT_SEED_DERIVE_BUF_LEN 34
#define HSS_CHILD_SEED_DERIVE_BUF_LEN 60
#define HSS_CHILD_SEED_SUFFIX_BUF_LEN 61
#define HSS_COMPRESSED_LEVEL_FIELD_SIZE 1
#define HSS_COMPRESSED_PARAM_PAIR_SIZE 2
* @ingroup hss
* @brief HSS parameter structure
*/
typedef struct HssPara {
uint32_t levels;
uint32_t lmsType[HSS_LEVELS_ARRAY_SIZE];
uint32_t otsType[HSS_LEVELS_ARRAY_SIZE];
size_t pubKeyLen;
size_t prvKeyLen;
size_t sigLen;
uint64_t maxSignatures;
LMS_Para levelPara[HSS_LEVELS_ARRAY_SIZE];
} HSS_Para;
#ifdef __cplusplus
}
#endif
#endif
#endif