Add AARCH64 specific implementations of: - OPENSSL_cpuid_setup(), probing hardware capabilitie (presence of FEAT_AES, etc.) - OPENSSL_rdtsc(), returning non-trusted entropy by accessing system counter.
Acked-by: Gerd Hoffmann <kra...@redhat.com> Acked-by: Leif Lindholm <quic_llind...@quicinc.com> Signed-off-by: Pierre Gondois <pierre.gond...@arm.com> --- .../Library/OpensslLib/OpensslLibAccel.inf | 7 ++ .../OpensslLib/OpensslLibFullAccel.inf | 7 ++ .../OpensslLib/OpensslStub/AArch64Cap.c | 66 +++++++++++++++++++ 3 files changed, 80 insertions(+) create mode 100644 CryptoPkg/Library/OpensslLib/OpensslStub/AArch64Cap.c diff --git a/CryptoPkg/Library/OpensslLib/OpensslLibAccel.inf b/CryptoPkg/Library/OpensslLib/OpensslLibAccel.inf index 3d1a9638b1c1..08e8be6ea9e1 100644 --- a/CryptoPkg/Library/OpensslLib/OpensslLibAccel.inf +++ b/CryptoPkg/Library/OpensslLib/OpensslLibAccel.inf @@ -1329,6 +1329,7 @@ [Sources.X64] # Autogenerated files list ends here [Sources.AARCH64] + OpensslStub/AArch64Cap.c # Autogenerated files list starts here $(OPENSSL_PATH)/crypto/aes/aes_cbc.c $(OPENSSL_PATH)/crypto/aes/aes_cfb.c @@ -1955,11 +1956,17 @@ [Packages] MdePkg/MdePkg.dec CryptoPkg/CryptoPkg.dec +[Packages.AARCH64] + ArmPkg/ArmPkg.dec + [LibraryClasses] BaseLib DebugLib RngLib +[LibraryClasses.AARCH64] + ArmLib + [BuildOptions] # # Disables the following Visual Studio compiler warnings brought by openssl source, diff --git a/CryptoPkg/Library/OpensslLib/OpensslLibFullAccel.inf b/CryptoPkg/Library/OpensslLib/OpensslLibFullAccel.inf index e7e83d419f4b..2a01ffe06bd7 100644 --- a/CryptoPkg/Library/OpensslLib/OpensslLibFullAccel.inf +++ b/CryptoPkg/Library/OpensslLib/OpensslLibFullAccel.inf @@ -1432,6 +1432,7 @@ [Sources.X64] # Autogenerated files list ends here [Sources.AARCH64] + OpensslStub/AArch64Cap.c # Autogenerated files list starts here $(OPENSSL_PATH)/crypto/aes/aes_cbc.c $(OPENSSL_PATH)/crypto/aes/aes_cfb.c @@ -2107,11 +2108,17 @@ [Packages] MdePkg/MdePkg.dec CryptoPkg/CryptoPkg.dec +[Packages.AARCH64] + ArmPkg/ArmPkg.dec + [LibraryClasses] BaseLib DebugLib RngLib +[LibraryClasses.AARCH64] + ArmLib + [BuildOptions] # # Disables the following Visual Studio compiler warnings brought by openssl source, diff --git a/CryptoPkg/Library/OpensslLib/OpensslStub/AArch64Cap.c b/CryptoPkg/Library/OpensslLib/OpensslStub/AArch64Cap.c new file mode 100644 index 000000000000..846b004a4dd3 --- /dev/null +++ b/CryptoPkg/Library/OpensslLib/OpensslStub/AArch64Cap.c @@ -0,0 +1,66 @@ +/** @file + Arm capabilities probing. + + Copyright (c) 2023, Arm Limited. All rights reserved.<BR> + + SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include <openssl/types.h> +#include "crypto/arm_arch.h" + +#include <Library/ArmLib.h> + +UINT32 OPENSSL_armcap_P = 0; + +void +OPENSSL_cpuid_setup ( + void + ) +{ + OPENSSL_armcap_P = 0; + + /* Access to EL0 registers is possible from higher ELx. */ + OPENSSL_armcap_P |= ARMV8_CPUID; + /* Access to Physical timer is possible. */ + OPENSSL_armcap_P |= ARMV7_TICK; + + /* Neon support is not guaranteed, but it is assumed to be present. + Arm ARM for Armv8, sA1.5 Advanced SIMD and floating-point support + */ + OPENSSL_armcap_P |= ARMV7_NEON; + + if (ArmHasAes ()) { + OPENSSL_armcap_P |= ARMV8_AES; + } + + if (ArmHasSha1 ()) { + OPENSSL_armcap_P |= ARMV8_SHA1; + } + + if (ArmHasSha256 ()) { + OPENSSL_armcap_P |= ARMV8_SHA256; + } + + if (ArmHasPmull ()) { + OPENSSL_armcap_P |= ARMV8_PMULL; + } + + if (ArmHasSha512 ()) { + OPENSSL_armcap_P |= ARMV8_SHA512; + } +} + +/** Read system counter value. + + Used to get some non-trusted entropy. + + @return Lower bits of the physical counter. +**/ +uint32_t +OPENSSL_rdtsc ( + void + ) +{ + return (UINT32)ArmReadCntPct (); +} -- 2.25.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#111538): https://edk2.groups.io/g/devel/message/111538 Mute This Topic: https://groups.io/mt/102725181/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-