LMS#
Functions such as LMS key generation, signing, signature verification and special functions like getters and setters that are required to call algorithms have been implemented.
Note
Important
LMS is a stateful algorithm, so users are responsible for storing memory for signatures, private keys, and public keys. It is especially important that the private key state memory is protected on the user’s side. See more details in RFC 8554.
Example 1. Key Generation and Signing#
#define IPPCP_PREVIEW_LMS
#include "ippcp.h"
...
IppsLMSAlgoType alg_id;
alg_id.prmLmotsAlg = IppsLMOTSAlgo::LMOTS_SHA256_N32_W8;
alg_id.prmLmsAlg = IppsLMSAlgo::LMS_SHA256_M24_H10;
int extra_buf_size = 320;
status = ippsLMSKeyGenBufferGetSize(&buffSizeKeyGen, alg_id);
status = ippsLMSSignBufferGetSize(&buffSizeSign, sizeof(msg), alg_id);
status = ippsLMSVerifyBufferGetSize(&buffSizeVerify, sizeof(msg), alg_id);
status = ippsLMSPrivateKeyStateGetSize(&privKeySize, alg_id, extra_buf_size);
status = ippsLMSPublicKeyStateGetSize(&pubKeySize, alg_id);
status = ippsLMSSignatureStateGetSize(&signSize, alg_id);
status = ippsLMSInitKeyPair(alg_id, extra_buf_size, pPrvKey, pPubKey);
status = ippsLMSInitSignature(alg_id, pSignature);
status = ippsLMSKeyGen(pPrvKey, pPubKey, NULL, NULL, pScratchKeyGenBuffer);
status = ippsLMSSign(msg, sizeof(msg), pPrvKey, pSignature, NULL, NULL, pScratchSignBuffer);
int is_valid=0;
status = ippsLMSVerify(msg, sizeof(msg), pSignature, &is_valid, pPubKey, pScratchVerifyBuffer);
...
Example 2. Verification#
#define IPPCP_PREVIEW_LMS
#include "ippcp.h"
...
IppsLMSAlgoType alg_id;
alg_id.prmLmotsAlg = IppsLMOTSAlgo::LMOTS_SHA256_N32_W8;
alg_id.prmLmsAlg = IppsLMSAlgo::LMS_SHA256_M24_H10;
status = ippsLMSVerifyBufferGetSize(&buffSize, sizeof(msg), alg_id);
status = ippsLMSPublicKeyStateGetSize(&pubKeySize, alg_id);
status = ippsLMSSignatureStateGetSize(&sigBuffSize, alg_id);
status = ippsLMSSetPublicKeyState(alg_id, pI, pK, pPubKey);
status = ippsLMSSetSignatureState(alg_id, q, pC, pY, pAuthPath, pSignature);
int is_valid=0;
status = ippsLMSVerify(msg, sizeof(msg), pSignature, &is_valid, pPubKey, pScratchBuffer);
...
- LMS Key Generation
- LMS Signature Generation
- LMS Verification
- Supported LMS Algorithms
- Get Size Of LMS Keys and Signature States
- Get Size Of Temporary Buffer
- Set LMS Public Key State
- Set LMS Private Key State
- Set LMS Signature State
- Get LMS Public Key Elements
- Get LMS Signature Elements
- Initialize LMS Key Pair State
- Initialize LMS Signature State