Skip to content

Commit 757fcbc

Browse files
Merge pull request #7236 from julek-wolfssl/get-sig-nid
Implement SSL_get_peer_signature_nid and SSL_get_peer_signature_type_nid
2 parents 565a4e6 + 44de6df commit 757fcbc

9 files changed

Lines changed: 397 additions & 171 deletions

File tree

.github/workflows/openvpn.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ jobs:
3030
fail-fast: false
3131
matrix:
3232
# List of refs to test
33-
ref: [ release/2.6, v2.6.0 ] # 'master' is currently broken
33+
ref: [ release/2.6, v2.6.0, master ]
3434
name: ${{ matrix.ref }}
3535
runs-on: ubuntu-latest
3636
# This should be a safe limit for the tests to run.

src/internal.c

Lines changed: 49 additions & 53 deletions
Large diffs are not rendered by default.

src/ssl.c

Lines changed: 137 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -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. */
2469824721
int 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

Comments
 (0)