From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f68.google.com (mail-wm1-f68.google.com [209.85.128.68]) by mx.groups.io with SMTP id smtpd.web12.19839.1585161638507782600 for ; Wed, 25 Mar 2020 11:40:39 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@linaro.org header.s=google header.b=cO8hBxQh; spf=pass (domain: linaro.org, ip: 209.85.128.68, mailfrom: ard.biesheuvel@linaro.org) Received: by mail-wm1-f68.google.com with SMTP id g62so4037258wme.1 for ; Wed, 25 Mar 2020 11:40:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=NgadPInU0lQIVlY0ImDooyPz54rLgwZR49rvmXYROps=; b=cO8hBxQhkht5V1SkdrH+k+vXzJYC1i4/mE7tjatFBsBMhzEkmhaqZ2P6voWauPUPGH ie/b4Oy+fmGoPWyv6TRpfmNJgGI6xXN6J/rM4qTh6CO5MtrMJq+jIQtSIbUwb2D1r/S4 cDHckDtX9rWozSE2azFpNr2V29P5rNaC9050Xz27jCz+aM34FzqiJM6teVLESDBIDIaN 3CBF0fUar7gR8UyJr/Zff9LSvnuMl3zn0VPGRMYuzkv6Ex7fX1lb/8UZxYBo3ZdjWfHH iAbd6WSFDyhuCxbI8Cdbq/S6I4Pw50ue0W3oFLcQVebardwsBCFgD0ckhr5n0k8rA1ni ophQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=NgadPInU0lQIVlY0ImDooyPz54rLgwZR49rvmXYROps=; b=oGwvrDgw43ApI9l7g7XwPqAmapM+QJPHML+vshTxuS2rq0t5ddmeV9qxo8MmeTDJmV 4ydur8L0AWFbKxQRnnV6wgJ90QrEygiDjFJnDQeEzkR1u1pmZIdE1dABSd9MARI5DTD6 3MHBWR6CDMH+7pv531tG6QZG6c6KHsrvjysKpOSWMEn5gnRTsprnAVIbzkaKftiTSB5X 8ZkeUct5YYxBUv3JGkxaXAEYq21rDaKyHlzX8Mc6o4bFZSWKYhblSEvbct3SWr08CfMy ZYmYFuUKiwK9JAaFbFsA8OrUTjUBttltf9nP6uG1Prz6pRIcK2i8El7Pq2mbax98fy6E ww6g== X-Gm-Message-State: ANhLgQ3or71vQxrr0dr6dnDBNXhgOmabsbAWJmhzbvxDVq8vEAink5ev uQmRjtyzcvVh4E2t4z9gkudz3j7YblaRZLC24krIAA== X-Google-Smtp-Source: ADFU+vu8w1uyOhp3eUzbiJL8197xeZPov6MvlCOrC2A+6ATXTm0+ptJGecyFW++pqqNYKh6nKv1rZvkTPSdUth5LwOQ= X-Received: by 2002:a7b:c050:: with SMTP id u16mr5139994wmc.68.1585161636920; Wed, 25 Mar 2020 11:40:36 -0700 (PDT) MIME-Version: 1.0 References: <20200317102656.20032-1-christopher.j.zurcher@intel.com> In-Reply-To: <20200317102656.20032-1-christopher.j.zurcher@intel.com> From: "Ard Biesheuvel" Date: Wed, 25 Mar 2020 19:40:26 +0100 Message-ID: Subject: Re: [PATCH 0/1] CryptoPkg/OpensslLib: Add native instruction support for IA32 and X64 To: Christopher J Zurcher Cc: edk2-devel-groups-io , Jian J Wang , Xiaoyu Lu , Eugene Cohen Content-Type: text/plain; charset="UTF-8" On Tue, 17 Mar 2020 at 11:26, Christopher J Zurcher wrote: > > BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=2507 > > This patch adds support for building the native instruction algorithms for > IA32 and X64 versions of OpensslLib. The process_files.pl script was modified > to parse the .asm file targets from the OpenSSL build config data struct, and > 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 was added to call the required CPUID function > within OpenSSL to facilitate processor capability checks in the native > algorithms. > > Additional native architecture variants should be simple to add by following > the changes made for these two architectures. > > 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: Jian J Wang > Cc: Xiaoyu Lu > Cc: Eugene Cohen > Cc: Ard Biesheuvel > > Christopher J Zurcher (1): > CryptoPkg/OpensslLib: Add native instruction support for IA32 and X64 > Hello Christopher, It would be helpful to understand the purpose of all this. Also, I think we could be more picky about which algorithms we enable - DES and MD5 don't seem highly useful, and even if they were, what do we gain by using a faster (or smaller?) implementation? > CryptoPkg/Library/OpensslLib/OpensslLib.inf | 2 +- > CryptoPkg/Library/OpensslLib/OpensslLibCrypto.inf | 2 +- > CryptoPkg/Library/OpensslLib/OpensslLibIa32.inf | 680 ++ > CryptoPkg/Library/OpensslLib/OpensslLibX64.inf | 691 ++ > CryptoPkg/Library/Include/openssl/opensslconf.h | 3 - > CryptoPkg/Library/OpensslLib/ApiHooks.c | 18 + > CryptoPkg/Library/OpensslLib/OpensslLibConstructor.c | 34 + > CryptoPkg/Library/OpensslLib/Ia32/crypto/aes/aesni-x86.nasm | 3209 ++++++++ > CryptoPkg/Library/OpensslLib/Ia32/crypto/aes/vpaes-x86.nasm | 648 ++ > CryptoPkg/Library/OpensslLib/Ia32/crypto/bn/bn-586.nasm | 1522 ++++ > CryptoPkg/Library/OpensslLib/Ia32/crypto/bn/co-586.nasm | 1259 +++ > CryptoPkg/Library/OpensslLib/Ia32/crypto/bn/x86-gf2m.nasm | 352 + > CryptoPkg/Library/OpensslLib/Ia32/crypto/bn/x86-mont.nasm | 486 ++ > CryptoPkg/Library/OpensslLib/Ia32/crypto/des/crypt586.nasm | 887 +++ > CryptoPkg/Library/OpensslLib/Ia32/crypto/des/des-586.nasm | 1835 +++++ > CryptoPkg/Library/OpensslLib/Ia32/crypto/md5/md5-586.nasm | 690 ++ > CryptoPkg/Library/OpensslLib/Ia32/crypto/modes/ghash-x86.nasm | 1264 +++ > CryptoPkg/Library/OpensslLib/Ia32/crypto/rc4/rc4-586.nasm | 381 + > CryptoPkg/Library/OpensslLib/Ia32/crypto/sha/sha1-586.nasm | 3977 ++++++++++ > CryptoPkg/Library/OpensslLib/Ia32/crypto/sha/sha256-586.nasm | 6796 ++++++++++++++++ > CryptoPkg/Library/OpensslLib/Ia32/crypto/sha/sha512-586.nasm | 2842 +++++++ > CryptoPkg/Library/OpensslLib/Ia32/crypto/x86cpuid.nasm | 513 ++ > CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-mb-x86_64.nasm | 1772 +++++ > CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-sha1-x86_64.nasm | 3271 ++++++++ > CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-sha256-x86_64.nasm | 4709 +++++++++++ > CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-x86_64.nasm | 5084 ++++++++++++ > CryptoPkg/Library/OpensslLib/X64/crypto/aes/vpaes-x86_64.nasm | 1170 +++ > CryptoPkg/Library/OpensslLib/X64/crypto/bn/rsaz-avx2.nasm | 1989 +++++ > CryptoPkg/Library/OpensslLib/X64/crypto/bn/rsaz-x86_64.nasm | 2242 ++++++ > CryptoPkg/Library/OpensslLib/X64/crypto/bn/x86_64-gf2m.nasm | 432 + > CryptoPkg/Library/OpensslLib/X64/crypto/bn/x86_64-mont.nasm | 1479 ++++ > CryptoPkg/Library/OpensslLib/X64/crypto/bn/x86_64-mont5.nasm | 4033 ++++++++++ > CryptoPkg/Library/OpensslLib/X64/crypto/md5/md5-x86_64.nasm | 794 ++ > CryptoPkg/Library/OpensslLib/X64/crypto/modes/aesni-gcm-x86_64.nasm | 984 +++ > CryptoPkg/Library/OpensslLib/X64/crypto/modes/ghash-x86_64.nasm | 2077 +++++ > CryptoPkg/Library/OpensslLib/X64/crypto/rc4/rc4-md5-x86_64.nasm | 1395 ++++ > CryptoPkg/Library/OpensslLib/X64/crypto/rc4/rc4-x86_64.nasm | 784 ++ > CryptoPkg/Library/OpensslLib/X64/crypto/sha/keccak1600-x86_64.nasm | 532 ++ > CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha1-mb-x86_64.nasm | 7581 ++++++++++++++++++ > CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha1-x86_64.nasm | 5773 ++++++++++++++ > CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha256-mb-x86_64.nasm | 8262 ++++++++++++++++++++ > CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha256-x86_64.nasm | 5712 ++++++++++++++ > CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha512-x86_64.nasm | 5668 ++++++++++++++ > CryptoPkg/Library/OpensslLib/X64/crypto/x86_64cpuid.nasm | 472 ++ > CryptoPkg/Library/OpensslLib/process_files.pl | 208 +- > CryptoPkg/Library/OpensslLib/uefi-asm.conf | 14 + > 46 files changed, 94478 insertions(+), 50 deletions(-) > create mode 100644 CryptoPkg/Library/OpensslLib/OpensslLibIa32.inf > create mode 100644 CryptoPkg/Library/OpensslLib/OpensslLibX64.inf > create mode 100644 CryptoPkg/Library/OpensslLib/ApiHooks.c > create mode 100644 CryptoPkg/Library/OpensslLib/OpensslLibConstructor.c > create mode 100644 CryptoPkg/Library/OpensslLib/Ia32/crypto/aes/aesni-x86.nasm > create mode 100644 CryptoPkg/Library/OpensslLib/Ia32/crypto/aes/vpaes-x86.nasm > create mode 100644 CryptoPkg/Library/OpensslLib/Ia32/crypto/bn/bn-586.nasm > create mode 100644 CryptoPkg/Library/OpensslLib/Ia32/crypto/bn/co-586.nasm > create mode 100644 CryptoPkg/Library/OpensslLib/Ia32/crypto/bn/x86-gf2m.nasm > create mode 100644 CryptoPkg/Library/OpensslLib/Ia32/crypto/bn/x86-mont.nasm > create mode 100644 CryptoPkg/Library/OpensslLib/Ia32/crypto/des/crypt586.nasm > create mode 100644 CryptoPkg/Library/OpensslLib/Ia32/crypto/des/des-586.nasm > create mode 100644 CryptoPkg/Library/OpensslLib/Ia32/crypto/md5/md5-586.nasm > create mode 100644 CryptoPkg/Library/OpensslLib/Ia32/crypto/modes/ghash-x86.nasm > create mode 100644 CryptoPkg/Library/OpensslLib/Ia32/crypto/rc4/rc4-586.nasm > create mode 100644 CryptoPkg/Library/OpensslLib/Ia32/crypto/sha/sha1-586.nasm > create mode 100644 CryptoPkg/Library/OpensslLib/Ia32/crypto/sha/sha256-586.nasm > create mode 100644 CryptoPkg/Library/OpensslLib/Ia32/crypto/sha/sha512-586.nasm > create mode 100644 CryptoPkg/Library/OpensslLib/Ia32/crypto/x86cpuid.nasm > create mode 100644 CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-mb-x86_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-sha256-x86_64.nasm > create mode 100644 CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-x86_64.nasm > create mode 100644 CryptoPkg/Library/OpensslLib/X64/crypto/aes/vpaes-x86_64.nasm > create mode 100644 CryptoPkg/Library/OpensslLib/X64/crypto/bn/rsaz-avx2.nasm > create mode 100644 CryptoPkg/Library/OpensslLib/X64/crypto/bn/rsaz-x86_64.nasm > create mode 100644 CryptoPkg/Library/OpensslLib/X64/crypto/bn/x86_64-gf2m.nasm > create mode 100644 CryptoPkg/Library/OpensslLib/X64/crypto/bn/x86_64-mont.nasm > create mode 100644 CryptoPkg/Library/OpensslLib/X64/crypto/bn/x86_64-mont5.nasm > create mode 100644 CryptoPkg/Library/OpensslLib/X64/crypto/md5/md5-x86_64.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/rc4/rc4-md5-x86_64.nasm > create mode 100644 CryptoPkg/Library/OpensslLib/X64/crypto/rc4/rc4-x86_64.nasm > create mode 100644 CryptoPkg/Library/OpensslLib/X64/crypto/sha/keccak1600-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-x86_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.nasm > create mode 100644 CryptoPkg/Library/OpensslLib/uefi-asm.conf > > -- > 2.16.2.windows.1 >