diff --git a/examples/server/server.c b/examples/server/server.c index 5b028ac15..77fe29b12 100644 --- a/examples/server/server.c +++ b/examples/server/server.c @@ -2382,10 +2382,13 @@ THREAD_RETURN WOLFSSL_THREAD server_test(void* args) #ifdef HAVE_PQC case 259: + { usePqc = 1; + #if defined(WOLFSSL_TLS13) && defined(HAVE_SUPPORTED_CURVES) onlyKeyShare = 2; + #endif pqcAlg = myoptarg; - break; + } break; #endif #if defined(WOLFSSL_TLS13) && defined(HAVE_SESSION_TICKET) diff --git a/src/tls.c b/src/tls.c index 5569721a8..370f21a91 100644 --- a/src/tls.c +++ b/src/tls.c @@ -8168,48 +8168,33 @@ typedef struct PqcHybridMapping { static const PqcHybridMapping pqc_hybrid_mapping[] = { #ifndef WOLFSSL_NO_ML_KEM - {.hybrid = WOLFSSL_P256_ML_KEM_512, .ecc = WOLFSSL_ECC_SECP256R1, - .pqc = WOLFSSL_ML_KEM_512, .pqc_first = 0}, - {.hybrid = WOLFSSL_P384_ML_KEM_768, .ecc = WOLFSSL_ECC_SECP384R1, - .pqc = WOLFSSL_ML_KEM_768, .pqc_first = 0}, - {.hybrid = WOLFSSL_P256_ML_KEM_768, .ecc = WOLFSSL_ECC_SECP256R1, - .pqc = WOLFSSL_ML_KEM_768, .pqc_first = 0}, - {.hybrid = WOLFSSL_P521_ML_KEM_1024, .ecc = WOLFSSL_ECC_SECP521R1, - .pqc = WOLFSSL_ML_KEM_1024, .pqc_first = 0}, - {.hybrid = WOLFSSL_P384_ML_KEM_1024, .ecc = WOLFSSL_ECC_SECP384R1, - .pqc = WOLFSSL_ML_KEM_1024, .pqc_first = 0}, + {WOLFSSL_P256_ML_KEM_512, WOLFSSL_ECC_SECP256R1, WOLFSSL_ML_KEM_512, 0}, + {WOLFSSL_P384_ML_KEM_768, WOLFSSL_ECC_SECP384R1, WOLFSSL_ML_KEM_768, 0}, + {WOLFSSL_P256_ML_KEM_768, WOLFSSL_ECC_SECP256R1, WOLFSSL_ML_KEM_768, 0}, + {WOLFSSL_P521_ML_KEM_1024, WOLFSSL_ECC_SECP521R1, WOLFSSL_ML_KEM_1024, 0}, + {WOLFSSL_P384_ML_KEM_1024, WOLFSSL_ECC_SECP384R1, WOLFSSL_ML_KEM_1024, 0}, #ifdef HAVE_CURVE25519 - {.hybrid = WOLFSSL_X25519_ML_KEM_512, .ecc = WOLFSSL_ECC_X25519, - .pqc = WOLFSSL_ML_KEM_512, .pqc_first = 1}, - {.hybrid = WOLFSSL_X25519_ML_KEM_768, .ecc = WOLFSSL_ECC_X25519, - .pqc = WOLFSSL_ML_KEM_768, .pqc_first = 1}, + {WOLFSSL_X25519_ML_KEM_512, WOLFSSL_ECC_X25519, WOLFSSL_ML_KEM_512, 1}, + {WOLFSSL_X25519_ML_KEM_768, WOLFSSL_ECC_X25519, WOLFSSL_ML_KEM_768, 1}, #endif #ifdef HAVE_CURVE448 - {.hybrid = WOLFSSL_X448_ML_KEM_768, .ecc = WOLFSSL_ECC_X448, - .pqc = WOLFSSL_ML_KEM_768, .pqc_first = 1}, + {WOLFSSL_X448_ML_KEM_768, WOLFSSL_ECC_X448, WOLFSSL_ML_KEM_768, 1}, #endif #endif /* WOLFSSL_NO_ML_KEM */ #ifdef WOLFSSL_MLKEM_KYBER - {.hybrid = WOLFSSL_P256_KYBER_LEVEL1, .ecc = WOLFSSL_ECC_SECP256R1, - .pqc = WOLFSSL_KYBER_LEVEL1, .pqc_first = 0}, - {.hybrid = WOLFSSL_P384_KYBER_LEVEL3, .ecc = WOLFSSL_ECC_SECP384R1, - .pqc = WOLFSSL_KYBER_LEVEL3, .pqc_first = 0}, - {.hybrid = WOLFSSL_P256_KYBER_LEVEL3, .ecc = WOLFSSL_ECC_SECP256R1, - .pqc = WOLFSSL_KYBER_LEVEL3, .pqc_first = 0}, - {.hybrid = WOLFSSL_P521_KYBER_LEVEL5, .ecc = WOLFSSL_ECC_SECP521R1, - .pqc = WOLFSSL_KYBER_LEVEL5, .pqc_first = 0}, + {WOLFSSL_P256_KYBER_LEVEL1, WOLFSSL_ECC_SECP256R1, WOLFSSL_KYBER_LEVEL1, 0}, + {WOLFSSL_P384_KYBER_LEVEL3, WOLFSSL_ECC_SECP384R1, WOLFSSL_KYBER_LEVEL3, 0}, + {WOLFSSL_P256_KYBER_LEVEL3, WOLFSSL_ECC_SECP256R1, WOLFSSL_KYBER_LEVEL3, 0}, + {WOLFSSL_P521_KYBER_LEVEL5, WOLFSSL_ECC_SECP521R1, WOLFSSL_KYBER_LEVEL5, 0}, #ifdef HAVE_CURVE25519 - {.hybrid = WOLFSSL_X25519_KYBER_LEVEL1, .ecc = WOLFSSL_ECC_X25519, - .pqc = WOLFSSL_KYBER_LEVEL1, .pqc_first = 0}, - {.hybrid = WOLFSSL_X25519_KYBER_LEVEL3, .ecc = WOLFSSL_ECC_X25519, - .pqc = WOLFSSL_KYBER_LEVEL3, .pqc_first = 0}, + {WOLFSSL_X25519_KYBER_LEVEL1, WOLFSSL_ECC_X25519, WOLFSSL_KYBER_LEVEL1, 0}, + {WOLFSSL_X25519_KYBER_LEVEL3, WOLFSSL_ECC_X25519, WOLFSSL_KYBER_LEVEL3, 0}, #endif #ifdef HAVE_CURVE448 - {.hybrid = WOLFSSL_X448_KYBER_LEVEL3, .ecc = WOLFSSL_ECC_X448, - .pqc = WOLFSSL_KYBER_LEVEL3, .pqc_first = 0}, + {WOLFSSL_X448_KYBER_LEVEL3, WOLFSSL_ECC_X448, WOLFSSL_KYBER_LEVEL3, 0}, #endif #endif /* WOLFSSL_MLKEM_KYBER */ - {.hybrid = 0, .ecc = 0, .pqc = 0, .pqc_first = 0} + {0, 0, 0, 0} }; /* Map an ecc-pqc hybrid group into its ecc group and pqc kem group. */ diff --git a/wolfcrypt/src/dilithium.c b/wolfcrypt/src/dilithium.c index 2d623645e..5409df5dc 100644 --- a/wolfcrypt/src/dilithium.c +++ b/wolfcrypt/src/dilithium.c @@ -8950,9 +8950,10 @@ int wc_dilithium_check_key(dilithium_key* key) */ if (ret == 0) { - params = key->params; unsigned int allocSz; + params = key->params; + /* s1-L, s2-K, t0-K, t-K, t1-K */ allocSz = params->s1Sz + 4 * params->s2Sz; #if !defined(WC_DILITHIUM_CACHE_MATRIX_A) diff --git a/wolfcrypt/src/wc_mlkem.c b/wolfcrypt/src/wc_mlkem.c index fce8b5638..bfba1fbb1 100644 --- a/wolfcrypt/src/wc_mlkem.c +++ b/wolfcrypt/src/wc_mlkem.c @@ -821,36 +821,39 @@ static int mlkemkey_encapsulate(MlKemKey* key, const byte* m, byte* r, byte* c) } if (ret == 0) { #endif - byte* c1 = c; - byte* c2 = c + compVecSz; + { + byte* c1 = c; + byte* c2 = c + compVecSz; + + #if defined(WOLFSSL_KYBER512) || defined(WOLFSSL_WC_ML_KEM_512) + if (k == WC_ML_KEM_512_K) { + /* Step 22: c_1 <- ByteEncode_d_u(Compress_d_u(u)) */ + mlkem_vec_compress_10(c1, u, k); + /* Step 23: c_2 <- ByteEncode_d_v(Compress_d_v(v)) */ + mlkem_compress_4(c2, v); + /* Step 24: return c <- (c_1||c_2) */ + } + #endif + #if defined(WOLFSSL_KYBER768) || defined(WOLFSSL_WC_ML_KEM_768) + if (k == WC_ML_KEM_768_K) { + /* Step 22: c_1 <- ByteEncode_d_u(Compress_d_u(u)) */ + mlkem_vec_compress_10(c1, u, k); + /* Step 23: c_2 <- ByteEncode_d_v(Compress_d_v(v)) */ + mlkem_compress_4(c2, v); + /* Step 24: return c <- (c_1||c_2) */ + } + #endif + #if defined(WOLFSSL_KYBER1024) || defined(WOLFSSL_WC_ML_KEM_1024) + if (k == WC_ML_KEM_1024_K) { + /* Step 22: c_1 <- ByteEncode_d_u(Compress_d_u(u)) */ + mlkem_vec_compress_11(c1, u); + /* Step 23: c_2 <- ByteEncode_d_v(Compress_d_v(v)) */ + mlkem_compress_5(c2, v); + /* Step 24: return c <- (c_1||c_2) */ + } + #endif - #if defined(WOLFSSL_KYBER512) || defined(WOLFSSL_WC_ML_KEM_512) - if (k == WC_ML_KEM_512_K) { - /* Step 22: c_1 <- ByteEncode_d_u(Compress_d_u(u)) */ - mlkem_vec_compress_10(c1, u, k); - /* Step 23: c_2 <- ByteEncode_d_v(Compress_d_v(v)) */ - mlkem_compress_4(c2, v); - /* Step 24: return c <- (c_1||c_2) */ } - #endif - #if defined(WOLFSSL_KYBER768) || defined(WOLFSSL_WC_ML_KEM_768) - if (k == WC_ML_KEM_768_K) { - /* Step 22: c_1 <- ByteEncode_d_u(Compress_d_u(u)) */ - mlkem_vec_compress_10(c1, u, k); - /* Step 23: c_2 <- ByteEncode_d_v(Compress_d_v(v)) */ - mlkem_compress_4(c2, v); - /* Step 24: return c <- (c_1||c_2) */ - } - #endif - #if defined(WOLFSSL_KYBER1024) || defined(WOLFSSL_WC_ML_KEM_1024) - if (k == WC_ML_KEM_1024_K) { - /* Step 22: c_1 <- ByteEncode_d_u(Compress_d_u(u)) */ - mlkem_vec_compress_11(c1, u); - /* Step 23: c_2 <- ByteEncode_d_v(Compress_d_v(v)) */ - mlkem_compress_5(c2, v); - /* Step 24: return c <- (c_1||c_2) */ - } - #endif } #ifndef WOLFSSL_NO_MALLOC