mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2026-07-09 16:20:52 +02:00
08f2f9376a
Implement wolfSSL_EVP_PKEY_set1_encoded_public_key and
wolfSSL_EVP_PKEY_get1_encoded_public_key in the OpenSSL compatibility
layer. Both the new OpenSSL 3.0 names and the deprecated
EVP_PKEY_{set1,get1}_tls_encodedpoint names map to these single
implementations.
Supported key types:
- EC: uncompressed octet point (0x04 || X || Y), reusing
i2o_ECPublicKey / o2i_ECPublicKey. set1 also syncs the internal
wolfCrypt key (SetECKeyInternal) so the key is usable by
EVP_PKEY_derive, and refreshes the cached DER.
- X25519 / X448: raw little-endian public key (RFC 7748).
set1 is failure-atomic for every key type: the replacement key is built
in a temporary and the existing key is only freed once the import
succeeds, so a failed set1 leaves the original EVP_PKEY intact. get1
NULLs out *ppub on entry (after validating ppub) so callers never use or
free a stale pointer when the function returns 0.
Both functions are compiled under OPENSSL_EXTRA || OPENSSL_EXTRA_X509_SMALL
(matching the OpenSSL-compat macros and the EVP_PKEY struct members they
use) rather than requiring a specific key type, avoiding undefined
references at link time in builds without HAVE_ECC / HAVE_CURVE25519 /
HAVE_CURVE448. Per-key-type #ifdefs gate which cases are supported; the EC
case additionally requires OPENSSL_EXTRA for its i2o/o2i helpers.
Adds test_wolfSSL_EVP_PKEY_encoded_public_key covering NULL handling, EC
encode/decode round-trip and ECDH agreement, X25519/X448 round-trips,
deprecated-name parity, and that a wrong-length set1 leaves the existing
X25519/X448 key intact and usable.
122 lines
6.5 KiB
C
122 lines
6.5 KiB
C
/* test_evp_pkey.h
|
|
*
|
|
* Copyright (C) 2006-2026 wolfSSL Inc.
|
|
*
|
|
* This file is part of wolfSSL.
|
|
*
|
|
* wolfSSL is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* wolfSSL is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
|
|
*/
|
|
|
|
#ifndef WOLFCRYPT_TEST_EVP_PKEY_H
|
|
#define WOLFCRYPT_TEST_EVP_PKEY_H
|
|
|
|
#include <tests/api/api_decl.h>
|
|
|
|
int test_wolfSSL_EVP_PKEY_CTX_new_id(void);
|
|
int test_wolfSSL_EVP_PKEY_CTX_set_rsa_keygen_bits(void);
|
|
int test_wolfSSL_QT_EVP_PKEY_CTX_free(void);
|
|
int test_wolfSSL_EVP_PKEY_up_ref(void);
|
|
int test_wolfSSL_EVP_PKEY_base_id(void);
|
|
int test_wolfSSL_EVP_PKEY_id(void);
|
|
int test_wolfSSL_EVP_MD_pkey_type(void);
|
|
int test_wolfSSL_EVP_MD_hmac_signing(void);
|
|
int test_wolfSSL_EVP_DigestVerify_HMAC_zero_len_forgery(void);
|
|
int test_wolfSSL_EVP_PKEY_new_mac_key(void);
|
|
int test_wolfSSL_EVP_PKEY_hkdf(void);
|
|
int test_wolfSSL_EVP_PBE_scrypt(void);
|
|
int test_EVP_PKEY_cmp(void);
|
|
int test_wolfSSL_EVP_PKEY_set1_get1_DSA(void);
|
|
int test_wolfSSL_EVP_PKEY_set1_get1_EC_KEY (void);
|
|
int test_wolfSSL_EVP_PKEY_get0_EC_KEY(void);
|
|
int test_wolfSSL_EVP_PKEY_set1_get1_DH (void);
|
|
int test_wolfSSL_EVP_PKEY_assign(void);
|
|
int test_wolfSSL_EVP_PKEY_assign_DH(void);
|
|
int test_EVP_PKEY_rsa(void);
|
|
int test_EVP_PKEY_ec(void);
|
|
int test_wolfSSL_EVP_PKEY_missing_parameters(void);
|
|
int test_wolfSSL_EVP_PKEY_copy_parameters(void);
|
|
int test_wolfSSL_EVP_PKEY_paramgen(void);
|
|
int test_wolfSSL_EVP_PKEY_param_check(void);
|
|
int test_wolfSSL_EVP_PKEY_keygen_init(void);
|
|
int test_wolfSSL_EVP_PKEY_keygen(void);
|
|
int test_wolfSSL_EVP_SignInit_ex(void);
|
|
int test_wolfSSL_EVP_PKEY_sign_verify_rsa(void);
|
|
int test_wolfSSL_EVP_PKEY_sign_verify_dsa(void);
|
|
int test_wolfSSL_EVP_PKEY_sign_verify_ec(void);
|
|
int test_wolfSSL_EVP_MD_rsa_signing(void);
|
|
int test_wc_RsaPSS_DigitalSignVerify(void);
|
|
int test_wolfSSL_EVP_MD_ecc_signing(void);
|
|
int test_wolfSSL_EVP_DigestSign(void);
|
|
int test_wolfSSL_EVP_DigestSign_ecc(void);
|
|
int test_wolfSSL_EVP_PKEY_encrypt(void);
|
|
int test_wolfSSL_EVP_PKEY_derive(void);
|
|
int test_wolfSSL_EVP_PKEY_print_public(void);
|
|
int test_wolfSSL_EVP_PKEY_ed25519(void);
|
|
int test_wolfSSL_CTX_use_PrivateKey_ed25519(void);
|
|
int test_wolfSSL_EVP_PKEY_ed448(void);
|
|
int test_wolfSSL_EVP_PKEY_x25519(void);
|
|
int test_wolfSSL_EVP_PKEY_x448(void);
|
|
int test_wolfSSL_EVP_PKEY_encoded_public_key(void);
|
|
|
|
#define TEST_EVP_PKEY_DECLS \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_PKEY_CTX_new_id), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_PKEY_CTX_set_rsa_keygen_bits),\
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_QT_EVP_PKEY_CTX_free), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_PKEY_up_ref), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_PKEY_base_id), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_PKEY_id), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_MD_pkey_type), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_MD_hmac_signing), \
|
|
TEST_DECL_GROUP("evp_pkey", \
|
|
test_wolfSSL_EVP_DigestVerify_HMAC_zero_len_forgery), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_PKEY_new_mac_key), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_PKEY_hkdf), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_PBE_scrypt), \
|
|
TEST_DECL_GROUP("evp_pkey", test_EVP_PKEY_cmp), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_PKEY_set1_get1_DSA), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_PKEY_set1_get1_EC_KEY), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_PKEY_get0_EC_KEY), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_PKEY_set1_get1_DH), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_PKEY_assign), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_PKEY_assign_DH), \
|
|
TEST_DECL_GROUP("evp_pkey", test_EVP_PKEY_rsa), \
|
|
TEST_DECL_GROUP("evp_pkey", test_EVP_PKEY_ec), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_PKEY_missing_parameters), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_PKEY_copy_parameters), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_PKEY_paramgen), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_PKEY_param_check), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_PKEY_keygen_init), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_PKEY_keygen), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_SignInit_ex), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_PKEY_sign_verify_rsa), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_PKEY_sign_verify_dsa), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_PKEY_sign_verify_ec), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_MD_rsa_signing), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wc_RsaPSS_DigitalSignVerify), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_MD_ecc_signing), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_DigestSign), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_DigestSign_ecc), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_PKEY_encrypt), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_PKEY_derive), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_PKEY_print_public), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_PKEY_ed25519), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_CTX_use_PrivateKey_ed25519), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_PKEY_ed448), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_PKEY_x25519), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_PKEY_x448), \
|
|
TEST_DECL_GROUP("evp_pkey", test_wolfSSL_EVP_PKEY_encoded_public_key)
|
|
|
|
#endif /* WOLFCRYPT_TEST_EVP_PKEY_H */
|