[PATCH v2 1/2] CryptoPkg/OpensslLib: Add native instruction support for X64


Zurcher, Christopher J
 

BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D2507

Adding OpensslLibX64.inf and modifying process_files.pl to process this
file and generate the necessary assembly files.
ApiHooks.c contains a stub function for a Windows API call.
uefi-asm.conf contains the limited assembly configurations for OpenSSL.

Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Xiaoyu Lu <xiaoyux.lu@intel.com>
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Christopher J Zurcher <christopher.j.zurcher@intel.com>
---
CryptoPkg/Library/OpensslLib/OpensslLib.inf | 2 +-
CryptoPkg/Library/OpensslLib/OpensslLibCrypto.inf | 2 +-
CryptoPkg/Library/OpensslLib/OpensslLibX64.inf | 656 +++++++++++++++=
+++++
CryptoPkg/Library/Include/openssl/opensslconf.h | 3 -
CryptoPkg/Library/OpensslLib/ApiHooks.c | 18 +
CryptoPkg/Library/OpensslLib/OpensslLibConstructor.c | 34 +
CryptoPkg/Library/OpensslLib/process_files.pl | 223 +++++--
CryptoPkg/Library/OpensslLib/uefi-asm.conf | 15 +
8 files changed, 903 insertions(+), 50 deletions(-)

