!57 Add Ed25519 Alg

Merge pull request !57 from qazplmmz/mz_0607
This commit is contained in:
zhang-deyao
2024-06-25 06:37:11 +00:00
committed by Gitee
8 changed files with 89 additions and 23 deletions
+2 -1
View File
@@ -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
+1
View File
@@ -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
@@ -13,7 +13,7 @@
#include "soft_derive_key_api.h"
#include <crypto/evp.h>
#ifdef CRYPTO_SUPPORT_SOFT_ECC
#include <ec/ec_local.h>
#include <crypto/ec/ec_local.h>
#include <openssl/ecdh.h>
#endif
#include <openssl/evp.h>
@@ -13,9 +13,13 @@
#include "soft_ec_api.h"
#include <ec/ec_local.h>
#include <crypto/evp.h>
#include <crypto/ec.h>
#include <openssl/ecdh.h>
#include <openssl/ecdsa.h>
#include <openssl/bn.h>
#include <openssl/ec.h>
#include <openssl/evp.h>
#include <openssl/core_names.h>
#include <securec.h>
#include <tee_log.h>
#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);
+5
View File
@@ -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))
+3
View File
@@ -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
+53
View File
@@ -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
+5
View File
@@ -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)