mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-07-30 18:57:27 +02:00
Merge pull request #2743 from JacobBarthelmeh/Compatibility-Layer
adjust set1 curves list function for TLS extension sent
This commit is contained in:
157
src/internal.c
157
src/internal.c
@ -23052,6 +23052,88 @@ static int DoSessionTicket(WOLFSSL* ssl, const byte* input, word32* inOutIdx,
|
|||||||
|
|
||||||
#endif /* NO_WOLFSSL_CLIENT */
|
#endif /* NO_WOLFSSL_CLIENT */
|
||||||
|
|
||||||
|
#ifdef HAVE_ECC
|
||||||
|
/* returns the WOLFSSL_* version of the curve from the OID sum */
|
||||||
|
word16 GetCurveByOID(int oidSum) {
|
||||||
|
switch(oidSum) {
|
||||||
|
#if defined(HAVE_ECC160) || defined(HAVE_ALL_CURVES)
|
||||||
|
#ifndef NO_ECC_SECP
|
||||||
|
case ECC_SECP160R1_OID:
|
||||||
|
return WOLFSSL_ECC_SECP160R1;
|
||||||
|
#endif /* !NO_ECC_SECP */
|
||||||
|
#ifdef HAVE_ECC_SECPR2
|
||||||
|
case ECC_SECP160R2_OID:
|
||||||
|
return WOLFSSL_ECC_SECP160R2;
|
||||||
|
#endif /* HAVE_ECC_SECPR2 */
|
||||||
|
#ifdef HAVE_ECC_KOBLITZ
|
||||||
|
case ECC_SECP160K1_OID:
|
||||||
|
return WOLFSSL_ECC_SECP160K1;
|
||||||
|
#endif /* HAVE_ECC_KOBLITZ */
|
||||||
|
#endif
|
||||||
|
#if defined(HAVE_ECC192) || defined(HAVE_ALL_CURVES)
|
||||||
|
#ifndef NO_ECC_SECP
|
||||||
|
case ECC_SECP192R1_OID:
|
||||||
|
return WOLFSSL_ECC_SECP192R1;
|
||||||
|
#endif /* !NO_ECC_SECP */
|
||||||
|
#ifdef HAVE_ECC_KOBLITZ
|
||||||
|
case ECC_SECP192K1_OID:
|
||||||
|
return WOLFSSL_ECC_SECP192K1;
|
||||||
|
#endif /* HAVE_ECC_KOBLITZ */
|
||||||
|
#endif
|
||||||
|
#if defined(HAVE_ECC224) || defined(HAVE_ALL_CURVES)
|
||||||
|
#ifndef NO_ECC_SECP
|
||||||
|
case ECC_SECP224R1_OID:
|
||||||
|
return WOLFSSL_ECC_SECP224R1;
|
||||||
|
#endif /* !NO_ECC_SECP */
|
||||||
|
#ifdef HAVE_ECC_KOBLITZ
|
||||||
|
case ECC_SECP224K1_OID:
|
||||||
|
return WOLFSSL_ECC_SECP224K1;
|
||||||
|
#endif /* HAVE_ECC_KOBLITZ */
|
||||||
|
#endif
|
||||||
|
#if !defined(NO_ECC256) || defined(HAVE_ALL_CURVES)
|
||||||
|
#ifndef NO_ECC_SECP
|
||||||
|
case ECC_SECP256R1_OID:
|
||||||
|
return WOLFSSL_ECC_SECP256R1;
|
||||||
|
#endif /* !NO_ECC_SECP */
|
||||||
|
#ifdef HAVE_ECC_KOBLITZ
|
||||||
|
case ECC_SECP256K1_OID:
|
||||||
|
return WOLFSSL_ECC_SECP256K1;
|
||||||
|
#endif /* HAVE_ECC_KOBLITZ */
|
||||||
|
#ifdef HAVE_ECC_BRAINPOOL
|
||||||
|
case ECC_BRAINPOOLP256R1_OID:
|
||||||
|
return WOLFSSL_ECC_BRAINPOOLP256R1;
|
||||||
|
#endif /* HAVE_ECC_BRAINPOOL */
|
||||||
|
#endif
|
||||||
|
#if defined(HAVE_ECC384) || defined(HAVE_ALL_CURVES)
|
||||||
|
#ifndef NO_ECC_SECP
|
||||||
|
case ECC_SECP384R1_OID:
|
||||||
|
return WOLFSSL_ECC_SECP384R1;
|
||||||
|
#endif /* !NO_ECC_SECP */
|
||||||
|
#ifdef HAVE_ECC_BRAINPOOL
|
||||||
|
case ECC_BRAINPOOLP384R1_OID:
|
||||||
|
return WOLFSSL_ECC_BRAINPOOLP384R1;
|
||||||
|
#endif /* HAVE_ECC_BRAINPOOL */
|
||||||
|
#endif
|
||||||
|
#if defined(HAVE_ECC512) || defined(HAVE_ALL_CURVES)
|
||||||
|
#ifdef HAVE_ECC_BRAINPOOL
|
||||||
|
case ECC_BRAINPOOLP512R1_OID:
|
||||||
|
return WOLFSSL_ECC_BRAINPOOLP512R1;
|
||||||
|
#endif /* HAVE_ECC_BRAINPOOL */
|
||||||
|
#endif
|
||||||
|
#if defined(HAVE_ECC521) || defined(HAVE_ALL_CURVES)
|
||||||
|
#ifndef NO_ECC_SECP
|
||||||
|
case ECC_SECP521R1_OID:
|
||||||
|
return WOLFSSL_ECC_SECP521R1;
|
||||||
|
#endif /* !NO_ECC_SECP */
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
WOLFSSL_MSG("Curve OID not compiled in or implemented");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* HAVE_ECC */
|
||||||
|
|
||||||
|
|
||||||
#ifndef NO_WOLFSSL_SERVER
|
#ifndef NO_WOLFSSL_SERVER
|
||||||
|
|
||||||
#ifndef WOLFSSL_NO_TLS12
|
#ifndef WOLFSSL_NO_TLS12
|
||||||
@ -23296,80 +23378,7 @@ static int DoSessionTicket(WOLFSSL* ssl, const byte* input, word32* inOutIdx,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(key->dp->oidSum) {
|
return (byte)GetCurveByOID(key->dp->oidSum);
|
||||||
#if defined(HAVE_ECC160) || defined(HAVE_ALL_CURVES)
|
|
||||||
#ifndef NO_ECC_SECP
|
|
||||||
case ECC_SECP160R1_OID:
|
|
||||||
return WOLFSSL_ECC_SECP160R1;
|
|
||||||
#endif /* !NO_ECC_SECP */
|
|
||||||
#ifdef HAVE_ECC_SECPR2
|
|
||||||
case ECC_SECP160R2_OID:
|
|
||||||
return WOLFSSL_ECC_SECP160R2;
|
|
||||||
#endif /* HAVE_ECC_SECPR2 */
|
|
||||||
#ifdef HAVE_ECC_KOBLITZ
|
|
||||||
case ECC_SECP160K1_OID:
|
|
||||||
return WOLFSSL_ECC_SECP160K1;
|
|
||||||
#endif /* HAVE_ECC_KOBLITZ */
|
|
||||||
#endif
|
|
||||||
#if defined(HAVE_ECC192) || defined(HAVE_ALL_CURVES)
|
|
||||||
#ifndef NO_ECC_SECP
|
|
||||||
case ECC_SECP192R1_OID:
|
|
||||||
return WOLFSSL_ECC_SECP192R1;
|
|
||||||
#endif /* !NO_ECC_SECP */
|
|
||||||
#ifdef HAVE_ECC_KOBLITZ
|
|
||||||
case ECC_SECP192K1_OID:
|
|
||||||
return WOLFSSL_ECC_SECP192K1;
|
|
||||||
#endif /* HAVE_ECC_KOBLITZ */
|
|
||||||
#endif
|
|
||||||
#if defined(HAVE_ECC224) || defined(HAVE_ALL_CURVES)
|
|
||||||
#ifndef NO_ECC_SECP
|
|
||||||
case ECC_SECP224R1_OID:
|
|
||||||
return WOLFSSL_ECC_SECP224R1;
|
|
||||||
#endif /* !NO_ECC_SECP */
|
|
||||||
#ifdef HAVE_ECC_KOBLITZ
|
|
||||||
case ECC_SECP224K1_OID:
|
|
||||||
return WOLFSSL_ECC_SECP224K1;
|
|
||||||
#endif /* HAVE_ECC_KOBLITZ */
|
|
||||||
#endif
|
|
||||||
#if !defined(NO_ECC256) || defined(HAVE_ALL_CURVES)
|
|
||||||
#ifndef NO_ECC_SECP
|
|
||||||
case ECC_SECP256R1_OID:
|
|
||||||
return WOLFSSL_ECC_SECP256R1;
|
|
||||||
#endif /* !NO_ECC_SECP */
|
|
||||||
#ifdef HAVE_ECC_KOBLITZ
|
|
||||||
case ECC_SECP256K1_OID:
|
|
||||||
return WOLFSSL_ECC_SECP256K1;
|
|
||||||
#endif /* HAVE_ECC_KOBLITZ */
|
|
||||||
#ifdef HAVE_ECC_BRAINPOOL
|
|
||||||
case ECC_BRAINPOOLP256R1_OID:
|
|
||||||
return WOLFSSL_ECC_BRAINPOOLP256R1;
|
|
||||||
#endif /* HAVE_ECC_BRAINPOOL */
|
|
||||||
#endif
|
|
||||||
#if defined(HAVE_ECC384) || defined(HAVE_ALL_CURVES)
|
|
||||||
#ifndef NO_ECC_SECP
|
|
||||||
case ECC_SECP384R1_OID:
|
|
||||||
return WOLFSSL_ECC_SECP384R1;
|
|
||||||
#endif /* !NO_ECC_SECP */
|
|
||||||
#ifdef HAVE_ECC_BRAINPOOL
|
|
||||||
case ECC_BRAINPOOLP384R1_OID:
|
|
||||||
return WOLFSSL_ECC_BRAINPOOLP384R1;
|
|
||||||
#endif /* HAVE_ECC_BRAINPOOL */
|
|
||||||
#endif
|
|
||||||
#if defined(HAVE_ECC512) || defined(HAVE_ALL_CURVES)
|
|
||||||
#ifdef HAVE_ECC_BRAINPOOL
|
|
||||||
case ECC_BRAINPOOLP512R1_OID:
|
|
||||||
return WOLFSSL_ECC_BRAINPOOLP512R1;
|
|
||||||
#endif /* HAVE_ECC_BRAINPOOL */
|
|
||||||
#endif
|
|
||||||
#if defined(HAVE_ECC521) || defined(HAVE_ALL_CURVES)
|
|
||||||
#ifndef NO_ECC_SECP
|
|
||||||
case ECC_SECP521R1_OID:
|
|
||||||
return WOLFSSL_ECC_SECP521R1;
|
|
||||||
#endif /* !NO_ECC_SECP */
|
|
||||||
#endif
|
|
||||||
default:
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* HAVE_ECC || HAVE_CURVE25519 */
|
#endif /* HAVE_ECC || HAVE_CURVE25519 */
|
||||||
|
46
src/ssl.c
46
src/ssl.c
@ -44403,7 +44403,7 @@ void wolfSSL_get0_next_proto_negotiated(const WOLFSSL *s, const unsigned char **
|
|||||||
int wolfSSL_CTX_set1_curves_list(WOLFSSL_CTX* ctx, const char* names)
|
int wolfSSL_CTX_set1_curves_list(WOLFSSL_CTX* ctx, const char* names)
|
||||||
{
|
{
|
||||||
int idx, start = 0, len;
|
int idx, start = 0, len;
|
||||||
int curve;
|
word16 curve;
|
||||||
char name[MAX_CURVE_NAME_SZ];
|
char name[MAX_CURVE_NAME_SZ];
|
||||||
|
|
||||||
/* Disable all curves so that only the ones the user wants are enabled. */
|
/* Disable all curves so that only the ones the user wants are enabled. */
|
||||||
@ -44432,13 +44432,51 @@ int wolfSSL_CTX_set1_curves_list(WOLFSSL_CTX* ctx, const char* names)
|
|||||||
(XSTRNCMP(name, "P-521", len) == 0)) {
|
(XSTRNCMP(name, "P-521", len) == 0)) {
|
||||||
curve = WOLFSSL_ECC_SECP521R1;
|
curve = WOLFSSL_ECC_SECP521R1;
|
||||||
}
|
}
|
||||||
else if (XSTRNCMP(name, "X25519", len) == 0)
|
else if (XSTRNCMP(name, "X25519", len) == 0) {
|
||||||
curve = WOLFSSL_ECC_X25519;
|
curve = WOLFSSL_ECC_X25519;
|
||||||
else if ((curve = wc_ecc_get_curve_id_from_name(name)) < 0)
|
}
|
||||||
|
else {
|
||||||
|
#if !defined(HAVE_FIPS) && !defined(HAVE_SELFTEST)
|
||||||
|
int ret;
|
||||||
|
const ecc_set_type *eccSet;
|
||||||
|
|
||||||
|
ret = wc_ecc_get_curve_idx_from_name(name);
|
||||||
|
if (ret < 0) {
|
||||||
|
WOLFSSL_MSG("Could not find name in set");
|
||||||
|
return WOLFSSL_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
eccSet = wc_ecc_get_curve_params(ret);
|
||||||
|
if (eccSet == NULL) {
|
||||||
|
WOLFSSL_MSG("NULL set returned");
|
||||||
|
return WOLFSSL_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
curve = GetCurveByOID(eccSet->oidSum);
|
||||||
|
#else
|
||||||
|
WOLFSSL_MSG("API not present to search farther using name");
|
||||||
return WOLFSSL_FAILURE;
|
return WOLFSSL_FAILURE;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
if (curve > (sizeof(word32) * WOLFSSL_BIT_SIZE)) {
|
||||||
|
/* shift left more than size of ctx->disabledCurves causes static
|
||||||
|
* analysis report */
|
||||||
|
WOLFSSL_MSG("curve value is too large for upcoming shift");
|
||||||
|
return WOLFSSL_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef NO_WOLFSSL_CLIENT
|
||||||
|
/* set the supported curve so client TLS extension contains only the
|
||||||
|
* desired curves */
|
||||||
|
if (wolfSSL_CTX_UseSupportedCurve(ctx, curve) != WOLFSSL_SUCCESS) {
|
||||||
|
WOLFSSL_MSG("Unable to set supported curve");
|
||||||
|
return WOLFSSL_FAILURE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Switch the bit to off and therefore is enabled. */
|
/* Switch the bit to off and therefore is enabled. */
|
||||||
ctx->disabledCurves &= ~(1 << curve);
|
ctx->disabledCurves &= ~(1U << curve);
|
||||||
start = idx + 1;
|
start = idx + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4466,6 +4466,7 @@ WOLFSSL_LOCAL int SetKeysSide(WOLFSSL*, enum encrypt_side);
|
|||||||
|
|
||||||
#ifdef HAVE_ECC
|
#ifdef HAVE_ECC
|
||||||
WOLFSSL_LOCAL int EccMakeKey(WOLFSSL* ssl, ecc_key* key, ecc_key* peer);
|
WOLFSSL_LOCAL int EccMakeKey(WOLFSSL* ssl, ecc_key* key, ecc_key* peer);
|
||||||
|
WOLFSSL_LOCAL word16 GetCurveByOID(int oidSum);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
WOLFSSL_LOCAL int InitHandshakeHashes(WOLFSSL* ssl);
|
WOLFSSL_LOCAL int InitHandshakeHashes(WOLFSSL* ssl);
|
||||||
|
@ -489,8 +489,8 @@ static WC_INLINE int mygetopt(int argc, char** argv, const char* optstring)
|
|||||||
if (myoptind == 0)
|
if (myoptind == 0)
|
||||||
myoptind++;
|
myoptind++;
|
||||||
|
|
||||||
if (myoptind >= argc || argv[myoptind][0] != '-' ||
|
if (myoptind >= argc || argv[myoptind] == NULL ||
|
||||||
argv[myoptind][1] == '\0') {
|
argv[myoptind][0] != '-' || argv[myoptind][1] == '\0') {
|
||||||
myoptarg = NULL;
|
myoptarg = NULL;
|
||||||
if (myoptind < argc)
|
if (myoptind < argc)
|
||||||
myoptarg = argv[myoptind];
|
myoptarg = argv[myoptind];
|
||||||
|
Reference in New Issue
Block a user