From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM04-DM6-obe.outbound.protection.outlook.com (NAM04-DM6-obe.outbound.protection.outlook.com [40.92.45.52]) by mx.groups.io with SMTP id smtpd.web11.16854.1624068528842628033 for ; Fri, 18 Jun 2021 19:08:49 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="body hash did not verify" header.i=@outlook.com header.s=selector1 header.b=cB6hS2df; spf=pass (domain: outlook.com, ip: 40.92.45.52, mailfrom: christopher.zurcher@outlook.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KMBEWL5Bnla8BAE7bXT3Rde9Rrn1M5k3Eb3VL8IEKELE9CKkLDRyrhlCkKMvEECNlH95O9WKeJ0D//ovq65jhTyazgwoWhB35i5xa74VldeVR332FJiuN5jcN0NWa4zPHf4P97pyJ3iSiT/hJtnYNaNJWMScWE2fH6zKB1nnViYqgvzCQfoykIky145fXVjxDUooOJUX5x4WXkPiZh83zIk4OKw+1EWWYZ2UHHVTy4EiWVdbPvom2tyhwVjiC5Yn35It4GaEPMUPQlHwanu7XnV6voCdHRIG99SSDKbA1bHQCX40RftjoejLVQNf5w1EuLf/V/QVMd4Vd8LdZN4GLA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/Xd10lmLDUbPOck1uo2NKXmz6aY57Arj8qAcX/9FpfE=; b=ZSPbJvHkDg11ajuCSRzpjCNQReLfHtZOCEAGf5tvj+nLD3hDT2JmX0kCk82pekFt1DF81+em2FHVCY9GkkNBbQvZkmo9hbveNC6bIJIohFjas8aO9pCg2zx98AoH+4pfdlpxpofKa5vwiEcmsIC/53m5xpmGdL0aVA1R7poCf11CIxgiAI84ig9X/Kgg9bNZsJNOgXyMJXtBZIOPcSfwyo0U8cJGh9Lah3vqMnjW4OfOnZsWuZQj4eDgT0cW0CjmRgRMfr2JKXhHO2+Xiiot/Gg188CX98c29Pz50kzMRTOOTxw/IL49fhg/D8heUK/k9+og3y+otZxrelAT+cZqQw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/Xd10lmLDUbPOck1uo2NKXmz6aY57Arj8qAcX/9FpfE=; b=cB6hS2dfkP3Qt++9qctjQPANwlbMsEH8WiiXfY42tFSu5zhhtJFMMtmagStmnfwWSpcD61doR5RLrzu1p71OJ429X3mU1EM2/+BRvQKRyqdgejdv2Pg2FOD1L01g5DpksTxOdPC1B7AUPr3PNLJZPnpwvcacYFxT2hGrwvRN2mxJQh3OUM6WVJqlASdwZs/+xjBFlJRE6lCeSE/O9FA1da1QLf15CEQzCCQQ1EElHSdZzLbQAiQlXVEqJsus3cTj9zwaBwcvx7AhCGrP7spL4KZ78LrNATVf4r4lIHBuepNqR+tuImgwHHakPEyejbbXqH69PlTLbpktgn0CPPkHqg== Received: from BN8NAM04FT057.eop-NAM04.prod.protection.outlook.com (2a01:111:e400:7e85::4e) by BN8NAM04HT209.eop-NAM04.prod.protection.outlook.com (2a01:111:e400:7e85::308) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4242.16; Sat, 19 Jun 2021 02:08:47 +0000 Received: from BY3PR06MB8018.namprd06.prod.outlook.com (2a01:111:e400:7e85::47) by BN8NAM04FT057.mail.protection.outlook.com (2a01:111:e400:7e85::323) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4242.16 via Frontend Transport; Sat, 19 Jun 2021 02:08:47 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:AFC86763A693FDA15DADBF2740B20AA30AA43640E6BAD3ADC475EFF151658E23;UpperCasedChecksum:31D1B981B38CBA9FDE41E6734D30BB6D621A6C4903F2D401A4EB7EE20DA893C4;SizeAsReceived:7523;Count:45 Received: from BY3PR06MB8018.namprd06.prod.outlook.com ([fe80::785c:e262:4271:4da2]) by BY3PR06MB8018.namprd06.prod.outlook.com ([fe80::785c:e262:4271:4da2%7]) with mapi id 15.20.4219.028; Sat, 19 Jun 2021 02:08:46 +0000 From: "Christopher Zurcher" To: devel@edk2.groups.io CC: Jiewen Yao , Jian J Wang , Xiaoyu Lu , Mike Kinney , Ard Biesheuvel Subject: [PATCH v6 0/2] CryptoPkg/OpensslLib: Add native instruction support for X64 Date: Fri, 18 Jun 2021 19:08:34 -0700 Message-ID: X-Mailer: git-send-email 2.32.0.windows.1 X-TMN: [DuWeuTLgeX+TPZkxY1JaszBxM+kaGxdZ] X-ClientProxiedBy: MWHPR14CA0018.namprd14.prod.outlook.com (2603:10b6:300:ae::28) To BY3PR06MB8018.namprd06.prod.outlook.com (2603:10b6:a03:3c1::7) Return-Path: christopher.zurcher@outlook.com X-Microsoft-Original-Message-ID: <20210619020836.2706-1-christopher.zurcher@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from chzurche-studio.redmond.corp.microsoft.com (24.19.55.241) by MWHPR14CA0018.namprd14.prod.outlook.com (2603:10b6:300:ae::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4242.16 via Frontend Transport; Sat, 19 Jun 2021 02:08:46 +0000 X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 45 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: bf918dca-0bba-448c-cbad-08d932c72be6 X-MS-TrafficTypeDiagnostic: BN8NAM04HT209: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Eft+nLU2GfdGAOuVmG1MSebKWWYFS0ZfppEzCtPCh/UE+aeiUGbXRZ4hkWsjEv6VKNqsBOIm+itOsZPQG4PsMsVO53lgxcfz56HBGPB4N047ODDmkC7hsgFzw6dxyo++69v+VEg+xcY7Wx0HEOItzeMNPGECfsvI/pt4GKgyxXl/EwafmJ6NXmJ2ax0sU0ezRBObcgQzPnCL6H4oCc0sQIuKsnQPI5j+TFjkQL6MicDCqoehBrAbVWvpocUa31Q/ebnotS4LXuxtPuni4I9qA0dP9Bc1gZSv8sfPgmW6w97h2VbeYyOr9HCBVRsPkL2byrzhiXWLwv5lYGuN8J4SyPt4+Bftmb6ARA9DtW9kMOIl4ySgCj+AP5PyWTQgUUjc6JFw2dptoduu9TM1bGSp0Q== X-MS-Exchange-AntiSpam-MessageData: +k0lE/xjSO4RyyivxYi0o4OYfwAiLyafDfMhHHxgujdgeQvudH4iflKlY34x0qWfu7vsQ6QjrcWXzoaSR985BYjFdHUkOo8AtT+0bHwofhZn6+sEhe4Rz54kPOPKJuZzJV6f3w314+kl0zGlMkWKKg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: bf918dca-0bba-448c-cbad-08d932c72be6 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Jun 2021 02:08:46.8621 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-AuthSource: BN8NAM04FT057.eop-NAM04.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN8NAM04HT209 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain From: Christopher Zurcher V6 Changes: Add GCC-compatible version of these modifications. Supporting GCC build o= f native OpenSSL .S files requires removal of *(COMMON) from the /DISCARD= / section of the GCC linker script. The VS/CLANG portion of the patch is unchanged from the previously-approv= ed patchset. V5 Changes: Move ApiHooks.c into X64 folder Update process_files.pl to clean architecture-specific subfolders without removing them Rebased INF file to merge latest changes regarding RngLib vs. TimerLib V4 Changes: Add copyright header to uefi-asm.conf Move [Sources.X64] block to cover entire X64-specific config V3 Changes: Added definitions for ptrdiff_t and wchar_t to CrtLibSupport.h for LLVM/Clang build support. Added -UWIN32 to GCC Flags for LLVM/Clang build support. Added missing AES GCM assembly file. V2 Changes: Limit scope of assembly config to SHA and AES functions. Removed IA32 native support (reduced config was causing build failure and can be added in a later patch). Removed XMM instructions from assembly generation. Added automatic copyright header porting for generated assembly files. This patch adds support for building the native instruction algorithms for the X64 architecture in OpensslLib. The process_files.pl script was modifie= d to parse the .asm file targets from the OpenSSL build config data struct, a= nd generate the necessary assembly files for the EDK2 build environment. For the X64 variant, OpenSSL includes calls to a Windows error handling API= , and that function has been stubbed out in ApiHooks.c. For all variants, a constructor is added to call the required CPUID functio= n within OpenSSL to facilitate processor capability checks in the native algorithms. Additional native architecture variants should be simple to add by followin= g the changes made for this architecture. The OpenSSL assembly files are traditionally generated at build time using = a perl script. To avoid that burden on EDK2 users, these end-result assembly files are generated during the configuration steps performed by the package maintainer (through process_files.pl). The perl generator scripts inside OpenSSL do not parse file comments as they are only meant to create intermediate build files, so process_files.pl contains additional hooks to preserve the copyright headers as well as clean up tabs and line endings to comply with EDK2 coding standards. The resulting file headers align with the generated .h files which are already included in the EDK2 repository. Cc: Jiewen Yao Cc: Jian J Wang Cc: Xiaoyu Lu Cc: Mike Kinney Cc: Ard Biesheuvel Christopher Zurcher (2): CryptoPkg/OpensslLib: Add native instruction support for X64 CryptoPkg/OpensslLib: Commit the auto-generated assembly files for X64 BaseTools/Scripts/GccBase.lds | = 1 - CryptoPkg/CryptoPkg.ci.yaml | 2= 1 +- CryptoPkg/Library/Include/CrtLibSupport.h | = 2 + CryptoPkg/Library/Include/openssl/opensslconf.h | = 3 - CryptoPkg/Library/OpensslLib/OpensslLib.inf | = 2 +- CryptoPkg/Library/OpensslLib/OpensslLibConstructor.c | 4= 4 + CryptoPkg/Library/OpensslLib/OpensslLibCrypto.inf | = 2 +- CryptoPkg/Library/OpensslLib/OpensslLibX64.inf | 65= 3 +++ CryptoPkg/Library/OpensslLib/OpensslLibX64Gcc.inf | 65= 3 +++ CryptoPkg/Library/OpensslLib/UefiAsm.conf | 3= 0 + CryptoPkg/Library/OpensslLib/X64/ApiHooks.c | 2= 2 + CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-mb-x86_64.nasm | 73= 2 +++ CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-sha1-x86_64.nasm | 191= 6 ++++++++ CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-sha256-x86_64.nasm | 7= 8 + CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-x86_64.nasm | 510= 3 ++++++++++++++++++++ CryptoPkg/Library/OpensslLib/X64/crypto/aes/vpaes-x86_64.nasm | 117= 3 +++++ CryptoPkg/Library/OpensslLib/X64/crypto/modes/aesni-gcm-x86_64.nasm | 3= 4 + CryptoPkg/Library/OpensslLib/X64/crypto/modes/ghash-x86_64.nasm | 156= 9 ++++++ CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha1-mb-x86_64.nasm | 313= 7 ++++++++++++ CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha1-x86_64.nasm | 288= 4 +++++++++++ CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha256-mb-x86_64.nasm | 346= 1 +++++++++++++ CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha256-x86_64.nasm | 331= 3 +++++++++++++ CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha512-x86_64.nasm | 193= 8 ++++++++ CryptoPkg/Library/OpensslLib/X64/crypto/x86_64cpuid.nasm | 49= 1 ++ CryptoPkg/Library/OpensslLib/X64Gcc/crypto/aes/aesni-mb-x86_64.S | 55= 2 +++ CryptoPkg/Library/OpensslLib/X64Gcc/crypto/aes/aesni-sha1-x86_64.S | 171= 9 +++++++ CryptoPkg/Library/OpensslLib/X64Gcc/crypto/aes/aesni-sha256-x86_64.S | 6= 9 + CryptoPkg/Library/OpensslLib/X64Gcc/crypto/aes/aesni-x86_64.S | 448= 4 +++++++++++++++++ CryptoPkg/Library/OpensslLib/X64Gcc/crypto/aes/vpaes-x86_64.S | 86= 3 ++++ CryptoPkg/Library/OpensslLib/X64Gcc/crypto/modes/aesni-gcm-x86_64.S | 2= 9 + CryptoPkg/Library/OpensslLib/X64Gcc/crypto/modes/ghash-x86_64.S | 138= 6 ++++++ CryptoPkg/Library/OpensslLib/X64Gcc/crypto/sha/sha1-mb-x86_64.S | 296= 2 ++++++++++++ CryptoPkg/Library/OpensslLib/X64Gcc/crypto/sha/sha1-x86_64.S | 263= 1 ++++++++++ CryptoPkg/Library/OpensslLib/X64Gcc/crypto/sha/sha256-mb-x86_64.S | 328= 6 +++++++++++++ CryptoPkg/Library/OpensslLib/X64Gcc/crypto/sha/sha256-x86_64.S | 309= 7 ++++++++++++ CryptoPkg/Library/OpensslLib/X64Gcc/crypto/sha/sha512-x86_64.S | 181= 1 +++++++ CryptoPkg/Library/OpensslLib/X64Gcc/crypto/x86_64cpuid.S | 49= 1 ++ CryptoPkg/Library/OpensslLib/process_files.pl | 24= 1 +- 38 files changed, 50828 insertions(+), 55 deletions(-) create mode 100644 CryptoPkg/Library/OpensslLib/OpensslLibConstructor.c create mode 100644 CryptoPkg/Library/OpensslLib/OpensslLibX64.inf create mode 100644 CryptoPkg/Library/OpensslLib/OpensslLibX64Gcc.inf create mode 100644 CryptoPkg/Library/OpensslLib/UefiAsm.conf create mode 100644 CryptoPkg/Library/OpensslLib/X64/ApiHooks.c create mode 100644 CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-mb-x8= 6_64.nasm create mode 100644 CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-sha1-= x86_64.nasm create mode 100644 CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-sha25= 6-x86_64.nasm create mode 100644 CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-x86_6= 4.nasm create mode 100644 CryptoPkg/Library/OpensslLib/X64/crypto/aes/vpaes-x86_6= 4.nasm create mode 100644 CryptoPkg/Library/OpensslLib/X64/crypto/modes/aesni-gcm= -x86_64.nasm create mode 100644 CryptoPkg/Library/OpensslLib/X64/crypto/modes/ghash-x86= _64.nasm create mode 100644 CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha1-mb-x86= _64.nasm create mode 100644 CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha1-x86_64= .nasm create mode 100644 CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha256-mb-x= 86_64.nasm create mode 100644 CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha256-x86_= 64.nasm create mode 100644 CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha512-x86_= 64.nasm create mode 100644 CryptoPkg/Library/OpensslLib/X64/crypto/x86_64cpuid.nas= m create mode 100644 CryptoPkg/Library/OpensslLib/X64Gcc/crypto/aes/aesni-mb= -x86_64.S create mode 100644 CryptoPkg/Library/OpensslLib/X64Gcc/crypto/aes/aesni-sh= a1-x86_64.S create mode 100644 CryptoPkg/Library/OpensslLib/X64Gcc/crypto/aes/aesni-sh= a256-x86_64.S create mode 100644 CryptoPkg/Library/OpensslLib/X64Gcc/crypto/aes/aesni-x8= 6_64.S create mode 100644 CryptoPkg/Library/OpensslLib/X64Gcc/crypto/aes/vpaes-x8= 6_64.S create mode 100644 CryptoPkg/Library/OpensslLib/X64Gcc/crypto/modes/aesni-= gcm-x86_64.S create mode 100644 CryptoPkg/Library/OpensslLib/X64Gcc/crypto/modes/ghash-= x86_64.S create mode 100644 CryptoPkg/Library/OpensslLib/X64Gcc/crypto/sha/sha1-mb-= x86_64.S create mode 100644 CryptoPkg/Library/OpensslLib/X64Gcc/crypto/sha/sha1-x86= _64.S create mode 100644 CryptoPkg/Library/OpensslLib/X64Gcc/crypto/sha/sha256-m= b-x86_64.S create mode 100644 CryptoPkg/Library/OpensslLib/X64Gcc/crypto/sha/sha256-x= 86_64.S create mode 100644 CryptoPkg/Library/OpensslLib/X64Gcc/crypto/sha/sha512-x= 86_64.S create mode 100644 CryptoPkg/Library/OpensslLib/X64Gcc/crypto/x86_64cpuid.= S --=20 2.32.0.windows.1