Merge pull request #9980 from anhu/sphincs_no_elseif

Fixes SPHINCS else-if chain key detection
This commit is contained in:
David Garske
2026-03-16 15:03:59 -07:00
committed by GitHub
+25 -14
View File
@@ -9670,9 +9670,10 @@ int wc_GetKeyOID(byte* key, word32 keySz, const byte** curveOID, word32* oidSz,
return MEMORY_E;
if (wc_sphincs_init(sphincs) == 0) {
tmpIdx = 0;
if (wc_sphincs_set_level_and_optim(sphincs, 1, FAST_VARIANT)
== 0) {
if ((*algoID == 0) &&
(wc_sphincs_set_level_and_optim(sphincs, 1, FAST_VARIANT)
== 0)) {
tmpIdx = 0;
if (wc_Sphincs_PrivateKeyDecode(key, &tmpIdx, sphincs,
keySz) == 0) {
*algoID = SPHINCS_FAST_LEVEL1k;
@@ -9681,8 +9682,10 @@ int wc_GetKeyOID(byte* key, word32 keySz, const byte** curveOID, word32* oidSz,
WOLFSSL_MSG("Not Sphincs-fast Level 1 DER key");
}
}
else if (wc_sphincs_set_level_and_optim(sphincs, 3, FAST_VARIANT)
== 0) {
if ((*algoID == 0) &&
(wc_sphincs_set_level_and_optim(sphincs, 3, FAST_VARIANT)
== 0)) {
tmpIdx = 0;
if (wc_Sphincs_PrivateKeyDecode(key, &tmpIdx, sphincs,
keySz) == 0) {
*algoID = SPHINCS_FAST_LEVEL3k;
@@ -9691,8 +9694,10 @@ int wc_GetKeyOID(byte* key, word32 keySz, const byte** curveOID, word32* oidSz,
WOLFSSL_MSG("Not Sphincs-fast Level 3 DER key");
}
}
else if (wc_sphincs_set_level_and_optim(sphincs, 5, FAST_VARIANT)
== 0) {
if ((*algoID == 0) &&
(wc_sphincs_set_level_and_optim(sphincs, 5, FAST_VARIANT)
== 0)) {
tmpIdx = 0;
if (wc_Sphincs_PrivateKeyDecode(key, &tmpIdx, sphincs,
keySz) == 0) {
*algoID = SPHINCS_FAST_LEVEL5k;
@@ -9701,8 +9706,10 @@ int wc_GetKeyOID(byte* key, word32 keySz, const byte** curveOID, word32* oidSz,
WOLFSSL_MSG("Not Sphincs-fast Level 5 DER key");
}
}
else if (wc_sphincs_set_level_and_optim(sphincs, 1, SMALL_VARIANT)
== 0) {
if ((*algoID == 0) &&
(wc_sphincs_set_level_and_optim(sphincs, 1, SMALL_VARIANT)
== 0)) {
tmpIdx = 0;
if (wc_Sphincs_PrivateKeyDecode(key, &tmpIdx, sphincs,
keySz) == 0) {
*algoID = SPHINCS_SMALL_LEVEL1k;
@@ -9711,8 +9718,10 @@ int wc_GetKeyOID(byte* key, word32 keySz, const byte** curveOID, word32* oidSz,
WOLFSSL_MSG("Not Sphincs-small Level 1 DER key");
}
}
else if (wc_sphincs_set_level_and_optim(sphincs, 3, SMALL_VARIANT)
== 0) {
if ((*algoID == 0) &&
(wc_sphincs_set_level_and_optim(sphincs, 3, SMALL_VARIANT)
== 0)) {
tmpIdx = 0;
if (wc_Sphincs_PrivateKeyDecode(key, &tmpIdx, sphincs,
keySz) == 0) {
*algoID = SPHINCS_SMALL_LEVEL3k;
@@ -9721,8 +9730,10 @@ int wc_GetKeyOID(byte* key, word32 keySz, const byte** curveOID, word32* oidSz,
WOLFSSL_MSG("Not Sphincs-small Level 3 DER key");
}
}
else if (wc_sphincs_set_level_and_optim(sphincs, 5, SMALL_VARIANT)
== 0) {
if ((*algoID == 0) &&
(wc_sphincs_set_level_and_optim(sphincs, 5, SMALL_VARIANT)
== 0)) {
tmpIdx = 0;
if (wc_Sphincs_PrivateKeyDecode(key, &tmpIdx, sphincs,
keySz) == 0) {
*algoID = SPHINCS_SMALL_LEVEL5k;
@@ -9731,7 +9742,7 @@ int wc_GetKeyOID(byte* key, word32 keySz, const byte** curveOID, word32* oidSz,
WOLFSSL_MSG("Not Sphincs-small Level 5 DER key");
}
}
else {
if (*algoID == 0) {
WOLFSSL_MSG("GetKeyOID sphincs initialization failed");
}
wc_sphincs_free(sphincs);