-
-
Notifications
You must be signed in to change notification settings - Fork 32.5k
gh-135401: Test AWS-LC as a cryptography library in CI #135402
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
57209fe
8fb1016
67fd836
4f0928b
b65d662
6791473
269dc10
cd74e2b
24fbecf
fa08737
3f3a70b
7d37e6a
6eb1190
8f4a0eb
7ebee26
840923d
3850ba0
be1b72c
c655484
99df7d5
8f95caa
31506be
4312b5a
f4968da
3134a9e
f8fde35
eb11bca
4d9147c
7311e42
13dfd95
22470c1
e24bde5
69f69e6
a0d7b5f
a2efcda
38afe99
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5,6 +5,7 @@ apt-get -yq install \ | |
build-essential \ | ||
pkg-config \ | ||
ccache \ | ||
cmake \ | ||
gdb \ | ||
lcov \ | ||
libb2-dev \ | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
Add a new GitHub CI job to test the :mod:`ssl` module with `AWS-LC <https://github.com/aws/aws-lc>`_ as the backing cryptography and TLS library. |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,12 +1,12 @@ | ||
#!./python | ||
"""Run Python tests against multiple installations of OpenSSL and LibreSSL | ||
"""Run Python tests against multiple installations of cryptography libraries | ||
|
||
The script | ||
|
||
(1) downloads OpenSSL / LibreSSL tar bundle | ||
(1) downloads the tar bundle | ||
(2) extracts it to ./src | ||
(3) compiles OpenSSL / LibreSSL | ||
(4) installs OpenSSL / LibreSSL into ../multissl/$LIB/$VERSION/ | ||
(3) compiles the relevant library | ||
(4) installs that library into ../multissl/$LIB/$VERSION/ | ||
(5) forces a recompilation of Python modules using the | ||
header and library files from ../multissl/$LIB/$VERSION/ | ||
(6) runs Python's test suite | ||
|
@@ -61,6 +61,10 @@ | |
LIBRESSL_RECENT_VERSIONS = [ | ||
] | ||
|
||
AWSLC_RECENT_VERSIONS = [ | ||
"1.55.0", | ||
] | ||
|
||
# store files in ../multissl | ||
HERE = os.path.dirname(os.path.abspath(__file__)) | ||
PYTHONROOT = os.path.abspath(os.path.join(HERE, '..', '..')) | ||
|
@@ -70,9 +74,9 @@ | |
parser = argparse.ArgumentParser( | ||
prog='multissl', | ||
description=( | ||
"Run CPython tests with multiple OpenSSL and LibreSSL " | ||
"Run CPython tests with multiple cryptography libraries" | ||
"versions." | ||
) | ||
), | ||
) | ||
parser.add_argument( | ||
'--debug', | ||
|
@@ -102,6 +106,14 @@ | |
"OpenSSL and LibreSSL versions are given." | ||
).format(LIBRESSL_RECENT_VERSIONS, LIBRESSL_OLD_VERSIONS) | ||
) | ||
parser.add_argument( | ||
'--awslc', | ||
nargs='+', | ||
default=(), | ||
help=( | ||
"AWS-LC versions, defaults to '{}' if no crypto library versions are given." | ||
).format(AWSLC_RECENT_VERSIONS) | ||
) | ||
parser.add_argument( | ||
'--tests', | ||
nargs='*', | ||
|
@@ -111,7 +123,7 @@ | |
parser.add_argument( | ||
'--base-directory', | ||
default=MULTISSL_DIR, | ||
help="Base directory for OpenSSL / LibreSSL sources and builds." | ||
help="Base directory for crypto library sources and builds." | ||
) | ||
parser.add_argument( | ||
'--no-network', | ||
|
@@ -124,8 +136,8 @@ | |
choices=['library', 'modules', 'tests'], | ||
default='tests', | ||
help=( | ||
"Which steps to perform. 'library' downloads and compiles OpenSSL " | ||
"or LibreSSL. 'module' also compiles Python modules. 'tests' builds " | ||
"Which steps to perform. 'library' downloads and compiles a crypto" | ||
"library. 'module' also compiles Python modules. 'tests' builds " | ||
"all and runs the test suite." | ||
) | ||
) | ||
|
@@ -453,6 +465,34 @@ class BuildLibreSSL(AbstractBuilder): | |
build_template = "libressl-{}" | ||
|
||
|
||
class BuildAWSLC(AbstractBuilder): | ||
library = "AWS-LC" | ||
url_templates = ( | ||
"https://github.com/aws/aws-lc/archive/refs/tags/v{v}.tar.gz", | ||
) | ||
src_template = "aws-lc-{}.tar.gz" | ||
build_template = "aws-lc-{}" | ||
|
||
def _build_src(self, config_args=()): | ||
cwd = self.build_dir | ||
log.info("Running build in {}".format(cwd)) | ||
env = os.environ.copy() | ||
env["LD_RUN_PATH"] = self.lib_dir # set rpath | ||
if self.system: | ||
env['SYSTEM'] = self.system | ||
cmd = [ | ||
"cmake", | ||
"-DCMAKE_BUILD_TYPE=RelWithDebInfo", | ||
"-DCMAKE_PREFIX_PATH={}".format(self.install_dir), | ||
"-DCMAKE_INSTALL_PREFIX={}".format(self.install_dir), | ||
"-DBUILD_SHARED_LIBS=ON", | ||
"-DBUILD_TESTING=OFF", | ||
"-DFIPS=OFF", | ||
] | ||
self._subprocess_call(cmd, cwd=cwd, env=env) | ||
self._subprocess_call(["make", "-j{}".format(self.jobs)], cwd=cwd, env=env) | ||
|
||
|
||
def configure_make(): | ||
if not os.path.isfile('Makefile'): | ||
log.info('Running ./configure') | ||
|
@@ -467,9 +507,10 @@ def configure_make(): | |
|
||
def main(): | ||
args = parser.parse_args() | ||
if not args.openssl and not args.libressl: | ||
if not args.openssl and not args.libressl and not args.awslc: | ||
args.openssl = list(OPENSSL_RECENT_VERSIONS) | ||
args.libressl = list(LIBRESSL_RECENT_VERSIONS) | ||
args.awslc = list(AWSLC_RECENT_VERSIONS) | ||
Comment on lines
+510
to
+513
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I don't like the rigidity of this as it scales poorly when we introduce more implementations (I don't see BoringSSL for instance). But let's keep this as is and I'll refactor this script in a separate PR. |
||
if not args.disable_ancient: | ||
args.openssl.extend(OPENSSL_OLD_VERSIONS) | ||
args.libressl.extend(LIBRESSL_OLD_VERSIONS) | ||
|
@@ -496,22 +537,15 @@ def main(): | |
|
||
# download and register builder | ||
builds = [] | ||
|
||
for version in args.openssl: | ||
build = BuildOpenSSL( | ||
version, | ||
args | ||
) | ||
build.install() | ||
builds.append(build) | ||
|
||
for version in args.libressl: | ||
build = BuildLibreSSL( | ||
version, | ||
args | ||
) | ||
build.install() | ||
builds.append(build) | ||
for build_class, versions in [ | ||
(BuildOpenSSL, args.openssl), | ||
(BuildLibreSSL, args.libressl), | ||
(BuildAWSLC, args.awslc), | ||
]: | ||
for version in versions: | ||
build = build_class(version, args) | ||
build.install() | ||
builds.append(build) | ||
|
||
if args.steps in {'modules', 'tests'}: | ||
for build in builds: | ||
|
@@ -539,7 +573,7 @@ def main(): | |
else: | ||
print('Executed all SSL tests.') | ||
|
||
print('OpenSSL / LibreSSL versions:') | ||
print('OpenSSL / LibreSSL / AWS-LC versions:') | ||
for build in builds: | ||
print(" * {0.library} {0.version}".format(build)) | ||
|
||
|
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Uh oh!
There was an error while loading. Please reload this page.