mirror of https://github.com/wolfSSL/wolfssl.git
PR feedback: add WC_PK_TYPE_PQC_SIG_KEYGEN_SEED, matching pattern in MLDSA PR
parent
82467fb505
commit
c8db2e1816
|
|
@ -631,6 +631,7 @@ static int swdev_pqc_sig(wc_CryptoInfo* info, int type, int pkType)
|
|||
switch (pkType) {
|
||||
#ifndef WOLFSSL_SLHDSA_VERIFY_ONLY
|
||||
case WC_PK_TYPE_PQC_SIG_KEYGEN:
|
||||
case WC_PK_TYPE_PQC_SIG_KEYGEN_SEED:
|
||||
return swdev_slhdsa_keygen(info);
|
||||
case WC_PK_TYPE_PQC_SIG_SIGN:
|
||||
return swdev_slhdsa_sign(info);
|
||||
|
|
@ -1380,6 +1381,7 @@ WC_SWDEV_EXPORT int wc_SwDev_Callback(int devId, wc_CryptoInfo* info,
|
|||
#ifdef WOLFSSL_HAVE_SLHDSA
|
||||
#ifndef WOLFSSL_SLHDSA_VERIFY_ONLY
|
||||
case WC_PK_TYPE_PQC_SIG_KEYGEN:
|
||||
case WC_PK_TYPE_PQC_SIG_KEYGEN_SEED:
|
||||
return swdev_pqc_sig(info, info->pk.pqc_sig_kg.type,
|
||||
info->pk.type);
|
||||
case WC_PK_TYPE_PQC_SIG_SIGN:
|
||||
|
|
|
|||
|
|
@ -194,6 +194,7 @@ static const char* GetPkTypeStr(int pk)
|
|||
#if defined(WOLFSSL_HAVE_MLDSA) || defined(HAVE_FALCON) || \
|
||||
defined(WOLFSSL_HAVE_SLHDSA)
|
||||
case WC_PK_TYPE_PQC_SIG_KEYGEN: return "PQC Sig KeyGen";
|
||||
case WC_PK_TYPE_PQC_SIG_KEYGEN_SEED: return "PQC Sig KeyGen Seed";
|
||||
case WC_PK_TYPE_PQC_SIG_SIGN: return "PQC Sig Sign";
|
||||
case WC_PK_TYPE_PQC_SIG_VERIFY: return "PQC Sig Verify";
|
||||
case WC_PK_TYPE_PQC_SIG_CHECK_PRIV_KEY: return "PQC Sig CheckPrivKey";
|
||||
|
|
@ -2010,14 +2011,22 @@ int wc_CryptoCb_MakePqcSignatureKeyEx(WC_RNG* rng, int type, int keySize,
|
|||
|
||||
/* get devId; an unbound key still goes through the find callback */
|
||||
devId = wc_CryptoCb_PqcSigGetDevId(type, key);
|
||||
#ifndef WOLF_CRYPTO_CB_FIND
|
||||
if (devId == INVALID_DEVID)
|
||||
return ret;
|
||||
#endif
|
||||
|
||||
/* locate registered callback */
|
||||
/* locate registered callback. A slot sits at INVALID_DEVID while it is
|
||||
* being registered or retired, so never dispatch through one. */
|
||||
dev = wc_CryptoCb_FindDevice(devId, WC_ALGO_TYPE_PK);
|
||||
if (dev && dev->cb) {
|
||||
if (dev && dev->cb && (dev->devId != INVALID_DEVID)) {
|
||||
wc_CryptoInfo cryptoInfo;
|
||||
XMEMSET(&cryptoInfo, 0, sizeof(cryptoInfo));
|
||||
cryptoInfo.algo_type = WC_ALGO_TYPE_PK;
|
||||
cryptoInfo.pk.type = WC_PK_TYPE_PQC_SIG_KEYGEN;
|
||||
/* Seeded generation is a different operation: a device that does not
|
||||
* know this type declines and the caller keeps the seed. */
|
||||
cryptoInfo.pk.type = (seed != NULL) ? WC_PK_TYPE_PQC_SIG_KEYGEN_SEED :
|
||||
WC_PK_TYPE_PQC_SIG_KEYGEN;
|
||||
cryptoInfo.pk.pqc_sig_kg.rng = rng;
|
||||
cryptoInfo.pk.pqc_sig_kg.size = keySize;
|
||||
cryptoInfo.pk.pqc_sig_kg.key = key;
|
||||
|
|
|
|||
|
|
@ -82788,14 +82788,20 @@ static int myCryptoDevCb(int devIdArg, wc_CryptoInfo* info, void* ctx)
|
|||
#endif /* WOLFSSL_HAVE_LMS || WOLFSSL_HAVE_XMSS */
|
||||
#if defined(WOLFSSL_HAVE_SLHDSA)
|
||||
#ifndef WOLFSSL_SLHDSA_VERIFY_ONLY
|
||||
if (info->pk.type == WC_PK_TYPE_PQC_SIG_KEYGEN) {
|
||||
if ((info->pk.type == WC_PK_TYPE_PQC_SIG_KEYGEN) ||
|
||||
(info->pk.type == WC_PK_TYPE_PQC_SIG_KEYGEN_SEED)) {
|
||||
int pqcType = info->pk.pqc_sig_kg.type;
|
||||
(void)pqcType;
|
||||
if (pqcType == WC_PQC_SIG_TYPE_SLHDSA) {
|
||||
SlhDsaKey* sk = (SlhDsaKey*)info->pk.pqc_sig_kg.key;
|
||||
const byte* seed = info->pk.pqc_sig_kg.seed;
|
||||
sk->devId = INVALID_DEVID;
|
||||
if (seed != NULL) {
|
||||
/* The seed must travel with the type that announces it. */
|
||||
if ((seed != NULL) !=
|
||||
(info->pk.type == WC_PK_TYPE_PQC_SIG_KEYGEN_SEED)) {
|
||||
ret = WC_NO_ERR_TRACE(BAD_STATE_E);
|
||||
}
|
||||
else if (seed != NULL) {
|
||||
/* SK.seed || SK.prf || PK.seed, each of n bytes. */
|
||||
word32 n = info->pk.pqc_sig_kg.seedSz / 3;
|
||||
ret = wc_SlhDsaKey_MakeKeyWithRandom(sk, seed, n,
|
||||
|
|
|
|||
|
|
@ -1717,8 +1717,11 @@ enum wc_PkType {
|
|||
* representative rather than message and context. */
|
||||
WC_PK_TYPE_PQC_SIG_SIGN_MSG = 47,
|
||||
WC_PK_TYPE_PQC_SIG_VERIFY_MSG = 48,
|
||||
/* Seeded key generation. Its own type so a device that cannot derive
|
||||
* from a seed declines instead of generating an unrelated key. */
|
||||
WC_PK_TYPE_PQC_SIG_KEYGEN_SEED = 49,
|
||||
#undef _WC_PK_TYPE_MAX
|
||||
#define _WC_PK_TYPE_MAX WC_PK_TYPE_PQC_SIG_VERIFY_MSG
|
||||
#define _WC_PK_TYPE_MAX WC_PK_TYPE_PQC_SIG_KEYGEN_SEED
|
||||
#endif
|
||||
WC_PK_TYPE_MAX = _WC_PK_TYPE_MAX
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in New Issue