
ISARA Radiate Security Solution Suite Toolkit Edition Version 1.5
Quantum-safe cryptographic primitives and algorithms.
ISARA Radiate Security Solution Suite's Hierarchical Signature Scheme. More...
Typedefs | |
typedef struct iqr_HSSPrivateKeyState_struct | iqr_HSSPrivateKeyState |
typedef struct iqr_HSSParams_struct | iqr_HSSParams |
typedef struct iqr_HSSPublicKey_struct | iqr_HSSPublicKey |
typedef struct iqr_HSSPrivateKey_struct | iqr_HSSPrivateKey |
typedef struct iqr_HSSTreeStrategy_struct | iqr_HSSTreeStrategy |
Enumerations | |
enum | iqr_HSSWinternitz { IQR_HSS_WINTERNITZ_1 = 0, IQR_HSS_WINTERNITZ_2 = 1, IQR_HSS_WINTERNITZ_4 = 2, IQR_HSS_WINTERNITZ_8 = 3 } |
enum | iqr_HSSHeight { IQR_HSS_HEIGHT_5 = 0, IQR_HSS_HEIGHT_10 = 1, IQR_HSS_HEIGHT_15 = 2, IQR_HSS_HEIGHT_20 = 3, IQR_HSS_HEIGHT_25 = 4 } |
enum | iqr_HSSLevels { IQR_HSS_LEVEL_1 = 0 } |
Functions | |
IQR_API iqr_retval | iqr_HSSCreateParams (const iqr_Context *ctx, const iqr_HSSTreeStrategy *strategy, iqr_HSSWinternitz w, iqr_HSSHeight h, iqr_HSSLevels l, iqr_HSSParams **params) |
IQR_API_UNENFORCED_RETURN iqr_retval | iqr_HSSDestroyParams (iqr_HSSParams **params) |
IQR_API iqr_retval | iqr_HSSCreateKeyPair (const iqr_HSSParams *params, const iqr_RNG *rng, iqr_HSSPublicKey **public_key, iqr_HSSPrivateKey **private_key, iqr_HSSPrivateKeyState **state) |
IQR_API iqr_retval | iqr_HSSImportPrivateKey (const iqr_HSSParams *params, const uint8_t *buf, size_t buf_size, iqr_HSSPrivateKey **private_key) |
IQR_API iqr_retval | iqr_HSSExportPrivateKey (const iqr_HSSPrivateKey *private_key, uint8_t *buf, size_t buf_size) |
IQR_API iqr_retval | iqr_HSSImportPublicKey (const iqr_HSSParams *params, const uint8_t *buf, size_t buf_size, iqr_HSSPublicKey **public_key) |
IQR_API iqr_retval | iqr_HSSExportPublicKey (const iqr_HSSPublicKey *public_key, uint8_t *buf, size_t buf_size) |
IQR_API iqr_retval | iqr_HSSImportState (const iqr_HSSParams *params, const uint8_t *buf, size_t buf_size, iqr_HSSPrivateKeyState **state) |
IQR_API iqr_retval | iqr_HSSExportState (const iqr_HSSPrivateKeyState *state, uint8_t *buf, size_t buf_size) |
IQR_API_UNENFORCED_RETURN iqr_retval | iqr_HSSDestroyPrivateKey (iqr_HSSPrivateKey **private_key) |
IQR_API_UNENFORCED_RETURN iqr_retval | iqr_HSSDestroyPublicKey (iqr_HSSPublicKey **public_key) |
IQR_API_UNENFORCED_RETURN iqr_retval | iqr_HSSDestroyState (iqr_HSSPrivateKeyState **state) |
IQR_API iqr_retval | iqr_HSSDetachState (const iqr_HSSPrivateKey *private_key, iqr_HSSPrivateKeyState *state, uint32_t num_sigs, iqr_HSSPrivateKeyState **detached_state) |
IQR_API iqr_retval | iqr_HSSGetPrivateKeySize (const iqr_HSSPrivateKey *private_key, size_t *private_key_size) |
IQR_API iqr_retval | iqr_HSSGetPublicKeySize (const iqr_HSSPublicKey *public_key, size_t *public_key_size) |
IQR_API iqr_retval | iqr_HSSGetStateSize (const iqr_HSSPrivateKeyState *state, size_t *state_size) |
IQR_API iqr_retval | iqr_HSSGetSignatureSize (const iqr_HSSParams *params, size_t *sig_size) |
IQR_API iqr_retval | iqr_HSSGetSignatureCount (const iqr_HSSPrivateKeyState *state, uint32_t *max_sigs, uint32_t *remaining_sigs) |
IQR_API iqr_retval | iqr_HSSSign (const iqr_HSSPrivateKey *private_key, const iqr_RNG *rng, const uint8_t *message, size_t message_size, iqr_HSSPrivateKeyState *state, uint8_t *sig, size_t sig_size) |
IQR_API iqr_retval | iqr_HSSVerify (const iqr_HSSPublicKey *public_key, const uint8_t *message, size_t message_size, const uint8_t *sig, size_t sig_size) |
Variables | |
IQR_EXTERN const iqr_HSSTreeStrategy | IQR_HSS_BDS_STRATEGY |
IQR_EXTERN const iqr_HSSTreeStrategy | IQR_HSS_FULL_STRATEGY |
IQR_EXTERN const iqr_HSSTreeStrategy | IQR_HSS_VERIFY_ONLY_STRATEGY |
Typedef Documentation
◆ iqr_HSSParams
typedef struct iqr_HSSParams_struct iqr_HSSParams |
The HSS algorithm's domain parameters.
◆ iqr_HSSPrivateKey
typedef struct iqr_HSSPrivateKey_struct iqr_HSSPrivateKey |
The HSS private key.
◆ iqr_HSSPrivateKeyState
typedef struct iqr_HSSPrivateKeyState_struct iqr_HSSPrivateKeyState |
The HSS algorithm's state.
◆ iqr_HSSPublicKey
typedef struct iqr_HSSPublicKey_struct iqr_HSSPublicKey |
The HSS public key.
◆ iqr_HSSTreeStrategy
typedef struct iqr_HSSTreeStrategy_struct iqr_HSSTreeStrategy |
The HSS tree strategy.
Enumeration Type Documentation
◆ iqr_HSSHeight
enum iqr_HSSHeight |
Supported HSS tree heights.
The HSS tree height, as documented in the Hash-Based Signatures IETF Draft. The height dictates the number of one-time signatures available (2height).
◆ iqr_HSSLevels
enum iqr_HSSLevels |
◆ iqr_HSSWinternitz
enum iqr_HSSWinternitz |
Supported HSS Winternitz values.
The Winternitz domain parameter, as documented in the Hash-Based Signatures IETF Draft. A higher Winternitz value will result in greater hash iterations, impacting performance, but provides smaller signatures.
IQR_HSS_WINTERNITZ_4
provides the best space/performance characteristics.
See the Developer's Guide (online: Toolkit edition, or Signature edition) for details about key sizes, state sizes, and signature sizes.
Enumerator | |
---|---|
IQR_HSS_WINTERNITZ_1 | |
IQR_HSS_WINTERNITZ_2 | |
IQR_HSS_WINTERNITZ_4 | |
IQR_HSS_WINTERNITZ_8 |
Function Documentation
◆ iqr_HSSCreateKeyPair()
IQR_API iqr_retval iqr_HSSCreateKeyPair | ( | const iqr_HSSParams * | params, |
const iqr_RNG * | rng, | ||
iqr_HSSPublicKey ** | public_key, | ||
iqr_HSSPrivateKey ** | private_key, | ||
iqr_HSSPrivateKeyState ** | state | ||
) |
Generate an HSS private/public key pair.
This can take a significant amount of time, especially when creating a height 25 tree (using IQR_HSS_HEIGHT_25
). Larger Winternitz values (iqr_HSSWinternitz
) also increase the time required to generate keys.
The iqr_HSSCreateKeyPair()
function calls the watchdog callback (see iqr_watchdog.h).
- Note
- You must register a SHA2-256 implementation by calling
iqr_HashRegisterCallbacks()
before using the HSS API.
The rng must be initialized before being passed to iqr_HSSCreateKeyPair()
.
*public_key, *private_key, and *state must be set to NULL
before calling iqr_HSSCreateKeyPair()
.
- Parameters
-
[in] params The key parameters to use. [in] rng A seeded random number generator. [out] public_key The resulting iqr_HSSPublicKey
object.[out] private_key The resulting iqr_HSSPrivateKey
object.[out] state The resulting iqr_HSSPrivateKeyState
object.
- Returns
IQR_OK
on success, or a value from iqr_retval.h when an error occurs.
◆ iqr_HSSCreateParams()
IQR_API iqr_retval iqr_HSSCreateParams | ( | const iqr_Context * | ctx, |
const iqr_HSSTreeStrategy * | strategy, | ||
iqr_HSSWinternitz | w, | ||
iqr_HSSHeight | h, | ||
iqr_HSSLevels | l, | ||
iqr_HSSParams ** | params | ||
) |
Create an HSS Parameters object that encapsulates the domain parameters for the Hierarchical Signature Scheme.
It's up to the user to manage domain parameters; the parameter data is not exposed in stored keys or signatures.
- Note
- You must register a SHA2-256 implementation by calling
iqr_HashRegisterCallbacks()
before using the HSS API.
*params must be set to NULL
before calling iqr_HSSCreateParams()
.
- Parameters
-
[in] ctx A Context object. [in] strategy An HSS tree strategy. [in] w The iqr_HSSWinternitz
.[in] h The iqr_HSSHeight
.[in] l The iqr_HSSLevels
.[out] params The iqr_HSSParams
output.
- Returns
IQR_OK
on success, or a value from iqr_retval.h when an error occurs.
◆ iqr_HSSDestroyParams()
IQR_API_UNENFORCED_RETURN iqr_retval iqr_HSSDestroyParams | ( | iqr_HSSParams ** | params | ) |
Clear and deallocate an HSS parameters object.
params will be set to NULL
before returning.
All internal iqr_HSSParams
buffers are cleared and deallocated during the call to iqr_HSSDestroyParams()
. The iqr_HSSParams
object does not store any cryptographic material.
- Parameters
-
[in,out] params The iqr_HSSParams
instance to destroy.
- Returns
IQR_OK
on success, or a value from iqr_retval.h when an error occurs.
◆ iqr_HSSDestroyPrivateKey()
IQR_API_UNENFORCED_RETURN iqr_retval iqr_HSSDestroyPrivateKey | ( | iqr_HSSPrivateKey ** | private_key | ) |
Clear and deallocate an HSS private key.
*private_key will be set to NULL
prior to returning.
The private key's data is cleared before its internal buffers are deallocated.
- Parameters
-
[in,out] private_key The iqr_HSSPrivateKey
object to destroy.
- Returns
IQR_OK
on success, or a value from iqr_retval.h when an error occurs.
◆ iqr_HSSDestroyPublicKey()
IQR_API_UNENFORCED_RETURN iqr_retval iqr_HSSDestroyPublicKey | ( | iqr_HSSPublicKey ** | public_key | ) |
Clear and deallocate an HSS public key.
*public_key will be set to NULL
prior to returning.
- Parameters
-
[in,out] public_key The iqr_HSSPublicKey
object to destroy.
- Returns
IQR_OK
on success, or a value from iqr_retval.h when an error occurs.
◆ iqr_HSSDestroyState()
IQR_API_UNENFORCED_RETURN iqr_retval iqr_HSSDestroyState | ( | iqr_HSSPrivateKeyState ** | state | ) |
Clear and deallocate an HSS state.
*state will be set to NULL
prior to returning.
- Parameters
-
[in,out] state The state
object to destroy.
- Returns
IQR_OK
on success, or a value from iqr_retval.h when an error occurs.
◆ iqr_HSSDetachState()
IQR_API iqr_retval iqr_HSSDetachState | ( | const iqr_HSSPrivateKey * | private_key, |
iqr_HSSPrivateKeyState * | state, | ||
uint32_t | num_sigs, | ||
iqr_HSSPrivateKeyState ** | detached_state | ||
) |
Detaches a subset of signatures from state into a new state object.
This function can be used to split a state into two distinct, non-overlapping state objects. This operation effectively "reserves" a number of signatures from state and places them into a new distinct object, detached_state. Both state objects must be used with the same private key to generate signatures.
This operation is useful for disaster recovery, whereby a small section of the state is detached and used for signing while the rest of the state is persisted in non-volatile memory. Or, this feature can be used to aid in the distribution of a state and key pair to multiple machines, where each machine is given a distinct state.
The detached_state will have a reduced number of maximum signatures once this function returns. Use iqr_HSSGetSignatureCount()
to obtain the number of available signatures. Use iqr_HSSGetStateSize()
to obtain the state sizes prior to exporting.
In the unlikely case that an error occurs while state is being updated, the state will become unusable. This function and any subsequent function calls will return IQR_ESTATECORRUPTED
.
- Parameters
-
[in] private_key The private key. [in,out] state The original state to be split. [in] num_sigs The number of signatures to split off. [out] detached_state A new state object containing num_sigs signatures.
- Returns
IQR_OK
on success, or a value from iqr_retval.h when an error occurs.
◆ iqr_HSSExportPrivateKey()
IQR_API iqr_retval iqr_HSSExportPrivateKey | ( | const iqr_HSSPrivateKey * | private_key, |
uint8_t * | buf, | ||
size_t | buf_size | ||
) |
Export the HSS private key's data into a buffer.
Be sure to safely wipe and discard buf when you're done using it.
- Parameters
-
[in] private_key The private key object. [out] buf The destination buffer. [in] buf_size The size of buf in bytes. Must be exactly the size returned by iqr_HSSGetPrivateKeySize()
.
- Returns
IQR_OK
on success, or a value from iqr_retval.h when an error occurs.
◆ iqr_HSSExportPublicKey()
IQR_API iqr_retval iqr_HSSExportPublicKey | ( | const iqr_HSSPublicKey * | public_key, |
uint8_t * | buf, | ||
size_t | buf_size | ||
) |
Export the HSS public key's data into a buffer.
- Parameters
-
[in] public_key The public key object. [out] buf The destination buffer. [in] buf_size The size of buf in bytes. Must be exactly the size returned by iqr_HSSGetPublicKeySize()
.
- Returns
IQR_OK
on success, or a value from iqr_retval.h when an error occurs.
◆ iqr_HSSExportState()
IQR_API iqr_retval iqr_HSSExportState | ( | const iqr_HSSPrivateKeyState * | state, |
uint8_t * | buf, | ||
size_t | buf_size | ||
) |
Export the HSS state's data into a buffer.
- Parameters
-
[in] state The state object. [out] buf The destination buffer. [in] buf_size The size of buf in bytes. Must be exactly the size returned by iqr_HSSGetStateSize()
.
- Returns
IQR_OK
on success, or a value from iqr_retval.h when an error occurs.
◆ iqr_HSSGetPrivateKeySize()
IQR_API iqr_retval iqr_HSSGetPrivateKeySize | ( | const iqr_HSSPrivateKey * | private_key, |
size_t * | private_key_size | ||
) |
Retrieves the size of the HSS private key, in bytes.
- Parameters
-
[in] private_key The private key. [out] private_key_size The size of the private key in bytes.
- Returns
IQR_OK
on success, or a value from iqr_retval.h when an error occurs.
◆ iqr_HSSGetPublicKeySize()
IQR_API iqr_retval iqr_HSSGetPublicKeySize | ( | const iqr_HSSPublicKey * | public_key, |
size_t * | public_key_size | ||
) |
Retrieve the size of the HSS public key, in bytes.
- Parameters
-
[in] public_key The public key. [out] public_key_size The size of the public key in bytes.
- Returns
IQR_OK
on success, or a value from iqr_retval.h when an error occurs.
◆ iqr_HSSGetSignatureCount()
IQR_API iqr_retval iqr_HSSGetSignatureCount | ( | const iqr_HSSPrivateKeyState * | state, |
uint32_t * | max_sigs, | ||
uint32_t * | remaining_sigs | ||
) |
Get the number of signatures available with the given state.
The total number of signatures that can be generated is based on the height of the tree (governed by the iqr_HSSHeight
domain parameter). The number of remaining signatures depends on how many iqr_HSSSign()
operations have been performed.
- Parameters
-
[in] state The state. [out] max_sigs The total number of signatures. [out] remaining_sigs The remaining number of signatures.
- Returns
IQR_OK
on success, or a value from iqr_retval.h when an error occurs.
◆ iqr_HSSGetSignatureSize()
IQR_API iqr_retval iqr_HSSGetSignatureSize | ( | const iqr_HSSParams * | params, |
size_t * | sig_size | ||
) |
Get the size of the signature.
- Parameters
-
[in] params HSS domain parameters. [out] sig_size The size of the HSS signature for the given private key, in bytes.
- Returns
IQR_OK
on success, or a value from iqr_retval.h when an error occurs.
◆ iqr_HSSGetStateSize()
IQR_API iqr_retval iqr_HSSGetStateSize | ( | const iqr_HSSPrivateKeyState * | state, |
size_t * | state_size | ||
) |
Retrieve the size of the HSS state, in bytes.
- Parameters
-
[in] state The state object. [out] state_size The size of the state in bytes.
- Returns
IQR_OK
on success, or a value from iqr_retval.h when an error occurs.
◆ iqr_HSSImportPrivateKey()
IQR_API iqr_retval iqr_HSSImportPrivateKey | ( | const iqr_HSSParams * | params, |
const uint8_t * | buf, | ||
size_t | buf_size, | ||
iqr_HSSPrivateKey ** | private_key | ||
) |
Import an HSS private key object from a buffer.
The value of buf_size must be exactly the size given by iqr_HSSGetPrivateKeySize()
.
- Note
- You must register a SHA2-256 implementation by calling
iqr_HashRegisterCallbacks()
before using the HSS API.
*private_key must be set to NULL
before calling iqr_HSSImportPrivateKey()
. Be sure to safely wipe and discard buf after calling this function.
- Parameters
-
[in] params HSS Key parameters. Must be the same as when the keys were created. [in] buf A buffer that contains a private key. [in] buf_size The size of buf in bytes. Must be exactly the size returned by iqr_HSSGetPrivateKeySize()
.[out] private_key The resulting iqr_HSSPrivateKey
object.
- Returns
IQR_OK
on success, or a value from iqr_retval.h when an error occurs.
◆ iqr_HSSImportPublicKey()
IQR_API iqr_retval iqr_HSSImportPublicKey | ( | const iqr_HSSParams * | params, |
const uint8_t * | buf, | ||
size_t | buf_size, | ||
iqr_HSSPublicKey ** | public_key | ||
) |
Import an HSS public key object from a buffer.
- Note
- You must register a SHA2-256 implementation by calling
iqr_HashRegisterCallbacks()
before using the HSS API.
*public_key must be set to NULL
before calling iqr_HSSImportPublicKey()
.
- Parameters
-
[in] params HSS Key parameters. Must be the same as when the keys were created. [in] buf A buffer containing the public key. [in] buf_size The size of buf in bytes. Must be exactly the size returned by iqr_HSSGetPublicKeySize()
.[out] public_key The resulting iqr_HSSPublickey
object.
- Returns
IQR_OK
on success, or a value from iqr_retval.h when an error occurs.
◆ iqr_HSSImportState()
IQR_API iqr_retval iqr_HSSImportState | ( | const iqr_HSSParams * | params, |
const uint8_t * | buf, | ||
size_t | buf_size, | ||
iqr_HSSPrivateKeyState ** | state | ||
) |
Import an HSS State object from a buffer.
The value of buf_size must be exactly the size given by iqr_HSSGetStateSize()
.
*state must be set to NULL
before calling iqr_HSSImportState()
.
- Parameters
-
[in] params HSS Key parameters. Must be the same as when the keys were created. [in] buf A buffer that contains a state. [in] buf_size The size of buf in bytes. Must be exactly the size returned by iqr_HSSGetStateSize()
.[out] state The resulting iqr_HSSPrivateKeyState
object.
- Returns
IQR_OK
on success, or a value from iqr_retval.h when an error occurs.
◆ iqr_HSSSign()
IQR_API iqr_retval iqr_HSSSign | ( | const iqr_HSSPrivateKey * | private_key, |
const iqr_RNG * | rng, | ||
const uint8_t * | message, | ||
size_t | message_size, | ||
iqr_HSSPrivateKeyState * | state, | ||
uint8_t * | sig, | ||
size_t | sig_size | ||
) |
Sign a message using an HSS private key.
As signatures are generated, the state can run out of signing keys. In that case, IQR_ESTATEDEPLETED
will be returned and the state can no longer be used for signing. Use iqr_HSSGetSignatureCount()
to check the total number of signatures and the number of signatures remaining.
Each time this function is called, the state is advanced to the next usable state. You must store this new state in non-volatile memory prior to releasing the signature. Alternatively, use iqr_HSSDetachState()
to work with smaller states that can be lost without catastrophe. For more details, refer to the Developer's Guide (online: Toolkit edition, or Signature edition).
In the unlikely case that an error occurs while state is being updated, the state will become unusable. This function and any subsequent function calls will return IQR_ESTATECORRUPTED
.
- Warning
- Restarting from a previous state makes HSS insecure.
If the message is a hash digest it must be 48 bytes or longer to be quantum-safe.
- Note
- You must register a SHA2-256 implementation by calling
iqr_HashRegisterCallbacks()
before using the HSS API.
The rng must be initialized before being passed to iqr_HSSSign()
.
All internal buffers are cleared and deallocated before the call to iqr_HSSSign()
returns.
- Parameters
-
[in] private_key The private key. [in] rng A seeded random number generator. [in] message The message to be signed. [in] message_size The size of message in bytes. [in,out] state The state used to sign the message. [out] sig The buffer receiving the resulting signature. [in] sig_size The size of sig in bytes. Must be exactly the size returned by iqr_HSSGetSignatureSize()
.
- Returns
IQR_OK
on success, or a value from iqr_retval.h when an error occurs.
◆ iqr_HSSVerify()
IQR_API iqr_retval iqr_HSSVerify | ( | const iqr_HSSPublicKey * | public_key, |
const uint8_t * | message, | ||
size_t | message_size, | ||
const uint8_t * | sig, | ||
size_t | sig_size | ||
) |
Verify the signature of a message using an HSS public key.
If the message is a hash digest it must be 48 bytes or longer to be quantum-safe.
- Note
- You must register a SHA2-256 implementation by calling
iqr_HashRegisterCallbacks()
before using the HSS API.
All internal buffers are cleared and deallocated before the call to iqr_HSSVerify()
returns.
- Parameters
-
[in] public_key The public key. [in] message The message to verify. [in] message_size The size of message in bytes. [in] sig The signature to verify. [in] sig_size The size of sig in bytes. Must be exactly the size returned by iqr_HSSGetSignatureSize()
.
- Returns
IQR_OK
on success, or a value from iqr_retval.h when an error occurs.
Variable Documentation
◆ IQR_HSS_BDS_STRATEGY
IQR_EXTERN const iqr_HSSTreeStrategy IQR_HSS_BDS_STRATEGY |
Tree strategies offer a trade-off between CPU utilization and memory usage during signing. Choosing the correct strategy is highly dependent on the hardware restrictions of the target platform.
Please see the Developer's Guide (online: Toolkit edition, or Signature edition) for state size requirements. Implements the BDS algorithm as proposed in the Merkle Tree Traversal Revisited Whitepaper. This strategy features minimal memory requirements at the cost of recomputing parts of the Merkle tree. This option is ideal for memory constrained devices with a fast CPU to handle recomputation. This is an excellent choice for embedded platforms, such as Hardware Security Modules.
◆ IQR_HSS_FULL_STRATEGY
IQR_EXTERN const iqr_HSSTreeStrategy IQR_HSS_FULL_STRATEGY |
Implements a full Merkle tree in memory. This strategy offers the least CPU utilization at the cost of using memory. This option is ideal for servers with large amounts of memory and the need to generate signatures frequently. For larger tree heights, this strategy requires up to 2GB of memory to store the state.
◆ IQR_HSS_VERIFY_ONLY_STRATEGY
IQR_EXTERN const iqr_HSSTreeStrategy IQR_HSS_VERIFY_ONLY_STRATEGY |
This strategy is only used to verify signatures; it cannot be used to create or import private keys nor can it be used to create signatures. This option is ideal for a client that only needs to verify signatures.
Detailed Description
ISARA Radiate Security Solution Suite's Hierarchical Signature Scheme.
The Hierarchical Signature scheme is defined by the Hash-Based Signatures IETF Draft 13 specification by McGrew and Curcio.
This header contains the functions and parameters necessary to create and verify an HSS signature. The two main functions are iqr_HSSSign()
and iqr_HSSVerify()
. The rest of the functions let you create and manipulate HSS keys.
The HSS scheme has some fundamental differences from traditional signature schemes such as RSA or ECDSA. In particular, you'll need to manage the state used by iqr_HSSSign()
carefully. For more details, refer to the Developer's Guide (online: Toolkit edition, or Signature edition).
- Note
- Due to ongoing changes in the IETF specification, keys and signatures created with this version of HSS are not compatible with earlier versions or our past HSS implementation.
- Copyright
- Copyright 2015-2018, ISARA Corporation, All Rights Reserved.
- License
- The code and other content set out herein is not in the public domain, is considered a trade secret and is confidential to ISARA Corporation. Use, reproduction or distribution, in whole or in part, of such code or other content is strictly prohibited except by express written permission of ISARA Corporation. Please contact ISARA Corporation at info@ for more information. isar a.com