From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by mx.groups.io with SMTP id smtpd.web12.2646.1584440817219177385 for ; Tue, 17 Mar 2020 03:26:57 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 192.55.52.88, mailfrom: christopher.j.zurcher@intel.com) IronPort-SDR: XkoCbUfPQZpyKYo6qCv9Ht0u2VDD3UG5l57vGdvzlGuXkp1709i1sGiTxTjqDR+UNJyALFlnzL ofRSEhpTSjSA== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Mar 2020 03:26:56 -0700 IronPort-SDR: B9pKfY2Y7U4xY9Cx0ss8+HXkkafKtQSHKJpNyv53HWZURBnVdCFauKCBJI/Ng2ZphBQ41wCu8c c8neOB5S3U9A== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.70,564,1574150400"; d="scan'208";a="244436575" Received: from cjzurch-desk.amr.corp.intel.com ([10.9.70.181]) by orsmga003.jf.intel.com with ESMTP; 17 Mar 2020 03:26:56 -0700 From: "Zurcher, Christopher J" To: devel@edk2.groups.io Cc: Jian J Wang , Xiaoyu Lu , Eugene Cohen , Ard Biesheuvel Subject: [PATCH 0/1] CryptoPkg/OpensslLib: Add native instruction support for IA32 and X64 Date: Tue, 17 Mar 2020 03:26:55 -0700 Message-Id: <20200317102656.20032-1-christopher.j.zurcher@intel.com> X-Mailer: git-send-email 2.16.2.windows.1 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 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