diff --git a/config/release_config/oh_64_release_config b/config/release_config/oh_64_release_config index 7f63496e..072e8696 100644 --- a/config/release_config/oh_64_release_config +++ b/config/release_config/oh_64_release_config @@ -33,8 +33,9 @@ CONFIG_DRVMGR_64BIT=true CONFIG_DRVMGR_32BIT=false CONFIG_CRYPTO_SUPPORT_EC25519=true CONFIG_CRYPTO_SUPPORT_X509=false -CONFIG_CRYPTO_ECC_WRAPPER=false +CONFIG_CRYPTO_ECC_WRAPPER=true CONFIG_CRYPTO_AES_WRAPPER=true +CONFIG_CRYPTO_SUPPORT_SOFT_ECC=true # # services diff --git a/lib/teelib/libcrypto_hal/Makefile b/lib/teelib/libcrypto_hal/Makefile index 752e927a..3701d58e 100644 --- a/lib/teelib/libcrypto_hal/Makefile +++ b/lib/teelib/libcrypto_hal/Makefile @@ -41,6 +41,7 @@ inc-flags += -I$(PREBUILD_HEADER)/sys ifneq ($(findstring $(CONFIG_CRYPTO_SOFT_ENGINE), openssl openssl3),) inc-flags += -I$(TEELIB)/libopenssl/openssl/include inc-flags += -I$(TEELIB)/libopenssl/openssl/crypto +inc-flags += -I$(TEELIB)/libopenssl/openssl/ohos_lite endif # Source files required to build the target diff --git a/lib/teelib/libcrypto_hal/src/boringssl/soft_derive_key_api.c b/lib/teelib/libcrypto_hal/src/boringssl/soft_derive_key_api.c index 896c2bc4..26da32e1 100644 --- a/lib/teelib/libcrypto_hal/src/boringssl/soft_derive_key_api.c +++ b/lib/teelib/libcrypto_hal/src/boringssl/soft_derive_key_api.c @@ -13,7 +13,7 @@ #include "soft_derive_key_api.h" #include #ifdef CRYPTO_SUPPORT_SOFT_ECC -#include +#include #include #endif #include diff --git a/lib/teelib/libcrypto_hal/src/boringssl/soft_ec_api.c b/lib/teelib/libcrypto_hal/src/boringssl/soft_ec_api.c index f5684cd0..fc43021c 100644 --- a/lib/teelib/libcrypto_hal/src/boringssl/soft_ec_api.c +++ b/lib/teelib/libcrypto_hal/src/boringssl/soft_ec_api.c @@ -13,9 +13,13 @@ #include "soft_ec_api.h" #include #include +#include #include #include #include +#include +#include +#include #include #include #include "crypto_inner_interface.h" @@ -72,25 +76,25 @@ static int32_t generate_ed25519_keypair(uint32_t key_size, struct ecc_pub_key_t return get_soft_crypto_error(CRYPTO_BAD_PARAMETERS); } - ECX_KEY *ed25519_key = EVP_PKEY_get0(pkey); - if ((ed25519_key == NULL) || (ed25519_key->privkey == NULL)) { - tloge("Evp get failed\n"); + size_t pub_key_buf_len = ECC_KEY_LEN; + size_t prv_key_buf_len = ECC_KEY_LEN; + + if (EVP_PKEY_get_octet_string_param(pkey, OSSL_PKEY_PARAM_PRIV_KEY, private_key->r, sizeof(private_key->r), &prv_key_buf_len) == 0) + { + tloge("Get private key failed\n"); EVP_PKEY_free(pkey); - return CRYPTO_BAD_PARAMETERS; + return CRYPTO_ERROR_SECURITY; } - errno_t rc = memcpy_s(public_key->x, public_key->x_len, ed25519_key->pubkey, ED25519_PUBLIC_KEY_LEN); - if (rc != EOK) { - tloge("Copy failed, rc=%d\n", rc); + if (EVP_PKEY_get_octet_string_param(pkey, OSSL_PKEY_PARAM_PUB_KEY, public_key->x, sizeof(public_key->x), &pub_key_buf_len) == 0) + { + tloge("Get public key failed\n"); EVP_PKEY_free(pkey); return CRYPTO_ERROR_SECURITY; } - rc = memcpy_s(private_key->r, private_key->r_len, ed25519_key->privkey, ED25519_PRI_KEY_LEN); + EVP_PKEY_free(pkey); - if (rc != EOK) { - tloge("Copy failed, rc=%d\n", rc); - return CRYPTO_ERROR_SECURITY; - } + public_key->x_len = ED25519_PUBLIC_KEY_LEN; private_key->r_len = ED25519_PRI_KEY_LEN; return CRYPTO_SUCCESS; @@ -484,7 +488,7 @@ int32_t soft_crypto_ecc_generate_keypair(uint32_t key_size, uint32_t curve, if (check) return generate_ecc_keypair(curve, key_size, public_key, private_key); - return sm2_generate_keypair(key_size, curve, public_key, private_key); + return CRYPTO_NOT_SUPPORTED; } int32_t soft_crypto_ecc_encrypt(uint32_t alg_type, const struct ecc_pub_key_t *public_key, @@ -499,7 +503,7 @@ int32_t soft_crypto_ecc_encrypt(uint32_t alg_type, const struct ecc_pub_key_t *p } if (alg_type == CRYPTO_TYPE_SM2_PKE) - return sm2_encrypt_decypt(public_key, ENC_MODE, data_in, data_out); + return CRYPTO_NOT_SUPPORTED; return CRYPTO_NOT_SUPPORTED; } @@ -516,7 +520,7 @@ int32_t soft_crypto_ecc_decrypt(uint32_t alg_type, const struct ecc_priv_key_t * } if (alg_type == CRYPTO_TYPE_SM2_PKE) - return sm2_encrypt_decypt(private_key, DEC_MODE, data_in, data_out); + return CRYPTO_NOT_SUPPORTED; return CRYPTO_NOT_SUPPORTED; } @@ -566,9 +570,6 @@ int32_t soft_crypto_ecc_sign_digest(uint32_t alg_type, const struct ecc_priv_key return CRYPTO_BAD_PARAMETERS; } - if (alg_type == CRYPTO_TYPE_SM2_DSA_SM3) - return sm2_sign_verify(private_key, SIGN_MODE, digest, signature); - if (alg_type == CRYPTO_TYPE_ED25519) return ed25519_sign_digest(signature, digest, private_key); @@ -618,9 +619,6 @@ int32_t soft_crypto_ecc_verify_digest(uint32_t alg_type, const struct ecc_pub_ke return CRYPTO_BAD_PARAMETERS; } - if (alg_type == CRYPTO_TYPE_SM2_DSA_SM3) - return sm2_sign_verify(public_key, VERIFY_MODE, digest, (struct memref_t *)signature); - if (alg_type == CRYPTO_TYPE_ED25519) return ed25519_verify_digest(signature, digest, public_key); diff --git a/lib/teelib/libopenssl/Makefile b/lib/teelib/libopenssl/Makefile index 42255d24..da1221cf 100644 --- a/lib/teelib/libopenssl/Makefile +++ b/lib/teelib/libopenssl/Makefile @@ -17,6 +17,7 @@ A32_CFLAGS += -w -Wno-unused-parameter -Wno-int-conversion CPPFLAGS += -I$(TEELIB)/libopenssl/include CPPFLAGS += -I$(TEELIB)/libopenssl/openssl CPPFLAGS += -I$(TEELIB)/libopenssl/openssl/include +CPPFLAGS += -I$(TEELIB)/libopenssl/openssl/include/internal CPPFLAGS += -I$(TEELIB)/libopenssl/openssl/include/crypto CPPFLAGS += -I$(TEELIB)/libopenssl/openssl/include/openssl CPPFLAGS += -I$(TEELIB)/libopenssl/openssl/crypto @@ -32,6 +33,7 @@ CPPFLAGS += -I$(TEELIB)/libopenssl/openssl/crypto/siphash CPPFLAGS += -I$(PREBUILD_DIR)/headers/libc CPPFLAGS += -I$(TEELIB)/libopenssl/openssl/providers/common/include +CPPFLAGS += -I$(TEELIB)/libopenssl/openssl/providers/common/include/prov CPPFLAGS += -I$(TEELIB)/libopenssl/openssl/providers/implementations/include ifeq (${CONFIG_CRYPTO_SOFT_ENGINE},openssl3) @@ -44,6 +46,9 @@ ifeq ($(CONFIG_OPENSSL_NO_ASM),true) LOCAL_SRC_FILES += $(OPENSSL_CRYPTO_PATH)/mem_clr.c endif +ifeq ($(CONFIG_CRYPTO_SUPPORT_SOFT_ECC),true) +CFLAGS += -DCRYPTO_SUPPORT_SOFT_ECC +endif ASFLAGS := $(filter-out -march=armv8-a+nofp, $(ASFLAGS)) -march=armv8-a CFLAGS := $(filter-out -fno-builtin-memcpy, $(CFLAGS)) diff --git a/lib/teelib/libopenssl/build_openssl.sh b/lib/teelib/libopenssl/build_openssl.sh index 6a113408..07c24ed8 100755 --- a/lib/teelib/libopenssl/build_openssl.sh +++ b/lib/teelib/libopenssl/build_openssl.sh @@ -50,8 +50,11 @@ if [ "$CONFIG_CRYPTO_SOFT_ENGINE" == "openssl3" ]; then make providers/common/include/prov/der_rsa.h make providers/common/include/prov/der_sm2.h make providers/common/include/prov/der_wrap.h + make providers/common/include/prov/der_ecx.h make providers/common/der/der_rsa_gen.c make providers/common/der/der_wrap_gen.c + make providers/common/der/der_ec_gen.c + make providers/common/der/der_ecx_gen.c cd include/openssl && patch -p0 < ../../../include/preprocess-openssl3.patch else cd include/openssl && patch -p0 < ../../../include/preprocess-openssl.patch diff --git a/lib/teelib/libopenssl/openssl3.mk b/lib/teelib/libopenssl/openssl3.mk index 6add067b..3171a361 100644 --- a/lib/teelib/libopenssl/openssl3.mk +++ b/lib/teelib/libopenssl/openssl3.mk @@ -436,9 +436,56 @@ LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/x509/x_pubkey.c LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/x509/x_req.c LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/x509/x_x509.c LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/x509/x_x509a.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/curve25519.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/ec_ameth.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/ec_asn1.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/ec_backend.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/ec_check.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/ec_curve.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/ec_cvt.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/ec_deprecated.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/ec_err.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/ec_key.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/ec_kmeth.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/ec_lib.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/ec_mult.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/ec_oct.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/ec_pmeth.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/ec_print.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/ec2_oct.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/ec2_smpl.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/ecdh_kdf.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/ecdh_ossl.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/ecdsa_ossl.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/ecdsa_sign.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/ecdsa_vrf.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/eck_prn.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/ecp_mont.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/ecp_nist.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/ecp_nistputil.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/ecp_nistz256.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/ecp_oct.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/ecp_ppc.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/ecp_s390x_nistp.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/ecp_smpl.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/ecx_backend.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/ecx_key.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/ecx_meth.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/ecx_s390x.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/curve448/curve448_tables.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/curve448/curve448.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/curve448/eddsa.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/curve448/f_generic.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/curve448/scalar.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/ec/curve448/arch_64/f_impl64.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/evp/ec_support.c LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/providers/common/bio_prov.c LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/providers/common/capabilities.c LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/providers/common/der/der_ec_sig.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/providers/common/der/der_ec_key.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/providers/common/der/der_ecx_key.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/providers/common/der/der_ec_gen.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/providers/common/der/der_ecx_gen.c LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/providers/common/der/der_rsa_gen.c LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/providers/common/der/der_rsa_key.c LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/providers/common/der/der_rsa_sig.c @@ -517,6 +564,7 @@ LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/providers/implementations/kem/rsa_kem.c LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/providers/implementations/keymgmt/kdf_legacy_kmgmt.c LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/providers/implementations/keymgmt/mac_legacy_kmgmt.c LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/providers/implementations/keymgmt/rsa_kmgmt.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/providers/implementations/keymgmt/ec_kmgmt.c LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/providers/implementations/macs/cmac_prov.c LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/providers/implementations/macs/gmac_prov.c LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/providers/implementations/macs/hmac_prov.c @@ -570,10 +618,15 @@ LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/getenv.c LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/init.c LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/initthread.c LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/crypto/cpuid.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/ohos_lite/crypto/ec/curve25519.c LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/providers/baseprov.c LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/providers/defltprov.c LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/providers/nullprov.c LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/providers/prov_running.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/providers/implementations/exchange/ecdh_exch.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/providers/implementations/exchange/ecx_exch.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/providers/implementations/signature/eddsa_sig.c +LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/providers/implementations/keymgmt/ecx_kmgmt.c LOCAL_SRC_FILES += $(OPENSSL_FILE_PATH)/ssl/s3_cbc.c CFLAGS += -DOPENSSL_NO_GMTLS diff --git a/lib/teelib/libswcrypto_engine/Makefile b/lib/teelib/libswcrypto_engine/Makefile index 1a6e49fe..12f066a1 100755 --- a/lib/teelib/libswcrypto_engine/Makefile +++ b/lib/teelib/libswcrypto_engine/Makefile @@ -26,6 +26,11 @@ inc-flags += -I$(PREBUILD_HEADER)/sys ifneq ($(findstring $(CONFIG_CRYPTO_SOFT_ENGINE), openssl openssl3),) inc-flags += -I$(TEELIB)/libopenssl/openssl/include inc-flags += -I$(TEELIB)/libopenssl/openssl/crypto +inc-flags += -I$(TEELIB)/libopenssl/openssl/include/openssl +endif + +ifeq ($(CONFIG_CRYPTO_SUPPORT_SOFT_ECC),true) +c-flags += -DCRYPTO_SUPPORT_SOFT_ECC endif libswcrypto_engine_c_files += $(wildcard src/*.c)