@@ -24612,111 +24612,159 @@ int wolfSSL_set1_sigalgs_list(WOLFSSL* ssl, const char* list)
2461224612 return SetSuitesHashSigAlgo(ssl->suites, list);
2461324613}
2461424614
24615- struct WOLFSSL_HashSigInfo {
24616- int hashAlgo;
24617- int sigAlgo;
24618- int nid;
24619- } wolfssl_hash_sig_info[] =
24615+ static int HashToNid(byte hashAlgo, int* nid)
2462024616{
24621- #ifndef NO_RSA
24622- #ifndef NO_SHA256
24623- { sha256_mac, rsa_sa_algo, CTC_SHA256wRSA },
24624- #endif
24625- #ifdef WOLFSSL_SHA384
24626- { sha384_mac, rsa_sa_algo, CTC_SHA384wRSA },
24627- #endif
24628- #ifdef WOLFSSL_SHA512
24629- { sha512_mac, rsa_sa_algo, CTC_SHA512wRSA },
24630- #endif
24631- #ifdef WOLFSSL_SHA224
24632- { sha224_mac, rsa_sa_algo, CTC_SHA224wRSA },
24633- #endif
24634- #ifndef NO_SHA
24635- { sha_mac, rsa_sa_algo, CTC_SHAwRSA },
24636- #endif
24637- #ifdef WC_RSA_PSS
24638- #ifndef NO_SHA256
24639- { sha256_mac, rsa_pss_sa_algo, CTC_SHA256wRSA },
24640- #endif
24641- #ifdef WOLFSSL_SHA384
24642- { sha384_mac, rsa_pss_sa_algo, CTC_SHA384wRSA },
24643- #endif
24644- #ifdef WOLFSSL_SHA512
24645- { sha512_mac, rsa_pss_sa_algo, CTC_SHA512wRSA },
24646- #endif
24647- #ifdef WOLFSSL_SHA224
24648- { sha224_mac, rsa_pss_sa_algo, CTC_SHA224wRSA },
24649- #endif
24650- #endif
24651- #endif
24652- #ifdef HAVE_ECC
24653- #ifndef NO_SHA256
24654- { sha256_mac, ecc_dsa_sa_algo, CTC_SHA256wECDSA },
24655- #endif
24656- #ifdef WOLFSSL_SHA384
24657- { sha384_mac, ecc_dsa_sa_algo, CTC_SHA384wECDSA },
24658- #endif
24659- #ifdef WOLFSSL_SHA512
24660- { sha512_mac, ecc_dsa_sa_algo, CTC_SHA512wECDSA },
24661- #endif
24662- #ifdef WOLFSSL_SHA224
24663- { sha224_mac, ecc_dsa_sa_algo, CTC_SHA224wECDSA },
24664- #endif
24665- #ifndef NO_SHA
24666- { sha_mac, ecc_dsa_sa_algo, CTC_SHAwECDSA },
24667- #endif
24668- #endif
24669- #if defined(WOLFSSL_SM2) && defined(WOLFSSL_SM3)
24670- { sm3_mac, sm2_sa_algo, CTC_SM3wSM2 },
24671- #endif
24617+ int ret = WOLFSSL_SUCCESS;
24618+
24619+ /* Cast for compiler to check everything is implemented */
24620+ switch ((enum wc_MACAlgorithm)hashAlgo) {
24621+ case no_mac:
24622+ case rmd_mac:
24623+ *nid = NID_undef;
24624+ break;
24625+ case md5_mac:
24626+ *nid = NID_md5;
24627+ break;
24628+ case sha_mac:
24629+ *nid = NID_sha1;
24630+ break;
24631+ case sha224_mac:
24632+ *nid = NID_sha224;
24633+ break;
24634+ case sha256_mac:
24635+ *nid = NID_sha256;
24636+ break;
24637+ case sha384_mac:
24638+ *nid = NID_sha384;
24639+ break;
24640+ case sha512_mac:
24641+ *nid = NID_sha512;
24642+ break;
24643+ case blake2b_mac:
24644+ *nid = NID_blake2b512;
24645+ break;
24646+ case sm3_mac:
24647+ *nid = NID_sm3;
24648+ break;
24649+ default:
24650+ ret = WOLFSSL_FAILURE;
24651+ break;
24652+ }
24653+
24654+ return ret;
24655+ }
24656+
24657+ static int SaToNid(byte sa, int* nid)
24658+ {
24659+ int ret = WOLFSSL_SUCCESS;
24660+ /* Cast for compiler to check everything is implemented */
24661+ switch ((enum SignatureAlgorithm)sa) {
24662+ case anonymous_sa_algo:
24663+ *nid = NID_undef;
24664+ break;
24665+ case rsa_sa_algo:
24666+ *nid = NID_rsaEncryption;
24667+ break;
24668+ case dsa_sa_algo:
24669+ *nid = NID_dsa;
24670+ break;
24671+ case ecc_dsa_sa_algo:
24672+ *nid = NID_X9_62_id_ecPublicKey;
24673+ break;
24674+ case rsa_pss_sa_algo:
24675+ *nid = NID_rsassaPss;
24676+ break;
24677+ case ed25519_sa_algo:
2467224678#ifdef HAVE_ED25519
24673- { no_mac, ed25519_sa_algo, CTC_ED25519 },
24679+ *nid = NID_ED25519;
24680+ #else
24681+ ret = WOLFSSL_FAILURE;
2467424682#endif
24683+ break;
24684+ case rsa_pss_pss_algo:
24685+ *nid = NID_rsassaPss;
24686+ break;
24687+ case ed448_sa_algo:
2467524688#ifdef HAVE_ED448
24676- { no_mac, ed448_sa_algo, CTC_ED448 },
24677- #endif
24678- #ifdef HAVE_PQC
24679- #ifdef HAVE_FALCON
24680- { no_mac, falcon_level1_sa_algo, CTC_FALCON_LEVEL1 },
24681- { no_mac, falcon_level5_sa_algo, CTC_FALCON_LEVEL5 },
24682- #endif /* HAVE_FALCON */
24683- #ifdef HAVE_DILITHIUM
24684- { no_mac, dilithium_level2_sa_algo, CTC_DILITHIUM_LEVEL2 },
24685- { no_mac, dilithium_level3_sa_algo, CTC_DILITHIUM_LEVEL3 },
24686- { no_mac, dilithium_level5_sa_algo, CTC_DILITHIUM_LEVEL5 },
24687- #endif /* HAVE_DILITHIUM */
24688- #endif /* HAVE_PQC */
24689- #ifndef NO_DSA
24690- #ifndef NO_SHA
24691- { sha_mac, dsa_sa_algo, CTC_SHAwDSA },
24692- #endif
24689+ *nid = NID_ED448;
24690+ #else
24691+ ret = WOLFSSL_FAILURE;
2469324692#endif
24694- };
24695- #define WOLFSSL_HASH_SIG_INFO_SZ \
24696- (int)(sizeof(wolfssl_hash_sig_info)/sizeof(*wolfssl_hash_sig_info))
24693+ break;
24694+ case falcon_level1_sa_algo:
24695+ *nid = CTC_FALCON_LEVEL1;
24696+ break;
24697+ case falcon_level5_sa_algo:
24698+ *nid = CTC_FALCON_LEVEL5;
24699+ break;
24700+ case dilithium_level2_sa_algo:
24701+ *nid = CTC_DILITHIUM_LEVEL2;
24702+ break;
24703+ case dilithium_level3_sa_algo:
24704+ *nid = CTC_DILITHIUM_LEVEL3;
24705+ break;
24706+ case dilithium_level5_sa_algo:
24707+ *nid = CTC_DILITHIUM_LEVEL5;
24708+ break;
24709+ case sm2_sa_algo:
24710+ *nid = NID_sm2;
24711+ break;
24712+ case invalid_sa_algo:
24713+ default:
24714+ ret = WOLFSSL_FAILURE;
24715+ break;
24716+ }
24717+ return ret;
24718+ }
2469724719
24720+ /* This API returns the hash selected. */
2469824721int wolfSSL_get_signature_nid(WOLFSSL *ssl, int* nid)
2469924722{
24700- int i;
24701- int ret = WOLFSSL_FAILURE;
24702-
2470324723 WOLFSSL_MSG("wolfSSL_get_signature_nid");
2470424724
24705- if (ssl == NULL) {
24725+ if (ssl == NULL || nid == NULL ) {
2470624726 WOLFSSL_MSG("Bad function arguments");
2470724727 return WOLFSSL_FAILURE;
2470824728 }
2470924729
24710- for (i = 0; i < WOLFSSL_HASH_SIG_INFO_SZ; i++) {
24711- if (ssl->options.hashAlgo == wolfssl_hash_sig_info[i].hashAlgo &&
24712- ssl->options.sigAlgo == wolfssl_hash_sig_info[i].sigAlgo) {
24713- *nid = wolfssl_hash_sig_info[i].nid;
24714- ret = WOLFSSL_SUCCESS;
24715- break;
24716- }
24730+ return HashToNid(ssl->options.hashAlgo, nid);
24731+ }
24732+
24733+ /* This API returns the signature selected. */
24734+ int wolfSSL_get_signature_type_nid(const WOLFSSL* ssl, int* nid)
24735+ {
24736+ WOLFSSL_MSG("wolfSSL_get_signature_type_nid");
24737+
24738+ if (ssl == NULL || nid == NULL) {
24739+ WOLFSSL_MSG("Bad function arguments");
24740+ return WOLFSSL_FAILURE;
2471724741 }
2471824742
24719- return ret;
24743+ return SaToNid(ssl->options.sigAlgo, nid);
24744+ }
24745+
24746+ int wolfSSL_get_peer_signature_nid(WOLFSSL* ssl, int* nid)
24747+ {
24748+ WOLFSSL_MSG("wolfSSL_get_peer_signature_nid");
24749+
24750+ if (ssl == NULL || nid == NULL) {
24751+ WOLFSSL_MSG("Bad function arguments");
24752+ return WOLFSSL_FAILURE;
24753+ }
24754+
24755+ return HashToNid(ssl->options.peerHashAlgo, nid);
24756+ }
24757+
24758+ int wolfSSL_get_peer_signature_type_nid(const WOLFSSL* ssl, int* nid)
24759+ {
24760+ WOLFSSL_MSG("wolfSSL_get_peer_signature_type_nid");
24761+
24762+ if (ssl == NULL || nid == NULL) {
24763+ WOLFSSL_MSG("Bad function arguments");
24764+ return WOLFSSL_FAILURE;
24765+ }
24766+
24767+ return SaToNid(ssl->options.peerSigAlgo, nid);
2472024768}
2472124769
2472224770#ifdef HAVE_ECC
0 commit comments