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

Yao, Jiewen jiewen.yao at intel.com
Thu Aug 13 15:03:31 UTC 2020


Hi Christopher
Thanks.

1) Would you please help me understand more on "ApiHooks.c contains a stub function for a Windows API call" ?
Why we need this?
If it is compiler specific in openssl, should we submit patch to openssl to exclude this with OPENSSL_SYS_UEFI? That should be a cleaner solution for UEFI.

2) Would you please describe what compiler you have tried? VS? GCC? LLVM?

3) Would you please describe what unit test you have done?

Thank you
Yao Jiewen


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


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#64224): https://edk2.groups.io/g/devel/message/64224
Mute This Topic: https://groups.io/mt/75978612/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-





More information about the edk2-devel-archive mailing list