diff --git a/CryptoPkg/Library/OpensslLib/OpensslLib.inf b/CryptoPkg/Librar=
y/OpensslLib/OpensslLib.inf
index dbbe5386a1..bd62d86936 100644
--- a/CryptoPkg/Library/OpensslLib/OpensslLib.inf
+++ b/CryptoPkg/Library/OpensslLib/OpensslLib.inf
@@ -16,7 +16,7 @@
VERSION_STRING =3D 1.0=0D
LIBRARY_CLASS =3D OpensslLib=0D
DEFINE OPENSSL_PATH =3D openssl=0D
- DEFINE OPENSSL_FLAGS =3D -DL_ENDIAN -DOPENSSL_SMALL_FOOTPRINT =
-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE=0D
+ DEFINE OPENSSL_FLAGS =3D -DL_ENDIAN -DOPENSSL_SMALL_FOOTPRINT =
-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -DOPENSSL_NO_ASM=0D
=0D
#=0D
# VALID_ARCHITECTURES =3D IA32 X64 ARM AARCH64=0D
diff --git a/CryptoPkg/Library/OpensslLib/OpensslLibCrypto.inf b/CryptoPkg/=
Library/OpensslLib/OpensslLibCrypto.inf
index 616ccd9f62..2b7324a990 100644
--- a/CryptoPkg/Library/OpensslLib/OpensslLibCrypto.inf
+++ b/CryptoPkg/Library/OpensslLib/OpensslLibCrypto.inf
@@ -16,7 +16,7 @@
VERSION_STRING =3D 1.0=0D
LIBRARY_CLASS =3D OpensslLib=0D
DEFINE OPENSSL_PATH =3D openssl=0D
- DEFINE OPENSSL_FLAGS =3D -DL_ENDIAN -DOPENSSL_SMALL_FOOTPRINT =
-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE=0D
+ DEFINE OPENSSL_FLAGS =3D -DL_ENDIAN -DOPENSSL_SMALL_FOOTPRINT =
-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -DOPENSSL_NO_ASM=0D
=0D
#=0D
# VALID_ARCHITECTURES =3D IA32 X64 ARM AARCH64=0D
diff --git a/CryptoPkg/Library/OpensslLib/OpensslLibX64.inf b/CryptoPkg/Lib=
rary/OpensslLib/OpensslLibX64.inf
new file mode 100644
index 0000000000..825eea0254
--- /dev/null
+++ b/CryptoPkg/Library/OpensslLib/OpensslLibX64.inf
@@ -0,0 +1,656 @@
+## @file=0D
+# This module provides OpenSSL Library implementation.=0D
+#=0D
+# Copyright (c) 2010 - 2020, Intel Corporation. All rights reserved.<BR>=
=0D
+# (C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>=0D
+# SPDX-License-Identifier: BSD-2-Clause-Patent=0D
+#=0D
+##=0D
+=0D
+[Defines]=0D
+ INF_VERSION =3D 0x00010005=0D
+ BASE_NAME =3D OpensslLibX64=0D
+ MODULE_UNI_FILE =3D OpensslLib.uni=0D
+ FILE_GUID =3D 18125E50-0117-4DD0-BE54-4784AD995FEF=
=0D
+ MODULE_TYPE =3D BASE=0D
+ VERSION_STRING =3D 1.0=0D
+ LIBRARY_CLASS =3D OpensslLib=0D
+ DEFINE OPENSSL_PATH =3D openssl=0D
+ DEFINE OPENSSL_FLAGS =3D -DL_ENDIAN -DOPENSSL_SMALL_FOOTPRINT =
-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE=0D
+ DEFINE OPENSSL_FLAGS_CONFIG =3D -DOPENSSL_CPUID_OBJ -DSHA1_ASM -DSHA2=
56_ASM -DSHA512_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM=0D
+ CONSTRUCTOR =3D OpensslLibConstructor=0D
+=0D
+#=0D
+# VALID_ARCHITECTURES =3D X64=0D
+#=0D
+=0D
+[Sources]=0D
+ OpensslLibConstructor.c=0D
+ $(OPENSSL_PATH)/e_os.h=0D
+ $(OPENSSL_PATH)/ms/uplink.h=0D
+# Autogenerated files list starts here=0D
+ X64/crypto/aes/aesni-mb-x86_64.nasm=0D
+ X64/crypto/aes/aesni-sha1-x86_64.nasm=0D
+ X64/crypto/aes/aesni-sha256-x86_64.nasm=0D
+ X64/crypto/aes/aesni-x86_64.nasm=0D
+ X64/crypto/aes/vpaes-x86_64.nasm=0D
+ X64/crypto/modes/ghash-x86_64.nasm=0D
+ X64/crypto/sha/sha1-mb-x86_64.nasm=0D
+ X64/crypto/sha/sha1-x86_64.nasm=0D
+ X64/crypto/sha/sha256-mb-x86_64.nasm=0D
+ X64/crypto/sha/sha256-x86_64.nasm=0D
+ X64/crypto/sha/sha512-x86_64.nasm=0D
+ X64/crypto/x86_64cpuid.nasm=0D
+ $(OPENSSL_PATH)/crypto/aes/aes_cbc.c=0D
+ $(OPENSSL_PATH)/crypto/aes/aes_cfb.c=0D
+ $(OPENSSL_PATH)/crypto/aes/aes_core.c=0D
+ $(OPENSSL_PATH)/crypto/aes/aes_ige.c=0D
+ $(OPENSSL_PATH)/crypto/aes/aes_misc.c=0D
+ $(OPENSSL_PATH)/crypto/aes/aes_ofb.c=0D
+ $(OPENSSL_PATH)/crypto/aes/aes_wrap.c=0D
+ $(OPENSSL_PATH)/crypto/aria/aria.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/a_bitstr.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/a_d2i_fp.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/a_digest.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/a_dup.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/a_gentm.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/a_i2d_fp.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/a_int.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/a_mbstr.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/a_object.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/a_octet.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/a_print.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/a_sign.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/a_strex.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/a_strnid.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/a_time.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/a_type.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/a_utctm.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/a_utf8.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/a_verify.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/ameth_lib.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/asn1_err.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/asn1_gen.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/asn1_item_list.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/asn1_lib.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/asn1_par.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/asn_mime.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/asn_moid.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/asn_mstbl.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/asn_pack.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/bio_asn1.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/bio_ndef.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/d2i_pr.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/d2i_pu.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/evp_asn1.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/f_int.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/f_string.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/i2d_pr.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/i2d_pu.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/n_pkey.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/nsseq.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/p5_pbe.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/p5_pbev2.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/p5_scrypt.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/p8_pkey.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/t_bitst.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/t_pkey.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/t_spki.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/tasn_dec.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/tasn_enc.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/tasn_fre.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/tasn_new.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/tasn_prn.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/tasn_scn.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/tasn_typ.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/tasn_utl.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/x_algor.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/x_bignum.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/x_info.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/x_int64.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/x_long.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/x_pkey.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/x_sig.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/x_spki.c=0D
+ $(OPENSSL_PATH)/crypto/asn1/x_val.c=0D
+ $(OPENSSL_PATH)/crypto/async/arch/async_null.c=0D
+ $(OPENSSL_PATH)/crypto/async/arch/async_posix.c=0D
+ $(OPENSSL_PATH)/crypto/async/arch/async_win.c=0D
+ $(OPENSSL_PATH)/crypto/async/async.c=0D
+ $(OPENSSL_PATH)/crypto/async/async_err.c=0D
+ $(OPENSSL_PATH)/crypto/async/async_wait.c=0D
+ $(OPENSSL_PATH)/crypto/bio/b_addr.c=0D
+ $(OPENSSL_PATH)/crypto/bio/b_dump.c=0D
+ $(OPENSSL_PATH)/crypto/bio/b_sock.c=0D
+ $(OPENSSL_PATH)/crypto/bio/b_sock2.c=0D
+ $(OPENSSL_PATH)/crypto/bio/bf_buff.c=0D
+ $(OPENSSL_PATH)/crypto/bio/bf_lbuf.c=0D
+ $(OPENSSL_PATH)/crypto/bio/bf_nbio.c=0D
+ $(OPENSSL_PATH)/crypto/bio/bf_null.c=0D
+ $(OPENSSL_PATH)/crypto/bio/bio_cb.c=0D
+ $(OPENSSL_PATH)/crypto/bio/bio_err.c=0D
+ $(OPENSSL_PATH)/crypto/bio/bio_lib.c=0D
+ $(OPENSSL_PATH)/crypto/bio/bio_meth.c=0D
+ $(OPENSSL_PATH)/crypto/bio/bss_acpt.c=0D
+ $(OPENSSL_PATH)/crypto/bio/bss_bio.c=0D
+ $(OPENSSL_PATH)/crypto/bio/bss_conn.c=0D
+ $(OPENSSL_PATH)/crypto/bio/bss_dgram.c=0D
+ $(OPENSSL_PATH)/crypto/bio/bss_fd.c=0D
+ $(OPENSSL_PATH)/crypto/bio/bss_file.c=0D
+ $(OPENSSL_PATH)/crypto/bio/bss_log.c=0D
+ $(OPENSSL_PATH)/crypto/bio/bss_mem.c=0D
+ $(OPENSSL_PATH)/crypto/bio/bss_null.c=0D
+ $(OPENSSL_PATH)/crypto/bio/bss_sock.c=0D
+ $(OPENSSL_PATH)/crypto/bn/bn_add.c=0D
+ $(OPENSSL_PATH)/crypto/bn/bn_asm.c=0D
+ $(OPENSSL_PATH)/crypto/bn/bn_blind.c=0D
+ $(OPENSSL_PATH)/crypto/bn/bn_const.c=0D
+ $(OPENSSL_PATH)/crypto/bn/bn_ctx.c=0D
+ $(OPENSSL_PATH)/crypto/bn/bn_depr.c=0D
+ $(OPENSSL_PATH)/crypto/bn/bn_dh.c=0D
+ $(OPENSSL_PATH)/crypto/bn/bn_div.c=0D
+ $(OPENSSL_PATH)/crypto/bn/bn_err.c=0D
+ $(OPENSSL_PATH)/crypto/bn/bn_exp.c=0D
+ $(OPENSSL_PATH)/crypto/bn/bn_exp2.c=0D
+ $(OPENSSL_PATH)/crypto/bn/bn_gcd.c=0D
+ $(OPENSSL_PATH)/crypto/bn/bn_gf2m.c=0D
+ $(OPENSSL_PATH)/crypto/bn/bn_intern.c=0D
+ $(OPENSSL_PATH)/crypto/bn/bn_kron.c=0D
+ $(OPENSSL_PATH)/crypto/bn/bn_lib.c=0D
+ $(OPENSSL_PATH)/crypto/bn/bn_mod.c=0D
+ $(OPENSSL_PATH)/crypto/bn/bn_mont.c=0D
+ $(OPENSSL_PATH)/crypto/bn/bn_mpi.c=0D
+ $(OPENSSL_PATH)/crypto/bn/bn_mul.c=0D
+ $(OPENSSL_PATH)/crypto/bn/bn_nist.c=0D
+ $(OPENSSL_PATH)/crypto/bn/bn_prime.c=0D
+ $(OPENSSL_PATH)/crypto/bn/bn_print.c=0D
+ $(OPENSSL_PATH)/crypto/bn/bn_rand.c=0D
+ $(OPENSSL_PATH)/crypto/bn/bn_recp.c=0D
+ $(OPENSSL_PATH)/crypto/bn/bn_shift.c=0D
+ $(OPENSSL_PATH)/crypto/bn/bn_sqr.c=0D
+ $(OPENSSL_PATH)/crypto/bn/bn_sqrt.c=0D
+ $(OPENSSL_PATH)/crypto/bn/bn_srp.c=0D
+ $(OPENSSL_PATH)/crypto/bn/bn_word.c=0D
+ $(OPENSSL_PATH)/crypto/bn/bn_x931p.c=0D
+ $(OPENSSL_PATH)/crypto/buffer/buf_err.c=0D
+ $(OPENSSL_PATH)/crypto/buffer/buffer.c=0D
+ $(OPENSSL_PATH)/crypto/cmac/cm_ameth.c=0D
+ $(OPENSSL_PATH)/crypto/cmac/cm_pmeth.c=0D
+ $(OPENSSL_PATH)/crypto/cmac/cmac.c=0D
+ $(OPENSSL_PATH)/crypto/comp/c_zlib.c=0D
+ $(OPENSSL_PATH)/crypto/comp/comp_err.c=0D
+ $(OPENSSL_PATH)/crypto/comp/comp_lib.c=0D
+ $(OPENSSL_PATH)/crypto/conf/conf_api.c=0D
+ $(OPENSSL_PATH)/crypto/conf/conf_def.c=0D
+ $(OPENSSL_PATH)/crypto/conf/conf_err.c=0D
+ $(OPENSSL_PATH)/crypto/conf/conf_lib.c=0D
+ $(OPENSSL_PATH)/crypto/conf/conf_mall.c=0D
+ $(OPENSSL_PATH)/crypto/conf/conf_mod.c=0D
+ $(OPENSSL_PATH)/crypto/conf/conf_sap.c=0D
+ $(OPENSSL_PATH)/crypto/conf/conf_ssl.c=0D
+ $(OPENSSL_PATH)/crypto/cpt_err.c=0D
+ $(OPENSSL_PATH)/crypto/cryptlib.c=0D
+ $(OPENSSL_PATH)/crypto/ctype.c=0D
+ $(OPENSSL_PATH)/crypto/cversion.c=0D
+ $(OPENSSL_PATH)/crypto/dh/dh_ameth.c=0D
+ $(OPENSSL_PATH)/crypto/dh/dh_asn1.c=0D
+ $(OPENSSL_PATH)/crypto/dh/dh_check.c=0D
+ $(OPENSSL_PATH)/crypto/dh/dh_depr.c=0D
+ $(OPENSSL_PATH)/crypto/dh/dh_err.c=0D
+ $(OPENSSL_PATH)/crypto/dh/dh_gen.c=0D
+ $(OPENSSL_PATH)/crypto/dh/dh_kdf.c=0D
+ $(OPENSSL_PATH)/crypto/dh/dh_key.c=0D
+ $(OPENSSL_PATH)/crypto/dh/dh_lib.c=0D
+ $(OPENSSL_PATH)/crypto/dh/dh_meth.c=0D
+ $(OPENSSL_PATH)/crypto/dh/dh_pmeth.c=0D
+ $(OPENSSL_PATH)/crypto/dh/dh_prn.c=0D
+ $(OPENSSL_PATH)/crypto/dh/dh_rfc5114.c=0D
+ $(OPENSSL_PATH)/crypto/dh/dh_rfc7919.c=0D
+ $(OPENSSL_PATH)/crypto/dso/dso_dl.c=0D
+ $(OPENSSL_PATH)/crypto/dso/dso_dlfcn.c=0D
+ $(OPENSSL_PATH)/crypto/dso/dso_err.c=0D
+ $(OPENSSL_PATH)/crypto/dso/dso_lib.c=0D
+ $(OPENSSL_PATH)/crypto/dso/dso_openssl.c=0D
+ $(OPENSSL_PATH)/crypto/dso/dso_vms.c=0D
+ $(OPENSSL_PATH)/crypto/dso/dso_win32.c=0D
+ $(OPENSSL_PATH)/crypto/ebcdic.c=0D
+ $(OPENSSL_PATH)/crypto/err/err.c=0D
+ $(OPENSSL_PATH)/crypto/err/err_prn.c=0D
+ $(OPENSSL_PATH)/crypto/evp/bio_b64.c=0D
+ $(OPENSSL_PATH)/crypto/evp/bio_enc.c=0D
+ $(OPENSSL_PATH)/crypto/evp/bio_md.c=0D
+ $(OPENSSL_PATH)/crypto/evp/bio_ok.c=0D
+ $(OPENSSL_PATH)/crypto/evp/c_allc.c=0D
+ $(OPENSSL_PATH)/crypto/evp/c_alld.c=0D
+ $(OPENSSL_PATH)/crypto/evp/cmeth_lib.c=0D
+ $(OPENSSL_PATH)/crypto/evp/digest.c=0D
+ $(OPENSSL_PATH)/crypto/evp/e_aes.c=0D
+ $(OPENSSL_PATH)/crypto/evp/e_aes_cbc_hmac_sha1.c=0D
+ $(OPENSSL_PATH)/crypto/evp/e_aes_cbc_hmac_sha256.c=0D
+ $(OPENSSL_PATH)/crypto/evp/e_aria.c=0D
+ $(OPENSSL_PATH)/crypto/evp/e_bf.c=0D
+ $(OPENSSL_PATH)/crypto/evp/e_camellia.c=0D
+ $(OPENSSL_PATH)/crypto/evp/e_cast.c=0D
+ $(OPENSSL_PATH)/crypto/evp/e_chacha20_poly1305.c=0D
+ $(OPENSSL_PATH)/crypto/evp/e_des.c=0D
+ $(OPENSSL_PATH)/crypto/evp/e_des3.c=0D
+ $(OPENSSL_PATH)/crypto/evp/e_idea.c=0D
+ $(OPENSSL_PATH)/crypto/evp/e_null.c=0D
+ $(OPENSSL_PATH)/crypto/evp/e_old.c=0D
+ $(OPENSSL_PATH)/crypto/evp/e_rc2.c=0D
+ $(OPENSSL_PATH)/crypto/evp/e_rc4.c=0D
+ $(OPENSSL_PATH)/crypto/evp/e_rc4_hmac_md5.c=0D
+ $(OPENSSL_PATH)/crypto/evp/e_rc5.c=0D
+ $(OPENSSL_PATH)/crypto/evp/e_seed.c=0D
+ $(OPENSSL_PATH)/crypto/evp/e_sm4.c=0D
+ $(OPENSSL_PATH)/crypto/evp/e_xcbc_d.c=0D
+ $(OPENSSL_PATH)/crypto/evp/encode.c=0D
+ $(OPENSSL_PATH)/crypto/evp/evp_cnf.c=0D
+ $(OPENSSL_PATH)/crypto/evp/evp_enc.c=0D
+ $(OPENSSL_PATH)/crypto/evp/evp_err.c=0D
+ $(OPENSSL_PATH)/crypto/evp/evp_key.c=0D
+ $(OPENSSL_PATH)/crypto/evp/evp_lib.c=0D
+ $(OPENSSL_PATH)/crypto/evp/evp_pbe.c=0D
+ $(OPENSSL_PATH)/crypto/evp/evp_pkey.c=0D
+ $(OPENSSL_PATH)/crypto/evp/m_md2.c=0D
+ $(OPENSSL_PATH)/crypto/evp/m_md4.c=0D
+ $(OPENSSL_PATH)/crypto/evp/m_md5.c=0D
+ $(OPENSSL_PATH)/crypto/evp/m_md5_sha1.c=0D
+ $(OPENSSL_PATH)/crypto/evp/m_mdc2.c=0D
+ $(OPENSSL_PATH)/crypto/evp/m_null.c=0D
+ $(OPENSSL_PATH)/crypto/evp/m_ripemd.c=0D
+ $(OPENSSL_PATH)/crypto/evp/m_sha1.c=0D
+ $(OPENSSL_PATH)/crypto/evp/m_sha3.c=0D
+ $(OPENSSL_PATH)/crypto/evp/m_sigver.c=0D
+ $(OPENSSL_PATH)/crypto/evp/m_wp.c=0D
+ $(OPENSSL_PATH)/crypto/evp/names.c=0D
+ $(OPENSSL_PATH)/crypto/evp/p5_crpt.c=0D
+ $(OPENSSL_PATH)/crypto/evp/p5_crpt2.c=0D
+ $(OPENSSL_PATH)/crypto/evp/p_dec.c=0D
+ $(OPENSSL_PATH)/crypto/evp/p_enc.c=0D
+ $(OPENSSL_PATH)/crypto/evp/p_lib.c=0D
+ $(OPENSSL_PATH)/crypto/evp/p_open.c=0D
+ $(OPENSSL_PATH)/crypto/evp/p_seal.c=0D
+ $(OPENSSL_PATH)/crypto/evp/p_sign.c=0D
+ $(OPENSSL_PATH)/crypto/evp/p_verify.c=0D
+ $(OPENSSL_PATH)/crypto/evp/pbe_scrypt.c=0D
+ $(OPENSSL_PATH)/crypto/evp/pmeth_fn.c=0D
+ $(OPENSSL_PATH)/crypto/evp/pmeth_gn.c=0D
+ $(OPENSSL_PATH)/crypto/evp/pmeth_lib.c=0D
+ $(OPENSSL_PATH)/crypto/ex_data.c=0D
+ $(OPENSSL_PATH)/crypto/getenv.c=0D
+ $(OPENSSL_PATH)/crypto/hmac/hm_ameth.c=0D
+ $(OPENSSL_PATH)/crypto/hmac/hm_pmeth.c=0D
+ $(OPENSSL_PATH)/crypto/hmac/hmac.c=0D
+ $(OPENSSL_PATH)/crypto/init.c=0D
+ $(OPENSSL_PATH)/crypto/kdf/hkdf.c=0D
+ $(OPENSSL_PATH)/crypto/kdf/kdf_err.c=0D
+ $(OPENSSL_PATH)/crypto/kdf/scrypt.c=0D
+ $(OPENSSL_PATH)/crypto/kdf/tls1_prf.c=0D
+ $(OPENSSL_PATH)/crypto/lhash/lh_stats.c=0D
+ $(OPENSSL_PATH)/crypto/lhash/lhash.c=0D
+ $(OPENSSL_PATH)/crypto/md5/md5_dgst.c=0D
+ $(OPENSSL_PATH)/crypto/md5/md5_one.c=0D
+ $(OPENSSL_PATH)/crypto/mem.c=0D
+ $(OPENSSL_PATH)/crypto/mem_dbg.c=0D
+ $(OPENSSL_PATH)/crypto/mem_sec.c=0D
+ $(OPENSSL_PATH)/crypto/modes/cbc128.c=0D
+ $(OPENSSL_PATH)/crypto/modes/ccm128.c=0D
+ $(OPENSSL_PATH)/crypto/modes/cfb128.c=0D
+ $(OPENSSL_PATH)/crypto/modes/ctr128.c=0D
+ $(OPENSSL_PATH)/crypto/modes/cts128.c=0D
+ $(OPENSSL_PATH)/crypto/modes/gcm128.c=0D
+ $(OPENSSL_PATH)/crypto/modes/ocb128.c=0D
+ $(OPENSSL_PATH)/crypto/modes/ofb128.c=0D
+ $(OPENSSL_PATH)/crypto/modes/wrap128.c=0D
+ $(OPENSSL_PATH)/crypto/modes/xts128.c=0D
+ $(OPENSSL_PATH)/crypto/o_dir.c=0D
+ $(OPENSSL_PATH)/crypto/o_fips.c=0D
+ $(OPENSSL_PATH)/crypto/o_fopen.c=0D
+ $(OPENSSL_PATH)/crypto/o_init.c=0D
+ $(OPENSSL_PATH)/crypto/o_str.c=0D
+ $(OPENSSL_PATH)/crypto/o_time.c=0D
+ $(OPENSSL_PATH)/crypto/objects/o_names.c=0D
+ $(OPENSSL_PATH)/crypto/objects/obj_dat.c=0D
+ $(OPENSSL_PATH)/crypto/objects/obj_err.c=0D
+ $(OPENSSL_PATH)/crypto/objects/obj_lib.c=0D
+ $(OPENSSL_PATH)/crypto/objects/obj_xref.c=0D
+ $(OPENSSL_PATH)/crypto/ocsp/ocsp_asn.c=0D
+ $(OPENSSL_PATH)/crypto/ocsp/ocsp_cl.c=0D
+ $(OPENSSL_PATH)/crypto/ocsp/ocsp_err.c=0D
+ $(OPENSSL_PATH)/crypto/ocsp/ocsp_ext.c=0D
+ $(OPENSSL_PATH)/crypto/ocsp/ocsp_ht.c=0D
+ $(OPENSSL_PATH)/crypto/ocsp/ocsp_lib.c=0D
+ $(OPENSSL_PATH)/crypto/ocsp/ocsp_prn.c=0D
+ $(OPENSSL_PATH)/crypto/ocsp/ocsp_srv.c=0D
+ $(OPENSSL_PATH)/crypto/ocsp/ocsp_vfy.c=0D
+ $(OPENSSL_PATH)/crypto/ocsp/v3_ocsp.c=0D
+ $(OPENSSL_PATH)/crypto/pem/pem_all.c=0D
+ $(OPENSSL_PATH)/crypto/pem/pem_err.c=0D
+ $(OPENSSL_PATH)/crypto/pem/pem_info.c=0D
+ $(OPENSSL_PATH)/crypto/pem/pem_lib.c=0D
+ $(OPENSSL_PATH)/crypto/pem/pem_oth.c=0D
+ $(OPENSSL_PATH)/crypto/pem/pem_pk8.c=0D
+ $(OPENSSL_PATH)/crypto/pem/pem_pkey.c=0D
+ $(OPENSSL_PATH)/crypto/pem/pem_sign.c=0D
+ $(OPENSSL_PATH)/crypto/pem/pem_x509.c=0D
+ $(OPENSSL_PATH)/crypto/pem/pem_xaux.c=0D
+ $(OPENSSL_PATH)/crypto/pem/pvkfmt.c=0D
+ $(OPENSSL_PATH)/crypto/pkcs12/p12_add.c=0D
+ $(OPENSSL_PATH)/crypto/pkcs12/p12_asn.c=0D
+ $(OPENSSL_PATH)/crypto/pkcs12/p12_attr.c=0D
+ $(OPENSSL_PATH)/crypto/pkcs12/p12_crpt.c=0D
+ $(OPENSSL_PATH)/crypto/pkcs12/p12_crt.c=0D
+ $(OPENSSL_PATH)/crypto/pkcs12/p12_decr.c=0D
+ $(OPENSSL_PATH)/crypto/pkcs12/p12_init.c=0D
+ $(OPENSSL_PATH)/crypto/pkcs12/p12_key.c=0D
+ $(OPENSSL_PATH)/crypto/pkcs12/p12_kiss.c=0D
+ $(OPENSSL_PATH)/crypto/pkcs12/p12_mutl.c=0D
+ $(OPENSSL_PATH)/crypto/pkcs12/p12_npas.c=0D
+ $(OPENSSL_PATH)/crypto/pkcs12/p12_p8d.c=0D
+ $(OPENSSL_PATH)/crypto/pkcs12/p12_p8e.c=0D
+ $(OPENSSL_PATH)/crypto/pkcs12/p12_sbag.c=0D
+ $(OPENSSL_PATH)/crypto/pkcs12/p12_utl.c=0D
+ $(OPENSSL_PATH)/crypto/pkcs12/pk12err.c=0D
+ $(OPENSSL_PATH)/crypto/pkcs7/bio_pk7.c=0D
+ $(OPENSSL_PATH)/crypto/pkcs7/pk7_asn1.c=0D
+ $(OPENSSL_PATH)/crypto/pkcs7/pk7_attr.c=0D
+ $(OPENSSL_PATH)/crypto/pkcs7/pk7_doit.c=0D
+ $(OPENSSL_PATH)/crypto/pkcs7/pk7_lib.c=0D
+ $(OPENSSL_PATH)/crypto/pkcs7/pk7_mime.c=0D
+ $(OPENSSL_PATH)/crypto/pkcs7/pk7_smime.c=0D
+ $(OPENSSL_PATH)/crypto/pkcs7/pkcs7err.c=0D
+ $(OPENSSL_PATH)/crypto/rand/drbg_ctr.c=0D
+ $(OPENSSL_PATH)/crypto/rand/drbg_lib.c=0D
+ $(OPENSSL_PATH)/crypto/rand/rand_egd.c=0D
+ $(OPENSSL_PATH)/crypto/rand/rand_err.c=0D
+ $(OPENSSL_PATH)/crypto/rand/rand_lib.c=0D
+ $(OPENSSL_PATH)/crypto/rand/rand_unix.c=0D
+ $(OPENSSL_PATH)/crypto/rand/rand_vms.c=0D
+ $(OPENSSL_PATH)/crypto/rand/rand_win.c=0D
+ $(OPENSSL_PATH)/crypto/rsa/rsa_ameth.c=0D
+ $(OPENSSL_PATH)/crypto/rsa/rsa_asn1.c=0D
+ $(OPENSSL_PATH)/crypto/rsa/rsa_chk.c=0D
+ $(OPENSSL_PATH)/crypto/rsa/rsa_crpt.c=0D
+ $(OPENSSL_PATH)/crypto/rsa/rsa_depr.c=0D
+ $(OPENSSL_PATH)/crypto/rsa/rsa_err.c=0D
+ $(OPENSSL_PATH)/crypto/rsa/rsa_gen.c=0D
+ $(OPENSSL_PATH)/crypto/rsa/rsa_lib.c=0D
+ $(OPENSSL_PATH)/crypto/rsa/rsa_meth.c=0D
+ $(OPENSSL_PATH)/crypto/rsa/rsa_mp.c=0D
+ $(OPENSSL_PATH)/crypto/rsa/rsa_none.c=0D
+ $(OPENSSL_PATH)/crypto/rsa/rsa_oaep.c=0D
+ $(OPENSSL_PATH)/crypto/rsa/rsa_ossl.c=0D
+ $(OPENSSL_PATH)/crypto/rsa/rsa_pk1.c=0D
+ $(OPENSSL_PATH)/crypto/rsa/rsa_pmeth.c=0D
+ $(OPENSSL_PATH)/crypto/rsa/rsa_prn.c=0D
+ $(OPENSSL_PATH)/crypto/rsa/rsa_pss.c=0D
+ $(OPENSSL_PATH)/crypto/rsa/rsa_saos.c=0D
+ $(OPENSSL_PATH)/crypto/rsa/rsa_sign.c=0D
+ $(OPENSSL_PATH)/crypto/rsa/rsa_ssl.c=0D
+ $(OPENSSL_PATH)/crypto/rsa/rsa_x931.c=0D
+ $(OPENSSL_PATH)/crypto/rsa/rsa_x931g.c=0D
+ $(OPENSSL_PATH)/crypto/sha/keccak1600.c=0D
+ $(OPENSSL_PATH)/crypto/sha/sha1_one.c=0D
+ $(OPENSSL_PATH)/crypto/sha/sha1dgst.c=0D
+ $(OPENSSL_PATH)/crypto/sha/sha256.c=0D
+ $(OPENSSL_PATH)/crypto/sha/sha512.c=0D
+ $(OPENSSL_PATH)/crypto/siphash/siphash.c=0D
+ $(OPENSSL_PATH)/crypto/siphash/siphash_ameth.c=0D
+ $(OPENSSL_PATH)/crypto/siphash/siphash_pmeth.c=0D
+ $(OPENSSL_PATH)/crypto/sm3/m_sm3.c=0D
+ $(OPENSSL_PATH)/crypto/sm3/sm3.c=0D
+ $(OPENSSL_PATH)/crypto/sm4/sm4.c=0D
+ $(OPENSSL_PATH)/crypto/stack/stack.c=0D
+ $(OPENSSL_PATH)/crypto/threads_none.c=0D
+ $(OPENSSL_PATH)/crypto/threads_pthread.c=0D
+ $(OPENSSL_PATH)/crypto/threads_win.c=0D
+ $(OPENSSL_PATH)/crypto/txt_db/txt_db.c=0D
+ $(OPENSSL_PATH)/crypto/ui/ui_err.c=0D
+ $(OPENSSL_PATH)/crypto/ui/ui_lib.c=0D
+ $(OPENSSL_PATH)/crypto/ui/ui_null.c=0D
+ $(OPENSSL_PATH)/crypto/ui/ui_openssl.c=0D
+ $(OPENSSL_PATH)/crypto/ui/ui_util.c=0D
+ $(OPENSSL_PATH)/crypto/uid.c=0D
+ $(OPENSSL_PATH)/crypto/x509/by_dir.c=0D
+ $(OPENSSL_PATH)/crypto/x509/by_file.c=0D
+ $(OPENSSL_PATH)/crypto/x509/t_crl.c=0D
+ $(OPENSSL_PATH)/crypto/x509/t_req.c=0D
+ $(OPENSSL_PATH)/crypto/x509/t_x509.c=0D
+ $(OPENSSL_PATH)/crypto/x509/x509_att.c=0D
+ $(OPENSSL_PATH)/crypto/x509/x509_cmp.c=0D
+ $(OPENSSL_PATH)/crypto/x509/x509_d2.c=0D
+ $(OPENSSL_PATH)/crypto/x509/x509_def.c=0D
+ $(OPENSSL_PATH)/crypto/x509/x509_err.c=0D
+ $(OPENSSL_PATH)/crypto/x509/x509_ext.c=0D
+ $(OPENSSL_PATH)/crypto/x509/x509_lu.c=0D
+ $(OPENSSL_PATH)/crypto/x509/x509_meth.c=0D
+ $(OPENSSL_PATH)/crypto/x509/x509_obj.c=0D
+ $(OPENSSL_PATH)/crypto/x509/x509_r2x.c=0D
+ $(OPENSSL_PATH)/crypto/x509/x509_req.c=0D
+ $(OPENSSL_PATH)/crypto/x509/x509_set.c=0D
+ $(OPENSSL_PATH)/crypto/x509/x509_trs.c=0D
+ $(OPENSSL_PATH)/crypto/x509/x509_txt.c=0D
+ $(OPENSSL_PATH)/crypto/x509/x509_v3.c=0D
+ $(OPENSSL_PATH)/crypto/x509/x509_vfy.c=0D
+ $(OPENSSL_PATH)/crypto/x509/x509_vpm.c=0D
+ $(OPENSSL_PATH)/crypto/x509/x509cset.c=0D
+ $(OPENSSL_PATH)/crypto/x509/x509name.c=0D
+ $(OPENSSL_PATH)/crypto/x509/x509rset.c=0D
+ $(OPENSSL_PATH)/crypto/x509/x509spki.c=0D
+ $(OPENSSL_PATH)/crypto/x509/x509type.c=0D
+ $(OPENSSL_PATH)/crypto/x509/x_all.c=0D
+ $(OPENSSL_PATH)/crypto/x509/x_attrib.c=0D
+ $(OPENSSL_PATH)/crypto/x509/x_crl.c=0D
+ $(OPENSSL_PATH)/crypto/x509/x_exten.c=0D
+ $(OPENSSL_PATH)/crypto/x509/x_name.c=0D
+ $(OPENSSL_PATH)/crypto/x509/x_pubkey.c=0D
+ $(OPENSSL_PATH)/crypto/x509/x_req.c=0D
+ $(OPENSSL_PATH)/crypto/x509/x_x509.c=0D
+ $(OPENSSL_PATH)/crypto/x509/x_x509a.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/pcy_cache.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/pcy_data.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/pcy_lib.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/pcy_map.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/pcy_node.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/pcy_tree.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/v3_addr.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/v3_admis.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/v3_akey.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/v3_akeya.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/v3_alt.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/v3_asid.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/v3_bcons.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/v3_bitst.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/v3_conf.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/v3_cpols.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/v3_crld.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/v3_enum.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/v3_extku.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/v3_genn.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/v3_ia5.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/v3_info.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/v3_int.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/v3_lib.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/v3_ncons.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/v3_pci.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/v3_pcia.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/v3_pcons.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/v3_pku.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/v3_pmaps.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/v3_prn.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/v3_purp.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/v3_skey.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/v3_sxnet.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/v3_tlsf.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/v3_utl.c=0D
+ $(OPENSSL_PATH)/crypto/x509v3/v3err.c=0D
+ $(OPENSSL_PATH)/crypto/arm_arch.h=0D
+ $(OPENSSL_PATH)/crypto/mips_arch.h=0D
+ $(OPENSSL_PATH)/crypto/ppc_arch.h=0D
+ $(OPENSSL_PATH)/crypto/s390x_arch.h=0D
+ $(OPENSSL_PATH)/crypto/sparc_arch.h=0D
+ $(OPENSSL_PATH)/crypto/vms_rms.h=0D
+ $(OPENSSL_PATH)/crypto/aes/aes_local.h=0D
+ $(OPENSSL_PATH)/crypto/asn1/asn1_item_list.h=0D
+ $(OPENSSL_PATH)/crypto/asn1/asn1_local.h=0D
+ $(OPENSSL_PATH)/crypto/asn1/charmap.h=0D
+ $(OPENSSL_PATH)/crypto/asn1/standard_methods.h=0D
+ $(OPENSSL_PATH)/crypto/asn1/tbl_standard.h=0D
+ $(OPENSSL_PATH)/crypto/async/async_local.h=0D
+ $(OPENSSL_PATH)/crypto/async/arch/async_null.h=0D
+ $(OPENSSL_PATH)/crypto/async/arch/async_posix.h=0D
+ $(OPENSSL_PATH)/crypto/async/arch/async_win.h=0D
+ $(OPENSSL_PATH)/crypto/bio/bio_local.h=0D
+ $(OPENSSL_PATH)/crypto/bn/bn_local.h=0D
+ $(OPENSSL_PATH)/crypto/bn/bn_prime.h=0D
+ $(OPENSSL_PATH)/crypto/bn/rsaz_exp.h=0D
+ $(OPENSSL_PATH)/crypto/comp/comp_local.h=0D
+ $(OPENSSL_PATH)/crypto/conf/conf_def.h=0D
+ $(OPENSSL_PATH)/crypto/conf/conf_local.h=0D
+ $(OPENSSL_PATH)/crypto/dh/dh_local.h=0D
+ $(OPENSSL_PATH)/crypto/dso/dso_local.h=0D
+ $(OPENSSL_PATH)/crypto/evp/evp_local.h=0D
+ $(OPENSSL_PATH)/crypto/hmac/hmac_local.h=0D
+ $(OPENSSL_PATH)/crypto/lhash/lhash_local.h=0D
+ $(OPENSSL_PATH)/crypto/md5/md5_local.h=0D
+ $(OPENSSL_PATH)/crypto/modes/modes_local.h=0D
+ $(OPENSSL_PATH)/crypto/objects/obj_dat.h=0D
+ $(OPENSSL_PATH)/crypto/objects/obj_local.h=0D
+ $(OPENSSL_PATH)/crypto/objects/obj_xref.h=0D
+ $(OPENSSL_PATH)/crypto/ocsp/ocsp_local.h=0D
+ $(OPENSSL_PATH)/crypto/pkcs12/p12_local.h=0D
+ $(OPENSSL_PATH)/crypto/rand/rand_local.h=0D
+ $(OPENSSL_PATH)/crypto/rsa/rsa_local.h=0D
+ $(OPENSSL_PATH)/crypto/sha/sha_local.h=0D
+ $(OPENSSL_PATH)/crypto/siphash/siphash_local.h=0D
+ $(OPENSSL_PATH)/crypto/sm3/sm3_local.h=0D
+ $(OPENSSL_PATH)/crypto/store/store_local.h=0D
+ $(OPENSSL_PATH)/crypto/ui/ui_local.h=0D
+ $(OPENSSL_PATH)/crypto/x509/x509_local.h=0D
+ $(OPENSSL_PATH)/crypto/x509v3/ext_dat.h=0D
+ $(OPENSSL_PATH)/crypto/x509v3/pcy_local.h=0D
+ $(OPENSSL_PATH)/crypto/x509v3/standard_exts.h=0D
+ $(OPENSSL_PATH)/crypto/x509v3/v3_admis.h=0D
+ $(OPENSSL_PATH)/ssl/bio_ssl.c=0D
+ $(OPENSSL_PATH)/ssl/d1_lib.c=0D
+ $(OPENSSL_PATH)/ssl/d1_msg.c=0D
+ $(OPENSSL_PATH)/ssl/d1_srtp.c=0D
+ $(OPENSSL_PATH)/ssl/methods.c=0D
+ $(OPENSSL_PATH)/ssl/packet.c=0D
+ $(OPENSSL_PATH)/ssl/pqueue.c=0D
+ $(OPENSSL_PATH)/ssl/record/dtls1_bitmap.c=0D
+ $(OPENSSL_PATH)/ssl/record/rec_layer_d1.c=0D
+ $(OPENSSL_PATH)/ssl/record/rec_layer_s3.c=0D
+ $(OPENSSL_PATH)/ssl/record/ssl3_buffer.c=0D
+ $(OPENSSL_PATH)/ssl/record/ssl3_record.c=0D
+ $(OPENSSL_PATH)/ssl/record/ssl3_record_tls13.c=0D
+ $(OPENSSL_PATH)/ssl/s3_cbc.c=0D
+ $(OPENSSL_PATH)/ssl/s3_enc.c=0D
+ $(OPENSSL_PATH)/ssl/s3_lib.c=0D
+ $(OPENSSL_PATH)/ssl/s3_msg.c=0D
+ $(OPENSSL_PATH)/ssl/ssl_asn1.c=0D
+ $(OPENSSL_PATH)/ssl/ssl_cert.c=0D
+ $(OPENSSL_PATH)/ssl/ssl_ciph.c=0D
+ $(OPENSSL_PATH)/ssl/ssl_conf.c=0D
+ $(OPENSSL_PATH)/ssl/ssl_err.c=0D
+ $(OPENSSL_PATH)/ssl/ssl_init.c=0D
+ $(OPENSSL_PATH)/ssl/ssl_lib.c=0D
+ $(OPENSSL_PATH)/ssl/ssl_mcnf.c=0D
+ $(OPENSSL_PATH)/ssl/ssl_rsa.c=0D
+ $(OPENSSL_PATH)/ssl/ssl_sess.c=0D
+ $(OPENSSL_PATH)/ssl/ssl_stat.c=0D
+ $(OPENSSL_PATH)/ssl/ssl_txt.c=0D
+ $(OPENSSL_PATH)/ssl/ssl_utst.c=0D
+ $(OPENSSL_PATH)/ssl/statem/extensions.c=0D
+ $(OPENSSL_PATH)/ssl/statem/extensions_clnt.c=0D
+ $(OPENSSL_PATH)/ssl/statem/extensions_cust.c=0D
+ $(OPENSSL_PATH)/ssl/statem/extensions_srvr.c=0D
+ $(OPENSSL_PATH)/ssl/statem/statem.c=0D
+ $(OPENSSL_PATH)/ssl/statem/statem_clnt.c=0D
+ $(OPENSSL_PATH)/ssl/statem/statem_dtls.c=0D
+ $(OPENSSL_PATH)/ssl/statem/statem_lib.c=0D
+ $(OPENSSL_PATH)/ssl/statem/statem_srvr.c=0D
+ $(OPENSSL_PATH)/ssl/t1_enc.c=0D
+ $(OPENSSL_PATH)/ssl/t1_lib.c=0D
+ $(OPENSSL_PATH)/ssl/t1_trce.c=0D
+ $(OPENSSL_PATH)/ssl/tls13_enc.c=0D
+ $(OPENSSL_PATH)/ssl/tls_srp.c=0D
+ $(OPENSSL_PATH)/ssl/packet_local.h=0D
+ $(OPENSSL_PATH)/ssl/ssl_cert_table.h=0D
+ $(OPENSSL_PATH)/ssl/ssl_local.h=0D
+ $(OPENSSL_PATH)/ssl/record/record.h=0D
+ $(OPENSSL_PATH)/ssl/record/record_local.h=0D
+ $(OPENSSL_PATH)/ssl/statem/statem.h=0D
+ $(OPENSSL_PATH)/ssl/statem/statem_local.h=0D
+# Autogenerated files list ends here=0D
+ buildinf.h=0D
+ rand_pool_noise.h=0D
+ ossl_store.c=0D
+ rand_pool.c=0D
+=0D
+[Sources.X64]=0D
+ rand_pool_noise_tsc.c=0D
+ ApiHooks.c=0D
+=0D
+[Packages]=0D
+ MdePkg/MdePkg.dec=0D
+ CryptoPkg/CryptoPkg.dec=0D
+=0D
+[LibraryClasses]=0D
+ BaseLib=0D
+ DebugLib=0D
+ TimerLib=0D
+ PrintLib=0D
+=0D
+[BuildOptions]=0D
+ #=0D
+ # Disables the following Visual Studio compiler warnings brought by open=
ssl source,=0D
+ # so we do not break the build with /WX option:=0D
+ # C4090: 'function' : different 'const' qualifiers=0D
+ # C4132: 'object' : const object should be initialized (tls13_enc.c)=0D
+ # C4210: nonstandard extension used: function given file scope=0D
+ # C4244: conversion from type1 to type2, possible loss of data=0D
+ # C4245: conversion from type1 to type2, signed/unsigned mismatch=0D
+ # C4267: conversion from size_t to type, possible loss of data=0D
+ # C4306: 'identifier' : conversion from 'type1' to 'type2' of greater =
size=0D
+ # C4310: cast truncates constant value=0D
+ # C4389: 'operator' : signed/unsigned mismatch (xxxx)=0D
+ # C4700: uninitialized local variable 'name' used. (conf_sap.c(71))=0D
+ # C4702: unreachable code=0D
+ # C4706: assignment within conditional expression=0D
+ # C4819: The file contains a character that cannot be represented in t=
he current code page=0D
+ #=0D
+ MSFT:*_*_X64_CC_FLAGS =3D -U_WIN32 -U_WIN64 -U_MSC_VER $(OPENSSL_FLAG=
S) $(OPENSSL_FLAGS_CONFIG) /wd4090 /wd4132 /wd4210 /wd4244 /wd4245 /wd4267 =
/wd4306 /wd4310 /wd4700 /wd4389 /wd4702 /wd4706 /wd4819=0D
+=0D
+ INTEL:*_*_X64_CC_FLAGS =3D -U_WIN32 -U_WIN64 -U_MSC_VER -U__ICC $(OPEN=
SSL_FLAGS) $(OPENSSL_FLAGS_CONFIG) /w=0D
+=0D
+ #=0D
+ # Suppress the following build warnings in openssl so we don't break the=
build with -Werror=0D
+ # -Werror=3Dmaybe-uninitialized: there exist some other paths for whic=
h the variable is not initialized.=0D
+ # -Werror=3Dformat: Check calls to printf and scanf, etc., to make sur=
e that the arguments supplied have=0D
+ # types appropriate to the format string specified.=0D
+ # -Werror=3Dunused-but-set-variable: Warn whenever a local variable is=
assigned to, but otherwise unused (aside from its declaration).=0D
+ #=0D
+ GCC:*_*_X64_CC_FLAGS =3D -U_WIN32 -U_WIN64 $(OPENSSL_FLAGS) $(OPENSS=
L_FLAGS_CONFIG) -Wno-error=3Dmaybe-uninitialized -Wno-error=3Dformat -Wno-f=
ormat -Wno-error=3Dunused-but-set-variable -DNO_MSABI_VA_FUNCS=0D
+=0D
+ # suppress the following warnings in openssl so we don't break the build=
with warnings-as-errors:=0D
+ # 1295: Deprecated declaration <entity> - give arg types=0D
+ # 550: <entity> was set but never used=0D
+ # 1293: assignment in condition=0D
+ # 111: statement is unreachable (invariably "break;" after "return X;" =
in case statement)=0D
+ # 68: integer conversion resulted in a change of sign ("if (Status =3D=
=3D -1)")=0D
+ # 177: <entity> was declared but never referenced=0D
+ # 223: function <entity> declared implicitly=0D
+ # 144: a value of type <type> cannot be used to initialize an entity of=
type <type>=0D
+ # 513: a value of type <type> cannot be assigned to an entity of type <=
type>=0D
+ # 188: enumerated type mixed with another type (i.e. passing an integer=
as an enum without a cast)=0D
+ # 1296: Extended constant initialiser used=0D
+ # 128: loop is not reachable - may be emitted inappropriately if code f=
ollows a conditional return=0D
+ # from the function that evaluates to true at compile time=0D
+ # 546: transfer of control bypasses initialization - may be emitted ina=
ppropriately if the uninitialized=0D
+ # variable is never referenced after the jump=0D
+ # 1: ignore "#1-D: last line of file ends without a newline"=0D
+ # 3017: <entity> may be used before being set (NOTE: This was fixed in O=
penSSL 1.1 HEAD with=0D
+ # commit d9b8b89bec4480de3a10bdaf9425db371c19145b, and can be drop=
ped then.)=0D
+ XCODE:*_*_X64_CC_FLAGS =3D -mmmx -msse -U_WIN32 -U_WIN64 $(OPENSSL_FL=
AGS) $(OPENSSL_FLAGS_CONFIG) -w -std=3Dc99 -Wno-error=3Duninitialized=0D
diff --git a/CryptoPkg/Library/Include/openssl/opensslconf.h b/CryptoPkg/Li=
brary/Include/openssl/opensslconf.h
index 3a2544ea5c..e8f73c4d10 100644
--- a/CryptoPkg/Library/Include/openssl/opensslconf.h
+++ b/CryptoPkg/Library/Include/openssl/opensslconf.h
@@ -112,9 +112,6 @@ extern "C" {
#ifndef OPENSSL_NO_ASAN=0D
# define OPENSSL_NO_ASAN=0D
#endif=0D
-#ifndef OPENSSL_NO_ASM=0D
-# define OPENSSL_NO_ASM=0D
-#endif=0D
#ifndef OPENSSL_NO_ASYNC=0D
# define OPENSSL_NO_ASYNC=0D
#endif=0D
diff --git a/CryptoPkg/Library/OpensslLib/ApiHooks.c b/CryptoPkg/Library/Op=
ensslLib/ApiHooks.c
new file mode 100644
index 0000000000..58cff16838
--- /dev/null
+++ b/CryptoPkg/Library/OpensslLib/ApiHooks.c
@@ -0,0 +1,18 @@
+/** @file=0D
+ OpenSSL Library API hooks.=0D
+=0D
+Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>=0D
+SPDX-License-Identifier: BSD-2-Clause-Patent=0D
+=0D
+**/=0D
+=0D
+#include <Uefi.h>=0D
+=0D
+VOID *=0D
+__imp_RtlVirtualUnwind (=0D
+ VOID * Args=0D
+ )=0D
+{=0D
+ return NULL;=0D
+}=0D
+=0D
diff --git a/CryptoPkg/Library/OpensslLib/OpensslLibConstructor.c b/CryptoP=
kg/Library/OpensslLib/OpensslLibConstructor.c
new file mode 100644
index 0000000000..ef20d2b84e
--- /dev/null
+++ b/CryptoPkg/Library/OpensslLib/OpensslLibConstructor.c
@@ -0,0 +1,34 @@
+/** @file=0D
+ Constructor to initialize CPUID data for OpenSSL assembly operations.=0D
+=0D
+Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>=0D
+SPDX-License-Identifier: BSD-2-Clause-Patent=0D
+=0D
+**/=0D
+=0D
+#include <Uefi.h>=0D
+=0D
+extern void OPENSSL_cpuid_setup (void);=0D
+=0D
+/**=0D
+ Constructor routine for OpensslLib.=0D
+=0D
+ The constructor calls an internal OpenSSL function which fetches a local=
copy=0D
+ of the hardware capability flags, used to enable native crypto instructi=
ons.=0D
+=0D
+ @param None=0D
+=0D
+ @retval EFI_SUCCESS The construction succeeded.=0D
+=0D
+**/=0D
+EFI_STATUS=0D
+EFIAPI=0D
+OpensslLibConstructor (=0D
+ VOID=0D
+ )=0D
+{=0D
+ OPENSSL_cpuid_setup ();=0D
+=0D
+ return EFI_SUCCESS;=0D
+}=0D
+=0D
diff --git a/CryptoPkg/Library/OpensslLib/process_files.pl b/CryptoPkg/Libr=
ary/OpensslLib/process_files.pl
index 57ce195394..472f59bc8e 100755
--- a/CryptoPkg/Library/OpensslLib/process_files.pl
+++ b/CryptoPkg/Library/OpensslLib/process_files.pl
@@ -9,9 +9,63 @@
# do not need to do this, since the results are stored in the EDK2=0D
# git repository for them.=0D
#=0D
+# Due to the script wrapping required to process the OpenSSL=0D
+# configuration data, each native architecture must be processed=0D
+# individually by the maintainer (in addition to the standard version):=0D
+# ./process_files.pl=0D
+# ./process_files.pl X64=0D
+# ./process_files.pl [Arch]=0D
+=0D
use strict;=0D
use Cwd;=0D
use File::Copy;=0D
+use File::Basename;=0D
+use File::Path qw(make_path remove_tree);=0D
+use Text::Tabs;=0D
+=0D
+#=0D
+# OpenSSL perlasm generator script does not transfer the copyright header=
=0D
+#=0D
+sub copy_license_header=0D
+{=0D
+ my @args =3D split / /, shift; #Separate args by spaces=0D
+ my $source =3D $args[1]; #Source file is second (after "perl"=
)=0D
+ my $target =3D pop @args; #Target file is always last=0D
+ chop ($target); #Remove newline char=0D
+=0D
+ my $temp_file_name =3D "license.tmp";=0D
+ open (my $source_file, "<" . $source) || die $source;=0D
+ open (my $target_file, "<" . $target) || die $target;=0D
+ open (my $temp_file, ">" . $temp_file_name) || die $temp_file_name;=0D
+=0D
+ #Add "generated file" warning=0D
+ $source =3D~ s/^..//; #Remove leading "./"=0D
+ print ($temp_file "; WARNING: do not edit!\r\n");=0D
+ print ($temp_file "; Generated from $source\r\n");=0D
+ print ($temp_file ";\r\n");=0D
+=0D
+ #Copy source file header to temp file=0D
+ while (my $line =3D <$source_file>) {=0D
+ next if ($line =3D~ /#!/); #Ignore shebang line=0D
+ $line =3D~ s/#/;/; #Fix comment character for assembly=
=0D
+ $line =3D~ s/\s+$/\r\n/; #Trim trailing whitepsace, fixup lin=
e endings=0D
+ print ($temp_file $line);=0D
+ last if ($line =3D~ /http/); #Last line of copyright header conta=
ins a web link=0D
+ }=0D
+ print ($temp_file "\r\n");=0D
+ #Retrieve generated assembly contents=0D
+ while (my $line =3D <$target_file>) {=0D
+ $line =3D~ s/\s+$/\r\n/; #Trim trailing whitepsace, fixup lin=
e endings=0D
+ print ($temp_file expand ($line)); #expand() replaces tabs with s=
paces=0D
+ }=0D
+=0D
+ close ($source_file);=0D
+ close ($target_file);=0D
+ close ($temp_file);=0D
+=0D
+ move ($temp_file_name, $target) ||=0D
+ die "Cannot replace \"" . $target . "\"!";=0D
+}=0D
=0D
#=0D
# Find the openssl directory name for use lib. We have to do this=0D
@@ -21,10 +75,41 @@ use File::Copy;
#=0D
my $inf_file;=0D
my $OPENSSL_PATH;=0D
+my $uefi_config;=0D
+my $extension;=0D
+my $arch;=0D
my @inf;=0D
=0D
BEGIN {=0D
$inf_file =3D "OpensslLib.inf";=0D
+ $uefi_config =3D "UEFI";=0D
+ $arch =3D shift;=0D
+=0D
+ if (defined $arch) {=0D
+ if (uc ($arch) eq "X64") {=0D
+ $arch =3D "X64";=0D
+ $inf_file =3D "OpensslLibX64.inf";=0D
+ $uefi_config =3D "UEFI-x86_64";=0D
+ $extension =3D "nasm";=0D
+ } else {=0D
+ die "Unsupported architecture \"" . $arch . "\"!";=0D
+ }=0D
+ if ($extension eq "nasm") {=0D
+ if (`nasm -v 2>&1`) {=0D
+ #Presence of nasm executable will trigger inclusion of AVX=
instructions=0D
+ die "\nCannot run assembly generators with NASM in path!\n=
\n";=0D
+ }=0D
+ }=0D
+=0D
+ # Prepare assembly folder=0D
+ if (-d $arch) {=0D
+ remove_tree ($arch, {safe =3D> 1}) ||=0D
+ die "Cannot clean assembly folder \"" . $arch . "\"!";=0D
+ } else {=0D
+ mkdir $arch ||=0D
+ die "Cannot create assembly folder \"" . $arch . "\"!";=0D
+ }=0D
+ }=0D
=0D
# Read the contents of the inf file=0D
open( FD, "<" . $inf_file ) ||=0D
@@ -47,9 +132,9 @@ BEGIN {
# Configure UEFI=0D
system(=0D
"./Configure",=0D
- "UEFI",=0D
+ "--config=3D../uefi-asm.conf",=0D
+ "$uefi_config",=0D
"no-afalgeng",=0D
- "no-asm",=0D
"no-async",=0D
"no-autoerrinit",=0D
"no-autoload-config",=0D
@@ -129,23 +214,53 @@ BEGIN {
# Retrieve file lists from OpenSSL configdata=0D
#=0D
use configdata qw/%unified_info/;=0D
+use configdata qw/%config/;=0D
+use configdata qw/%target/;=0D
+=0D
+#=0D
+# Collect build flags from configdata=0D
+#=0D
+my $flags =3D "";=0D
+foreach my $f (@{$config{lib_defines}}) {=0D
+ $flags .=3D " -D$f";=0D
+}=0D
=0D
my @cryptofilelist =3D ();=0D
my @sslfilelist =3D ();=0D
+my @asmfilelist =3D ();=0D
+my @asmbuild =3D ();=0D
foreach my $product ((@{$unified_info{libraries}},=0D
@{$unified_info{engines}})) {=0D
foreach my $o (@{$unified_info{sources}->{$product}}) {=0D
foreach my $s (@{$unified_info{sources}->{$o}}) {=0D
- next if ($unified_info{generate}->{$s});=0D
- next if $s =3D~ "crypto/bio/b_print.c";=0D
-=0D
# No need to add unused files in UEFI.=0D
# So it can reduce porting time, compile time, library size.=0D
+ next if $s =3D~ "crypto/bio/b_print.c";=0D
next if $s =3D~ "crypto/rand/randfile.c";=0D
next if $s =3D~ "crypto/store/";=0D
next if $s =3D~ "crypto/err/err_all.c";=0D
next if $s =3D~ "crypto/aes/aes_ecb.c";=0D
=0D
+ if ($unified_info{generate}->{$s}) {=0D
+ if (defined $arch) {=0D
+ my $buildstring =3D "perl";=0D
+ foreach my $arg (@{$unified_info{generate}->{$s}}) {=0D
+ if ($arg =3D~ ".pl") {=0D
+ $buildstring .=3D " ./openssl/$arg";=0D
+ } elsif ($arg =3D~ "PERLASM_SCHEME") {=0D
+ $buildstring .=3D " $target{perlasm_scheme}";=
=0D
+ } elsif ($arg =3D~ "LIB_CFLAGS") {=0D
+ $buildstring .=3D "$flags";=0D
+ }=0D
+ }=0D
+ ($s, my $path, undef) =3D fileparse($s, qr/\.[^.]*/);=
=0D
+ $buildstring .=3D " ./$arch/$path$s.$extension";=0D
+ make_path ("./$arch/$path");=0D
+ push @asmbuild, "$buildstring\n";=0D
+ push @asmfilelist, " $arch/$path$s.$extension\r\n";=0D
+ }=0D
+ next;=0D
+ }=0D
if ($product =3D~ "libssl") {=0D
push @sslfilelist, ' $(OPENSSL_PATH)/' . $s . "\r\n";=0D
next;=0D
@@ -183,15 +298,31 @@ foreach (@headers){
}=0D
=0D
=0D
+#=0D
+# Generate assembly files=0D
+#=0D
+if (@asmbuild) {=0D
+ print "\n--> Generating assembly files ... ";=0D
+ foreach my $buildstring (@asmbuild) {=0D
+ system ("$buildstring");=0D
+ copy_license_header ($buildstring);=0D
+ }=0D
+ print "Done!";=0D
+}=0D
+=0D
#=0D
# Update OpensslLib.inf with autogenerated file list=0D
#=0D
my @new_inf =3D ();=0D
my $subbing =3D 0;=0D
-print "\n--> Updating OpensslLib.inf ... ";=0D
+print "\n--> Updating $inf_file ... ";=0D
foreach (@inf) {=0D
+ if ($_ =3D~ "DEFINE OPENSSL_FLAGS_CONFIG") {=0D
+ push @new_inf, " DEFINE OPENSSL_FLAGS_CONFIG =3D" . $flags . "=
\r\n";=0D
+ next;=0D
+ }=0D
if ( $_ =3D~ "# Autogenerated files list starts here" ) {=0D
- push @new_inf, $_, @cryptofilelist, @sslfilelist;=0D
+ push @new_inf, $_, @asmfilelist, @cryptofilelist, @sslfilelist;=0D
$subbing =3D 1;=0D
next;=0D
}=0D
@@ -216,49 +347,51 @@ rename( $new_inf_file, $inf_file ) ||
die "rename $inf_file";=0D
print "Done!";=0D
=0D
-#=0D
-# Update OpensslLibCrypto.inf with auto-generated file list (no libssl)=0D
-#=0D
-$inf_file =3D "OpensslLibCrypto.inf";=0D
-=0D
-# Read the contents of the inf file=0D
-@inf =3D ();=0D
-@new_inf =3D ();=0D
-open( FD, "<" . $inf_file ) ||=0D
- die "Cannot open \"" . $inf_file . "\"!";=0D
-@inf =3D (<FD>);=0D
-close(FD) ||=0D
- die "Cannot close \"" . $inf_file . "\"!";=0D
+if (!defined $arch) {=0D
+ #=0D
+ # Update OpensslLibCrypto.inf with auto-generated file list (no libssl=
)=0D
+ #=0D
+ $inf_file =3D "OpensslLibCrypto.inf";=0D
=0D
-$subbing =3D 0;=0D
-print "\n--> Updating OpensslLibCrypto.inf ... ";=0D
-foreach (@inf) {=0D
- if ( $_ =3D~ "# Autogenerated files list starts here" ) {=0D
- push @new_inf, $_, @cryptofilelist;=0D
- $subbing =3D 1;=0D
- next;=0D
- }=0D
- if ( $_ =3D~ "# Autogenerated files list ends here" ) {=0D
- push @new_inf, $_;=0D
- $subbing =3D 0;=0D
- next;=0D
+ # Read the contents of the inf file=0D
+ @inf =3D ();=0D
+ @new_inf =3D ();=0D
+ open( FD, "<" . $inf_file ) ||=0D
+ die "Cannot open \"" . $inf_file . "\"!";=0D
+ @inf =3D (<FD>);=0D
+ close(FD) ||=0D
+ die "Cannot close \"" . $inf_file . "\"!";=0D
+=0D
+ $subbing =3D 0;=0D
+ print "\n--> Updating OpensslLibCrypto.inf ... ";=0D
+ foreach (@inf) {=0D
+ if ( $_ =3D~ "# Autogenerated files list starts here" ) {=0D
+ push @new_inf, $_, @cryptofilelist;=0D
+ $subbing =3D 1;=0D
+ next;=0D
+ }=0D
+ if ( $_ =3D~ "# Autogenerated files list ends here" ) {=0D
+ push @new_inf, $_;=0D
+ $subbing =3D 0;=0D
+ next;=0D
+ }=0D
+=0D
+ push @new_inf, $_=0D
+ unless ($subbing);=0D
}=0D
=0D
- push @new_inf, $_=0D
- unless ($subbing);=0D
+ $new_inf_file =3D $inf_file . ".new";=0D
+ open( FD, ">" . $new_inf_file ) ||=0D
+ die $new_inf_file;=0D
+ print( FD @new_inf ) ||=0D
+ die $new_inf_file;=0D
+ close(FD) ||=0D
+ die $new_inf_file;=0D
+ rename( $new_inf_file, $inf_file ) ||=0D
+ die "rename $inf_file";=0D
+ print "Done!";=0D
}=0D
=0D
-$new_inf_file =3D $inf_file . ".new";=0D
-open( FD, ">" . $new_inf_file ) ||=0D
- die $new_inf_file;=0D
-print( FD @new_inf ) ||=0D
- die $new_inf_file;=0D
-close(FD) ||=0D
- die $new_inf_file;=0D
-rename( $new_inf_file, $inf_file ) ||=0D
- die "rename $inf_file";=0D
-print "Done!";=0D
-=0D
#=0D
# Copy opensslconf.h and dso_conf.h generated from OpenSSL Configuration=0D
#=0D
diff --git a/CryptoPkg/Library/OpensslLib/uefi-asm.conf b/CryptoPkg/Library=
/OpensslLib/uefi-asm.conf
new file mode 100644
index 0000000000..55eedbf3ba
--- /dev/null
+++ b/CryptoPkg/Library/OpensslLib/uefi-asm.conf
@@ -0,0 +1,15 @@
+## -*- mode: perl; -*-=0D
+## UEFI assembly openssl configuration targets.=0D
+=0D
+my %targets =3D (=0D
+#### UEFI=0D
+ "UEFI-x86_64" =3D> {=0D
+ perlasm_scheme =3D> "nasm",=0D
+ # inherit_from =3D> [ "UEFI", asm("x86_64_asm") ],=0D
+ inherit_from =3D> [ "UEFI" ],=0D
+ cpuid_asm_src =3D> "x86_64cpuid.s",=0D
+ aes_asm_src =3D> "aes_core.c aes_cbc.c vpaes-x86_64.s aesni-x8=
6_64.s aesni-sha1-x86_64.s aesni-sha256-x86_64.s aesni-mb-x86_64.s",=0D
+ sha1_asm_src =3D> "sha1-x86_64.s sha256-x86_64.s sha512-x86_64.=
s sha1-mb-x86_64.s sha256-mb-x86_64.s",=0D
+ modes_asm_src =3D> "ghash-x86_64.s",=0D
+ },=0D
+);=0D
--=20
2.28.0.windows.1

Join devel@edk2.groups.io to automatically receive all group messages.