diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml new file mode 100644 index 00000000..3c79b0fa --- /dev/null +++ b/.github/workflows/nix.yml @@ -0,0 +1,53 @@ +name: Nix + +on: + push: + branches: [ "master" ] + pull_request: + branches: [ "master" ] + +jobs: + standalone: + runs-on: ubuntu-latest + permissions: + contents: read + + strategy: + matrix: + library: [ "botan", "cryptopp", "openssl", "boringssl", "gcrypt", "mbedtls", "ippcp", "nettle", "libressl" ] + fail-fast: false + name: Build standalone ${{ matrix.library }} + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + fetch-tags: true + fetch-depth: -1 + + - name: Setup libraries + run: | + sudo apt update + sudo apt install + + - uses: DeterminateSystems/nix-installer-action@v13 + with: + diagnostic-endpoint: "" + + - uses: DeterminateSystems/magic-nix-cache-action@v7 + with: + diagnostic-endpoint: "" + + - name: Build library + run: | + nix build ".#lib.${{ matrix.library }}.default" + + - name: Build shim + run: | + nix build ".#shim.${{ matrix.library }}.default" + + - name: Build standalone + run: | + nix build ".?submodules=1#${{ matrix.library }}.default" + + - name: List library + run: nix run ".?submodules=1#${{ matrix.library }}.default" -- list-libs diff --git a/.gitignore b/.gitignore index aa7fbd3f..f8aa5f86 100644 --- a/.gitignore +++ b/.gitignore @@ -46,3 +46,4 @@ # Ignore Gradle build output directory build +build_all diff --git a/README.md b/README.md index 379f05f1..3061407e 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ cryptographic libraries. It consists of four separate parts: - The ECTester applet, a JavaCard applet that provides the testing interface - The ECTesterReader app, a reader app that works with the applet - - The ECTesterStandalone app, which works with software libraries + - The ECTesterStandalone app, which tests software cryptographic libraries - Jupyter notebooks for analysis and visualization of data from the apps For more information on ECC support on JavaCards see the [GitHub page](https://crocs-muni.github.io/ECTester/), with results, tables and docs. @@ -50,10 +50,9 @@ git submodule update --init --recursive # To initialize submodules (JavaCa The applet comes in several flavors, targeting JavaCard `2.2.1`, `2.2.2` and `3.0.5`. The `2.2.2` and later flavors support extended length APDUs which are necessary for some commands to work properly. -The `:standalone:libs` task invokes a Makefile in `standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni`, which tries to build the -C/C++ shim libraries required for ECTester to test the actual native cryptographic libraries from Java. -The Makefile uses pkg-config to locate the libraries installed, thus if non-standard location of the tested libraries is -used, the Makefile or your pkg-config needs some changes to work. +To build the standalone part, which involves numerous cryptographic libraries, one has two options. + - Install these cryptographic libraries system-wide and let the build use those. + - Use [Nix](https://nixos.org/) to build the tool part with given library versions. See the section on [setup](#setup-1) of standalone library testing for more details. @@ -309,6 +308,48 @@ For more information on ECC libraries see [LIBS](docs/LIBS.md). ### Setup +ECTester interfaces with native libraries by using custom shim libraries that expose the functionality via the +[Java Native Interface](https://en.wikipedia.org/wiki/Java_Native_Interface), these can be found in the +[standalone/src/main/java/cz/crcs/ectester/standalone/libs/jni](standalone/src/main/java/cz/crcs/ectester/standalone/libs/jni) directory along with a Makefile +(Makefile.bat for Windows). The shim library will depend on the native library, and have a name like +`boringssl_provider.so`, `botan_provider.so`, `cryptopp_provider.so` and `openssl_provider.so`. +The Makefile has a target for every library that it supports that builds its shim, see the `help` +target for more info. + +However, building these shims and in general the target libraries can be tricky to do so reliably across +systems and setups. Thus ECTester offers two ways of doing so. + + - The first way is to install the libraries system-wide and rely on pkg-config to find proper configuration + for the shims and link them dynamically. + - The second way is to use [Nix](https://nixos.org/) to build the given versions of the libraries and shims and + link them statically. + +#### Nix + +Install [Nix](https://nixos.org/download/), then to build: + +```shell +# To build a library in a given version run (example OpenSSL 3.3.1): +nix build ".#lib.openssl.v331" +# To build a shim using a given version of a library (example mbedTLS 3.5): +nix build ".#shim.mbedtls.v35" +# To build ECTesterStandalone.jar with a given version of a library (example libgcrypt 1.9.4): +nix build ".#gcrypt.v194" +# The available versions of the libraries are in the nix/*_pkg_versions.json files. +# The "default" version always points to the most recent version. +``` + +Each of the build steps above puts (symlinks really) its results into `./result` directory. +However, subsequent builds then replace that with their own results. To run ECTesterStandalone +with a given library version and arguments do: + +```shell +# This runs the default test-suite agains LibreSSL 3.9.2 +nix run ".#libressl.v392" --- test default LibreSSL +``` + +#### Gradle + ```shell ./gradlew :standalone:libs # To build the native library shims. ./gradlew :standalone:uberJar # To build the standalone tool (jar) -> "standalone/build/libs/ECTesterStandalone.jar" @@ -324,16 +365,22 @@ successfully or that the actual native library couldn't be found and loaded on r build errors during the ant run in the `libs-try` step, for the latter, if the library is in an non-standard location specifying `LD_LIBRARY_PATH` will help load it. Consulting the next sections should help solve both. -#### Native - -ECTester interfaces with native libraries by using custom shim libraries that expose the functionality via the [Java Native Interface](https://en.wikipedia.org/wiki/Java_Native_Interface), these can be found in the [standalone/src/main/java/cz/crcs/ectester/standalone/libs/jni](standalone/src/main/java/cz/crcs/ectester/standalone/libs/jni) directory along with a Makefile (Makefile.bat for Windows). The shim library will depend on the native library, and have a name like `boringssl_provider.so`, `botan_provider.so`, `cryptopp_provider.so` and `openssl_provider.so`. The Makefile has a target for every library that it supports that builds its shim, see the `help` target for more info. The Makefile is automatically ran when the `:standalone:libs` gradle task is triggered, so if all is setup correctly, you do not need to deal with the Makefile while building. +The `:standalone:libs` task invokes the Makefile, which tries to build the +C/C++ shim libraries required for ECTester to test the actual native cryptographic libraries from Java. +The Makefile uses pkg-config to locate the libraries installed, thus if non-standard location of the tested libraries is +used, the Makefile or your pkg-config needs some changes to work. -There are two important environmental variables that should be set in your environment. First, you should set `JAVA_HOME` which should point to your JDK. The tooling uses `JAVA_HOME` to locate native Java library headers, like `jni.h`. Second, ECTester uses pkg-config to locate the native libraries, if your pkg-config files are in an unusual place the pkg-config command would not find them by default, you should set `PKG_CONFIG_PATH` to the directory containing the `*.pc` files. If pkg-config files are unavailable for the library you are trying to test, you will need to change the Makefile manually to apply the correct options to the commands (CFLAGS, include options, linker options...). +There are two important environmental variables that should be set in your environment. First, you should set +`JAVA_HOME` which should point to your JDK. The tooling uses `JAVA_HOME` to locate native Java library headers, +like `jni.h`. Second, ECTester uses pkg-config to locate the native libraries, if your pkg-config files are in an +unusual place the pkg-config command would not find them by default, you should set `PKG_CONFIG_PATH` to the directory +containing the `*.pc` files. If pkg-config files are unavailable for the library you are trying to test, you will need +to change the Makefile manually to apply the correct options to the commands (CFLAGS, include options, linker options...). Below you can see how a full build with all the libraries currently supported on Linux looks ``` > cd standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni -> make +> make -f Makefile.ext cc -DLTM_DESC -fPIC -I"/usr/lib/jvm/java-21-openjdk/include" -I"/usr/lib/jvm/java-21-openjdk/include/linux" -I. -Wno-deprecated-declarations -O2 -c tomcrypt.c cc -fPIC -I"/usr/lib/jvm/java-21-openjdk/include" -I"/usr/lib/jvm/java-21-openjdk/include/linux" -I. -Wno-deprecated-declarations -O2 -c c_utils.c cc -o lib_timing.so -shared -fPIC -I"/usr/lib/jvm/java-21-openjdk/include" -I"/usr/lib/jvm/java-21-openjdk/include/linux" -I. -Wno-deprecated-declarations -O2 -Wl,-soname,lib_timing.so c_timing.c @@ -421,20 +468,6 @@ on `LD_LIBRARY_PATH`. Consult the GitHub CI [build script](.github/workflows/build.yml) for an example that runs on Ubuntu 22.04. -#### Java - -OpenJDK JRE is required to test ECDH on Windows properly, as Oracle JRE requires the Java Cryptography Providers -for certain classes (such as a [KeyAgreement](https://docs.oracle.com/javase/8/docs/api/javax/crypto/KeyAgreement.html)) -to be signed by keys that are signed by their JCA Code Signing Authority. ECTester internally uses Java Cryptography Provider -API to expose and test native libraries. - -Installing the Java Cryptography Extension Unlimited Strength policy files is necessary to do testing -(for Java 8) with quite a lot of practical key sizes, they are available for download: - - - [Java 8](http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html) - -To install, place them in `${java.home}/jre/lib/security/`. - ### Examples Snippet below shows how the `list-libs` command for well, listing currently supported libraries, behaves if all supported libraries are present (on Linux). diff --git a/fetchReleases.py b/fetchReleases.py new file mode 100644 index 00000000..e6f03b57 --- /dev/null +++ b/fetchReleases.py @@ -0,0 +1,432 @@ +#!/usr/bin/env python3 + +import argparse + +import json +import jinja2 +import re +import requests +import shutil +import tempfile + +import pathlib +import subprocess as sp + +from base64 import b32encode, b32decode, b64encode, b16decode +from bs4 import BeautifulSoup +from packaging.version import parse as parse_version, Version + +env = jinja2.Environment() + +all_versions_template = env.from_string("""{ + buildECTesterStandalone +}: +{ {% for version in pkg_versions %} + {{ version }} {% endfor %} +}""") + +def get_source_hash(url, unpack=False): + digest_type = "sha256" + + cmd = ["nix-prefetch-url"] + if unpack: + cmd.append("--unpack") + cmd.extend(["--type", digest_type, url]) + + digest_nixbase32 = sp.check_output(cmd, stderr=sp.DEVNULL).strip() + digest_sri = sp.check_output(["nix", "hash", "to-sri", "--type", digest_type, digest_nixbase32.decode()], stderr=sp.DEVNULL).strip().decode() + return digest_sri + +def serialize_versions(pkg, renders, versions): + sorted_versions = {k: {kk: vv for kk, vv in v.items() if kk != "sort"} for k, v in sorted(versions.items(), key=lambda item: item[1]["sort"], reverse=True)} + + # all_versions = all_versions_template.render(pkg_versions=renders).strip() + # with open(f"./nix/{pkg}_pkg_versions.nix", "w") as handle: + # handle.write(all_versions) + + with open(f"./nix/{pkg}_pkg_versions.json", "w") as handle: + json.dump(sorted_versions, handle, indent=4) + +def fetch_botan(): + pkg = "botan" + # NOTE: this way omits the older releases at https://botan.randombit.net/releases/old + release_list = "https://botan.randombit.net/releases/" + download_url = "https://botan.randombit.net/releases/{version}" + resp = requests.get(release_list) + soup = BeautifulSoup(resp.content, 'html.parser') + + single_version_template = env.from_string("""{{ flat_version }} = buildECTesterStandalone { + {{ pkg }} = { version="{{ version }}"; source_extension="{{ ext }}"; hash="{{ digest }}"; }; + };""") + + renders = [] + versions = {} + for link in soup.find_all("a"): + if link.text.startswith("Botan") and not link.text.endswith('.asc'): + download_link = download_url.format(version=link['href']) + + match = re.match(r"Botan-(?P\d+)\.(?P\d+)\.(?P\d+)\.(?P.*)", link.text) + if match['major'] == "3": + # TODO: Handle Botan-3 + print(f"Skipping Botan-3 {match}") + continue + version = f"{match['major']}.{match['minor']}.{match['patch']}" + ext = f"{match['ext']}" + + digest = get_source_hash(download_link) + # NOTE: use underscore to separate the versions? + flat_version = f"v{match['major']}{match['minor']}{match['patch']}" + print(f"{version}:{digest}") + + rendered = single_version_template.render(pkg=pkg, digest=digest, ext=ext, flat_version=flat_version, version=version).strip() + renders.append(rendered) + versions[flat_version] = { + "version": version, + "source_extension": ext, + "hash": digest, + "sort": parse_version(version) + } + serialize_versions(pkg, renders, versions) + +def fetch_cryptopp(): + pkg = "cryptopp" + owner = "weidai11" + repo = "cryptopp" + release_url = f"https://api.github.com/repos/{owner}/{repo}/releases" + resp = requests.get(release_url) + + single_version_template = env.from_string("""{{ flat_version }} = buildECTesterStandalone { + {{ pkg }} = { version="{{ version }}"; hash="{{ digest }}"; }; + };""") + renders = [] + versions = {} + for release in resp.json(): + if not release['draft'] and not release['prerelease']: + _, *version_values = release['tag_name'].split('_') + underscored_version = '_'.join(version_values) + flat_version = "v" + "".join(version_values) + download_url = f"https://github.com/{owner}/{repo}/archive/{release['tag_name']}.tar.gz" + digest = get_source_hash(download_url, unpack=True) + print(f"{underscored_version}:{digest}") + + rendered = single_version_template.render(pkg=pkg, digest=digest, flat_version=flat_version, version=underscored_version).strip() + renders.append(rendered) + versions[flat_version] = { + "version": underscored_version, + "hash": digest, + "sort": parse_version(underscored_version.replace("_", ".")) + } + serialize_versions(pkg, renders, versions) + +def fetch_openssl(): + pkg = "openssl" + owner = "openssl" + repo = "openssl" + release_url = f"https://api.github.com/repos/{owner}/{repo}/releases" + resp_releases = requests.get(release_url) + tags_url = f"https://api.github.com/repos/{owner}/{repo}/git/matching-refs/tags" + resp_tags = requests.get(tags_url) + + tags = [release["tag_name"] for release in resp_releases.json() if not release["draft"] and not release["prerelease"]] + tags += [tag_ref["ref"].split("/")[-1] for tag_ref in resp_tags.json() if tag_ref["ref"].startswith("refs/tags/openssl-") or tag_ref["ref"].startswith("refs/tags/OpenSSL_")] + tags = list(filter(lambda tag: "FIPS" not in tag and "reformat" not in tag and "alpha" not in tag and "beta" not in tag and "pre" not in tag, tags)) + + single_version_template = env.from_string("""{{ flat_version }} = buildECTesterStandalone { + {{ pkg }} = { version="{{ version }}"; hash="{{ digest }}"; }; + };""") + renders = [] + versions = {} + for tag in tags: + if tag.startswith("OpenSSL_"): + match = re.match(r"OpenSSL_(?P\d+)_(?P\d+)_(?P\d+)(?P.*)", tag) + sort_version = f"{match['major']}.{match['minor']}.{match['patch']}{'+' + match['ext'] if match['ext'] else ''}" + dotted_version = f"{match['major']}.{match['minor']}.{match['patch']}{ match['ext'] if match['ext'] else ''}" + else: + try: + _, dotted_version = tag.split('-') + sort_version = dotted_version + except ValueError: + continue + flat_version = "v" + "".join(dotted_version.split('.')) + download_url = f"https://www.openssl.org/source/openssl-{dotted_version}.tar.gz" + old_url = f"https://www.openssl.org/source/old/openssl-{dotted_version}.tar.gz" + try: + digest = get_source_hash(download_url) + except Exception: + try: + digest = get_source_hash(old_url) + except Exception: + print(f"Skipping {dotted_version} (unavailable)") + continue + print(f"{dotted_version}:{digest}") + versions[flat_version] = { + "version": dotted_version, + "hash": digest, + "sort": parse_version(sort_version) + } + + rendered = single_version_template.render(pkg=pkg, digest=digest, flat_version=flat_version, version=dotted_version).strip() + renders.append(rendered) + serialize_versions(pkg, renders, versions) + + +def fetch_tomcrypt(): + # fetch libtomcrypt + pass + +def fetch_gcrypt(): + pkg = "gcrypt" + release_list = "https://gnupg.org/ftp/gcrypt/libgcrypt/" + download_url = "https://gnupg.org/ftp/gcrypt/libgcrypt/{version}" + resp = requests.get(release_list) + soup = BeautifulSoup(resp.content, 'html.parser') + + single_version_template = env.from_string("""{{ flat_version }} = buildECTesterStandalone { + {{ pkg }} = { version="{{ version }}"; hash="{{ digest }}"; }; + };""") + + renders = [] + versions = {} + for link in soup.find_all("a"): + if link.text.startswith("libgcrypt") and link.text.endswith("tar.bz2"): + download_link = download_url.format(version=link['href']) + + match = re.match(r"libgcrypt-(?P\d+)\.(?P\d+)\.(?P\d+)(?P_do_not_use)?\.(?P.*)", link.text) + version = f"{match['major']}.{match['minor']}.{match['patch']}" + + digest = get_source_hash(download_link) + print(f"{version}:{digest}") + + flat_version = f"v{match['major']}{match['minor']}{match['patch']}" + if match['dont']: + flat_version += "_do_not_use" + + rendered = single_version_template.render(pkg=pkg, digest=digest, flat_version=flat_version, version=version).strip() + renders.append(rendered) + versions[flat_version] = { + "version": version, + "hash": digest, + "sort": parse_version(version) + } + serialize_versions(pkg, renders, versions) + +def fetch_boringssl(): + pkg = "boringssl" + upto = "76bb1411acf5cf6935586182a3a037d372ed1636" + + single_version_template = env.from_string("""{{ flat_version }} = buildECTesterStandalone { + {{ pkg }} = { rev="{{ rev }}"; hash="{{ digest }}"; }; + };""") + renders = [] + versions = {} + with tempfile.TemporaryDirectory() as repodir, tempfile.TemporaryDirectory() as gitdir: + repodir = pathlib.Path(repodir) + gitdir = pathlib.Path(gitdir) + sp.run(["git", "clone", "https://boringssl.googlesource.com/boringssl", repodir]) + # NOTE: we need to get rid of the .git so that it is not included in the derivation hash + shutil.move(repodir / ".git", gitdir) + + output = sp.check_output(["git", "-C", str(repodir), "--git-dir", str(gitdir / ".git"), "log", "--pretty=format:%H"]) + refs = output.decode().split('\n') + + upto_index = refs.index(upto) + + # pick roughly 100 commits evenly spaced from the "upto" commit + for i, rev in enumerate(refs[upto_index:0:-40]): + sp.run(["git", "-C", str(repodir), "--git-dir", str(gitdir / ".git"), "checkout", rev]) + digest = sp.check_output(["nix", "hash", "path", str(repodir)]).decode().strip() + print(f"{i + 1: 4d}:{rev}:{digest}") + abbrev_commit = str(rev[:8]) + + rendered = single_version_template.render(pkg=pkg, digest=digest, flat_version=f"r{abbrev_commit}", rev=rev).strip() + renders.append(rendered) + versions[f"r{abbrev_commit}"] = { + "rev": rev, + "hash": digest, + "sort": i + } + serialize_versions(pkg, renders, versions) + +def fetch_mbedtls(): + # Mbed-TLS/mbedtls + pkg = "mbedtls" + owner = "Mbed-TLS" + repo = "mbedtls" + release_url = f"https://api.github.com/repos/{owner}/{repo}/releases" + resp = requests.get(release_url) + + single_version_template = env.from_string("""{{ flat_version }} = buildECTesterStandalone { + {{ pkg }} = { version="{{ version }}"; hash="{{ digest }}"; }; + };""") + renders = [] + versions = {} + for release in resp.json(): + if not release['draft'] and not release['prerelease']: + tag = release["tag_name"] + version = tag.replace("mbedtls-", "v") + flat_version = version.replace('.', '') + download_url = f"https://github.com/{owner}/{repo}/archive/{tag}.tar.gz" + if version == "v3.6.0": + # TODO: Special case for the time being + digest = "sha256-tCwAKoTvY8VCjcTPNwS3DeitflhpKHLr6ygHZDbR6wQ=" + else: + digest = get_source_hash(download_url, unpack=True) + + print(f"{version}:{digest}") + + rendered = single_version_template.render(pkg=pkg, digest=digest, flat_version=flat_version, version=version).strip() + renders.append(rendered) + versions[flat_version] = { + "version": version, + "hash": digest, + "tag": tag, + "sort": parse_version(version) + } + serialize_versions(pkg, renders, versions) + +def fetch_ippcp(): + # https://api.github.com/repos/intel/ipp-crypto/releases + pkg = "ippcp" + owner = "intel" + repo = "ipp-crypto" + release_url = f"https://api.github.com/repos/{owner}/{repo}/releases" + resp = requests.get(release_url) + + single_version_template = env.from_string("""{{ flat_version }} = buildECTesterStandalone { + {{ pkg }} = { version="{{ version }}"; hash="{{ digest }}"; }; + };""") + renders = [] + versions = {} + for release in resp.json(): + if not release['draft'] and not release['prerelease']: + version = release['tag_name'].split('_')[1] + flat_version = "v" + version.replace('.', '_') + download_url = f"https://github.com/{owner}/{repo}/archive/{release['tag_name']}.tar.gz" + digest = get_source_hash(download_url, unpack=True) + print(f"{version}:{digest}") + + rendered = single_version_template.render(pkg=pkg, digest=digest, flat_version=flat_version, version=version).strip() + renders.append(rendered) + versions[flat_version] = { + "version": version, + "hash": digest, + "sort": parse_version(version.replace("u", "+u")) + } + serialize_versions(pkg, renders, versions) + +def fetch_nettle(): + # https://api.github.com/repos/intel/ipp-crypto/releases + pkg = "nettle" + owner = "gnutls" + repo = "nettle" + release_url = f"https://api.github.com/repos/{owner}/{repo}/tags" + resp = requests.get(release_url) + + single_version_template = env.from_string("""{{ flat_version }} = buildECTesterStandalone { + {{ pkg }} = { version="{{ version }}"; tag="{{ tag }}"; hash="{{ digest }}"; }; + };""") + renders = [] + versions = {} + for tag in resp.json(): + if tag['name'] == 'release_nettle_0.2.20010617': + continue + if tag['name'] == 'nettle_3.5_release_20190626': + # broken upstream! https://git.lysator.liu.se/nettle/nettle/-/commit/ee5d62898cf070f08beedc410a8d7c418588bd95 + continue + version = tag['name'].split('_')[1] + # NOTE skip release candidates + if re.search(r'\drc\d', version): + continue + flat_version = "v" + version.replace('.', '_') + # download_url = f"https://github.com/{owner}/{repo}/archive/{tag['name']}.tar.gz" + download_url = f"mirror://gnu/nettle/nettle-{version}.tar.gz" + digest = get_source_hash(download_url, unpack=False) + print(f"{version}:{digest}") + + rendered = single_version_template.render( + pkg=pkg, digest=digest, flat_version=flat_version, tag=tag['name'], version=version).strip() + renders.append(rendered) + versions[flat_version] = { + "version": version, + "tag": tag['name'], + "hash": digest, + "sort": parse_version(version) + } + serialize_versions(pkg, renders, versions) + + +def fetch_libressl(): + pkg = "libressl" + release_list = "https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/" + download_url = "mirror://openbsd/LibreSSL/libressl-{version}.tar.gz" + resp = requests.get(release_list) + soup = BeautifulSoup(resp.content, 'html.parser') + + single_version_template = env.from_string("""{{ flat_version }} = buildECTesterStandalone { + {{ pkg }} = { version="{{ version }}"; hash="{{ digest }}"; }; + };""") + + renders = [] + versions = {} + for link in soup.find_all("a"): + if link.text.startswith("libressl") and link.text.endswith('.tar.gz'): + match = re.match(r"libressl-(?P\d+)\.(?P\d+)\.(?P\d+)\.tar.gz", link.text) + version = f"{match['major']}.{match['minor']}.{match['patch']}" + download_link = download_url.format(version=version) + digest = get_source_hash(download_link) + print(f"{version}:{digest}") + # NOTE: use underscore to separate the versions? + flat_version = f"v{match['major']}{match['minor']}{match['patch']}" + + rendered = single_version_template.render(pkg=pkg, digest=digest, flat_version=flat_version, version=version).strip() + renders.append(rendered) + versions[flat_version] = { + "version": version, + "hash": digest, + "sort": parse_version(version) + } + serialize_versions(pkg, renders, versions) + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("lib") + args = parser.parse_args() + + print(f"Fetching versions and source hashes for: {args.lib}") + + match args.lib: + case "botan": + fetch_botan() + case "cryptopp": + fetch_cryptopp() + case "openssl": + fetch_openssl() + case "boringssl": + fetch_boringssl() + case "gcrypt": + fetch_gcrypt() + case "mbedtls": + fetch_mbedtls() + case "ippcp": + fetch_ippcp() + case "nettle": + fetch_nettle() + case "libressl": + fetch_libressl() + case "all": + fetch_botan() + fetch_cryptopp() + fetch_openssl() + fetch_boringssl() + fetch_gcrypt() + fetch_mbedtls() + fetch_ippcp() + fetch_nettle() + fetch_libressl() + case _: + print("Unknown library") + + +if __name__ == '__main__': + main() diff --git a/flake.lock b/flake.lock new file mode 100644 index 00000000..bb646a90 --- /dev/null +++ b/flake.lock @@ -0,0 +1,130 @@ +{ + "nodes": { + "custom-nixpkgs": { + "locked": { + "lastModified": 1721747370, + "narHash": "sha256-H+T7mrJ6JdnFLecs7xXwvuEM4aSUgUOc5uSvjbXoSOQ=", + "owner": "quapka", + "repo": "nixpkgs", + "rev": "ab32dd2547891356585d1cdb2f03f7070b1d1f89", + "type": "github" + }, + "original": { + "owner": "quapka", + "ref": "customPkgs", + "repo": "nixpkgs", + "type": "github" + } + }, + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "locked": { + "lastModified": 1605370193, + "narHash": "sha256-YyMTf3URDL/otKdKgtoMChu4vfVL3vCMkRqpGifhUn0=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5021eac20303a61fafe17224c087f5519baed54d", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "gradle2nix": { + "inputs": { + "flake-utils": "flake-utils_2", + "nixpkgs": "nixpkgs" + }, + "locked": { + "lastModified": 1718325867, + "narHash": "sha256-UU9a/haXvr0qKo4noB40K7d47Zl9ZiigVE5rkeHBS7s=", + "owner": "tadfisher", + "repo": "gradle2nix", + "rev": "03c1b713ad139eb6dfc8d463b5bd348368125cf1", + "type": "github" + }, + "original": { + "owner": "tadfisher", + "repo": "gradle2nix", + "rev": "03c1b713ad139eb6dfc8d463b5bd348368125cf1", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1718530797, + "narHash": "sha256-pup6cYwtgvzDpvpSCFh1TEUjw2zkNpk8iolbKnyFmmU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "b60ebf54c15553b393d144357375ea956f89e9a9", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1711001935, + "narHash": "sha256-URtGpHue7HHZK0mrHnSf8wJ6OmMKYSsoLmJybrOLFSQ=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "20f77aa09916374aa3141cbc605c955626762c9a", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "custom-nixpkgs": "custom-nixpkgs", + "flake-utils": "flake-utils", + "gradle2nix": "gradle2nix", + "nixpkgs": "nixpkgs_2" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 00000000..a6759107 --- /dev/null +++ b/flake.nix @@ -0,0 +1,920 @@ +{ + description = "ECTester"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + flake-utils.url = "github:numtide/flake-utils"; + gradle2nix.url = "github:tadfisher/gradle2nix/03c1b713ad139eb6dfc8d463b5bd348368125cf1"; + custom-nixpkgs.url = "github:quapka/nixpkgs/customPkgs"; + }; + + outputs = + { + self, + nixpkgs, + custom-nixpkgs, + flake-utils, + gradle2nix, + ... + }: + flake-utils.lib.eachDefaultSystem ( + system: + let + overlays = [ ]; + pkgs = import nixpkgs { inherit system overlays; }; + customPkgs = import custom-nixpkgs { inherit system overlays; }; + + # removes the patch/revision from the version. E.g. getMajorMinor "1.2.3" = "1.2" + getMajorMinor = + version: builtins.concatStringsSep "." (pkgs.lib.take 2 (builtins.splitVersion version)); + + # Altered upstream packages + boringsslBuilder = + { + rev ? null, + hash ? null, + }: + pkgs.boringssl.overrideAttrs ( + final: prev: rec { + version = if rev != null then rev else prev.version; + src = + if rev == null then + prev.src + else + pkgs.fetchgit { + url = "https://boringssl.googlesource.com/boringssl"; + inherit rev hash; + }; + env.NIX_CFLAGS_COMPILE = "-Wno-error=stringop-overflow -Wno-error=array-parameter=2 -Wno-error=maybe-uninitialized -Wno-error=ignored-attributes"; + postFixup = '' + cp $out/lib/libcrypto.a $out/lib/lib_boringssl.a + ''; + } + ); + # FIXME: `nix develeop` now has different version than `nix run` + opensslBuilder = + { + version ? null, + hash ? null, + }: + if version == null then + (pkgs.openssl.override { static = true; }) + else + (pkgs.openssl.override { + static = true; + enableKTLS = false; + }).overrideAttrs + ( + final: prev: rec { + inherit version; + src = pkgs.fetchurl { + url = "https://www.openssl.org/source/openssl-${version}.tar.gz"; + inherit hash; + }; + # FIXME Removing patches might cause unwanted things; this should be version based! + patches = [ ]; + + configureFlags = + if pkgs.lib.versionOlder version "1.1.2" then + (pkgs.lib.lists.remove "no-module" prev.configureFlags) + else + prev.configureFlags; + + preConfigure = + if pkgs.lib.versionOlder version "1.1.0h" && pkgs.lib.versionAtLeast version "1.1.0" then + '' + substituteInPlace Configure test/build.info test/run_tests.pl util/process_docs.pl --replace-warn "qw/glob/" "qw/bsd_glob/" + for t in test/recipes/*.t; do + substituteInPlace "$t" --replace-quiet "qw/glob/" "qw/bsd_glob/" + done + '' + else + ""; + } + ); + botan2Builder = + { + version ? null, + source_extension ? null, + hash ? null, + }: + if version == null then + pkgs.botan2 + else + pkgs.botan2.overrideAttrs ( + final: prev: { + inherit version; + src = pkgs.fetchurl { + urls = [ "http://botan.randombit.net/releases/Botan-${version}.${source_extension}" ]; + inherit hash; + }; + patches = + { + "2.0.0" = [ + ./nix/botan-2.0.0-2.0.1.patch + ./nix/botan-2.0.0.patch + ]; + "2.0.1" = ./nix/botan-2.0.0-2.0.1.patch; + "2.2.0" = [ ./nix/botan-fe25519-stdexcept.patch ]; + "2.3.0" = [ + ./nix/botan-fe25519-stdexcept.patch + ./nix/botan-types-stdexcept.patch + ]; + "2.4.0" = [ + ./nix/botan-fe25519-stdexcept.patch + ./nix/botan-types-stdexcept.patch + ]; + "2.5.0" = [ + ./nix/botan-fe25519-stdexcept.patch + ./nix/botan-types-stdexcept.patch + ]; + "2.6.0" = [ + ./nix/botan-fe25519-stdexcept.patch + ./nix/botan-types-stdexcept.patch + ]; + "2.7.0" = [ + ./nix/botan-fe25519-stdexcept.patch + ./nix/botan-types-stdexcept.patch + ]; + "2.8.0" = [ + ./nix/botan-fe25519-stdexcept.patch + ./nix/botan-types-stdexcept.patch + ]; + } + ."${version}" or (prev.patches or [ ]); + patchFlags = [ + "-p1" + "-r-" + ]; + } + ); + + # FIXME we need to build also the correct version of libgpg-error - which is what? + libgcryptBuilder = + { + version ? null, + hash ? null, + }: + if version == null then + pkgs.libgcrypt.overrideAttrs ( + final: prev: { configureFlags = (prev.configureFlags or [ ]) ++ [ "--enable-static" ]; } + ) + else + pkgs.libgcrypt.overrideAttrs ( + final: prev: { + inherit version; + configureFlags = (prev.configureFlags or [ ]) ++ [ "--enable-static" ]; + src = pkgs.fetchurl { + url = "mirror://gnupg/libgcrypt/${prev.pname}-${version}.tar.bz2"; + inherit hash; + }; + } + ); + libgpg-error = pkgs.libgpg-error.overrideAttrs ( + final: prev: { configureFlags = (prev.configureFlags or [ ]) ++ [ "--enable-static" ]; } + ); + + mbedtlsBuilder = + { + version ? null, + hash ? null, + tag ? null, + }: + if version == null then + pkgs.mbedtls + else + pkgs.mbedtls.overrideAttrs ( + final: prev: { + inherit version; + inherit tag; + src = pkgs.fetchFromGitHub { + owner = "Mbed-TLS"; + repo = "mbedtls"; + rev = tag; + inherit hash; + # mbedtls >= 3.6.0 uses git submodules + fetchSubmodules = true; + }; + patches = + { + "v2.25.0" = pkgs.fetchpatch { + url = "https://github.com/Mbed-TLS/mbedtls/pull/4237/commits/29b641688d038143a193c69eac4d6e8eacc934d8.patch"; + hash = "sha256-i8Kn+QVCeJbrm0z6d60FbzCZ5t0oP2EhdYw8w3nV8b8="; + }; + "v2.26.0" = [ + (pkgs.fetchpatch { + url = "https://github.com/Mbed-TLS/mbedtls/pull/4237/commits/2065a8d8af27c6cb1e40c9462b5933336dca7434.patch"; + hash = "sha256-gLMiozagnzARt6jRhklUYqZgdvrKySBXTkuQ2Xm3lJs="; + }) + (pkgs.fetchpatch { + url = "https://github.com/Mbed-TLS/mbedtls/pull/4237/commits/29b641688d038143a193c69eac4d6e8eacc934d8.patch"; + hash = "sha256-i8Kn+QVCeJbrm0z6d60FbzCZ5t0oP2EhdYw8w3nV8b8="; + }) + ]; + "v3.2.0" = ( + pkgs.fetchpatch { + url = "https://github.com/Mbed-TLS/mbedtls/commit/c2a938711085813eae11d99550b280c416a8242e.patch"; + hash = "sha256-Rq4wEgJoEBzLpp2GdEMO2Ys2WNqN0LXzlKOVpcyVQ0M="; + } + ); + } + ."${version}" or (prev.patches or [ ]); + # NOTE using previous cmakeFlags might not be desired.. + cmakeFlags = (prev.cmakeFlags or [ ]) ++ [ "-DSKIP_TEST_SUITES=ssl,x509parse,pkcs7" ]; + } + ); + + ipp-cryptoBuilder = + { + version ? null, + hash ? null, + }: + if version == null then + customPkgs.ipp-crypto + else + customPkgs.ipp-crypto.overrideAttrs ( + final: prev: { + inherit version; + src = pkgs.fetchFromGitHub { + owner = "intel"; + repo = "ipp-crypto"; + rev = "ippcp_${version}"; + inherit hash; + }; + } + ); + + libtomcryptBuilder = + { + tcVersion, + tcHash, + tmVersion, + tmHash, + }: + (pkgs.libtomcrypt.override { + libtommath = libtommathBuilder { + version = tmVersion; + hash = tmHash; + }; + }).overrideAttrs + ( + final: prev: + let + preBuilds = { + "1.18" = '' + makeFlagsArray+=(PREFIX=$out \ + CFLAGS="-DUSE_LTM -DLTM_DESC" \ + EXTRALIBS=\"-ltommath\" \ + INSTALL_GROUP=$(id -g) \ + INSTALL_USER=$(id -u)) + ''; + "1.17" = '' + mkdir --parents $out/{lib, include, share/doc/} + + makeFlagsArray+=(PREFIX=$out \ + LIBPATH=$out/lib \ + INCPATH=$out/include \ + DATAPATH=$out/share/doc/libtomcrypt/pdf + CFLAGS_OPTS="-DUSE_LTM -DLTM_DESC" \ + EXTRALIBS=\"-ltommath\" \ + GROUP=$(id -g) \ + USER=$(id -u)) + ''; + # "1.01" = '' + # ''; + }; + preBuild = + if tcVersion != null then + if builtins.hasAttr (getMajorMinor tcVersion) preBuilds then + preBuilds."${getMajorMinor tcVersion}" + else + preBuilds."1.17" + else + preBuilds."1.18"; + in + rec { + makefile = "makefile.unix"; + version = if tcVersion != null then tcVersion else prev.version; + + src = + if version == prev.version then + prev.src + else + pkgs.fetchFromGitHub { + owner = "libtom"; + repo = "libtomcrypt"; + rev = if pkgs.lib.hasPrefix "1.18" version then "refs/tags/v${version}" else "refs/tags/${version}"; + hash = tcHash; + }; + + inherit preBuild; + patches = + if pkgs.lib.hasPrefix "1.18" version then + (prev.patches or [ ]) + ++ [ + # NOTE: LibTomCrypt does not expose the lib, when built statically (using `makefile and not `makefile.shared`). + # This patch copies the necessary code from `makefile.shared`. + ./nix/libtomcrypt-pkgconfig-for-static.patch + ] + else + [ ]; + } + ); + + libtommathBuilder = + { version, hash }: + pkgs.libtommath.overrideAttrs ( + final: prev: rec { + makefile = "makefile.unix"; + # version = if version != null then version else prev.version; + version = "1.3.0"; + src = pkgs.fetchurl { + url = "https://github.com/libtom/libtommath/releases/download/v${version}/ltm-${version}.tar.xz"; + # hash = if hash != null then hash else prev.hash; + hash = "sha256-KWJy2TQ1mRMI63NgdgDANLVYgHoH6CnnURQuZcz6nQg"; + }; + patches = (prev.patches or [ ]) ++ [ + # NOTE: LibTomMath does not expose the lib, when built statically (using `makefile and not `makefile.shared`). + # This patch copies the necessary code from `makefile.shared`. + ./nix/libtommath-pkgconfig-for-static-build.patch + ]; + } + ); + # NOTE: should gmp library be also dependent? + nettleBuilder = + { + version ? null, + tag ? null, + hash ? null, + }: + if version == null then + pkgs.nettle.overrideAttrs ( + final: prev: { configureFlags = (prev.configureFlags or [ ]) ++ [ "--enable-static" ]; } + ) + else + pkgs.nettle.overrideAttrs ( + final: prev: { + inherit version; + configureFlags = (prev.configureFlags or [ ]) ++ [ "--enable-static" ]; + src = pkgs.fetchurl { + url = "mirror://gnu/nettle/nettle-${version}.tar.gz"; + inherit hash; + }; + } + ); + cryptoppBuilder = + { + version ? null, + hash ? null, + }: + if version == null then + (pkgs.cryptopp.override { enableStatic = true; }) + else + (pkgs.cryptopp.override { enableStatic = true; }).overrideAttrs ( + final: prev: { + version = pkgs.lib.strings.replaceStrings [ "_" ] [ "." ] version; + src = pkgs.fetchFromGitHub { + owner = "weidai11"; + repo = "cryptopp"; + rev = "CRYPTOPP_${version}"; + inherit hash; + }; + installTargets = + if pkgs.lib.strings.hasPrefix "8_" version then [ "install-lib" ] else [ "install" ]; + } + ); + libresslBuilder = + { + version ? null, + hash ? null, + }: + if version == null then + (pkgs.libressl.override { buildShared = false; }).overrideAttrs ({ + patches = + if (pkgs.lib.strings.versionAtLeast version "3.5.1") then + [ + (pkgs.fetchpatch { + url = "https://github.com/libressl/portable/commit/86e4965d7f20c3a6afc41d95590c9f6abb4fe788.patch"; + includes = [ "tests/tlstest.sh" ]; + hash = "sha256-XmmKTvP6+QaWxyGFCX6/gDfME9GqBWSx4X8RH8QbDXA="; + }) + ] + else + [ ]; + }) + else + (pkgs.libressl.override { buildShared = false; }).overrideAttrs ( + final: prev: rec { + inherit version; + src = pkgs.fetchurl { + url = "mirror://openbsd/LibreSSL/${prev.pname}-${version}.tar.gz"; + inherit hash; + }; + + # Disable some TLS, ASN1, and explicit_bzero tests that we do not care for + preConfigure = '' + substituteInPlace tests/CMakeLists.txt \ + --replace-warn "add_test(asn1object asn1object)" "" \ + --replace-warn "if(NOT WIN32)" "if(false)" \ + --replace-warn "if(NOT CMAKE_HOST_WIN32)" "if(false)" + substituteInPlace tests/tlstest.sh --replace-fail "set -e" "exit 0" + + ${pkgs.lib.strings.optionalString (pkgs.lib.strings.versionAtLeast version "2.2.2") '' + rm configure + substituteInPlace CMakeLists.txt \ + --replace 'exec_prefix \''${prefix}' "exec_prefix ${placeholder "bin"}" \ + --replace 'libdir \''${exec_prefix}' 'libdir \''${prefix}' + ''} + ''; + + postPatch = '' + patchShebangs tests/ + ''; + + # NOTE: Due to name conflicts between OpenSSL and LibreSSL we need to resolve this manually. + # This is not needed for building the individual shims through Nix, as libresslShim build env does not + # contain OpenSSL at all, but for the interactive shell (started with `nix develop`), when multiple + # lib shims are built alongside each other. + postFixup = pkgs.lib.concatLines [ + (prev.postFixup or "") + '' + cp $dev/lib/pkgconfig/libcrypto.pc $dev/lib/pkgconfig/libresslcrypto.pc + sed --in-place --expression 's/-lcrypto/-lresslcrypto/' $dev/lib/pkgconfig/libresslcrypto.pc + ln -s $out/lib/libcrypto.so $out/lib/libresslcrypto.so + ln -s $out/lib/libcrypto.a $out/lib/libresslcrypto.a + '' + ]; + + } + ); + gmp = pkgs.gmp.override { withStatic = true; }; + + # Custom added packages + wolfcryptjni = + with customPkgs; + wolfcrypt-jni.overrideAttrs ( + final: prev: { + src = pkgs.fetchFromGitHub { + owner = "wolfSSL"; + repo = "wolfcrypt-jni"; + rev = "0497ee767c994775beda2f2091009593961e5c7e"; + hash = "sha256-mtUXUyIKJ617WzAWjlOaMscWM7zuGBISVMEAbmQNBOg="; + }; + } + ); + + # Shims and libs + # Current list of targets: tomcrypt botan cryptopp openssl boringssl gcrypt mbedtls ippcp nettle libressl + tomcryptShimBuilder = + { + tcVersion, + tcHash, + tmVersion, + tmHash, + }: + pkgs.callPackage ./nix/tomcryptshim.nix { + inherit pkgs; + libtomcrypt = ( + libtomcryptBuilder { + inherit + tcVersion + tcHash + tmVersion + tmHash + ; + } + ); + libtommath = ( + libtommathBuilder { + version = tmVersion; + hash = tmHash; + } + ); + }; + botanShimBuilder = + { + version, + source_extension, + hash, + }: + pkgs.callPackage ./nix/botanshim.nix { + botan2 = botan2Builder { inherit version source_extension hash; }; + }; + cryptoppShimBuilder = + { version, hash }: + pkgs.callPackage ./nix/cryptoppshim.nix { cryptopp = cryptoppBuilder { inherit version hash; }; }; + opensslShimBuilder = + { version, hash }: + import ./nix/opensslshim.nix { + inherit pkgs; + openssl = ( + opensslBuilder { + version = version; + hash = hash; + } + ); + }; + boringsslShimBuilder = + { rev, hash }: + import ./nix/boringsslshim.nix { + inherit pkgs; + boringssl = (boringsslBuilder { inherit rev hash; }); + }; + gcryptShimBuilder = + { version, hash }: + import ./nix/gcryptshim.nix { + inherit pkgs libgpg-error; + libgcrypt = libgcryptBuilder { inherit version hash; }; + }; + mbedtlsShimBuilder = + { + version, + hash, + tag, + }: + import ./nix/mbedtlsshim.nix { + inherit pkgs; + mbedtls = (mbedtlsBuilder { inherit version hash tag; }); + }; + ippcpShimBuilder = + { version, hash }: + import ./nix/ippcpshim.nix { + pkgs = pkgs; + ipp-crypto = (ipp-cryptoBuilder { inherit version hash; }); + }; + nettleShimBuilder = + { + version, + tag, + hash, + }: + import ./nix/nettleshim.nix { + inherit pkgs gmp; + nettle = (nettleBuilder { inherit version tag hash; }); + }; + libresslShimBuilder = + { version, hash }: + import ./nix/libresslshim.nix { + inherit pkgs; + libressl = (libresslBuilder { inherit version hash; }); + }; + + commonLibs = import ./nix/commonlibs.nix { pkgs = pkgs; }; + + buildECTesterStandalone = + { + tomcrypt ? { + version = null; + hash = null; + }, + tommath ? { + version = null; + hash = null; + }, + botan ? { + version = null; + source_extension = null; + hash = null; + }, + cryptopp ? { + version = null; + hash = null; + }, + openssl ? { + version = null; + hash = null; + }, + boringssl ? { + rev = null; + hash = null; + }, + gcrypt ? { + version = null; + hash = null; + }, + mbedtls ? { + version = null; + hash = null; + tag = null; + }, + ippcp ? { + version = null; + hash = null; + }, + nettle ? { + version = null; + tag = null; + hash = null; + }, + libressl ? { + version = null; + hash = null; + }, + }: + ( + let + tomcryptShim = tomcryptShimBuilder { + tcVersion = tomcrypt.version; + tcHash = tomcrypt.hash; + tmVersion = tommath.version; + tmHash = tommath.hash; + }; + opensslShim = (opensslShimBuilder { inherit (openssl) version hash; }); + botanShim = botanShimBuilder { inherit (botan) version source_extension hash; }; + cryptoppShim = cryptoppShimBuilder { inherit (cryptopp) version hash; }; + boringsslShim = boringsslShimBuilder { inherit (boringssl) rev hash; }; + gcryptShim = gcryptShimBuilder { inherit (gcrypt) version hash; }; + mbedtlsShim = mbedtlsShimBuilder { inherit (mbedtls) version hash tag; }; + ippcpShim = ippcpShimBuilder { inherit (ippcp) version hash; }; + nettleShim = nettleShimBuilder { inherit (nettle) version tag hash; }; + libresslShim = libresslShimBuilder { inherit (libressl) version hash; }; + in + with pkgs; + gradle2nix.builders.${system}.buildGradlePackage rec { + pname = "ECTesterStandalone"; + version = "0.3.3"; + lockFile = ./gradle.lock; + + # NOTE: the shims are built separately, therefore no need to call build `libs` target + gradleBuildFlags = [ ":standalone:uberJar" ]; + src = ./.; + + jniLibsPath = "standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/"; + + # shims = [ "tomcrypt" "botan" "cryptopp" "openssl" "boringssl" "gcrypt" "mbedtls" "ippcp" "nettle" "libressl" ]; + # copyLib = libName: + # ( if ${libName}.version != null then "cp ${libName}Shim.out/lib/libressl_provider.so ${jniLibsPath}" else "" ) + + # FIXME add conditionally libs using map? + preConfigure = pkgs.lib.concatLines [ + (if tomcrypt.version != null then "cp ${tomcryptShim.out}/lib/* ${jniLibsPath}" else "") + (if botan.version != null then "cp ${botanShim.out}/lib/* ${jniLibsPath}" else "") + (if cryptopp.version != null then "cp ${cryptoppShim.out}/lib/* ${jniLibsPath}" else "") + (if openssl.version != null then "cp ${opensslShim.out}/lib/* ${jniLibsPath}" else "") + (if boringssl.rev != null then "cp ${boringsslShim.out}/lib/* ${jniLibsPath}" else "") + (if gcrypt.version != null then "cp ${gcryptShim.out}/lib/* ${jniLibsPath}" else "") + (if mbedtls.version != null then "cp ${mbedtlsShim.out}/lib/* ${jniLibsPath}" else "") + (if ippcp.version != null then "cp ${ippcpShim.out}/lib/* ${jniLibsPath}" else "") + (if nettle.version != null then "cp ${nettleShim.out}/lib/* ${jniLibsPath}" else "") + (if libressl.version != null then "cp ${libresslShim.out}/lib/* ${jniLibsPath}" else "") + '' + cp ${wolfcryptjni}/lib/* ${jniLibsPath} + cp ${commonLibs}/lib/* ${jniLibsPath} + '' + ]; + + nativeBuildInputs = [ makeWrapper ]; + + LD_LIBRARY_PATH = lib.makeLibraryPath [ wolfcryptjni ]; + + WOLFCRYPT_LIB_PATH = "${wolfcryptjni}/lib"; + + installPhase = '' + mkdir -p $out + cp -r standalone/build $out + ''; + + postFixup = '' + makeWrapper \ + ${jdk17_headless}/bin/java $out/bin/${pname} \ + --add-flags "-jar $out/build/libs/${pname}.jar" \ + --set LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:$LD_LIBRARY_PATH + ''; + + } + ); + + defaultVersion = + # Default version is the last one, aka the newest that we fetched + libName: + let + versions = builtins.fromJSON (builtins.readFile ./nix/${libName}_pkg_versions.json); + in + pkgs.lib.lists.last (pkgs.lib.attrsets.attrValues versions); + + loadVersions = + { libName, function }: + let + versions = builtins.fromJSON (builtins.readFile ./nix/${libName}_pkg_versions.json); + firstVersion = pkgs.lib.lists.last (pkgs.lib.attrsets.attrValues versions); + in + pkgs.lib.mapAttrs (rev: specs: function { ${libName} = specs; }) versions + // { + default = function { ${libName} = firstVersion; }; + }; + + loadVersionsForShim = + { libName, function }: + let + versions = builtins.fromJSON (builtins.readFile ./nix/${libName}_pkg_versions.json); + firstVersion = pkgs.lib.lists.last (pkgs.lib.attrsets.attrValues versions); + in + pkgs.lib.mapAttrs (rev: specs: function specs) versions + // (with pkgs.lib; { + default = function firstVersion; + }); + in + { + packages = rec { + default = buildECTesterStandalone { + # FIXME tomcrypt is missing! + botan = defaultVersion "botan"; + cryptopp = defaultVersion "cryptopp"; + openssl = defaultVersion "openssl"; + boringssl = defaultVersion "boringssl"; + gcrypt = defaultVersion "gcrypt"; + mbedtls = defaultVersion "mbedtls"; + ippcp = defaultVersion "ippcp"; + nettle = defaultVersion "nettle"; + libressl = defaultVersion "libressl"; + }; + tomcrypt = loadVersions { + libName = "tomcrypt"; + function = buildECTesterStandalone; + }; + botan = loadVersions { + libName = "botan"; + function = buildECTesterStandalone; + }; + cryptopp = loadVersions { + libName = "cryptopp"; + function = buildECTesterStandalone; + }; + openssl = loadVersions { + libName = "openssl"; + function = buildECTesterStandalone; + }; + boringssl = loadVersions { + libName = "boringssl"; + function = buildECTesterStandalone; + }; + gcrypt = loadVersions { + libName = "gcrypt"; + function = buildECTesterStandalone; + }; + mbedtls = loadVersions { + libName = "mbedtls"; + function = buildECTesterStandalone; + }; + ippcp = loadVersions { + libName = "ippcp"; + function = buildECTesterStandalone; + }; + nettle = loadVersions { + libName = "nettle"; + function = buildECTesterStandalone; + }; + libressl = loadVersions { + libName = "libressl"; + function = buildECTesterStandalone; + }; + + shim = { + tomcrypt = loadVersionsForShim { + libName = "tomcrypt"; + function = tomcryptShimBuilder; + }; + botan = loadVersionsForShim { + libName = "botan"; + function = botanShimBuilder; + }; + cryptopp = loadVersionsForShim { + libName = "cryptopp"; + function = cryptoppShimBuilder; + }; + openssl = loadVersionsForShim { + libName = "openssl"; + function = opensslShimBuilder; + }; + boringssl = loadVersionsForShim { + libName = "boringssl"; + function = boringsslShimBuilder; + }; + gcrypt = loadVersionsForShim { + libName = "gcrypt"; + function = gcryptShimBuilder; + }; + mbedtls = loadVersionsForShim { + libName = "mbedtls"; + function = mbedtlsShimBuilder; + }; + ippcp = loadVersionsForShim { + libName = "ippcp"; + function = ippcpShimBuilder; + }; + nettle = loadVersionsForShim { + libName = "nettle"; + function = nettleShimBuilder; + }; + libressl = loadVersionsForShim { + libName = "libressl"; + function = libresslShimBuilder; + }; + }; + + lib = { + tomcrypt = loadVersionsForShim { + libName = "tomcrypt"; + function = libtomcryptBuilder; + }; + botan = loadVersionsForShim { + libName = "botan"; + function = botan2Builder; + }; + cryptopp = loadVersionsForShim { + libName = "cryptopp"; + function = cryptoppBuilder; + }; + openssl = loadVersionsForShim { + libName = "openssl"; + function = opensslBuilder; + }; + boringssl = loadVersionsForShim { + libName = "boringssl"; + function = boringsslBuilder; + }; + gcrypt = loadVersionsForShim { + libName = "gcrypt"; + function = libgcryptBuilder; + }; + mbedtls = loadVersionsForShim { + libName = "mbedtls"; + function = mbedtlsBuilder; + }; + ippcp = loadVersionsForShim { + libName = "ippcp"; + function = ipp-cryptoBuilder; + }; + nettle = loadVersionsForShim { + libName = "nettle"; + function = nettleBuilder; + }; + libressl = loadVersionsForShim { + libName = "libressl"; + function = libresslBuilder; + }; + }; + + fetchReleases = + with pkgs.python3Packages; + buildPythonApplication { + pname = "fetchReleases"; + version = "0.1.0"; + format = "other"; + + propagatedBuildInputs = [ + jinja2 + requests + beautifulsoup4 + packaging + ]; + + src = ./fetchReleases.py; + dontUnpack = true; + installPhase = '' + install -Dm755 $src $out/bin/$pname + ''; + }; + + buildAll = + with pkgs.python3Packages; + buildPythonApplication { + pname = "buildAll"; + version = "0.1.0"; + format = "other"; + + propagatedBuildInputs = [ + ipython + pudb + ]; + + src = ./test_building_all.py; + dontUnpack = true; + installPhase = '' + install -Dm755 $src $out/bin/$pname + ''; + }; + + plotVersions = + with pkgs.python3Packages; + buildPythonApplication { + pname = "buildAll"; + version = "0.1.0"; + format = "other"; + + propagatedBuildInputs = [ + pandas + jinja2 + ]; + + src = ./plot_versions.py; + dontUnpack = true; + installPhase = '' + install -Dm755 $src $out/bin/$pname + ''; + }; + + }; + } + ); +} diff --git a/gradle.lock b/gradle.lock new file mode 100644 index 00000000..fd605098 --- /dev/null +++ b/gradle.lock @@ -0,0 +1,662 @@ +{ + "com.adarshr:gradle-test-logger-plugin:4.0.0": { + "gradle-test-logger-plugin-4.0.0.jar": { + "url": "https://plugins.gradle.org/m2/com/adarshr/gradle-test-logger-plugin/4.0.0/gradle-test-logger-plugin-4.0.0.jar", + "hash": "sha256-5nhoOjPSvINWcb3U5YcQAErR2TFqqfmlTP4iQZpPbvk=" + }, + "gradle-test-logger-plugin-4.0.0.module": { + "url": "https://plugins.gradle.org/m2/com/adarshr/gradle-test-logger-plugin/4.0.0/gradle-test-logger-plugin-4.0.0.module", + "hash": "sha256-jERLLH/UQgDNSrMYJyJwHCCXWkOyPH6e35sCJgSavcI=" + }, + "gradle-test-logger-plugin-4.0.0.pom": { + "url": "https://plugins.gradle.org/m2/com/adarshr/gradle-test-logger-plugin/4.0.0/gradle-test-logger-plugin-4.0.0.pom", + "hash": "sha256-ienBpTqmJS2mx9fZscN/t/j8qQuysaNq+Ti8cNni3GE=" + } + }, + "com.adarshr.test-logger:com.adarshr.test-logger.gradle.plugin:4.0.0": { + "com.adarshr.test-logger.gradle.plugin-4.0.0.pom": { + "url": "https://plugins.gradle.org/m2/com/adarshr/test-logger/com.adarshr.test-logger.gradle.plugin/4.0.0/com.adarshr.test-logger.gradle.plugin-4.0.0.pom", + "hash": "sha256-sobTcqzS2uG4vHsg/ouoT49kiXMdiBpB83NqYCCFotc=" + } + }, + "com.github.martinpaljak:ant-javacard:20.03.25": { + "ant-javacard-20.03.25.jar": { + "url": "https://javacard.pro/maven/com/github/martinpaljak/ant-javacard/20.03.25/ant-javacard-20.03.25.jar", + "hash": "sha256-AaeqhIfDXEcrMW2o0eO3sYdntwCnBIXvLKV2joXkfA8=" + }, + "ant-javacard-20.03.25.pom": { + "url": "https://javacard.pro/maven/com/github/martinpaljak/ant-javacard/20.03.25/ant-javacard-20.03.25.pom", + "hash": "sha256-5jjX7HmC23dhbeljE5XlDYpDlLca61MvltW/bs+0b5U=" + } + }, + "com.github.martinpaljak:apdu4j:20.08.12": { + "apdu4j-20.08.12.pom": { + "url": "https://javacard.pro/maven/com/github/martinpaljak/apdu4j/20.08.12/apdu4j-20.08.12.pom", + "hash": "sha256-ztab0pETf9vx4ekaLYezFS4W0piFmYaoV9vc3Zom+yk=" + } + }, + "com.github.martinpaljak:apdu4j:20.01.01": { + "apdu4j-20.01.01.pom": { + "url": "https://repo.maven.apache.org/maven2/com/github/martinpaljak/apdu4j/20.01.01/apdu4j-20.01.01.pom", + "hash": "sha256-Zi8AnPGl2jp4p9A12FhQQ0+l6BGI0LTiuFje+OUNbsk=" + } + }, + "com.github.martinpaljak:apdu4j-core:2020b1": { + "apdu4j-core-2020b1.jar": { + "url": "https://repo.maven.apache.org/maven2/com/github/martinpaljak/apdu4j-core/2020b1/apdu4j-core-2020b1.jar", + "hash": "sha256-12S0X1ZADPXjrS1XCF+FunWS7gBljBDu9ylirI9owh0=" + }, + "apdu4j-core-2020b1.pom": { + "url": "https://repo.maven.apache.org/maven2/com/github/martinpaljak/apdu4j-core/2020b1/apdu4j-core-2020b1.pom", + "hash": "sha256-Xm3Nrs7cvsY1nxU+JCOAaJ0yoagC3PsoCK6ezYzqqkc=" + } + }, + "com.github.martinpaljak:apdu4j-jnasmartcardio:0.2.7+191107": { + "apdu4j-jnasmartcardio-0.2.7+191107.jar": { + "url": "https://repo.maven.apache.org/maven2/com/github/martinpaljak/apdu4j-jnasmartcardio/0.2.7+191107/apdu4j-jnasmartcardio-0.2.7+191107.jar", + "hash": "sha256-DNtj+vB0ex1StCwd+5Nw0b7IvwbJKuWzAcm9reRl0c4=" + }, + "apdu4j-jnasmartcardio-0.2.7+191107.pom": { + "url": "https://repo.maven.apache.org/maven2/com/github/martinpaljak/apdu4j-jnasmartcardio/0.2.7+191107/apdu4j-jnasmartcardio-0.2.7+191107.pom", + "hash": "sha256-POAMo0RFbpG74ZewZEXQkoAJUbAClNXGgXVReyHXrX4=" + } + }, + "com.github.martinpaljak:apdu4j-pcsc:20.08.12": { + "apdu4j-pcsc-20.08.12.jar": { + "url": "https://javacard.pro/maven/com/github/martinpaljak/apdu4j-pcsc/20.08.12/apdu4j-pcsc-20.08.12.jar", + "hash": "sha256-U2vhSqUZkArMVkoU4+pvjjbwiqtsSIRfCqtxi4U7mik=" + }, + "apdu4j-pcsc-20.08.12.pom": { + "url": "https://javacard.pro/maven/com/github/martinpaljak/apdu4j-pcsc/20.08.12/apdu4j-pcsc-20.08.12.pom", + "hash": "sha256-oTNIxr5QdONqBCjd9xQGAqfArFtaCo17h8iYBZQvs4o=" + } + }, + "com.github.martinpaljak:capfile:20.08.12": { + "capfile-20.08.12.jar": { + "url": "https://javacard.pro/maven/com/github/martinpaljak/capfile/20.08.12/capfile-20.08.12.jar", + "hash": "sha256-iGwgQJ76QTN11+QleUnDbqgkV/Bx37Gnb+slpgf+tIs=" + }, + "capfile-20.08.12.pom": { + "url": "https://javacard.pro/maven/com/github/martinpaljak/capfile/20.08.12/capfile-20.08.12.pom", + "hash": "sha256-EfZru+/lXlp/iMvjq7sTXcOZGeJxTVFnIv7+WBeG4Yo=" + } + }, + "com.github.martinpaljak:capfile:20.02.19": { + "capfile-20.02.19.pom": { + "url": "https://javacard.pro/maven/com/github/martinpaljak/capfile/20.02.19/capfile-20.02.19.pom", + "hash": "sha256-nS29stixt+TAE5K1r7IJudLA375GPNLCpNSsrv0w9WM=" + } + }, + "com.github.martinpaljak:globalplatformpro:20.08.12": { + "globalplatformpro-20.08.12.jar": { + "url": "https://javacard.pro/maven/com/github/martinpaljak/globalplatformpro/20.08.12/globalplatformpro-20.08.12.jar", + "hash": "sha256-euZ78fN7Y1AUTBUAzAXXReaPrbxIGESH+gO5rlJv8Lw=" + }, + "globalplatformpro-20.08.12.pom": { + "url": "https://javacard.pro/maven/com/github/martinpaljak/globalplatformpro/20.08.12/globalplatformpro-20.08.12.pom", + "hash": "sha256-q+xw/3RFIh1UCDa6pCefSPQBkYftJBzjpVrFDqnyHoA=" + } + }, + "com.github.martinpaljak:gppro:20.08.12": { + "gppro-20.08.12.pom": { + "url": "https://javacard.pro/maven/com/github/martinpaljak/gppro/20.08.12/gppro-20.08.12.pom", + "hash": "sha256-Aa4sLUSVzPYw9BgSU5jBbafj0EtCUR7fZlB/+S/4YBE=" + } + }, + "com.github.martinpaljak:gptool:20.08.12": { + "gptool-20.08.12.jar": { + "url": "https://javacard.pro/maven/com/github/martinpaljak/gptool/20.08.12/gptool-20.08.12.jar", + "hash": "sha256-DvjUqhj2flSdbZRLoROzgg1FJqr71jo0RzCoexoSC8k=" + }, + "gptool-20.08.12.pom": { + "url": "https://javacard.pro/maven/com/github/martinpaljak/gptool/20.08.12/gptool-20.08.12.pom", + "hash": "sha256-+phLgJ2Q3PSpq0dvA+6c68duDHxo0cgzKSurtKpcr3E=" + } + }, + "com.github.martinpaljak:metacard:20.08.07": { + "metacard-20.08.07.pom": { + "url": "https://repo.maven.apache.org/maven2/com/github/martinpaljak/metacard/20.08.07/metacard-20.08.07.pom", + "hash": "sha256-yD2dp0zDBDK9u7aCTlTjCpMbKtOhaK8JbVUSsaNecYo=" + } + }, + "com.github.martinpaljak:metacard:20.02.19": { + "metacard-20.02.19.pom": { + "url": "https://repo.maven.apache.org/maven2/com/github/martinpaljak/metacard/20.02.19/metacard-20.02.19.pom", + "hash": "sha256-3uB4lZGXY6Y61yHaUxMxmVDilkP0C8AFIZjOBrW9c64=" + } + }, + "com.github.martinpaljak:metacard:19.10.01": { + "metacard-19.10.01.pom": { + "url": "https://repo.maven.apache.org/maven2/com/github/martinpaljak/metacard/19.10.01/metacard-19.10.01.pom", + "hash": "sha256-CwVwywO0djSumPdr6KNyo9YJNanaYLiu7/NE8AJZ1d8=" + } + }, + "com.google.code.findbugs:jsr305:3.0.2": { + "jsr305-3.0.2.jar": { + "url": "https://plugins.gradle.org/m2/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar", + "hash": "sha256-dmrSoHg/JoeWLIrXTO7MOKKLn3Ki0IXuQ4t4E+ko0Mc=" + }, + "jsr305-3.0.2.pom": { + "url": "https://plugins.gradle.org/m2/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.pom", + "hash": "sha256-GYidvfGyVLJgGl7mRbgUepdGRIgil2hMeYr+XWPXjf4=" + } + }, + "com.google.code.gson:gson:2.9.1": { + "gson-2.9.1.jar": { + "url": "https://plugins.gradle.org/m2/com/google/code/gson/gson/2.9.1/gson-2.9.1.jar", + "hash": "sha256-N4U04znm5tULFzb7Ort28cFdG+P0wTzsbVNkEuI9pgM=" + }, + "gson-2.9.1.pom": { + "url": "https://plugins.gradle.org/m2/com/google/code/gson/gson/2.9.1/gson-2.9.1.pom", + "hash": "sha256-5ZZjI9cUJXCzekvpeeIbwtroSBB+TcQW2PRNmqPwKQM=" + } + }, + "com.google.code.gson:gson-parent:2.9.1": { + "gson-parent-2.9.1.pom": { + "url": "https://plugins.gradle.org/m2/com/google/code/gson/gson-parent/2.9.1/gson-parent-2.9.1.pom", + "hash": "sha256-fKCEXnNoVhjePka9NDTQOko3PVIPq5OmgDGK1sjLKnk=" + } + }, + "com.google.osdetector:com.google.osdetector.gradle.plugin:1.7.3": { + "com.google.osdetector.gradle.plugin-1.7.3.pom": { + "url": "https://plugins.gradle.org/m2/com/google/osdetector/com.google.osdetector.gradle.plugin/1.7.3/com.google.osdetector.gradle.plugin-1.7.3.pom", + "hash": "sha256-gL7JV6QGQ/JKPyKKYq9qVrWPb6tzrWgsB1BkYj497q8=" + } + }, + "com.klinec:gradle-javacard:1.8.0": { + "gradle-javacard-1.8.0.jar": { + "url": "https://repo.maven.apache.org/maven2/com/klinec/gradle-javacard/1.8.0/gradle-javacard-1.8.0.jar", + "hash": "sha256-3BqW2ygiHAKAE5oqnRRTVvqdLn5ytfinlzU0ggxeTwQ=" + }, + "gradle-javacard-1.8.0.pom": { + "url": "https://repo.maven.apache.org/maven2/com/klinec/gradle-javacard/1.8.0/gradle-javacard-1.8.0.pom", + "hash": "sha256-acs7+60LOtrXFLKybmIuQkX8u9ivtwJXT6jy6VVGBdc=" + } + }, + "com.klinec:jcardsim:3.0.5.11": { + "jcardsim-3.0.5.11.jar": { + "url": "https://repo.maven.apache.org/maven2/com/klinec/jcardsim/3.0.5.11/jcardsim-3.0.5.11.jar", + "hash": "sha256-9sO2uBQEAaR88517nb/AUuOBR0xsOyIBgFECS+H8qXw=" + }, + "jcardsim-3.0.5.11.pom": { + "url": "https://repo.maven.apache.org/maven2/com/klinec/jcardsim/3.0.5.11/jcardsim-3.0.5.11.pom", + "hash": "sha256-pQ+boNGgeOswipNcHCmztjGzb7994xjXio9BijZ0WFU=" + } + }, + "com.klinec.gradle.javacard:com.klinec.gradle.javacard.gradle.plugin:1.8.0": { + "com.klinec.gradle.javacard.gradle.plugin-1.8.0.pom": { + "url": "https://plugins.gradle.org/m2/com/klinec/gradle/javacard/com.klinec.gradle.javacard.gradle.plugin/1.8.0/com.klinec.gradle.javacard.gradle.plugin-1.8.0.pom", + "hash": "sha256-Un2E9my/Evxt/nRe1QmLg6/ITxCD2VGfwnS4btfpj8I=" + } + }, + "com.payneteasy:ber-tlv:1.0-11": { + "ber-tlv-1.0-11.jar": { + "url": "https://repo.maven.apache.org/maven2/com/payneteasy/ber-tlv/1.0-11/ber-tlv-1.0-11.jar", + "hash": "sha256-pDXqu1JsfQbKrSDd3xZ3E2i6ZkDlUY/6yGFP3Kw9ioA=" + }, + "ber-tlv-1.0-11.pom": { + "url": "https://repo.maven.apache.org/maven2/com/payneteasy/ber-tlv/1.0-11/ber-tlv-1.0-11.pom", + "hash": "sha256-71UFphwg/y733c/62MYbVga5Aba0/zPnyCg6FGaZ9lw=" + } + }, + "commons-cli:commons-cli:1.5.0": { + "commons-cli-1.5.0.jar": { + "url": "https://repo.maven.apache.org/maven2/commons-cli/commons-cli/1.5.0/commons-cli-1.5.0.jar", + "hash": "sha256-vIuwH8D60lA4VwbiD5J93P9hc/Yzmzh9yHkjd1JWesY=" + }, + "commons-cli-1.5.0.pom": { + "url": "https://repo.maven.apache.org/maven2/commons-cli/commons-cli/1.5.0/commons-cli-1.5.0.pom", + "hash": "sha256-TuxDxPwoBMvrQ2mcq/qC+gYocfzB3P0QkCpdglIGdMA=" + } + }, + "gradle.plugin.com.google.gradle:osdetector-gradle-plugin:1.7.3": { + "osdetector-gradle-plugin-1.7.3.jar": { + "url": "https://plugins.gradle.org/m2/gradle/plugin/com/google/gradle/osdetector-gradle-plugin/1.7.3/osdetector-gradle-plugin-1.7.3.jar", + "hash": "sha256-a0aS+ROiGx+2Axae54uo8+SrKvnXYq+cqIt5EmwcCtE=" + }, + "osdetector-gradle-plugin-1.7.3.pom": { + "url": "https://plugins.gradle.org/m2/gradle/plugin/com/google/gradle/osdetector-gradle-plugin/1.7.3/osdetector-gradle-plugin-1.7.3.pom", + "hash": "sha256-gNpA8CGxqhjk0WqszV1o/J0iOs9qIEAfsNj8s1J7Hiw=" + } + }, + "gradle.plugin.com.klinec:gradle-javacard:1.8.0": { + "gradle-javacard-1.8.0.jar": { + "url": "https://plugins.gradle.org/m2/gradle/plugin/com/klinec/gradle-javacard/1.8.0/gradle-javacard-1.8.0.jar", + "hash": "sha256-3BqW2ygiHAKAE5oqnRRTVvqdLn5ytfinlzU0ggxeTwQ=" + }, + "gradle-javacard-1.8.0.pom": { + "url": "https://plugins.gradle.org/m2/gradle/plugin/com/klinec/gradle-javacard/1.8.0/gradle-javacard-1.8.0.pom", + "hash": "sha256-1naGr/W283OGw8RSCJGL2hu/xMjNNPfBQbn8uYQKH20=" + } + }, + "kr.motd.maven:os-maven-plugin:1.7.1": { + "os-maven-plugin-1.7.1.jar": { + "url": "https://plugins.gradle.org/m2/kr/motd/maven/os-maven-plugin/1.7.1/os-maven-plugin-1.7.1.jar", + "hash": "sha256-9Hru+Ggh5SsrGHWJeL0EXwPXIikuMudHCCEixiKJUuA=" + }, + "os-maven-plugin-1.7.1.pom": { + "url": "https://plugins.gradle.org/m2/kr/motd/maven/os-maven-plugin/1.7.1/os-maven-plugin-1.7.1.pom", + "hash": "sha256-S3WABEIrljPdMY8p54Tx0YC9ilkgzVCvGTCGH21qVHY=" + } + }, + "net.java.dev.jna:jna:5.5.0": { + "jna-5.5.0.jar": { + "url": "https://repo.maven.apache.org/maven2/net/java/dev/jna/jna/5.5.0/jna-5.5.0.jar", + "hash": "sha256-swj66/5O1AnehBDgpjLRZLISawNfbqz/lo05CMr7TZ4=" + }, + "jna-5.5.0.pom": { + "url": "https://repo.maven.apache.org/maven2/net/java/dev/jna/jna/5.5.0/jna-5.5.0.pom", + "hash": "sha256-pRrZTj90+Fo8362XU5KCkxZFJmn1iCA8e0nl+Beb5Tk=" + } + }, + "net.sf.jopt-simple:jopt-simple:5.0.4": { + "jopt-simple-5.0.4.jar": { + "url": "https://repo.maven.apache.org/maven2/net/sf/jopt-simple/jopt-simple/5.0.4/jopt-simple-5.0.4.jar", + "hash": "sha256-3ybMWPI19HfbB/dTulo6skPr5Xidn4ns9o3WLqmmbCg=" + }, + "jopt-simple-5.0.4.pom": { + "url": "https://repo.maven.apache.org/maven2/net/sf/jopt-simple/jopt-simple/5.0.4/jopt-simple-5.0.4.pom", + "hash": "sha256-amd2O3avzZyAuV5cXiR4LRjMGw49m0VK0/h1THa3aBU=" + } + }, + "org.apache:apache:23": { + "apache-23.pom": { + "url": "https://repo.maven.apache.org/maven2/org/apache/apache/23/apache-23.pom", + "hash": "sha256-vBBiTgYj82V3+sVjnKKTbTJA7RUvttjVM6tNJwVDSRw=" + } + }, + "org.apache.commons:commons-parent:52": { + "commons-parent-52.pom": { + "url": "https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/52/commons-parent-52.pom", + "hash": "sha256-ddvo806Y5MP/QtquSi+etMvNO18QR9VEYKzpBtu0UC4=" + } + }, + "org.apiguardian:apiguardian-api:1.1.2": { + "apiguardian-api-1.1.2.jar": { + "url": "https://repo.maven.apache.org/maven2/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar", + "hash": "sha256-tQlEisUG1gcxnxglN/CzXXEAdYLsdBgyofER5bW3Czg=" + }, + "apiguardian-api-1.1.2.module": { + "url": "https://repo.maven.apache.org/maven2/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.module", + "hash": "sha256-4IAoExN1s1fR0oc06aT7QhbahLJAZByz7358fWKCI/w=" + }, + "apiguardian-api-1.1.2.pom": { + "url": "https://repo.maven.apache.org/maven2/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.pom", + "hash": "sha256-MjVQgdEJCVw9XTdNWkO09MG3XVSemD71ByPidy5TAqA=" + } + }, + "org.bouncycastle:bcpkix-jdk15on:1.66": { + "bcpkix-jdk15on-1.66.jar": { + "url": "https://repo.maven.apache.org/maven2/org/bouncycastle/bcpkix-jdk15on/1.66/bcpkix-jdk15on-1.66.jar", + "hash": "sha256-AtYSaDUv2zXbqZbJymij95PXuL+nV1Sqxm1pZRekIb0=" + }, + "bcpkix-jdk15on-1.66.pom": { + "url": "https://repo.maven.apache.org/maven2/org/bouncycastle/bcpkix-jdk15on/1.66/bcpkix-jdk15on-1.66.pom", + "hash": "sha256-kBX+SX7lth+nT71hCRnDqsBrQnlavO46IWCkuLvyGus=" + } + }, + "org.bouncycastle:bcpkix-jdk18on:1.77": { + "bcpkix-jdk18on-1.77.jar": { + "url": "https://repo.maven.apache.org/maven2/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar", + "hash": "sha256-Gsf+jv1bLzjNwWW+WgZ1c0/kSAjauScHIB8DpTXW8bg=" + }, + "bcpkix-jdk18on-1.77.pom": { + "url": "https://repo.maven.apache.org/maven2/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.pom", + "hash": "sha256-j7CSbwLixLLcUuR+uwk/kvHTu28UnCpcyl4qZI0sSY0=" + } + }, + "org.bouncycastle:bcprov-jdk15on:1.66": { + "bcprov-jdk15on-1.66.jar": { + "url": "https://repo.maven.apache.org/maven2/org/bouncycastle/bcprov-jdk15on/1.66/bcprov-jdk15on-1.66.jar", + "hash": "sha256-G4YduhxURd6bOKF4nCEe8oudB+JtH6OL7nF+W1EWL/4=" + }, + "bcprov-jdk15on-1.66.pom": { + "url": "https://repo.maven.apache.org/maven2/org/bouncycastle/bcprov-jdk15on/1.66/bcprov-jdk15on-1.66.pom", + "hash": "sha256-qk0WoZst+s6rlMZDbGQE6uWw+3U0n5/gYQNkZbQg8nA=" + } + }, + "org.bouncycastle:bcprov-jdk18on:1.77": { + "bcprov-jdk18on-1.77.jar": { + "url": "https://repo.maven.apache.org/maven2/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar", + "hash": "sha256-2ruYwk1yybn1hWM9HfnFzVjZrTc9DNaBNn5qYDpJXVg=" + }, + "bcprov-jdk18on-1.77.pom": { + "url": "https://repo.maven.apache.org/maven2/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.pom", + "hash": "sha256-rROCz80DvN2L4TkTwC9E/UadCnalPPLK71vhgK3DayM=" + } + }, + "org.bouncycastle:bcutil-jdk18on:1.77": { + "bcutil-jdk18on-1.77.jar": { + "url": "https://repo.maven.apache.org/maven2/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar", + "hash": "sha256-lHZzvLxajd4tL6aIpbdZjQym4qdKfqMM2T8E9rOtaPg=" + }, + "bcutil-jdk18on-1.77.pom": { + "url": "https://repo.maven.apache.org/maven2/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.pom", + "hash": "sha256-Fj36ZjL/uSinBcqDciNQys6knM1iPOc2RaXMOw+p5ug=" + } + }, + "org.fusesource:fusesource-pom:1.12": { + "fusesource-pom-1.12.pom": { + "url": "https://plugins.gradle.org/m2/org/fusesource/fusesource-pom/1.12/fusesource-pom-1.12.pom", + "hash": "sha256-xA2WDarc73sBwbHGZXr7rE//teUxaPj8sLKLhOb9zKE=" + } + }, + "org.fusesource.jansi:jansi:2.4.0": { + "jansi-2.4.0.jar": { + "url": "https://plugins.gradle.org/m2/org/fusesource/jansi/jansi/2.4.0/jansi-2.4.0.jar", + "hash": "sha256-bNkZkTI917L7KMqT16wSr1qGovUyeeKzWCezAxP9C58=" + }, + "jansi-2.4.0.pom": { + "url": "https://plugins.gradle.org/m2/org/fusesource/jansi/jansi/2.4.0/jansi-2.4.0.pom", + "hash": "sha256-rECp8tDB7mMfw7CO+OLwvRS6IgEcp2/xvPZftWnq3zU=" + } + }, + "org.gradle.toolchains:foojay-resolver:0.7.0": { + "foojay-resolver-0.7.0.jar": { + "url": "https://plugins.gradle.org/m2/org/gradle/toolchains/foojay-resolver/0.7.0/foojay-resolver-0.7.0.jar", + "hash": "sha256-k2crR0Cg/b+7W68INT24rpqbsl9rEKk8B4EmxxfbOsA=" + }, + "foojay-resolver-0.7.0.module": { + "url": "https://plugins.gradle.org/m2/org/gradle/toolchains/foojay-resolver/0.7.0/foojay-resolver-0.7.0.module", + "hash": "sha256-7WdGoJ8yv63bkLApECrmIybiSBKaaLdGYqSkM9VTFLg=" + }, + "foojay-resolver-0.7.0.pom": { + "url": "https://plugins.gradle.org/m2/org/gradle/toolchains/foojay-resolver/0.7.0/foojay-resolver-0.7.0.pom", + "hash": "sha256-iCa8+5Iq8MIR5BPTmwgWWRPAgwZkE+BzDNgrLgsKie4=" + } + }, + "org.gradle.toolchains.foojay-resolver-convention:org.gradle.toolchains.foojay-resolver-convention.gradle.plugin:0.7.0": { + "org.gradle.toolchains.foojay-resolver-convention.gradle.plugin-0.7.0.pom": { + "url": "https://plugins.gradle.org/m2/org/gradle/toolchains/foojay-resolver-convention/org.gradle.toolchains.foojay-resolver-convention.gradle.plugin/0.7.0/org.gradle.toolchains.foojay-resolver-convention.gradle.plugin-0.7.0.pom", + "hash": "sha256-yKRD4vrvh28zijkSM8IKka1bg/acHGuiDTmns5EGJAo=" + } + }, + "org.jacoco:org.jacoco.agent:0.8.11": { + "org.jacoco.agent-0.8.11.jar": { + "url": "https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.agent/0.8.11/org.jacoco.agent-0.8.11.jar", + "hash": "sha256-0+2F3qeKntVYRqdzjjoMoVxwLGYe5LyMv+Aqi59KmcA=" + }, + "org.jacoco.agent-0.8.11.pom": { + "url": "https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.agent/0.8.11/org.jacoco.agent-0.8.11.pom", + "hash": "sha256-FuBen0liG4fFPmk1AUDzxG1C2WbGepM730sGOiscj8U=" + } + }, + "org.jacoco:org.jacoco.ant:0.8.11": { + "org.jacoco.ant-0.8.11.jar": { + "url": "https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.ant/0.8.11/org.jacoco.ant-0.8.11.jar", + "hash": "sha256-gdfriJDZvjCpOWEsKVYDVBBjUpzdA6UyZaunRHS3C3w=" + }, + "org.jacoco.ant-0.8.11.pom": { + "url": "https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.ant/0.8.11/org.jacoco.ant-0.8.11.pom", + "hash": "sha256-ftED2VnQzue6v7Ewf6bkUbFpb/01JwYVU7VQ3lUgHYU=" + } + }, + "org.jacoco:org.jacoco.build:0.8.11": { + "org.jacoco.build-0.8.11.pom": { + "url": "https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.build/0.8.11/org.jacoco.build-0.8.11.pom", + "hash": "sha256-W4SxXPLu8+WeuRvCJ4SDMQCwnfmRHjMZAww7xki9iws=" + } + }, + "org.jacoco:org.jacoco.core:0.8.11": { + "org.jacoco.core-0.8.11.jar": { + "url": "https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.core/0.8.11/org.jacoco.core-0.8.11.jar", + "hash": "sha256-/NGIxohHP8jcwMbKrzVeeziVAiQ1J8M7lZej7Ch5H0c=" + }, + "org.jacoco.core-0.8.11.pom": { + "url": "https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.core/0.8.11/org.jacoco.core-0.8.11.pom", + "hash": "sha256-u2E18Qo2NJy4SlYA/Yz3P8EpahNbLxStzYPejPJMq7E=" + } + }, + "org.jacoco:org.jacoco.report:0.8.11": { + "org.jacoco.report-0.8.11.jar": { + "url": "https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.report/0.8.11/org.jacoco.report-0.8.11.jar", + "hash": "sha256-g5MpWuJGgO0QytgzOQcED5KLhxMySRWBylvHhOLLT74=" + }, + "org.jacoco.report-0.8.11.pom": { + "url": "https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.report/0.8.11/org.jacoco.report-0.8.11.pom", + "hash": "sha256-jjtzR3nV4/1oPsAVQT1S+WGYTFDLkEX9orI7/160I4E=" + } + }, + "org.junit:junit-bom:5.10.2": { + "junit-bom-5.10.2.module": { + "url": "https://repo.maven.apache.org/maven2/org/junit/junit-bom/5.10.2/junit-bom-5.10.2.module", + "hash": "sha256-3iOxFLPkEZqP5usXvtWjhSgWaYus5nBxV51tkn67CAo=" + }, + "junit-bom-5.10.2.pom": { + "url": "https://repo.maven.apache.org/maven2/org/junit/junit-bom/5.10.2/junit-bom-5.10.2.pom", + "hash": "sha256-Fp3ZBKSw9lIM/+ZYzGIpK/6fPBSpifqSEgckzeQ6mWg=" + } + }, + "org.junit:junit-bom:5.9.2": { + "junit-bom-5.9.2.module": { + "url": "https://repo.maven.apache.org/maven2/org/junit/junit-bom/5.9.2/junit-bom-5.9.2.module", + "hash": "sha256-qxN7pajjLJsGa/kSahx23VYUtyS6XAsCVJdyten0zx8=" + }, + "junit-bom-5.9.2.pom": { + "url": "https://repo.maven.apache.org/maven2/org/junit/junit-bom/5.9.2/junit-bom-5.9.2.pom", + "hash": "sha256-LtB9ZYRRMfUzaoZHbJpAVrWdC1i5gVqzZ5uw82819wU=" + } + }, + "org.junit-pioneer:junit-pioneer:2.2.0": { + "junit-pioneer-2.2.0.jar": { + "url": "https://repo.maven.apache.org/maven2/org/junit-pioneer/junit-pioneer/2.2.0/junit-pioneer-2.2.0.jar", + "hash": "sha256-gstBVfiCotbv88qS2WzOUmEqrVNFtltl4fyCg3u1304=" + }, + "junit-pioneer-2.2.0.module": { + "url": "https://repo.maven.apache.org/maven2/org/junit-pioneer/junit-pioneer/2.2.0/junit-pioneer-2.2.0.module", + "hash": "sha256-OTy766Wk3fzMU0WXD7MRB12pGp4TVh+E344z8ROWBkY=" + }, + "junit-pioneer-2.2.0.pom": { + "url": "https://repo.maven.apache.org/maven2/org/junit-pioneer/junit-pioneer/2.2.0/junit-pioneer-2.2.0.pom", + "hash": "sha256-XKZOqAvyb+fysJlnDcPgPYHzZZ3EZOzQBtrwh2d/Buc=" + } + }, + "org.junit.jupiter:junit-jupiter:5.10.2": { + "junit-jupiter-5.10.2.jar": { + "url": "https://repo.maven.apache.org/maven2/org/junit/jupiter/junit-jupiter/5.10.2/junit-jupiter-5.10.2.jar", + "hash": "sha256-Jj5DRH9LQPEmrWsdy9ffN5RIQTve244NJAxby7p8ek8=" + }, + "junit-jupiter-5.10.2.module": { + "url": "https://repo.maven.apache.org/maven2/org/junit/jupiter/junit-jupiter/5.10.2/junit-jupiter-5.10.2.module", + "hash": "sha256-cjF2bPGyuJLGehQsljkU5rc/u1BhpschROt/jnJ3DsE=" + }, + "junit-jupiter-5.10.2.pom": { + "url": "https://repo.maven.apache.org/maven2/org/junit/jupiter/junit-jupiter/5.10.2/junit-jupiter-5.10.2.pom", + "hash": "sha256-1bcMXC10Ui2mEM04d28iW6wDSsJZGEO+6Xl6urOIDqs=" + } + }, + "org.junit.jupiter:junit-jupiter-api:5.10.2": { + "junit-jupiter-api-5.10.2.jar": { + "url": "https://repo.maven.apache.org/maven2/org/junit/jupiter/junit-jupiter-api/5.10.2/junit-jupiter-api-5.10.2.jar", + "hash": "sha256-r/93wYbNMXJ1gDhy+lEzqoAf1qxAvZHHimz4AJtLF8w=" + }, + "junit-jupiter-api-5.10.2.module": { + "url": "https://repo.maven.apache.org/maven2/org/junit/jupiter/junit-jupiter-api/5.10.2/junit-jupiter-api-5.10.2.module", + "hash": "sha256-QRtKlsKm2wmY1uWOiZNn8NElQWPzBBydmOeu38o3RBk=" + }, + "junit-jupiter-api-5.10.2.pom": { + "url": "https://repo.maven.apache.org/maven2/org/junit/jupiter/junit-jupiter-api/5.10.2/junit-jupiter-api-5.10.2.pom", + "hash": "sha256-u12jBgImsbPOtUCEldxptZRlv1DX6+Y+75TyWQnPGQA=" + } + }, + "org.junit.jupiter:junit-jupiter-engine:5.10.2": { + "junit-jupiter-engine-5.10.2.jar": { + "url": "https://repo.maven.apache.org/maven2/org/junit/jupiter/junit-jupiter-engine/5.10.2/junit-jupiter-engine-5.10.2.jar", + "hash": "sha256-tt812nUKVGrpMjdvEbPA34QfDJDHyylEzTmttDKIbks=" + }, + "junit-jupiter-engine-5.10.2.module": { + "url": "https://repo.maven.apache.org/maven2/org/junit/jupiter/junit-jupiter-engine/5.10.2/junit-jupiter-engine-5.10.2.module", + "hash": "sha256-FD7yda5mlRGdeCEqkyRazrv5I1tTdbn0wdSvcy87Uwo=" + }, + "junit-jupiter-engine-5.10.2.pom": { + "url": "https://repo.maven.apache.org/maven2/org/junit/jupiter/junit-jupiter-engine/5.10.2/junit-jupiter-engine-5.10.2.pom", + "hash": "sha256-q+csj7+anI+e55usKbpkedMrDf+quICApQKRHSTTlGM=" + } + }, + "org.junit.jupiter:junit-jupiter-params:5.10.2": { + "junit-jupiter-params-5.10.2.jar": { + "url": "https://repo.maven.apache.org/maven2/org/junit/jupiter/junit-jupiter-params/5.10.2/junit-jupiter-params-5.10.2.jar", + "hash": "sha256-7bHkP/C4BnYm/7VeXp7sodmrJHgUGnx/JT0RWynMfPI=" + }, + "junit-jupiter-params-5.10.2.module": { + "url": "https://repo.maven.apache.org/maven2/org/junit/jupiter/junit-jupiter-params/5.10.2/junit-jupiter-params-5.10.2.module", + "hash": "sha256-IMLmXVKjnIVJbo4XDgjG7Sk1x/NeZRAT2WTcG7dcgns=" + }, + "junit-jupiter-params-5.10.2.pom": { + "url": "https://repo.maven.apache.org/maven2/org/junit/jupiter/junit-jupiter-params/5.10.2/junit-jupiter-params-5.10.2.pom", + "hash": "sha256-8n19CW20igXW56/YQalUVEJOVcUj167RZoF4szpjy9c=" + } + }, + "org.junit.platform:junit-platform-commons:1.10.2": { + "junit-platform-commons-1.10.2.jar": { + "url": "https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-commons/1.10.2/junit-platform-commons-1.10.2.jar", + "hash": "sha256-tWpewACked9Jc7GLuiTJj+Dbj6oUyJB9PvRR2Mcf2K4=" + }, + "junit-platform-commons-1.10.2.module": { + "url": "https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-commons/1.10.2/junit-platform-commons-1.10.2.module", + "hash": "sha256-HoFCGmL4cryk0gIgs56hniexNfNre3gXBPkvrVQxlhg=" + }, + "junit-platform-commons-1.10.2.pom": { + "url": "https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-commons/1.10.2/junit-platform-commons-1.10.2.pom", + "hash": "sha256-8/glx8o72JcU1IlEfHfHbifqOPAoX195ahAAoX/KS+c=" + } + }, + "org.junit.platform:junit-platform-engine:1.10.2": { + "junit-platform-engine-1.10.2.jar": { + "url": "https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-engine/1.10.2/junit-platform-engine-1.10.2.jar", + "hash": "sha256-kFy6m0mYzMKdEjkIWn+x/g4oAk11JhUjVtgQ7ewKSaM=" + }, + "junit-platform-engine-1.10.2.module": { + "url": "https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-engine/1.10.2/junit-platform-engine-1.10.2.module", + "hash": "sha256-4dG63P7cJyRFQeC+XV6EtyoicNevYWhrJvEc/Edw2kI=" + }, + "junit-platform-engine-1.10.2.pom": { + "url": "https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-engine/1.10.2/junit-platform-engine-1.10.2.pom", + "hash": "sha256-EqqGyhwNZIoiXU58aWBUwfx26IeCxcOft983muI7728=" + } + }, + "org.junit.platform:junit-platform-launcher:1.10.2": { + "junit-platform-launcher-1.10.2.jar": { + "url": "https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-launcher/1.10.2/junit-platform-launcher-1.10.2.jar", + "hash": "sha256-rtT0L7kK2ps0fCMfE2VvwJEhuiDattxkamvZ1Nox5Ko=" + }, + "junit-platform-launcher-1.10.2.module": { + "url": "https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-launcher/1.10.2/junit-platform-launcher-1.10.2.module", + "hash": "sha256-/1YhIQJQJSv9rbYiu+LqZuzsMahnc2zqSz1K3yGcp/8=" + }, + "junit-platform-launcher-1.10.2.pom": { + "url": "https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-launcher/1.10.2/junit-platform-launcher-1.10.2.pom", + "hash": "sha256-WjEXCOeQa7l0YpwayHC8EWV0ZbmJ2koHfkVBa9mHJeQ=" + } + }, + "org.opentest4j:opentest4j:1.3.0": { + "opentest4j-1.3.0.jar": { + "url": "https://repo.maven.apache.org/maven2/org/opentest4j/opentest4j/1.3.0/opentest4j-1.3.0.jar", + "hash": "sha256-SOLfY2yrZWPO1k3N/4q7I1VifLI27wvzdZhoLd90Lxs=" + }, + "opentest4j-1.3.0.module": { + "url": "https://repo.maven.apache.org/maven2/org/opentest4j/opentest4j/1.3.0/opentest4j-1.3.0.module", + "hash": "sha256-SL8dbItdyU90ZSvReQD2VN63FDUCSM9ej8onuQkMjg0=" + }, + "opentest4j-1.3.0.pom": { + "url": "https://repo.maven.apache.org/maven2/org/opentest4j/opentest4j/1.3.0/opentest4j-1.3.0.pom", + "hash": "sha256-m/fP/EEPPoNywlIleN+cpW2dQ72TfjCUhwbCMqlDs1U=" + } + }, + "org.ow2:ow2:1.5.1": { + "ow2-1.5.1.pom": { + "url": "https://repo.maven.apache.org/maven2/org/ow2/ow2/1.5.1/ow2-1.5.1.pom", + "hash": "sha256-Mh3bt+5v5PU96mtM1tt0FU1r+kI5HB92OzYbn0hazwU=" + } + }, + "org.ow2.asm:asm:9.6": { + "asm-9.6.jar": { + "url": "https://repo.maven.apache.org/maven2/org/ow2/asm/asm/9.6/asm-9.6.jar", + "hash": "sha256-PG+sJCTbPUqFO2afTj0dnDxVIjXhmjGWc/iHCDwjA6E=" + }, + "asm-9.6.pom": { + "url": "https://repo.maven.apache.org/maven2/org/ow2/asm/asm/9.6/asm-9.6.pom", + "hash": "sha256-ku7iS8PIQ+SIHUbB3WUFRx7jFC+s+0ZrQoz+paVsa2A=" + } + }, + "org.ow2.asm:asm-bom:9.6": { + "asm-bom-9.6.pom": { + "url": "https://repo.maven.apache.org/maven2/org/ow2/asm/asm-bom/9.6/asm-bom-9.6.pom", + "hash": "sha256-ig5fYk/ikwt6jWmVb0OORe9TKZa01kQJthbErvSxrE4=" + } + }, + "org.ow2.asm:asm-commons:9.6": { + "asm-commons-9.6.jar": { + "url": "https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/9.6/asm-commons-9.6.jar", + "hash": "sha256-eu/Q1cCQFwHGn3UT/tp2X7a+M68s56oXxXgfyHZXxRE=" + }, + "asm-commons-9.6.pom": { + "url": "https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/9.6/asm-commons-9.6.pom", + "hash": "sha256-qYrkiVM0uvj/hr1mUWIQ29mgPxpuFeR92oKvz2tT13w=" + } + }, + "org.ow2.asm:asm-tree:9.6": { + "asm-tree-9.6.jar": { + "url": "https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/9.6/asm-tree-9.6.jar", + "hash": "sha256-xD7PF7U5x3fhXae1uGVTs3fi05poPeYoVWfVKDiI5+8=" + }, + "asm-tree-9.6.pom": { + "url": "https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/9.6/asm-tree-9.6.pom", + "hash": "sha256-G8tIHX/Ba5VbtgygfIz6JCS87ni9xAW7oxx9b13C0RM=" + } + }, + "org.slf4j:slf4j-api:1.7.30": { + "slf4j-api-1.7.30.jar": { + "url": "https://repo.maven.apache.org/maven2/org/slf4j/slf4j-api/1.7.30/slf4j-api-1.7.30.jar", + "hash": "sha256-zboHlk0btAoHYUhcax6ML4/Z6x0ZxTkorA1/lRAQXFc=" + }, + "slf4j-api-1.7.30.pom": { + "url": "https://repo.maven.apache.org/maven2/org/slf4j/slf4j-api/1.7.30/slf4j-api-1.7.30.pom", + "hash": "sha256-fgdHdR6bZ+Gdy1IG8E6iLMA9JQxCJCZALq3QNRPywxQ=" + } + }, + "org.slf4j:slf4j-parent:1.7.30": { + "slf4j-parent-1.7.30.pom": { + "url": "https://repo.maven.apache.org/maven2/org/slf4j/slf4j-parent/1.7.30/slf4j-parent-1.7.30.pom", + "hash": "sha256-EWR5VuSKDFv7OsM/bafoPzQQAraFfv0zWlBbaHvjS3U=" + } + }, + "org.sonatype.oss:oss-parent:9": { + "oss-parent-9.pom": { + "url": "https://plugins.gradle.org/m2/org/sonatype/oss/oss-parent/9/oss-parent-9.pom", + "hash": "sha256-+0AmX5glSCEv+C42LllzKyGH7G8NgBgohcFO8fmCgno=" + } + }, + "org.sonatype.oss:oss-parent:7": { + "oss-parent-7.pom": { + "url": "https://plugins.gradle.org/m2/org/sonatype/oss/oss-parent/7/oss-parent-7.pom", + "hash": "sha256-tR+IZ8kranIkmVV/w6H96ne9+e9XRyL+kM5DailVlFQ=" + } + }, + "org.sonatype.oss:oss-parent:4": { + "oss-parent-4.pom": { + "url": "https://repo.maven.apache.org/maven2/org/sonatype/oss/oss-parent/4/oss-parent-4.pom", + "hash": "sha256-xROZXPAZ2SE9T9pmZYmTeyvxvqXEzdM35hcOgLGEBu4=" + } + }, + "org.yaml:snakeyaml:2.2": { + "snakeyaml-2.2.jar": { + "url": "https://repo.maven.apache.org/maven2/org/yaml/snakeyaml/2.2/snakeyaml-2.2.jar", + "hash": "sha256-FGeTFEiggXaWrigFt7iyC/sIJlK/nE767VKJMNxJOJs=" + }, + "snakeyaml-2.2.pom": { + "url": "https://repo.maven.apache.org/maven2/org/yaml/snakeyaml/2.2/snakeyaml-2.2.pom", + "hash": "sha256-6YLq3HiMac8uTeUKn2MrGCwx26UGEoMNNI/EtLqN19Y=" + } + }, + "org.yaml:snakeyaml:1.26": { + "snakeyaml-1.26.jar": { + "url": "https://repo.maven.apache.org/maven2/org/yaml/snakeyaml/1.26/snakeyaml-1.26.jar", + "hash": "sha256-2H1gflAIhTVsA8HK5h6MLgXWl9+Hh9WroTSEwut2qEQ=" + }, + "snakeyaml-1.26.pom": { + "url": "https://repo.maven.apache.org/maven2/org/yaml/snakeyaml/1.26/snakeyaml-1.26.pom", + "hash": "sha256-xVd6BoDYqN70GDqk1q7RwBICaz2JvaZc2g4YrhYTAVc=" + } + } +} \ No newline at end of file diff --git a/nix/boringssl_pkg_versions.json b/nix/boringssl_pkg_versions.json new file mode 100644 index 00000000..f9b7c4b0 --- /dev/null +++ b/nix/boringssl_pkg_versions.json @@ -0,0 +1,486 @@ +{ + "r41754d58": { + "rev": "41754d58e549d45762f906ba9e0da6ccf28c7b3f", + "hash": "sha256-vFuLW2eNrvH4X4rwOi2wPSPoeG+qmfbnq8lsePgGMFo=" + }, + "r6c98ebeb": { + "rev": "6c98ebeb8cf24c7be5d462ded7e60d88b2ceccec", + "hash": "sha256-BnD/HKW/2dz7AJz4B3iFvjx6ZTuItR2IyHgAGzexvCI=" + }, + "rd7278ceb": { + "rev": "d7278cebad5b8eda0901246f2215344cffece4f4", + "hash": "sha256-QzrhYKnZKtV9SFwMPW2Axvw9mg1HKg3m5XqOKsDPLGA=" + }, + "re2d7f2d6": { + "rev": "e2d7f2d625257b2c250ea2f18d3f832add5b43bf", + "hash": "sha256-ZDGX6wKYBbK8B6IkaHOz9GbY2AVZmtPWXWdeFditXLw=" + }, + "r6cbf2c09": { + "rev": "6cbf2c09f280fbf2190affee046783d0fe543113", + "hash": "sha256-lxWwe+UCPsQybZL9dCPUXlSs1maRlrkeWwmnVDXRlKg=" + }, + "rcf4f615d": { + "rev": "cf4f615d706d54fca9323fb1595d88f7ee2d7517", + "hash": "sha256-2DGnYooj8D1+eF++1z8jvHxZqB8LcqwVCavdWgOMYKo=" + }, + "rd4faa8d6": { + "rev": "d4faa8d63a06a5feff2e5b68695adf9bf8fd1f81", + "hash": "sha256-BtrreTatwvQMHW3DEzhaRqirYf6czUReaqgGskm81co=" + }, + "r38d17d34": { + "rev": "38d17d345c73a3ac0cb451fa0696fd8efabadc0d", + "hash": "sha256-zMIaNxiBjb1H/d9Qu7fXWW43/8T/Uc9626XTwfvGEQ0=" + }, + "rbecb3ffc": { + "rev": "becb3ffccdecff83047285ebea20e5b85b2d65b1", + "hash": "sha256-jfv1Eztcgow3v+t4nGpAG4O7ztFi3a7+nKPOei5II7I=" + }, + "rec6a4055": { + "rev": "ec6a4055437bd384a1dff3842c084eec49e203a8", + "hash": "sha256-gSwNYUaq2JRgBeUUo/QWqdRILrzd7pDne/Pvo6Q20mA=" + }, + "rfaac623b": { + "rev": "faac623b09d6b14fbb06fe5150016de78b359eea", + "hash": "sha256-x5THk9BRkFGcomeu0rY9IWiMVDGJyQKNYlnfz4nRtiA=" + }, + "r2d7adaea": { + "rev": "2d7adaea91627b77b3d560d12703191fa5c434c0", + "hash": "sha256-ok7CxYZdi1uY5g4kGUhxaFi3Uj1EV5sH6r3B/O6pEBY=" + }, + "ra4851dd8": { + "rev": "a4851dd8c67a2b311403d67270e02e7296d31157", + "hash": "sha256-7cW4LQ3w0YgpY1WvY9c00VgFBmlZ+SyUTMgs8Df0e/E=" + }, + "r3763efb5": { + "rev": "3763efb56b5282cf92d71c259576352555c1a8f8", + "hash": "sha256-KI3iryvJplRurCGgYMdD7ryUHBh/Vrajpzuxh2XKUnA=" + }, + "r235ee97b": { + "rev": "235ee97b469ca6761e5096ea829f4da032c591fe", + "hash": "sha256-slvLt9rpIdpkZWLhrdUogsz2rLMjuE99r3HXvrVo0p0=" + }, + "r18b1b8b1": { + "rev": "18b1b8b1c4567190fe4a37262fdfba57aa446dc7", + "hash": "sha256-95x1QJTbAXQUXWAaLCXxNJrxH7P7E7mFvuOm2gtcxdk=" + }, + "ra4f8755f": { + "rev": "a4f8755f8e66b77ca2230f376bc5d5d54b28544e", + "hash": "sha256-z5G6N6vr0wUpvRLafOMHE5tLX2Aj2ipvfsTSScdb2oE=" + }, + "r5d3124a3": { + "rev": "5d3124a304df8c69d38a73619bf4eae05b9d5545", + "hash": "sha256-jmfIlhwWrHeDX1F0znwOlR7NznXyfisRG5RB5s1KQHU=" + }, + "r3f680b0e": { + "rev": "3f680b0eff18ddd6c878b92bffbc1b53fe6bd797", + "hash": "sha256-nt3xV1wO5svpgQk///eWTikcqOoaRIqIFwLqZhxGT2A=" + }, + "rdd521945": { + "rev": "dd5219451c3ce26221762a15d867edf43b463bb2", + "hash": "sha256-SLWV9JkMwUC0lZ18D3Tt79gqQ/2vTIapxAwKU3Y2Cac=" + }, + "ra02b7435": { + "rev": "a02b7435ca52b81c7cce656d577c8423b1cc4bb3", + "hash": "sha256-lwOC5VETlv/Nq3+dR3XhBd8qnnMvgjH7HAb+60OgGTw=" + }, + "r5fb362c6": { + "rev": "5fb362c66a57b4d1e300a1d56b461bbb69e8c8ae", + "hash": "sha256-gCuFIHQj9gQA2BqGB1VSEma4Brf/2IztMaaipJUPn88=" + }, + "r860cc73b": { + "rev": "860cc73bb2964457461a6f3cb5807dbd79256372", + "hash": "sha256-D1v3lfaL07pzn1p+tAIvflBtEw1seNUniBLdZMhIBs0=" + }, + "r474ddf8b": { + "rev": "474ddf8ba95f30e69acea37d76b3e671d89381c3", + "hash": "sha256-T/FCRe7w8B6W7Xw+DMbj750CNKLbALm2EeSAPLgSvrU=" + }, + "r908b1300": { + "rev": "908b1300ff4ed3cfc3c965d846560f2593a51491", + "hash": "sha256-cJs3RnYEI1lVEy5cmHN5EmULIDjZY4PgDjF0eGicZiM=" + }, + "rf3165478": { + "rev": "f31654786c0e9c54c227b1e966faadc615780ef5", + "hash": "sha256-gHJLYi1TeYSzfE5DjB17Tt/2paE3Q8/iLcQgqLgguNg=" + }, + "r65ad925f": { + "rev": "65ad925f51d879f8babd22ecb2ca4dc779b2cc24", + "hash": "sha256-8/54cNgeCzdm0bnswToe/d3XyixLls9Gv1s+Z/g5ydI=" + }, + "r02397c7c": { + "rev": "02397c7c973e9dbdda0f4d610e91395b7a72d3c6", + "hash": "sha256-FCZeP2lgTsRo/cVI+ES090pYAaDi5Rom0TI8E8LvsD0=" + }, + "rde434576": { + "rev": "de434576d7412b95a8eb90d613fc9f01e2d7166b", + "hash": "sha256-nupZ+yTMYwLeARfszeXFLEaeeLBmeN73V9EUH4Hr84E=" + }, + "r3592aa30": { + "rev": "3592aa3009eb883f7e5431ad7ce08dc3ae979902", + "hash": "sha256-LkHwOGR3YmpVDEOmBZwXZEtaOyf7+m/7aVXmHMipDJE=" + }, + "r9f426b60": { + "rev": "9f426b60fabf5e5fec0a0a05120de19289ef1fdf", + "hash": "sha256-jPJhMJPkPjTqRILCpyeDq+XBU9NFA8Sw5Izh78l50tk=" + }, + "r8ce0e1c1": { + "rev": "8ce0e1c14e48109773f1e94e5f8b020aa1e24dc5", + "hash": "sha256-N4MWyTJPgwQN+d1wv4s/rq/930dBaEudJDI6/GrybrI=" + }, + "rf2029899": { + "rev": "f2029899b2c1dcf3e3120876794da088f42ad351", + "hash": "sha256-L7NXMdHITp4aUXZFQeRp6F55DMCBkmqTPoZfN0ErCYc=" + }, + "r801a8010": { + "rev": "801a801024febe1a33add5ddaa719e257d97aba5", + "hash": "sha256-BvDaLePWJKXdVCSo8qY1dSeKH0rNz0Vo8+AV7k8HkPM=" + }, + "r9a836f78": { + "rev": "9a836f7840b965e66085f8380116a54076f44a4b", + "hash": "sha256-dbAExSW2fud0EaDItO+MyyOBPSJdKnyQymWCtUBbntU=" + }, + "rbdc35b63": { + "rev": "bdc35b63617f78037768f4897d8835696f02181a", + "hash": "sha256-i7vQzzPr2SVvoq87gUVcnMRtaaeQc9+K89olB1ZYnZo=" + }, + "r123eaaef": { + "rev": "123eaaef26abc278f53ae338e9c758eb01c70b08", + "hash": "sha256-6vAJ6bUZQKXFuiPEgPaaXhaLzynKe6hyqp2nO+RlXfc=" + }, + "rc3c540b9": { + "rev": "c3c540b9a4d066476e8be372e0c5059979c8578e", + "hash": "sha256-teW60idbGmIwZYk/YEyeSfeDeZJ+bLGhasDB2b924wo=" + }, + "r686d05aa": { + "rev": "686d05aaa57604b5d867f1d40e85f04759151ce1", + "hash": "sha256-e9LCleyoKgqmcHNnZMTEk3wA8iCTWrTHnBwwe9dhb8Q=" + }, + "r1c2473eb": { + "rev": "1c2473ebae2411949027c950eea5261a3a8f7922", + "hash": "sha256-Z+xI0Rea5WuZnUinMF9FOdMVe5CtXvihAgoCzs9/r00=" + }, + "rb27438e1": { + "rev": "b27438e1268d3ef645c6f8ce10c184bb7d57825d", + "hash": "sha256-TdochIfhmyaCs4cRaMIRU4HNLA9142HYuinBpUXHH+E=" + }, + "r5799ebfe": { + "rev": "5799ebfe5f895ecd29fcd699789854fc1790d6cd", + "hash": "sha256-wB0haPGSwvPepfVCgb8ueqVAk9aRHp/Hme6hETyqMnY=" + }, + "r52067828": { + "rev": "52067828463443821e175975d19085b2c8bf2f54", + "hash": "sha256-CDaSjRjV9ou3fM+Lmfwpiv/ylwlwHv0VUUTzLGpGh0A=" + }, + "r4e93cd48": { + "rev": "4e93cd487f0a7f447d194621a59018a88d246379", + "hash": "sha256-8OWFPnV+5Vk3LY6BpHIE7I3Bp6v+n3Z1vqXG4dtO70E=" + }, + "r71a3b826": { + "rev": "71a3b826636eee85c20f064ef318f0935416a479", + "hash": "sha256-WUb4HfQv9Tt3776inSUVB5zc5giAFXpHOYaYjM5HumU=" + }, + "r468cde90": { + "rev": "468cde90ca58421d63f4dfeaebcf8bb3fccb4127", + "hash": "sha256-aXCE8KmtZDVud5v12eECS8kMInh1slqMwK5kc/diWD0=" + }, + "r8d4c8fc4": { + "rev": "8d4c8fc41be567bca17ce7c15304dc06539a060a", + "hash": "sha256-rO0KW9bLeZUlEZ99BlCH0v+FI43mCIcvLl5eupM5kzk=" + }, + "r3d15a94a": { + "rev": "3d15a94add73c195fa0e68250afae8c030818437", + "hash": "sha256-NECKcKEWsaPXOaVEvCJ2ElVTbK9I7QwB94DtntWKLy0=" + }, + "rc02c19e0": { + "rev": "c02c19e0d842f54d903a9b62316476f4b9c4e3f0", + "hash": "sha256-jtpyvtMRMRCG5vIyl+1QMqvTaUgyX9RR0EY7h7aS3lY=" + }, + "rc295935a": { + "rev": "c295935a9bf345acb597ffefb69f7e095c3eee72", + "hash": "sha256-QMfhNhx9P5qNbRyeIqmdxxqhiL84hz+04Q9RZE4tyd4=" + }, + "r92de0b53": { + "rev": "92de0b53a799a8724865fe816200c1421381d128", + "hash": "sha256-4ZYn1Yh91ALqQ+bHdqV/sPK9t8pD1/4KfFvENjGq330=" + }, + "r2c8445c5": { + "rev": "2c8445c5f7515f8125f41aa1e3da2501b8b040d1", + "hash": "sha256-jncx5QcrmJs0t5qgCv7Wh4cs8gCbDNosjKPp6e1r9dk=" + }, + "r3989c997": { + "rev": "3989c99706bf30054798ff82f1cb010e50e385f5", + "hash": "sha256-UnupFj0S9Oe9v4a2U2WUWQ3hleN/oFaZnCP+Il7TsEk=" + }, + "r5eeaf302": { + "rev": "5eeaf3029dab6b7264522c57a7a2acb461c0a434", + "hash": "sha256-LzLdeWyZ0/D7vicUO197AKi6QHr8qe/Su0IxXgPHbJE=" + }, + "rde196121": { + "rev": "de196121b05adea2f9b7e400271266495a40b0f4", + "hash": "sha256-TtgmEPl75KJ6wayrPoD+2rTPlCV+rAgGbppWofww0iU=" + }, + "r2309f645": { + "rev": "2309f645e509507a1cc8f9845771110fcf986fd9", + "hash": "sha256-V24YX21Ze9KykwCMghKnuCXixYUUKZ7U1udi8I9mv88=" + }, + "r14d192e9": { + "rev": "14d192e930802135eadf57d1cd90165a94e3441a", + "hash": "sha256-7lYiZsgfjsaqo+6sQ7H3TaiS+dHgM4H8KqAM4LRLe5k=" + }, + "re8434d30": { + "rev": "e8434d304cb10d2b52a426a13e6a1f852d63bba2", + "hash": "sha256-sqVazinRxRbwryjDUvHPv5jmyu15lXuIXyMxqz7PFLU=" + }, + "rf1efbc8f": { + "rev": "f1efbc8f8be9ce2918eaf46c48f294cb214023b9", + "hash": "sha256-kev4zyibpHEbmuVIAF4gR9QXONQH9A3iDEr5D+RBuzI=" + }, + "r98b4cdba": { + "rev": "98b4cdba1e4ede26d845bcae8185ddb5b2feea93", + "hash": "sha256-MuQosdGCJejCzi0lWz8p7Dqgi2Q3VuhFUj3CutLxXIc=" + }, + "r15cd8bf4": { + "rev": "15cd8bf433750187d6c8babc83abec83f6215eb3", + "hash": "sha256-zNBKpVbx7EHMdYcjHw0EuvAb1kiWnxt4/dyU06c9bGk=" + }, + "rde1d2881": { + "rev": "de1d2881aea4aa23ba580da752387e52a5fd3eb2", + "hash": "sha256-0KnJ1+ii8WUaVyQCgzb6re0ZBjJW4aLma9OUTf8pJVg=" + }, + "r1458b49a": { + "rev": "1458b49a9e53b0db0ad63e8ef3156214f1473d87", + "hash": "sha256-x3nEtHyzZPn7WxtsLnCs3fox2dHjJXa5RsLzR/2SsOI=" + }, + "r356a9a08": { + "rev": "356a9a0895bbda5e78f5627dd546d4f09c380166", + "hash": "sha256-RGFLQV1c/lmqoChsoxv27JrPWT8VW92yJXob5TLYHSY=" + }, + "ra866ba5d": { + "rev": "a866ba5d704973e5678d744ebd10ffbee3e3d3a3", + "hash": "sha256-i5NP3rxLGGmtgatQbXLNcaV9uB/8i2BmosFHPrxLCsA=" + }, + "r9b896cf1": { + "rev": "9b896cf148e692fca46d7f34d0e45d1c58764db3", + "hash": "sha256-hGf31gWcCFzhsREgESoY988gAeEUVxB1bJU5MbHnl/M=" + }, + "rc67076d6": { + "rev": "c67076d653f7501136f7b208df4b011a7275e8f5", + "hash": "sha256-MALoEV07gCSnSZgivQDkzIU7/xokXxoQMp0pOev7Nyc=" + }, + "r8d685ec8": { + "rev": "8d685ec867c4975013b11e72b280a1af850737f5", + "hash": "sha256-VsdQQ7zbl/xVrQgpBsAoAKhelmfn90ouH6haBAi7mXI=" + }, + "r0a87c498": { + "rev": "0a87c4982c617799d48cad210945ec6429c13b8f", + "hash": "sha256-zFf1d0So61ij4BqnB/96kRqt6SYUsdKGnJNGveS90ms=" + }, + "rb65ce68c": { + "rev": "b65ce68c8f2c1e3e9d18b6ebf0f48905b5368a39", + "hash": "sha256-ZSCII2Qi5iIpLSidsrYEnKqrAwqJNw0xV8LHBDGY7RM=" + }, + "r74944287": { + "rev": "74944287e1ab95e091107c9f26ce46bd50e13043", + "hash": "sha256-ZbyjkLVsdhz76p8pPox9uC3YvCL6pjU590IaF7h2yfg=" + }, + "r045ee419": { + "rev": "045ee41928e482d7e3022ff9d9c73ed2bab48b91", + "hash": "sha256-NPftv8mj9KLZ0BEo5uSezGY7kvmjRfApNVllCWr7Gbc=" + }, + "r9edbc7ff": { + "rev": "9edbc7ff9f56dff801a49f5ecb15ee06718b995c", + "hash": "sha256-ReWBiMykRsIC6xJU3hRg5Mj6se1eRSdjD/kvgD6nKzw=" + }, + "r62a4dcd2": { + "rev": "62a4dcd256a028918b17756f7fd3f95eaae5ab7e", + "hash": "sha256-5sbkiXtuy71ujJhncHAp0m4vbI9tQnW75iz1/oAx2rc=" + }, + "r350257db": { + "rev": "350257db77b736385fdbad16308bef9be22d60cf", + "hash": "sha256-vHZKmyk1X8P+P7WMays+OatkXcjwt1tgcoN+JA/3KpU=" + }, + "r378cca80": { + "rev": "378cca8016622e372a2da6cad0026ee12c426d6d", + "hash": "sha256-Sv4G8325ZpI9x0r8DFjanUtogttIWYmzdNA4gOPRALc=" + }, + "re833a6df": { + "rev": "e833a6dfa2a89420d37070cd9b27688e37e83c8c", + "hash": "sha256-FWXVbDGOiyTC7igmTwxzhk4L/a/P80/fhOdwobVEwYU=" + }, + "r82639e6f": { + "rev": "82639e6f5341a3129b7cb62a5a2dd9b65f3c91ef", + "hash": "sha256-Ryq0VoO1K8U2+0clK9lAVvzrhzln8pMUlYV2evuGgwM=" + }, + "r9f9c938a": { + "rev": "9f9c938af0affceee30eef308ed2596e1d7f53e0", + "hash": "sha256-odnwO/idLZc+H9TQL1fB8vV3VcI/DkdgoVfVs0veB3w=" + }, + "rd12f2ba5": { + "rev": "d12f2ba55e015a16f97e53c7314babd483e10ea3", + "hash": "sha256-ufpj+f6lc62AtBTjaWv1Zf02r/o0YQwH8hAmq8aXRNE=" + }, + "r1d339558": { + "rev": "1d339558acc7f2e21b8f9df094e43178c05139c0", + "hash": "sha256-trHB7x9QcLVChT+ONraqikPKJwppjx4Mn/9ydd6bgfQ=" + }, + "r041dd68c": { + "rev": "041dd68cecd28bdaf5506d148df4634cd0c540af", + "hash": "sha256-2ZkPSH22Y/Uaa/IjzPPGNjNs0nrdAXz6P7PRMovzEb4=" + }, + "rd3192050": { + "rev": "d319205007c10ca27280496b2de9d7256dbd953d", + "hash": "sha256-JSWLhC5ZebuBOHX8Ax6mLdQj1bO9xN8OV5x9K78TW2g=" + }, + "reb7c3008": { + "rev": "eb7c3008cc85c9cfedca7690f147f5773483f941", + "hash": "sha256-iephAcVqFFmn/dpHGR6bFsjf2OZfPsnOhA8JqNyjamU=" + }, + "rac97cc0e": { + "rev": "ac97cc0e515b802c537fe50efc6e2faa2c7b0a0b", + "hash": "sha256-VRqv+ekEL7lktXkSr/4iTBzqomd8iOrCATK3lFW06uo=" + }, + "r02808ddc": { + "rev": "02808ddcaad2de63773f566835916bc0a1e36f87", + "hash": "sha256-5fyEPP3IuDzafoYrG9JlTQZ/UA5HfjRJBpN4cgrVxTU=" + }, + "r2ccdf584": { + "rev": "2ccdf584aa3304e5c9aaa221cc1fd1368c62d096", + "hash": "sha256-wPvGh11clvLUlWibMcgbEahi0rmDJsqYqZl3pUJQtJo=" + }, + "ra4f78775": { + "rev": "a4f78775b97928387704bd1ab780ee68365f4ee5", + "hash": "sha256-FL5nDp4KoA5aRXig+0n4vXVU/BObx9o+y1SEW/sBFuQ=" + }, + "r380bc30f": { + "rev": "380bc30f0c048368b884ec9da90eeda2a28cb1e7", + "hash": "sha256-UvLSoas5SI+DS3Tptp78uIZ41dckrFhz3nIn+vexv4E=" + }, + "r48eaa28a": { + "rev": "48eaa28a124e702edf373e212011cb283f0f0161", + "hash": "sha256-kl+C/REClp8E5R74VBUVL5HexZ1whLmnz/Gehi3nRlk=" + }, + "r40e4ecb7": { + "rev": "40e4ecb793e057d3c8b01a489603d7f90bafe53c", + "hash": "sha256-gmFycsMeT/YNWfYInLXGchpjj+z9hp/C648TDK7HDM0=" + }, + "r2eb28897": { + "rev": "2eb2889702d9c57b89cfcc38ce57541251b421fc", + "hash": "sha256-RHTU0BXNxyvJFn1137jb5oxOkMmcYRVEefxk2SKM+Y8=" + }, + "r049fdfc7": { + "rev": "049fdfc7e0cd1e1390128459fb159265e5861420", + "hash": "sha256-HnviL88MBOK1sfcvEWzbDe240KkWVX1Pp2vf9KOciJU=" + }, + "r666d16e2": { + "rev": "666d16e262bb333cdf9d0971a1221133b35dc474", + "hash": "sha256-xA/Adrp1IggXLZvaIvQhZuIu7tIkvEySufZDOP/umws=" + }, + "r57533465": { + "rev": "575334657fcb66a4861c9d125430b2aef60476a6", + "hash": "sha256-vHc4MxkQkbJ4FlwS47znQW+sMqIH2kW4OdGPcb4tn94=" + }, + "r288ca7dc": { + "rev": "288ca7dcb44a177a1f3f7fa5be4f581edf1da668", + "hash": "sha256-6nrajlvKYMyCdA5ScOLoc8oPmnuObcayHNpxJcnPtiQ=" + }, + "r0a471910": { + "rev": "0a471910b41d6e5846b7874d9705c192b72dd8a3", + "hash": "sha256-2DJdzlwSni9AUqwkPIMynRtxmY6Ru4GNHbQ8tzAFg14=" + }, + "r02b1d195": { + "rev": "02b1d1953aa8cf44b887309b14496e235146b32f", + "hash": "sha256-mlaZyhbAi1TbuA2bGUNTYwy7UsDTFBjsqXXgJ5Wqmu8=" + }, + "rd363247f": { + "rev": "d363247f1eed9b84b22cf02720b030d409ef49a6", + "hash": "sha256-SOe63Oum1fie46XTAg+7ZMjORtzP37gtriDcy1fMpIw=" + }, + "r1386aad1": { + "rev": "1386aad102bfcdadbb7e0911f141067f6d67966d", + "hash": "sha256-LFA92v7RRMNVdfzAiiCh1UdqT5Rxfm4+gk09JBiwGQg=" + }, + "r1ffb4a42": { + "rev": "1ffb4a4283a7ac5e795bf7c145cf133fb8acbb53", + "hash": "sha256-FOSD1m310rVq3c5+4iwgKtvNailvGEKzSfTSzjPATAs=" + }, + "r06a6ed01": { + "rev": "06a6ed0170cc4e655e5655588e7c8e82c7fe28c5", + "hash": "sha256-So+OHLsm77WITjttixxOJ7w3RGHIz5ZRBLHE32Qh5Zc=" + }, + "r0a3663a6": { + "rev": "0a3663a64f00b6337ec80d78c8945f2c77c63dba", + "hash": "sha256-DxvOA1lcLILfiXF5uuVrWX9L1+ZjcNeJbtQo46gHWrk=" + }, + "r055375ef": { + "rev": "055375ef2629d1547324113968f824a76879c927", + "hash": "sha256-wCHD4l/a2tIMLFXvprGUqZXpqofdqgTSS5HT+iiKumE=" + }, + "r01f8a8c2": { + "rev": "01f8a8c2d5327d0a3c89f36802f72f6278d574ae", + "hash": "sha256-sA2gcLtJsr4XAORmMK1KABFX1U+HFczPK1xVXszWDLU=" + }, + "r08ab59b8": { + "rev": "08ab59b8d7f0b173bf4179e5615a073993bcdd38", + "hash": "sha256-+f9XhKoUTgCtVt6jF21mByEk2MKf1p86pBo5etCXq/k=" + }, + "r6dd055d2": { + "rev": "6dd055d2eb39fe66e4b66bcb58eaa5692113caa0", + "hash": "sha256-R0PnUO1FdD+l/rBFoAfZAuHbfjZmcpd72sad3nxuRzI=" + }, + "rafd88c27": { + "rev": "afd88c27f2fe9f8f1a6d5b287cc16b1bc8f06198", + "hash": "sha256-YMzAFNv9rw2kD0pK38FMNQ7JW2XCXyxMM94qOCfzyK8=" + }, + "r13a129d3": { + "rev": "13a129d301f4b2f9ab5d68c19902fc95c5dad89a", + "hash": "sha256-unIC3msCKL5UjGhsI+l9Z/uDCVx8dly+GDc7H7JOvz8=" + }, + "rddd5ba78": { + "rev": "ddd5ba78a949c5458aad9f7c3f19d214a2e8338e", + "hash": "sha256-BiVNiS+01LE4mk8ATUeie2+CgfBHGsGjEzVkC4dPvkA=" + }, + "rbf833c34": { + "rev": "bf833c346d532558a4c1c98940fa42e4e80a0a02", + "hash": "sha256-BlGzWt1dSoTUCJOI8Eis6BlMy1V2o2Nqufy3Mdz7xwU=" + }, + "rfc2d78dd": { + "rev": "fc2d78dd1e900e43be1812de1b1e1d4083267a54", + "hash": "sha256-8aR8nDOVgKhBKlgRNuvmhhEi+/w/aIi7pex7drxkclE=" + }, + "r2ddc461a": { + "rev": "2ddc461a3f319a3d704891bde0a819959b9437cc", + "hash": "sha256-QjZ9Ior1bbI8k3SeRpkILwcOiTkdRKbBUFJq3qZUDy8=" + }, + "rd5c565a9": { + "rev": "d5c565a98d4d036db91d34810e39fb116bf38c56", + "hash": "sha256-fYNraa7yy6ZgOvrjs01ld7pfIWIOpDGeFKCkZ5lTrcs=" + }, + "rf6d64efd": { + "rev": "f6d64efd1985d4668e084cabe03e41c3574b494f", + "hash": "sha256-JTxe75Z7ZZmJKz0L5qlRCEdPA5hvX/LEat9gkBEOXpI=" + }, + "r52940c49": { + "rev": "52940c494517b1256d9569da0c2aefd018518348", + "hash": "sha256-arL/WA6dFWrdKGE3hBN8E9RNj5jLsBIZKDCxAj3A0IQ=" + }, + "r0efa7592": { + "rev": "0efa7592e3fb2ae647518a82ab19679b7c933d99", + "hash": "sha256-fLF4sd2eRYUvpGTwHMOElRJ8mZXMYouwq+0a4WSJYl0=" + }, + "r8d5f9da2": { + "rev": "8d5f9da2e36b593a098200bd332fd9e51f0bed54", + "hash": "sha256-YanXypsEr46jzSKJvNLEuNwlE3076vyyb5ZEROTbeLg=" + }, + "r2df010e4": { + "rev": "2df010e4f4eae6806cd1d855b63c3891116f065d", + "hash": "sha256-ohiRSNRSp8DhrcwVd3+w7OEIsLcddwSqonSeSUruIq0=" + }, + "rd17d1dae": { + "rev": "d17d1dae84ecf76da3a924facdfe1d8c2d4ac578", + "hash": "sha256-nPKFto60FViG55WK87b87r55wYc3pi1rwUsOZTikAjg=" + }, + "r76bb1411": { + "rev": "76bb1411acf5cf6935586182a3a037d372ed1636", + "hash": "sha256-f3wfLZ8caYOETpvy8olsED+PwEFLUbYaayZNOcEvGB8=" + } +} \ No newline at end of file diff --git a/nix/boringsslshim.nix b/nix/boringsslshim.nix new file mode 100644 index 00000000..a32a5bca --- /dev/null +++ b/nix/boringsslshim.nix @@ -0,0 +1,23 @@ +{ pkgs, boringssl }: +with pkgs; +stdenv.mkDerivation { + name = "BoringSSLShim"; + src = ../standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni; + + buildInputs = [ + boringssl + pkg-config + jdk11_headless + ]; + + buildPhase = '' + make boringssl + ''; + + BORINGSSL_CFLAGS = "-I${boringssl.dev.outPath}/include -DECTESTER_BORINGSSL_${boringssl.version}=1"; + + installPhase = '' + mkdir --parents $out/lib + cp boringssl_provider.so $out/lib + ''; +} diff --git a/nix/botan-2.0.0-2.0.1.patch b/nix/botan-2.0.0-2.0.1.patch new file mode 100644 index 00000000..3a198701 --- /dev/null +++ b/nix/botan-2.0.0-2.0.1.patch @@ -0,0 +1,12 @@ +diff --git a/src/lib/filters/threaded_fork.cpp b/src/lib/filters/threaded_fork.cpp +index 170264353e..d379eacda2 100644 +--- a/src/lib/filters/threaded_fork.cpp ++++ b/src/lib/filters/threaded_fork.cpp +@@ -12,6 +12,7 @@ + + #include + #include ++#include + + namespace Botan { + diff --git a/nix/botan-2.0.0.patch b/nix/botan-2.0.0.patch new file mode 100644 index 00000000..e98612a2 --- /dev/null +++ b/nix/botan-2.0.0.patch @@ -0,0 +1,26 @@ +diff --git a/src/build-data/buildh.in b/src/build-data/buildh.in +index e65aa3ed3a..de2b5c8b52 100644 +--- a/src/build-data/buildh.in ++++ b/src/build-data/buildh.in +@@ -27,7 +27,7 @@ + %{unsafe_fuzzer_mode_define} + + #define BOTAN_INSTALL_PREFIX R"(%{prefix})" +-#define BOTAN_INSTALL_HEADER_DIR "%{includedir}/botan-%{version_major}.%{version_minor}" ++#define BOTAN_INSTALL_HEADER_DIR "%{includedir}/botan-%{version_major}" + #define BOTAN_INSTALL_LIB_DIR "%{libdir}" + #define BOTAN_LIB_LINK "%{link_to}" + +diff --git a/src/scripts/install.py b/src/scripts/install.py +index 0045be844d..e03e5c22c3 100755 +--- a/src/scripts/install.py ++++ b/src/scripts/install.py +@@ -130,7 +130,7 @@ class PercentSignTemplate(string.Template): + 'botan-%d.%d.%d' % (ver_major, ver_minor, ver_patch)) + target_include_dir = os.path.join(options.destdir, + options.includedir, +- 'botan-%d.%d' % (ver_major, ver_minor), ++ 'botan-%d' % (ver_major), + 'botan') + + out_dir = process_template('%{out_dir}') \ No newline at end of file diff --git a/nix/botan-fe25519-stdexcept.patch b/nix/botan-fe25519-stdexcept.patch new file mode 100644 index 00000000..f85ff4dd --- /dev/null +++ b/nix/botan-fe25519-stdexcept.patch @@ -0,0 +1,13 @@ +diff --git a/src/lib/pubkey/ed25519/ed25519_fe.h b/src/lib/pubkey/ed25519/ed25519_fe.h +--- a/src/lib/pubkey/ed25519/ed25519_fe.h ++++ b/src/lib/pubkey/ed25519/ed25519_fe.h +@@ -11,8 +11,9 @@ + #ifndef BOTAN_ED25519_FE_H__ + #define BOTAN_ED25519_FE_H__ + + #include ++#include + + namespace Botan { + + /** diff --git a/nix/botan-types-stdexcept.patch b/nix/botan-types-stdexcept.patch new file mode 100644 index 00000000..d5a0984d --- /dev/null +++ b/nix/botan-types-stdexcept.patch @@ -0,0 +1,12 @@ +diff --git a/src/lib/utils/types.h b/src/lib/utils/types.h +--- a/src/lib/utils/types.h ++++ b/src/lib/utils/types.h +@@ -15,6 +15,8 @@ + #include // IWYU pragma: export + #include // IWYU pragma: export + #include // IWYU pragma: export ++#include ++#include + + namespace Botan { + diff --git a/nix/botan_pkg_versions.json b/nix/botan_pkg_versions.json new file mode 100644 index 00000000..7d283bf9 --- /dev/null +++ b/nix/botan_pkg_versions.json @@ -0,0 +1,162 @@ +{ + "v2195": { + "version": "2.19.5", + "source_extension": "tar.xz", + "hash": "sha256-3+6g4KbybWckxK8B2pp7iEh62y2Bunxy/K9S21IsmtQ=" + }, + "v2194": { + "version": "2.19.4", + "source_extension": "tar.xz", + "hash": "sha256-WjqI72Qz6XvKsO+h7WDGGX5K2p2dMLwcR0N7+JuX8nY=" + }, + "v2193": { + "version": "2.19.3", + "source_extension": "tar.xz", + "hash": "sha256-2uBH85nFpH8IfbXT2dno8RrkmF0UySjXHaGv+AGALVU=" + }, + "v2192": { + "version": "2.19.2", + "source_extension": "tar.xz", + "hash": "sha256-OvXxdhXGtc2Lgy0mn7bLTVTsZPnrCd2/Gt1Qk5QbTXU=" + }, + "v2191": { + "version": "2.19.1", + "source_extension": "tar.xz", + "hash": "sha256-4m4Az+/aZAgq/dVA08U3kk9kXWpnSv7SzRcQBd7/VWA=" + }, + "v2190": { + "version": "2.19.0", + "source_extension": "tar.xz", + "hash": "sha256-JA2eVuasuR70zwaoocbA8QHGHUDPSMzPE5+u+CHXBAs=" + }, + "v2182": { + "version": "2.18.2", + "source_extension": "tar.xz", + "hash": "sha256-VBo7E/G50w+XfGwa5Me/39p2PNpuRN6Ac2nc559CMH4=" + }, + "v2181": { + "version": "2.18.1", + "source_extension": "tar.xz", + "hash": "sha256-+Me0YiKoVxaKdUpcwym7eAUEEisnABjdpTBMmNsorik=" + }, + "v2180": { + "version": "2.18.0", + "source_extension": "tar.xz", + "hash": "sha256-zGSFLh4MW7MOzQUuShLVE2ElqM5cO+LvtvsGHIZ34yc=" + }, + "v2173": { + "version": "2.17.3", + "source_extension": "tar.xz", + "hash": "sha256-eRI7ZURFpKu6SG4JpDF4hUXHCCNzgqPnZWZMn1WwO4g=" + }, + "v2172": { + "version": "2.17.2", + "source_extension": "tar.xz", + "hash": "sha256-6+J9/itV1+Ar9SDpJmBsSLdrIvrLSDJWsTqzjgGOHmw=" + }, + "v2171": { + "version": "2.17.1", + "source_extension": "tar.xz", + "hash": "sha256-dBNYs/FjjtfZsvWbTjRKpG9JZrFZWLVDTArBWA3wwME=" + }, + "v2170": { + "version": "2.17.0", + "source_extension": "tar.xz", + "hash": "sha256-uXBEsxKqcYNJr3hRMxsGS8e9U1JADV+AeTus5CfQE0M=" + }, + "v2160": { + "version": "2.16.0", + "source_extension": "tar.xz", + "hash": "sha256-ku1uvJGNhr0bBCIcpRivTPKcwybEdgdAvS0i5hzqJig=" + }, + "v2150": { + "version": "2.15.0", + "source_extension": "tar.xz", + "hash": "sha256-2IrxMH8f76x5qk8vUkaZR41pzhWoV88tCpCsa/KlAAk=" + }, + "v2140": { + "version": "2.14.0", + "source_extension": "tar.xz", + "hash": "sha256-DBDxK0JKQO4ZveACkgmOIB10mFNcBi2NW1htB4YaVLU=" + }, + "v2130": { + "version": "2.13.0", + "source_extension": "tar.xz", + "hash": "sha256-9XrkKkHhCRvKWPRPQa3evZo5C2UWA5UsiB7InVAYfpA=" + }, + "v2121": { + "version": "2.12.1", + "source_extension": "tar.xz", + "hash": "sha256-fgNfFCpR/KE1lwV5JieigkVtSXSb9io3qOSDddQbqqk=" + }, + "v2120": { + "version": "2.12.0", + "source_extension": "tar.xz", + "hash": "sha256-Hq79RZ1S8n3hgFz/jGh5LgYQkZZI7pjhAZgOlO25CmM=" + }, + "v2110": { + "version": "2.11.0", + "source_extension": "tar.xz", + "hash": "sha256-94dNoq64wBj9d99AshN4eb+Qtm9ViUkMmR6D+z6AlL4=" + }, + "v2100": { + "version": "2.10.0", + "source_extension": "tgz", + "hash": "sha256-iEgZl1eMJ5JHJP6nZhDUPZ9ZyZ7f5WHUGAO7yYhxrTE=" + }, + "v290": { + "version": "2.9.0", + "source_extension": "tgz", + "hash": "sha256-MFVkNSM03WOuY9sDkHfZauUt+lejJIhxCBcZtqny0Rk=" + }, + "v280": { + "version": "2.8.0", + "source_extension": "tgz", + "hash": "sha256-5xWbEn6R4MFYJF1hxjjFDUQ+x7RAtrAWEyjEezq6OWA=" + }, + "v270": { + "version": "2.7.0", + "source_extension": "tgz", + "hash": "sha256-5C35FVYxdYjGyg5Bv3lvm9XsXHDgZo5sl8YIxpfCSpA=" + }, + "v260": { + "version": "2.6.0", + "source_extension": "tgz", + "hash": "sha256-wfJhVVu6cCxzYI3ee9dD7y1jd6QaHClZFbJcW6uvXMU=" + }, + "v250": { + "version": "2.5.0", + "source_extension": "tgz", + "hash": "sha256-uKMf4D5/BIpb05Z+zQS2pIlmIV54eS3wbjM7Du3k+xs=" + }, + "v240": { + "version": "2.4.0", + "source_extension": "tgz", + "hash": "sha256-7ZRk4qXP7kzT2b16j4BnO0XIoHGNshgac/VGWmBmCKU=" + }, + "v230": { + "version": "2.3.0", + "source_extension": "tgz", + "hash": "sha256-Oflw/uWYakw+QlAwrvUKwoTaGFlsAE0anM52iMTm1Hw=" + }, + "v220": { + "version": "2.2.0", + "source_extension": "tgz", + "hash": "sha256-x5TbLsRvb/iPN652gl8MJY8HiAuGW2cHsmrPzEVnuCQ=" + }, + "v210": { + "version": "2.1.0", + "source_extension": "tgz", + "hash": "sha256-Rg8tcgWu0RP4mN9JR7H2bM+NCA7sfawinvC3VMmtYpQ=" + }, + "v201": { + "version": "2.0.1", + "source_extension": "tgz", + "hash": "sha256-oTjtMW0RRQqEBUUbnJZkuOZAqbethNPzrTToBx82Tgs=" + }, + "v200": { + "version": "2.0.0", + "source_extension": "tgz", + "hash": "sha256-AxZZzKD4CGnp2XogkX7b4hZM7bwHnoxT4Oe9m+oVNxo=" + } +} \ No newline at end of file diff --git a/nix/botanshim.nix b/nix/botanshim.nix new file mode 100644 index 00000000..ce16b1b7 --- /dev/null +++ b/nix/botanshim.nix @@ -0,0 +1,28 @@ +{ + stdenv, + botan2, + pkg-config, + # NOTE change to jdk17? + jdk11_headless, +}: +stdenv.mkDerivation { + name = "BotanShim"; + src = ../standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni; + + buildInputs = [ + botan2 + pkg-config + jdk11_headless + ]; + + buildPhase = '' + make botan + ''; + + BOTAN_CXXFLAGS = "-DECTESTER_BOTAN_${builtins.replaceStrings ["."] ["_"] botan2.version}=1"; + + installPhase = '' + mkdir --parents $out/lib + cp botan_provider.so $out/lib/ + ''; +} diff --git a/nix/commonlibs.nix b/nix/commonlibs.nix new file mode 100644 index 00000000..22ce2f45 --- /dev/null +++ b/nix/commonlibs.nix @@ -0,0 +1,26 @@ +{ pkgs }: +with pkgs; +stdenv.mkDerivation rec { + name = "Common Libraries"; + src = ../standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni; + + buildInputs = [ + pkg-config + cmake + which + jdk17_headless + ]; + + dontUseCmakeConfigure = true; + + libs = "lib_cppsignals.so lib_csignals.so lib_timing.so lib_preload.so lib_prng.so"; + + buildPhase = '' + make ${libs} + ''; + + installPhase = '' + mkdir --parents $out/lib + cp ${libs} $out/lib + ''; +} diff --git a/nix/cryptopp_pkg_versions.json b/nix/cryptopp_pkg_versions.json new file mode 100644 index 00000000..d6e409bf --- /dev/null +++ b/nix/cryptopp_pkg_versions.json @@ -0,0 +1,66 @@ +{ + "v890": { + "version": "8_9_0", + "hash": "sha256-HV+afSFkiXdy840JbHBTR8lLL0GMwsN3QdwaoQmicpQ=" + }, + "v880": { + "version": "8_8_0", + "hash": "sha256-hg7g56bIYaXxB28nAmSQ7EP9NEwd1Psf/2GUtbC27oU=" + }, + "v870": { + "version": "8_7_0", + "hash": "sha256-KtZXW7+J9a4uKHnK8sqj5WVaIjG3d6tzBBDxa7Wv4AE=" + }, + "v860": { + "version": "8_6_0", + "hash": "sha256-a3TYaK34WvKEXN7LKAfGwQ3ZL6a3k/zMZyyVfnkQqO4=" + }, + "v850": { + "version": "8_5_0", + "hash": "sha256-A7eoJNwIOSCrO7vXyA6JER4E18k8vRRKdDsk/BXNx0Y=" + }, + "v840": { + "version": "8_4_0", + "hash": "sha256-gxd3LtvtgwgE1bUQc9pXLT8/WFrQPm3ghIHAGqBHlr8=" + }, + "v830": { + "version": "8_3_0", + "hash": "sha256-PHQol8Q7R0b63wiAf43nq+l+FcGItBzw65JZYSMf1ng=" + }, + "v820": { + "version": "8_2_0", + "hash": "sha256-sg7MrjzuAfWRK0RNZ6xR6cUD6z6F/u/SmtCTYOXP+Qc=" + }, + "v810": { + "version": "8_1_0", + "hash": "sha256-6SRr0Kv+iJrtEixJjb7Rbj/YdVa7vhW7u476FZLTymI=" + }, + "v800": { + "version": "8_0_0", + "hash": "sha256-mq8xhse5xXbP0VcnNbnNz6xxLxJDIj8Gm3Pn/DEOt4w=" + }, + "v700": { + "version": "7_0_0", + "hash": "sha256-6m7ZnIBbOqthlX7I4uj/UvUgh1BEopNE02BC4pyMuU4=" + }, + "v610": { + "version": "6_1_0", + "hash": "sha256-ZbercC0i/XhMhCYv54GwyIJuTygezD89/8HGeSKgkTo=" + }, + "v600": { + "version": "6_0_0", + "hash": "sha256-3IZpDOzlljFmYRfkw/Kxe8BiBxYkqM4zIF03FyNqC/E=" + }, + "v565": { + "version": "5_6_5", + "hash": "sha256-h+7LK8nzk1NlkVB4Loc9VQpN79SUFvBYESSpTZyXZ/o=" + }, + "v564": { + "version": "5_6_4", + "hash": "sha256-IgSRJAF+4lEFSXeboxktfG0iW+a72ZFp6Vibk5/qgz4=" + }, + "v563": { + "version": "5_6_3", + "hash": "sha256-FDskGxaeACp7x3ZbgYXDr6PpFcPO0d6SEKVsOLIXbN0=" + } +} \ No newline at end of file diff --git a/nix/cryptoppshim.nix b/nix/cryptoppshim.nix new file mode 100644 index 00000000..29890660 --- /dev/null +++ b/nix/cryptoppshim.nix @@ -0,0 +1,31 @@ +{ pkgs, cryptopp }: +with pkgs; +let + dotVersion = builtins.replaceStrings ["_"] ["."] cryptopp.version; +in +stdenv.mkDerivation { + name = "Crypto++ Shim"; + src = ../standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni; + + buildInputs = [ + cryptopp + pkg-config + jdk11_headless + ]; + + buildPhase = '' + make cryptopp + ''; + + CRYPTOPP_CXXFLAGS = '' + -DECTESTER_CRYPTOPP_${cryptopp.version}=1 \ + -DECTESTER_CRYPTOPP_MAJOR=${pkgs.lib.versions.major dotVersion} \ + -DECTESTER_CRYPTOPP_MINOR=${pkgs.lib.versions.minor dotVersion} \ + -DECTESTER_CRYPTOPP_PATCH=${pkgs.lib.versions.patch dotVersion} \ + ''; + + installPhase = '' + mkdir --parents $out/lib + cp cryptopp_provider.so $out/lib/ + ''; +} diff --git a/nix/gcrypt_pkg_versions.json b/nix/gcrypt_pkg_versions.json new file mode 100644 index 00000000..c17dbe62 --- /dev/null +++ b/nix/gcrypt_pkg_versions.json @@ -0,0 +1,234 @@ +{ + "v1110": { + "version": "1.11.0", + "hash": "sha256-CRIMmGfOfyCB1qqhd1OGuYwvLyRhNXYarkfYH1hoW5w=" + }, + "v1103": { + "version": "1.10.3", + "hash": "sha256-iwhwiXrFrGfe1Wjc+t9Flpz6imvrD9YK8qnq3Coycqo=" + }, + "v1102": { + "version": "1.10.2", + "hash": "sha256-O5wCoAS2jCVq3ZlwHeALODrMzPNxd+DWxYKJZkzODAM=" + }, + "v1101": { + "version": "1.10.1", + "hash": "sha256-7xSuVGsAhM2EJZ9hpV4Ho4w7U6/A9Ua//O8vAbr/6d4=" + }, + "v1100": { + "version": "1.10.0", + "hash": "sha256-agD1wFyqTErMEgxGtjhX2g1P9h3EtLA5M/qNRgE/roE=" + }, + "v194": { + "version": "1.9.4", + "hash": "sha256-6oScg6ckVOPtQmdpfoygM5Cu6XKrQh599p3+QrZcqvc=" + }, + "v193": { + "version": "1.9.3", + "hash": "sha256-l+vk+U4vfjW3UhlM4VoPPGYyTg/2ryZlm7+1/y7DKP0=" + }, + "v192": { + "version": "1.9.2", + "hash": "sha256-ssENCRUTsnHkcXcnRgex/7o9lbGIu/qHl/lIrskFPFo=" + }, + "v191": { + "version": "1.9.1", + "hash": "sha256-xaZ6i5sr03D7QV7R7jHHFy5Wgwdkk89KNnig+98CZdk=" + }, + "v190_do_not_use": { + "version": "1.9.0", + "hash": "sha256-TZzKpfmdtZ68tk1z9iglsFzoprf4bRkXhVnvhN4Tgcs=" + }, + "v1811": { + "version": "1.8.11", + "hash": "sha256-yYJJ+1ux9gF/X5v0hDJ6lAtZB1vKfEb6aeu1QJgkmGA=" + }, + "v1810": { + "version": "1.8.10", + "hash": "sha256-aJaRVQH5UeI9AtywRTRpwswiqk13oAH/c6JkfC0p590=" + }, + "v189": { + "version": "1.8.9", + "hash": "sha256-K9pHkKpfCJXTQHz3v2vXcn/ZkvJaRaY9kv7xB2f6N2k=" + }, + "v188": { + "version": "1.8.8", + "hash": "sha256-iV3iu5gd0Sfwgh0c4T+t99dg+fp3N2SLFfLB/hPMWvU=" + }, + "v187": { + "version": "1.8.7", + "hash": "sha256-A7cPAoKZVhtwNLiWbX3XfvFu0TnENECSX+h4JWGXR0g=" + }, + "v186": { + "version": "1.8.6", + "hash": "sha256-DLonAGF7mfwzhkoMFrH6f9+XgdntNQn112cXjl/XuXU=" + }, + "v185": { + "version": "1.8.5", + "hash": "sha256-O0oqlMtjfv9b3rvK9G9NlcTyUgb0WYCTOc2toOtXesM=" + }, + "v184": { + "version": "1.8.4", + "hash": "sha256-9jgUOgZyYo/eDK10XpsU3rhd/7F1cJyswfT+JLk/Iic=" + }, + "v183": { + "version": "1.8.3", + "hash": "sha256-ZuyQvgNnR2AvK0j5gxI2GpGAyXxoppCl83b6D2fQr3w=" + }, + "v182": { + "version": "1.8.2", + "hash": "sha256-yAZMrnVYFEsT7w64cJNBI4DvoWxO4wrRLstUiGpSTAc=" + }, + "v181": { + "version": "1.8.1", + "hash": "sha256-eih1+LGuAwFzLoeMDMoslmT/Ce9xQI8IXFDjMmVqeLM=" + }, + "v180": { + "version": "1.8.0", + "hash": "sha256-I+SWl7h8xBc7A7R1fI30MU4xSQWPoYvcT4IJjxA9iRs=" + }, + "v1710": { + "version": "1.7.10", + "hash": "sha256-ifBaQj3WaiXls4MICX4jhuZA0c+DUWDRmlx1NQBx2Uw=" + }, + "v179": { + "version": "1.7.9", + "hash": "sha256-v+m7cDwRJsNkfaKBD9IwOcLwnUaWn3FhLCBl3D+pNzs=" + }, + "v178": { + "version": "1.7.8", + "hash": "sha256-lIJ26kfmugJE82oXtR3N1Sz9HmZLChrDvIITT7bOwZk=" + }, + "v177": { + "version": "1.7.7", + "hash": "sha256-ubheugeT6j5uZriW6wMfoF4aRRcnfMmrEIFrNZJUzZo=" + }, + "v176": { + "version": "1.7.6", + "hash": "sha256-Ymqv7oSvnSziU9LBQ9wcCQLdoEV4DMJB85lw/GC+Bbw=" + }, + "v175": { + "version": "1.7.5", + "hash": "sha256-0f6kEovu8rswpHCva6+rzMUDztNQU0+53Y9aU/+66AA=" + }, + "v174": { + "version": "1.7.4", + "hash": "sha256-O2eGLi9HEeJcTOPMS0jVKlijr9zR2Malf5OhwO8D5cY=" + }, + "v173": { + "version": "1.7.3", + "hash": "sha256-3axhEQd9ChYSJHWHviOMUpTdDuTXbce6eDzFX7AzcHE=" + }, + "v172": { + "version": "1.7.2", + "hash": "sha256-PTXfkG1uqzVFBMBddJqbAhlEyyn/X2XI75w91fe2aJ8=" + }, + "v171": { + "version": "1.7.1", + "hash": "sha256-RQ2c/L8WEcZNvjvQS2J7gzee+J8RQG2UyLujBeNtepU=" + }, + "v170": { + "version": "1.7.0", + "hash": "sha256-sOZ+p0R0k5kTxNnZ70717DeO++K+vjY4ne4xnHm/+pI=" + }, + "v166": { + "version": "1.6.6", + "hash": "sha256-+UYbRhm7eLJzqI1GiRV1DUGOiaPqO2QbqwVjqa9LBNA=" + }, + "v165": { + "version": "1.6.5", + "hash": "sha256-9J68WELUVa5wGd7zPrWgFKDweiqDU9w6pQp2/R2vqSQ=" + }, + "v164": { + "version": "1.6.4", + "hash": "sha256-ybwsf+Ll9OoTsMdPnSS8uxrYibs5KX2Agq6/I/QzYCY=" + }, + "v163": { + "version": "1.6.3", + "hash": "sha256-QbSRe5OuNMag4hJzeNek1m2AWiqGoJkR1Pm9hx23Al8=" + }, + "v162": { + "version": "1.6.2", + "hash": "sha256-3ghEkqazjNsntn6vdJzrp2v3Ap9jqcDDwbBciMmIXEw=" + }, + "v161": { + "version": "1.6.1", + "hash": "sha256-ocPv6mn4/+dp9IizAM4ZDu6www3iSlPxwbbkIC/cIHA=" + }, + "v160": { + "version": "1.6.0", + "hash": "sha256-Zi1QhgCtlMwzTmZbcBYTf+7fzKUiaZjGXd1Wvfyilwg=" + }, + "v156": { + "version": "1.5.6", + "hash": "sha256-MBgmteUhyGcFb9Ywqtbwpg4XbRigF9prwksWld86vnk=" + }, + "v155": { + "version": "1.5.5", + "hash": "sha256-2JWCA+eGvKR5zXyQOQaSXop+AzzLlZv1Mxe1fPEaBlU=" + }, + "v154": { + "version": "1.5.4", + "hash": "sha256-1fiNn0GkaVPcJQzbhXUSmzfuIghAG3+jOMiX9mfH+zM=" + }, + "v153": { + "version": "1.5.3", + "hash": "sha256-vPUzTn2jUsRd5q7F0ghM6aHTACn/SkpdoT8YSIdHWdE=" + }, + "v152": { + "version": "1.5.2", + "hash": "sha256-5BpDOfUClPPJJfL3Gq8kJ+sWLSmU2pFmbfwyYhr+lj8=" + }, + "v151": { + "version": "1.5.1", + "hash": "sha256-rZ6xWAjnaZmMC9jBgayIFCORn08QVYaRPcy8Dfv65Sc=" + }, + "v150": { + "version": "1.5.0", + "hash": "sha256-S2L8UWAElAoFcQJUAaBYHUkZnxp237XOb9Y/UNuBc/o=" + }, + "v146": { + "version": "1.4.6", + "hash": "sha256-Pksw2ms1e1ZTM9AiITO2SgQUvpm6cnMwgRZcjqm8a4U=" + }, + "v145": { + "version": "1.4.5", + "hash": "sha256-SW+QfFMk3nU2fsYcY7/u0TCe8LxkhF3CCzWXcxq9nkA=" + }, + "v144": { + "version": "1.4.4", + "hash": "sha256-MhK4gIDPj6AGFk04/Bdvr6XClZHIOE8oSriA2w2/MG8=" + }, + "v143": { + "version": "1.4.3", + "hash": "sha256-iMgZvZ8B19SBiJjhM6USBE54w0MHqmBrapTuznwLIws=" + }, + "v142": { + "version": "1.4.2", + "hash": "sha256-unQUhG9/O6IrIs842hug6dXCJjixxArAh85RZJgRUsM=" + }, + "v141": { + "version": "1.4.1", + "hash": "sha256-/jsyvfDJLWs7t7Pks8Gaaomanetl8bNvCliC0wjJH6M=" + }, + "v140": { + "version": "1.4.0", + "hash": "sha256-1/hV92aUSltuf/7i1v/fgoq3CazURTsOZK6oCM4nYOw=" + }, + "v124": { + "version": "1.2.4", + "hash": "sha256-fWFVxNCkD7o9ug8hqVnHhIxzS6ZzTejifuomrlPAyIA=" + }, + "v123": { + "version": "1.2.3", + "hash": "sha256-6OKRFjlRFIIHWAeSWILQBlYRPDHgqJAV1ITcFsbYD7Q=" + }, + "v122": { + "version": "1.2.2", + "hash": "sha256-espQrfRId1XGHAWQ1286k1Lie9s908DcDP+Py0Eq5iQ=" + }, + "v121": { + "version": "1.2.1", + "hash": "sha256-E3hqJqQgH8CfiPqiSDDRYxnJKrKPlJIcKu8JDq8Xp7I=" + } +} \ No newline at end of file diff --git a/nix/gcryptshim.nix b/nix/gcryptshim.nix new file mode 100644 index 00000000..869bcd9d --- /dev/null +++ b/nix/gcryptshim.nix @@ -0,0 +1,28 @@ +{ + pkgs, + libgcrypt, + libgpg-error, +}: +with pkgs; +stdenv.mkDerivation { + name = "Gcrypt Shim"; + src = ../standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni; + + buildInputs = [ + libgcrypt + libgpg-error + pkg-config + jdk11_headless + ]; + + buildPhase = '' + make gcrypt + ''; + + LIBGCRYPT_CFLAGS = "-DECTESTER_LIBGCRYPT_${builtins.replaceStrings ["."] ["_"] libgcrypt.version}=1"; + + installPhase = '' + mkdir --parents $out/lib + cp gcrypt_provider.so $out/lib/ + ''; +} diff --git a/nix/ippcp_pkg_versions.json b/nix/ippcp_pkg_versions.json new file mode 100644 index 00000000..d234dbba --- /dev/null +++ b/nix/ippcp_pkg_versions.json @@ -0,0 +1,98 @@ +{ + "v2021_12_1": { + "version": "2021.12.1", + "hash": "sha256-voxjx9Np/8jy9XS6EvUK4aW18/DGQGaPpTKm9RzuCU8=" + }, + "v2021_12_0": { + "version": "2021.12.0", + "hash": "sha256-FeCfiXwOUM3cL4Ah3IjLa/2SKo9WHTZFUfg/w8WTNcc=" + }, + "v2021_11_1": { + "version": "2021.11.1", + "hash": "sha256-OgNrrPE8jFVD/hcv7A43Bno96r4Z/lb7/SE6TEL7RDI=" + }, + "v2021_11_0": { + "version": "2021.11.0", + "hash": "sha256-MVhiKEJxYa1HaicPbkzrAlZxFqIEP7eDLusC/T52gXI=" + }, + "v2021_10_0": { + "version": "2021.10.0", + "hash": "sha256-DfXsJ+4XqyjCD+79LUD53Cx8D46o1a4fAZa2UxGI1Xg=" + }, + "v2021_9_0": { + "version": "2021.9.0", + "hash": "sha256-+ITnxyrkDQp4xRa+PVzXdYsSkI5sMNwQGfGU+lFJ6co=" + }, + "v2021_8": { + "version": "2021.8", + "hash": "sha256-Iz1Pql+cf2DdPe7KoNpxQ7H76SFwWkUbtL4bJxr7D4w=" + }, + "v2021_7_1": { + "version": "2021.7.1", + "hash": "sha256-iyg4ja7tsbpng7XOZwISri+x8knwEeyh/aP9ldhQY60=" + }, + "v2021_7": { + "version": "2021.7", + "hash": "sha256-3W0LlJgmrp2Rk7xQ+0GQfkF2UpH4htx9R7IL86smtnY=" + }, + "v2021_6": { + "version": "2021.6", + "hash": "sha256-lr6oiJTaTQhTrxhdY5dTfOrl/ZBwOYbuyuNU3tJbEe0=" + }, + "v2021_5": { + "version": "2021.5", + "hash": "sha256-xc44XvGz9KnbLKKMmSJQ2Eq8IhEFVb0tYIWVW4oJRuo=" + }, + "v2021_4": { + "version": "2021.4", + "hash": "sha256-SyRY3BoHY7zQIFA6j0U0W0oD5PZhp3vsvFQVBw4/AXY=" + }, + "v2021_3": { + "version": "2021.3", + "hash": "sha256-QEJXvQ//zhQqibFxXwPMdS1MHewgyb24LRmkycVSGrM=" + }, + "v2021_2": { + "version": "2021.2", + "hash": "sha256-8I3y//LK5TcyC71fdX1biF588rdK2AplO6eh9GUHx9U=" + }, + "v2020u3": { + "version": "2020u3", + "hash": "sha256-i/iPOSTKR02pHzxBRn3odZJ+6SzGtS+pCG1BWo1qdAs=" + }, + "v2020u2": { + "version": "2020u2", + "hash": "sha256-cn76ju41RdEJxH9SmF75Z38V3e9vnLXGdyjh4hISpr8=" + }, + "v2020u1": { + "version": "2020u1", + "hash": "sha256-4h5Zrx4hvsvZkXpHu0ZXJftoLFms34PstTRN0gHCXrM=" + }, + "v2020": { + "version": "2020", + "hash": "sha256-k4CuLLtNX+wrEGRgoIP9e0wp42U1VRF96nhDE8qNkMk=" + }, + "v2019u4": { + "version": "2019u4", + "hash": "sha256-Xi3I0frlR/OjX4IRJyBuFcSkrCaxL9ABRZ1w8FUAseg=" + }, + "v2019u3": { + "version": "2019u3", + "hash": "sha256-8sdPlRNfdjMkc061e6EFpJMMA1QKK5/SpKlMV2E5TH4=" + }, + "v2019u2": { + "version": "2019u2", + "hash": "sha256-WoiO1pXA6UTRdKCcn9ckMk4/6IvbQAK4k7d8P3rGbqc=" + }, + "v2019u1": { + "version": "2019u1", + "hash": "sha256-2KcZz+7NrhbvRVLXtdME73uMBrhw+4q0ajiXeWwZdJs=" + }, + "v2019": { + "version": "2019", + "hash": "sha256-iTupt9pRN+6ze3Hf/dmtve9u15iVL0g2kujUpyGgums=" + }, + "v2019b": { + "version": "2019b", + "hash": "sha256-5zoY/nad8tQosX8EBxrebbupkFRRbWB8vf33xNAKTH8=" + } +} \ No newline at end of file diff --git a/nix/ippcpshim.nix b/nix/ippcpshim.nix new file mode 100644 index 00000000..a059d5be --- /dev/null +++ b/nix/ippcpshim.nix @@ -0,0 +1,24 @@ +{ pkgs, ipp-crypto }: +with pkgs; +stdenv.mkDerivation rec { + name = "IppCryptoShim"; + src = ../standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni; + + buildInputs = [ + ipp-crypto + pkg-config + jdk11_headless + ]; + + IPP_CRYPTO_CFLAGS = "-I${ipp-crypto.dev}/include -DECTESTER_IPPCP_VERSION=${ipp-crypto.version}"; + IPP_CRYPTO_LFLAGS = "-L${ipp-crypto}/lib/"; + + buildPhase = '' + make ippcp + ''; + + installPhase = '' + mkdir --parents $out/lib + cp ippcp_provider.so $out/lib + ''; +} diff --git a/nix/libressl_pkg_versions.json b/nix/libressl_pkg_versions.json new file mode 100644 index 00000000..cf17e5eb --- /dev/null +++ b/nix/libressl_pkg_versions.json @@ -0,0 +1,478 @@ +{ + "v392": { + "version": "3.9.2", + "hash": "sha256-ewMdrGSlnrbuMwT3/7ddrTOrjJ0nnIR/ksifuEYGj5c=" + }, + "v391": { + "version": "3.9.1", + "hash": "sha256-baC5VGlffuYrA/ZCAKik8Cr5Nxe2DM4Eq2yN8mLAelE=" + }, + "v390": { + "version": "3.9.0", + "hash": "sha256-HMIyQYSY3jBebVy4DJShZBXAHcs82Y8ujDoiAgkaNCA=" + }, + "v384": { + "version": "3.8.4", + "hash": "sha256-wM75z+F0rDZs5IL1Qv3bB3Ief6DK+s40tJqHIPo3/n0=" + }, + "v383": { + "version": "3.8.3", + "hash": "sha256-pl9A4+9uPJRRyDGObyxFTDZ+Z/CcDN4YSXMaTW7McnI=" + }, + "v382": { + "version": "3.8.2", + "hash": "sha256-bUuNW7slofgzZjnlbsUIgFLUOpUlZpeoXEzpEyPCWVQ=" + }, + "v381": { + "version": "3.8.1", + "hash": "sha256-wpvW2VInRnc8ueQSbVqaLDXqVQX2/Um2eRc/K0blc3I=" + }, + "v380": { + "version": "3.8.0", + "hash": "sha256-ElMcHsgIxcar6zEYmWZLDP7QTUZI9FbclZu5PF8hrKw=" + }, + "v373": { + "version": "3.7.3", + "hash": "sha256-eUjIVqkMglvXJotvhWdKjc0lS65C4iF4GyTj+NwzXbM=" + }, + "v372": { + "version": "3.7.2", + "hash": "sha256-sGqlOP78nGszxNtJMaCaX1LZ0jVyGa/L/32T/hLr9vc=" + }, + "v371": { + "version": "3.7.1", + "hash": "sha256-mAhpYaK4tlftD+owVvstsUKUtr+hk8FaUjago1yEPe0=" + }, + "v370": { + "version": "3.7.0", + "hash": "sha256-P8EpD0AH7HX26azsuyVRJjDRuauMU7p5hE45WGjD4AY=" + }, + "v363": { + "version": "3.6.3", + "hash": "sha256-h7G7426e7I0K5fBMg9NrLFsOWBeEx+sIFwJe0p6t6jc=" + }, + "v362": { + "version": "3.6.2", + "hash": "sha256-S+gP/wc3Rs9QtKjlur4nlayumMaxMqngJRm0Rd+/0DM=" + }, + "v361": { + "version": "3.6.1", + "hash": "sha256-rPrGExbpO5GcKNYtUwN8pzTehcRrTXA/Gf2Dlc8AZ3Q=" + }, + "v360": { + "version": "3.6.0", + "hash": "sha256-GxLe/Lvb2+2oaSnkIQAK8PQjM63UgX/SbA2aGuxHhAQ=" + }, + "v354": { + "version": "3.5.4", + "hash": "sha256-A3naE0Si9xrUpOO+MO+dgu7N3Of43CrmZjGh3+FDQ6w=" + }, + "v353": { + "version": "3.5.3", + "hash": "sha256-OrXl6u9pziDGsXDuZNeFtCI19I8uYrCV/KXXtmcriyg=" + }, + "v352": { + "version": "3.5.2", + "hash": "sha256-Vv6rjiHD+mVJ+LfXURZYuOmFGBYoOKeVMUcyZUrfPl8=" + }, + "v351": { + "version": "3.5.1", + "hash": "sha256-p9ACb2diInXsj4I53tQiplPVzMhN9V3qKs1AYBcYVgg=" + }, + "v350": { + "version": "3.5.0", + "hash": "sha256-8B1PdhkVWBWKBq+9wkBf79WwJUChl6slRshA4GpcD7c=" + }, + "v343": { + "version": "3.4.3", + "hash": "sha256-/4i//jVIGLPM9UXjyv5FTFAxx6dyFwdPUzJx1jw38I0=" + }, + "v342": { + "version": "3.4.2", + "hash": "sha256-y4LKfVRzNpFzUvvSPbL8SDxsRNNRV7MngCFOx0GXs84=" + }, + "v341": { + "version": "3.4.1", + "hash": "sha256-EHzq5sqADoHLVjWEwWr6NtbHE4+t6UorPp2mVFb3xhw=" + }, + "v340": { + "version": "3.4.0", + "hash": "sha256-5S6udY1AIGpx12OhqHtxA3IjvxmGrCOaa+Gm0qw5FtI=" + }, + "v336": { + "version": "3.3.6", + "hash": "sha256-PyiEk2XhGQ2yuvkBT/loYBLCWxym34s6CF94niT+S5o=" + }, + "v335": { + "version": "3.3.5", + "hash": "sha256-ClE5Pw3xzyfgcAVKJ4ik0HMznzY9ec1ZQHahtMSL6aU=" + }, + "v334": { + "version": "3.3.4", + "hash": "sha256-vM52ej/tJSv9EhD4p+NQWitU0wCPZuQ9m5Xj8wwHKTE=" + }, + "v333": { + "version": "3.3.3", + "hash": "sha256-pHFWWzbM0acNC9fTfG6VxDompigptIfZ0s3r/li+MGY=" + }, + "v332": { + "version": "3.3.2", + "hash": "sha256-hDQKxXDz7o6RBp3DoKzXpvbur8BZTZXzrhA0xdvCFlQ=" + }, + "v331": { + "version": "3.3.1", + "hash": "sha256-ptMxhl4BZKE6yFoijlJRf3z4+EiPL5XzTnhXMC+Xz9s=" + }, + "v330": { + "version": "3.3.0", + "hash": "sha256-cope3GPMtBjpFmvtEdS0PpYp/xxNQqObZJNHogQW+tY=" + }, + "v327": { + "version": "3.2.7", + "hash": "sha256-fDL/A3WXzkccfP2dy4RxzaOgKYOuujMVBZNizrOTS4Q=" + }, + "v326": { + "version": "3.2.6", + "hash": "sha256-sENkBSDS7sVr0WrmOc5TAX7srMPYY4i1T4OKVI3jMls=" + }, + "v325": { + "version": "3.2.5", + "hash": "sha256-eYpl/WHTheCdVZgQzfpGUS+N71kZJkz+8kGnsIbOfP4=" + }, + "v324": { + "version": "3.2.4", + "hash": "sha256-rB27ngWmSRCFZZmxrGERj97Bs9DHAOQkRNgcDV9Qelo=" + }, + "v323": { + "version": "3.2.3", + "hash": "sha256-QS3Cuqc5Iox3eek+sHzWRdXJZNLy2Dep/VbbdJhGPXM=" + }, + "v322": { + "version": "3.2.2", + "hash": "sha256-qdHh0DC4vMZ79kKLjA//FKVgLiI2JXuePXesrxLip6E=" + }, + "v321": { + "version": "3.2.1", + "hash": "sha256-0o2yJM+20YAJsqfoyyE81clDu+yHVQBi/vajhHklAxU=" + }, + "v320": { + "version": "3.2.0", + "hash": "sha256-R70utLRQPkfALvp+Z9L82Vx+rGvJ0Gs0OhtHBXk+0dU=" + }, + "v315": { + "version": "3.1.5", + "hash": "sha256-LBPdzsUIHA57p/k9g3CpGREXMJDxkiAH4dkN4nRQBJQ=" + }, + "v314": { + "version": "3.1.4", + "hash": "sha256-QUwUnJljmD+AWggdtb067BRrX4LVKbtjh1rJQbJdy7Y=" + }, + "v313": { + "version": "3.1.3", + "hash": "sha256-x2sDFqz2Euy2L1ywFKINlypmO9nkCr+VKobzuZi2n6A=" + }, + "v312": { + "version": "3.1.2", + "hash": "sha256-+IovfqYXFJo05AwCLZkSlj8A6qYQmvQhMXUl5sl42JI=" + }, + "v311": { + "version": "3.1.1", + "hash": "sha256-vcbOXrs6Lq/ExHX37qpfCo5g2b6tAe+3bi4lQkK22wA=" + }, + "v310": { + "version": "3.1.0", + "hash": "sha256-+RqtDI+5y8Z8kQrW3P+0AagZtP0SIAfqf5eGONsETPY=" + }, + "v302": { + "version": "3.0.2", + "hash": "sha256-33sXK/eblX3SfvNtyqH7FiViwOiZnhlKqMGj3y8VOY4=" + }, + "v301": { + "version": "3.0.1", + "hash": "sha256-ZGrbEZf746dULxiEPStK34V7d+ULuHi1j0593ltzQ8s=" + }, + "v300": { + "version": "3.0.0", + "hash": "sha256-AdkQBFfTc5R9MWSnPMKFQ4uxL+KKsGXL4oNa1k3MPHY=" + }, + "v292": { + "version": "2.9.2", + "hash": "sha256-xMeBZ/rjJbR669i+tUtgQdb2pWs3Q/S9XXmxVkL51dQ=" + }, + "v291": { + "version": "2.9.1", + "hash": "sha256-OeTdhWaU3BDVZCAeRUnEbSQxYBorEPNCJQfiTMyPYvg=" + }, + "v290": { + "version": "2.9.0", + "hash": "sha256-618phAi3I/EaDKAZLBIuy3m0hVv99+6hg6YmQpahPPQ=" + }, + "v283": { + "version": "2.8.3", + "hash": "sha256-m2QLEwRxgnYamc4+TwAL6Wh1ZuCCi0pycJ6eaj75hHc=" + }, + "v282": { + "version": "2.8.2", + "hash": "sha256-uMsx5Z8SlFV7/IDypmKWm8Bk6DAGzu8FdOJVOhwlT9U=" + }, + "v281": { + "version": "2.8.1", + "hash": "sha256-M0v3BQ8dtAh/7rswVx7BPZ+pdb8F1gA846ttfSRSz0I=" + }, + "v280": { + "version": "2.8.0", + "hash": "sha256-ryu6llsGBjUY7sbxktQRYx3+HQdxN2DGfDwp00h4ncM=" + }, + "v275": { + "version": "2.7.5", + "hash": "sha256-vuUDjYXvAWCkK5CWs1Fg6fee9dKb9MtbOEGceTpbwEA=" + }, + "v274": { + "version": "2.7.4", + "hash": "sha256-HjqfraBsHAYAEUcK0P+WDeKPmgUVJ31zNvfgk2JRfaY=" + }, + "v273": { + "version": "2.7.3", + "hash": "sha256-FscNj+Hebpvt6g1ngEtV84lHF2k6Be1F4V4OL5OcJ5U=" + }, + "v272": { + "version": "2.7.2", + "hash": "sha256-kXqHecNCF3/zdRor+VXQJi0diRaktAiTDEXO8yZwCZU=" + }, + "v271": { + "version": "2.7.1", + "hash": "sha256-k3UH4ja6c3Csq6aJREUV1Oj0KRNvTn42IwgzktlrcHA=" + }, + "v270": { + "version": "2.7.0", + "hash": "sha256-UM5tb4jepzo+/KYrCp5sp1KSve5skpPv1qdxz9soze4=" + }, + "v265": { + "version": "2.6.5", + "hash": "sha256-hZ7fxxAZ0nxEj+FI5nmv3ZcqC6qRsh8CsrL1+KhN3So=" + }, + "v264": { + "version": "2.6.4", + "hash": "sha256-Y4ogwvnpnuKDqEHNeHq02EbRiA4YDE6WkE/DJ9QZ0R8=" + }, + "v263": { + "version": "2.6.3", + "hash": "sha256-rq1lmCYxcblpcNoNiB5hbQgTtps169xZkfh/8up/XJg=" + }, + "v262": { + "version": "2.6.2", + "hash": "sha256-sCnSSStyqbpbX82fPWAsn9C6oIeRLyquzCj1L1Z+xHg=" + }, + "v261": { + "version": "2.6.1", + "hash": "sha256-wpOztfH8HWNJwBnDkFNV1XffMnNLYx1+ZWUDiU4JEn4=" + }, + "v260": { + "version": "2.6.0", + "hash": "sha256-5I1VdHRXF5JpkADDKul9zvNCB9E+2T5BJvIT1dy+ilM=" + }, + "v255": { + "version": "2.5.5", + "hash": "sha256-5X9ePVhCqB/pNRtugX/K8KdJyk7zWpFGXtup4HHc58Q=" + }, + "v254": { + "version": "2.5.4", + "hash": "sha256-EHpbUi+7gxjUw75mgHXl5gcpbwqSVdcWdMqpRXEzbvo=" + }, + "v253": { + "version": "2.5.3", + "hash": "sha256-FONMxYbsTOV2P3YEbc82bEUQSyzHHXe2O+VQVgjmijA=" + }, + "v252": { + "version": "2.5.2", + "hash": "sha256-D/p9cICShKSslullkYphwdeTC8qGVFen2w/wr8ggHII=" + }, + "v251": { + "version": "2.5.1", + "hash": "sha256-9xrgqCS3j7Gkf/ojycJunZbFybKSNOrO3Oa0x3QCh80=" + }, + "v250": { + "version": "2.5.0", + "hash": "sha256-hlK/a1WrUfs3toaj9gSiZD4Oj94sVuapNgJ9Eq/abq4=" + }, + "v245": { + "version": "2.4.5", + "hash": "sha256-0wDE41iu6VGvbf0WhO8MA0dYtHFxVEIw88z2ziT+Q0c=" + }, + "v244": { + "version": "2.4.4", + "hash": "sha256-b8+vaTRzPqHcsvak1FnZYA4vSIeT5Rwtr0m3BRjuv9E=" + }, + "v243": { + "version": "2.4.3", + "hash": "sha256-vVcm8+JH56fTDOaZRtF0uPuS2ZnSJxDGXxdslpgSlg4=" + }, + "v242": { + "version": "2.4.2", + "hash": "sha256-X4fXeOXWKCLWDjj6liHBxWSPxVnRmLoxS9nYnL9n2eM=" + }, + "v241": { + "version": "2.4.1", + "hash": "sha256-EhkisTFpzUeoXj538LwSn40EJHGTtCSRyx+rkHToBHc=" + }, + "v240": { + "version": "2.4.0", + "hash": "sha256-fmAAz7lDj7/H/n/gVyr1h+Lyo2u9uVQI6YdHWNDDOC4=" + }, + "v2310": { + "version": "2.3.10", + "hash": "sha256-LQtareDF7TGjwZT61fjdcc3SGLcCBTQnOdJKYlpUxNM=" + }, + "v239": { + "version": "2.3.9", + "hash": "sha256-pv8TZk6xOvbboAJZz7VaMGsyt2iP7vUgpS/A9guBlvw=" + }, + "v238": { + "version": "2.3.8", + "hash": "sha256-rmqk7Sx9IBMQ/vGEMQqFyIoxVQb2M+k/zequwNWlT8I=" + }, + "v237": { + "version": "2.3.7", + "hash": "sha256-9Z9dhZzkhnzEdhoT0CAk9plJHid9VKn+duBT5bX3CGA=" + }, + "v236": { + "version": "2.3.6", + "hash": "sha256-NYpHeeaBO9BvB9sM8PD+UxQB7Qxu2ViXPUBEFsPVN/o=" + }, + "v235": { + "version": "2.3.5", + "hash": "sha256-9CUnXOfevMcoLJ3LRr1u67r0GsYBNuL9Mtj9YL6LdTs=" + }, + "v234": { + "version": "2.3.4", + "hash": "sha256-ehE1smIPeJKOiVOMIRpN8dlBWZQAHR58kXjGttct5qk=" + }, + "v233": { + "version": "2.3.3", + "hash": "sha256-dnMxZhh8yFh+Dr4eg5Ze8lcmKhpnajaAbt07bVG1Cqk=" + }, + "v232": { + "version": "2.3.2", + "hash": "sha256-gPRfrkhZ8WGxmAythG1CF0F9DIkAatKcDqjIjaVkqWo=" + }, + "v231": { + "version": "2.3.1", + "hash": "sha256-QQtY2067yrQ8M1dhLlkQlPZPuTOSacqi5oco42+NWJ4=" + }, + "v230": { + "version": "2.3.0", + "hash": "sha256-BFFJjZmcz/R1Im9c+uB6N1SnsoxQfGvaAH4xb8kNkqA=" + }, + "v229": { + "version": "2.2.9", + "hash": "sha256-cQ/zd+qDY3I51QEPTSYfX5HH/c6Ro4l0FJrNA+RcTEQ=" + }, + "v228": { + "version": "2.2.8", + "hash": "sha256-0QUUd9vF3DbxSLU6qVnD4qCqpZROsEyJ3VSSVIJfuws=" + }, + "v227": { + "version": "2.2.7", + "hash": "sha256-fixos4O7qO+33OXqHsz9p3BIVH0dKnNVwHLv18zYk80=" + }, + "v226": { + "version": "2.2.6", + "hash": "sha256-HuGZlM/9BH1A9juhSRFduhimgbDMkjvuwwG/QktY1k8=" + }, + "v225": { + "version": "2.2.5", + "hash": "sha256-48re0EadjcZPTKL+jkma2k3QFOhNHFpxgY055U5skUs=" + }, + "v224": { + "version": "2.2.4", + "hash": "sha256-a0CYWb6GVK/DhiVJSU4JcBfmTI0WfxJYQ4NYYwbvmn4=" + }, + "v223": { + "version": "2.2.3", + "hash": "sha256-oczCGt+R1g6ZJGAxuZyTDJr14bG1phsb7Ie+728W2II=" + }, + "v222": { + "version": "2.2.2", + "hash": "sha256-4JSwnzPUaFRe27KxbcF4+VjsL2beGi/HzCogvSSJoRQ=" + }, + "v221": { + "version": "2.2.1", + "hash": "sha256-TzMXUKv8O2BbAu7KHomU+g0mKZhbw/YpJDeBl/v+Vy0=" + }, + "v220": { + "version": "2.2.0", + "hash": "sha256-lpDY84pdSEJTlUUu6zBbBbsPVgzZbg7jDzcNTxZWMEA=" + }, + "v2110": { + "version": "2.1.10", + "hash": "sha256-im2jGORME8lhgI0WgMf/vm2v8o5uRlbAmi00D6+HnkE=" + }, + "v219": { + "version": "2.1.9", + "hash": "sha256-Ycva8umWMj5HMzRS7HHNbn8D7dToJQGo8Jy+KZk7654=" + }, + "v218": { + "version": "2.1.8", + "hash": "sha256-c1rkgktuqgyiqfwd1HEX9wCeMQ2ee8+e22a+Rb2EDbM=" + }, + "v217": { + "version": "2.1.7", + "hash": "sha256-HcS/wD++FHMnBCkdbZy3o8xwV1lXyVin4taGkI6c248=" + }, + "v216": { + "version": "2.1.6", + "hash": "sha256-T4Jt2Xs7gAFwcHO96EAUk/nNRmhGW0gcBC0o45c2U6g=" + }, + "v215": { + "version": "2.1.5", + "hash": "sha256-qCN5kT/X9OJuBF/PAhqpKh9oOVSBa/gXs7aW3mLpw7s=" + }, + "v214": { + "version": "2.1.4", + "hash": "sha256-6OCFNZKHdBGal5QS7o4wdES3oaQsjEesBu4JQjypoE4=" + }, + "v213": { + "version": "2.1.3", + "hash": "sha256-6y83CXFAj7EK9kU+VWRlyO7nKKwzO/HrR+waURIwT3w=" + }, + "v212": { + "version": "2.1.2", + "hash": "sha256-B8BfEuXUnb/Pgt0jtrSHe3zbHI5MjdJ8tNnldYpsr1I=" + }, + "v211": { + "version": "2.1.1", + "hash": "sha256-+1raQadbMcjdn/AT2spXslMEetFOQ/Zdi0GHm3uOPBc=" + }, + "v210": { + "version": "2.1.0", + "hash": "sha256-oy2XthqYw180RYS5hcr0mj/D4ObiTQu7vjT+Yd0mJ6w=" + }, + "v206": { + "version": "2.0.6", + "hash": "sha256-dlKjYV2uCsML2KZWbyhb2u4NzLc8E9f6h2ce2PV0y2Y=" + }, + "v205": { + "version": "2.0.5", + "hash": "sha256-P1Rjtd65Pv0qxOI6IGEqHM8ymaVp0DiAuyBMkGR9/Jo=" + }, + "v204": { + "version": "2.0.4", + "hash": "sha256-XMZ9F5AqMiu7iBEE4HyGITwBSqa1LmZRmG1Ct2/P7Tw=" + }, + "v203": { + "version": "2.0.3", + "hash": "sha256-39U7eIA8JctQCD3R+PdzqSTcMc3Z3jlu6uQSDBSq4tQ=" + }, + "v202": { + "version": "2.0.2", + "hash": "sha256-TRa2hSy9iV7VVzeBnSwEKzc3Hx2A/LpPskI566Kl1ys=" + }, + "v201": { + "version": "2.0.1", + "hash": "sha256-lZb2yz6Lr+NddJ3722yYTxu9hiM1mOtf20q/hUpXkro=" + }, + "v200": { + "version": "2.0.0", + "hash": "sha256-E5rIHJR4rM04qetmdiPXWZeiGXzsNvGEzY0j6Yp+R1s=" + } +} \ No newline at end of file diff --git a/nix/libresslshim.nix b/nix/libresslshim.nix new file mode 100644 index 00000000..862701f7 --- /dev/null +++ b/nix/libresslshim.nix @@ -0,0 +1,23 @@ +{ pkgs, libressl }: +with pkgs; +stdenv.mkDerivation rec { + name = "LibreSSLShim"; + src = ../standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni; + + buildInputs = [ + libressl + pkg-config + jdk11_headless + ]; + + buildPhase = '' + make libressl + ''; + + LIBRESSL_CFLAGS = "-DECTESTER_LIBRESSL_${builtins.replaceStrings ["."] ["_"] libressl.version}=1"; + + installPhase = '' + mkdir --parents $out/lib + cp libressl_provider.so $out/lib + ''; +} diff --git a/nix/libtomcrypt-pkgconfig-for-static.patch b/nix/libtomcrypt-pkgconfig-for-static.patch new file mode 100644 index 00000000..441f2783 --- /dev/null +++ b/nix/libtomcrypt-pkgconfig-for-static.patch @@ -0,0 +1,14 @@ +diff --git a/makefile b/makefile +index cd94b86f..ffb65402 100644 +--- a/makefile ++++ b/makefile +@@ -79,6 +79,9 @@ $(foreach demo, $(strip $(DEMOS)), $(eval $(call DEMO_template,$(demo)))) + #as root in order to have a high enough permission to write to the correct + #directories and to set the owner and group to root. + install: $(call print-help,install,Installs the library and headers) .common_install ++ sed -e 's,^prefix=.*,prefix=$(PREFIX),' -e 's,^Version:.*,Version: $(VERSION_PC),' libtomcrypt.pc.in > libtomcrypt.pc ++ install -p -d $(DESTDIR)$(LIBPATH)/pkgconfig ++ install -p -m 644 libtomcrypt.pc $(DESTDIR)$(LIBPATH)/pkgconfig/ + + install_bins: $(call print-help,install_bins,Installs the useful demos ($(USEFUL_DEMOS))) .common_install_bins + '') diff --git a/nix/libtomcrypt-pkgconfig-makefile.txt b/nix/libtomcrypt-pkgconfig-makefile.txt new file mode 100644 index 00000000..9f54c853 --- /dev/null +++ b/nix/libtomcrypt-pkgconfig-makefile.txt @@ -0,0 +1,5 @@ + +pkgconfig-patch: + sed -e 's,^prefix=.*,prefix=$(PREFIX),' -e 's,^Version:.*,Version: $(VERSION_PC),' libtomcrypt.pc.in > libtomcrypt.pc + install -p -d $(DESTDIR)$(LIBPATH)/pkgconfig + install -p -m 644 libtomcrypt.pc $(DESTDIR)$(LIBPATH)/pkgconfig/ diff --git a/nix/libtomcrypt-pkgconfig-makefile_include.mk.txt b/nix/libtomcrypt-pkgconfig-makefile_include.mk.txt new file mode 100644 index 00000000..c9b49028 --- /dev/null +++ b/nix/libtomcrypt-pkgconfig-makefile_include.mk.txt @@ -0,0 +1,2 @@ + +VERSION_PC=$(VERSION) diff --git a/nix/libtomcrypt.pc.in b/nix/libtomcrypt.pc.in new file mode 100644 index 00000000..714f0604 --- /dev/null +++ b/nix/libtomcrypt.pc.in @@ -0,0 +1,10 @@ +prefix=@to-be-replaced@ +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include + +Name: LibTomCrypt +Description: public domain open source cryptographic toolkit +Version: @to-be-replaced@ +Libs: -L${libdir} -ltomcrypt +Cflags: -I${includedir} diff --git a/nix/libtommath-pkgconfig-for-static-build.patch b/nix/libtommath-pkgconfig-for-static-build.patch new file mode 100644 index 00000000..4a97acaa --- /dev/null +++ b/nix/libtommath-pkgconfig-for-static-build.patch @@ -0,0 +1,15 @@ +diff --git a/makefile b/makefile +index bee51a1..b36a13a 100644 +--- a/makefile ++++ b/makefile +@@ -90,6 +90,10 @@ install: $(LIBNAME) + install -d $(DESTDIR)$(INCPATH) + install -m 644 $(LIBNAME) $(DESTDIR)$(LIBPATH) + install -m 644 $(HEADERS_PUB) $(DESTDIR)$(INCPATH) ++ sed -e 's,^prefix=.*,prefix=$(PREFIX),' -e 's,^Version:.*,Version: $(VERSION_PC),' -e 's,@CMAKE_INSTALL_LIBDIR@,lib,' \ ++ -e 's,@CMAKE_INSTALL_INCLUDEDIR@,include,' libtommath.pc.in > libtommath.pc ++ install -d $(DESTDIR)$(LIBPATH)/pkgconfig ++ install -m 644 libtommath.pc $(DESTDIR)$(LIBPATH)/pkgconfig/ + + uninstall: + rm $(DESTDIR)$(LIBPATH)/$(LIBNAME) diff --git a/nix/mbedtls-printf.patch b/nix/mbedtls-printf.patch new file mode 100644 index 00000000..f19acf5b --- /dev/null +++ b/nix/mbedtls-printf.patch @@ -0,0 +1,95 @@ +diff --git a/programs/ssl/ssl_pthread_server.c b/programs/ssl/ssl_pthread_server.c +--- a/programs/ssl/ssl_pthread_server.c ++++ b/programs/ssl/ssl_pthread_server.c +@@ -142,7 +142,7 @@ static void *handle_ssl_connection( void *data ) + if( ( ret = mbedtls_ssl_setup( &ssl, thread_info->config ) ) != 0 ) + { + mbedtls_printf( " [ #%ld ] failed: mbedtls_ssl_setup returned -0x%04x\n", +- thread_id, -ret ); ++ thread_id, ( unsigned int ) -ret ); + goto thread_exit; + } + +@@ -158,7 +158,7 @@ static void *handle_ssl_connection( void *data ) + if( ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE ) + { + mbedtls_printf( " [ #%ld ] failed: mbedtls_ssl_handshake returned -0x%04x\n", +- thread_id, -ret ); ++ thread_id, ( unsigned int ) -ret ); + goto thread_exit; + } + } +@@ -195,7 +195,7 @@ static void *handle_ssl_connection( void *data ) + + default: + mbedtls_printf( " [ #%ld ] mbedtls_ssl_read returned -0x%04x\n", +- thread_id, -ret ); ++ thread_id, ( unsigned int ) -ret ); + goto thread_exit; + } + } +@@ -229,7 +229,7 @@ static void *handle_ssl_connection( void *data ) + if( ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE ) + { + mbedtls_printf( " [ #%ld ] failed: mbedtls_ssl_write returned -0x%04x\n", +- thread_id, ret ); ++ thread_id, ( unsigned int ) ret ); + goto thread_exit; + } + } +@@ -246,7 +246,7 @@ static void *handle_ssl_connection( void *data ) + ret != MBEDTLS_ERR_SSL_WANT_WRITE ) + { + mbedtls_printf( " [ #%ld ] failed: mbedtls_ssl_close_notify returned -0x%04x\n", +- thread_id, ret ); ++ thread_id, ( unsigned int ) ret ); + goto thread_exit; + } + } +@@ -263,7 +263,7 @@ static void *handle_ssl_connection( void *data ) + char error_buf[100]; + mbedtls_strerror( ret, error_buf, 100 ); + mbedtls_printf(" [ #%ld ] Last error was: -0x%04x - %s\n\n", +- thread_id, -ret, error_buf ); ++ thread_id, ( unsigned int ) -ret, error_buf ); + } + #endif + +@@ -408,7 +408,7 @@ int main( void ) + strlen( pers ) ) ) != 0 ) + { + mbedtls_printf( " failed: mbedtls_ctr_drbg_seed returned -0x%04x\n", +- -ret ); ++ ( unsigned int ) -ret ); + goto exit; + } + +@@ -425,7 +425,7 @@ int main( void ) + MBEDTLS_SSL_PRESET_DEFAULT ) ) != 0 ) + { + mbedtls_printf( " failed: mbedtls_ssl_config_defaults returned -0x%04x\n", +- -ret ); ++ ( unsigned int ) -ret ); + goto exit; + } + +@@ -470,7 +470,8 @@ int main( void ) + { + char error_buf[100]; + mbedtls_strerror( ret, error_buf, 100 ); +- mbedtls_printf( " [ main ] Last error was: -0x%04x - %s\n", -ret, error_buf ); ++ mbedtls_printf( " [ main ] Last error was: -0x%04x - %s\n", ( unsigned int ) -ret, ++ error_buf ); + } + #endif + +@@ -482,7 +483,8 @@ int main( void ) + if( ( ret = mbedtls_net_accept( &listen_fd, &client_fd, + NULL, 0, NULL ) ) != 0 ) + { +- mbedtls_printf( " [ main ] failed: mbedtls_net_accept returned -0x%04x\n", ret ); ++ mbedtls_printf( " [ main ] failed: mbedtls_net_accept returned -0x%04x\n", ++ ( unsigned int ) ret ); + goto exit; + } + diff --git a/nix/mbedtls_pkg_versions.json b/nix/mbedtls_pkg_versions.json new file mode 100644 index 00000000..000efd56 --- /dev/null +++ b/nix/mbedtls_pkg_versions.json @@ -0,0 +1,152 @@ +{ + "v360": { + "version": "v3.6.0", + "hash": "sha256-tCwAKoTvY8VCjcTPNwS3DeitflhpKHLr6ygHZDbR6wQ=", + "tag": "v3.6.0" + }, + "v352": { + "version": "v3.5.2", + "hash": "sha256-lVGmnSYccNmRS6vfF/fDiny5cYRPc/wJBpgciFLPUvM=", + "tag": "v3.5.2" + }, + "v351": { + "version": "v3.5.1", + "hash": "sha256-HxsHcGbSExp1aG5yMR/J3kPL4zqnmNoN5T5wfV3APaw=", + "tag": "v3.5.1" + }, + "v350": { + "version": "v3.5.0", + "hash": "sha256-uHHQmaAmFS8Vd7PrAfRpK+aNi3pJ76XBC7rFWcd16NU=", + "tag": "mbedtls-3.5.0" + }, + "v341": { + "version": "v3.4.1", + "hash": "sha256-NIjyRcVbg6lT6+RlTz5Jt6V9T85mvta5grOSLIAK9Ts=", + "tag": "v3.4.1" + }, + "v340": { + "version": "v3.4.0", + "hash": "sha256-1YA4hp/VEjph5k0qJqhhH4nBbTP3Qu2pl7WpuvPkVfg=", + "tag": "v3.4.0" + }, + "v330": { + "version": "v3.3.0", + "hash": "sha256-yb5migP5Tcw99XHFzJkCct4f5R6ztxPR43VQcfTGRtE=", + "tag": "v3.3.0" + }, + "v321": { + "version": "v3.2.1", + "hash": "sha256-+M36NvFe4gw2PRbld/2JV3yBGrqK6soWcmrSEkUNcrc=", + "tag": "v3.2.1" + }, + "v320": { + "version": "v3.2.0", + "hash": "sha256-b0c8E3eFwHw2bbvAOQY55RRkXVcx9hUCmkZA9QlRodQ=", + "tag": "v3.2.0" + }, + "v310": { + "version": "v3.1.0", + "hash": "sha256-esQe1qnM1yBzNPpd+qog3/8guttt6CKUiyzIQ1nMfJs=", + "tag": "v3.1.0" + }, + "v300": { + "version": "v3.0.0", + "hash": "sha256-M4PQwsa856Hy3QXKwnNRp4alk5oVJBGkDEjZWf6vT4s=", + "tag": "v3.0.0" + }, + "v2288": { + "version": "v2.28.8", + "hash": "sha256-A1DYZrvJ8SRujroVwqPfcTOSgLnT5xRat/RVdq2fL/o=", + "tag": "v2.28.8" + }, + "v2287": { + "version": "v2.28.7", + "hash": "sha256-JI0Frbz4HkPqrLQNrSIj1ikN8201h4kd1wTwyPotERw=", + "tag": "v2.28.7" + }, + "v2286": { + "version": "v2.28.6", + "hash": "sha256-1YyA3O0/u7Tcf8rhNmrMGF64/tnitQH65THpXa7N7P8=", + "tag": "v2.28.6" + }, + "v2285": { + "version": "v2.28.5", + "hash": "sha256-Gl4UQMSvAwYbOi2b/AUMz+zgkOl1o0UA2VveF/3ek8o=", + "tag": "mbedtls-2.28.5" + }, + "v2284": { + "version": "v2.28.4", + "hash": "sha256-88Lnj9NgS5PWg2hydvb9cwi6s6BG3UMvkUH2Ny1jmtE=", + "tag": "v2.28.4" + }, + "v2283": { + "version": "v2.28.3", + "hash": "sha256-w5bJErCNRZLE8rHcuZlK3bOqel97gPPMKH2cPGUR6Zw=", + "tag": "v2.28.3" + }, + "v2282": { + "version": "v2.28.2", + "hash": "sha256-rbWvPrFoY31QyW/TbMndPXTzAJS6qT/bo6J0IL6jRvQ=", + "tag": "v2.28.2" + }, + "v2281": { + "version": "v2.28.1", + "hash": "sha256-brbZB3fINDeVWXf50ct4bxYkoBVyD6bBBijZyFQSnyw=", + "tag": "v2.28.1" + }, + "v2280": { + "version": "v2.28.0", + "hash": "sha256-VDoIUBaK2e0E5nkwU1u3Wvxc+s6OzBSdIeHsJKJuZ2g=", + "tag": "v2.28.0" + }, + "v2270": { + "version": "v2.27.0", + "hash": "sha256-vlZZnN/XAlmoDhRJTZUcrToeCiGaQrKe6k2t3G1My0M=", + "tag": "v2.27.0" + }, + "v2260": { + "version": "v2.26.0", + "hash": "sha256-VbgYI7I6BxcuW9EvRr0CXVPsRBNlsIl3Pti8/XK9nGk=", + "tag": "v2.26.0" + }, + "v2250": { + "version": "v2.25.0", + "hash": "sha256-UQ0z374ptC1m7Ezomj7BuMG2+yYg+ByOGYI9zKzlceQ=", + "tag": "v2.25.0" + }, + "v2240": { + "version": "v2.24.0", + "hash": "sha256-zO65lsM/nw0NfqvRGT+n8sRT2hpdvMzcJR4nve7F0SM=", + "tag": "v2.24.0" + }, + "v21612": { + "version": "v2.16.12", + "hash": "sha256-EjIbPWiqq0Xif1sXV59mM0qfDjsHuOomDlRWrFKlt6Q=", + "tag": "v2.16.12" + }, + "v21611": { + "version": "v2.16.11", + "hash": "sha256-sas6xdOUM8cTomXEBpvi6eCOLcCO9vvRmvUIu4kEdRg=", + "tag": "v2.16.11" + }, + "v21610": { + "version": "v2.16.10", + "hash": "sha256-ar1JVepzNjD6jgp9V0G/YNajO7s0sxYe3t0v8O0sVs4=", + "tag": "v2.16.10" + }, + "v2169": { + "version": "v2.16.9", + "hash": "sha256-jhWJh4gKU0JOERANiYSI3me0oMDTRJ7ZQaKhNc6w51c=", + "tag": "v2.16.9" + }, + "v2719": { + "version": "v2.7.19", + "hash": "sha256-0GAoJMq6O0j8WwwhknD486XcaCALZ3TW5mxKcliISmY=", + "tag": "v2.7.19" + }, + "v2718": { + "version": "v2.7.18", + "hash": "sha256-SkAK9lTqdc3VbJyu8VNHR1PPUlt/+swIJl/R5l7zhUg=", + "tag": "v2.7.18" + } +} \ No newline at end of file diff --git a/nix/mbedtlsshim.nix b/nix/mbedtlsshim.nix new file mode 100644 index 00000000..05cad9cc --- /dev/null +++ b/nix/mbedtlsshim.nix @@ -0,0 +1,29 @@ +{ pkgs, mbedtls }: +with pkgs; +stdenv.mkDerivation rec { + name = "MbedTLSShim"; + src = ../standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni; + rawVersion = pkgs.lib.strings.removePrefix "v" mbedtls.version; + + buildInputs = [ + mbedtls + pkg-config + jdk11_headless + ]; + + buildPhase = '' + make mbedtls + ''; + + MBEDTLS_CFLAGS = '' + -DECTESTER_MBEDTLS_${builtins.replaceStrings ["."] ["_"] rawVersion}=1 \ + -DECTESTER_MBEDTLS_MAJOR=${pkgs.lib.versions.major rawVersion} \ + -DECTESTER_MBEDTLS_MINOR=${pkgs.lib.versions.minor rawVersion} \ + -DECTESTER_MBEDTLS_PATCH=${pkgs.lib.versions.patch rawVersion} \ + ''; + + installPhase = '' + mkdir --parents $out/lib + cp mbedtls_provider.so $out/lib + ''; +} diff --git a/nix/nettle_pkg_versions.json b/nix/nettle_pkg_versions.json new file mode 100644 index 00000000..7e80a1b7 --- /dev/null +++ b/nix/nettle_pkg_versions.json @@ -0,0 +1,87 @@ +{ + "v3_8_1": { + "version": "3.8.1", + "tag": "nettle_3.8.1_release_20220727", + "hash": "sha256-Nk8+K3fNfc3oP9fEUhnINOVLDHXkKLb4lKI9Et1By/4=" + }, + "v3_8": { + "version": "3.8", + "tag": "nettle_3.8_release_20220602", + "hash": "sha256-dXbGhIHBmPZEsIwWDRpIULqUSeMIBpRVtSEzGfI06OY=" + }, + "v3_7_3": { + "version": "3.7.3", + "tag": "nettle_3.7.3_release_20210606", + "hash": "sha256-Zh9esD8EijuSTDqK0lFdQGjkD2fndOiiaCdlgAfjvPA=" + }, + "v3_7_2": { + "version": "3.7.2", + "tag": "nettle_3.7.2_release_20210321", + "hash": "sha256-jSpgTvHN5M1ft35CJTHqJa0GRnn/Ct+VbnizNS4O8WI=" + }, + "v3_7_1": { + "version": "3.7.1", + "tag": "nettle_3.7.1_release_20210217", + "hash": "sha256-FWYhQnx7AKdf+bNLdwuV00+A73pVw0B96UsWy/Q2xC4=" + }, + "v3_7": { + "version": "3.7", + "tag": "nettle_3.7_release_20210104", + "hash": "sha256-8AH2TrREvxPdkbzsy8IKy8YMQxHW4rIIeEUuuanOx1o=" + }, + "v3_6": { + "version": "3.6", + "tag": "nettle_3.6_release_20200429", + "hash": "sha256-0kwNDyq/+8j0803PEUsPEx7Dd0iV81VZIv4vQPPV4/E=" + }, + "v3_5_1": { + "version": "3.5.1", + "tag": "nettle_3.5.1_release_20190627", + "hash": "sha256-dcyhmYdhsC4W8ttW2lKZKu9iK/VaO0XsU4vC7trclBk=" + }, + "v3_4_1": { + "version": "3.4.1", + "tag": "nettle_3.4.1_release_20181204", + "hash": "sha256-+UHPFTXNXRgZvlzK5bq+8B9tthH5tad3uunHYEuKkq0=" + }, + "v3_4": { + "version": "3.4", + "tag": "nettle_3.4_release_20171119", + "hash": "sha256-rnpC3wJlULhdrKg4m2pgumMTsFZ/N0OS5UkYWIpBHpQ=" + }, + "v3_3": { + "version": "3.3", + "tag": "nettle_3.3_release_20161001", + "hash": "sha256-RpQmJ9XQyhFyD+wY2B/Dj374N+pBl8H2MOcc4NRwsR4=" + }, + "v3_2": { + "version": "3.2", + "tag": "nettle_3.2_release_20160128", + "hash": "sha256-6kKD3vI2QT7ataTPnPMq31QMjfG5tnZBz8IwL8qEnZc=" + }, + "v3_1_1": { + "version": "3.1.1", + "tag": "nettle_3.1.1_release_20150424", + "hash": "sha256-X9TSXWTY3cuF0NiXVyr3OwW00WPGzElDilv7uP8pPUw=" + }, + "v3_1": { + "version": "3.1", + "tag": "nettle_3.1_release_20150407", + "hash": "sha256-9oWdTsiOcIBVkK+YYrS4xDotH8eZHfCnpxGx58qfydM=" + }, + "v3_0": { + "version": "3.0", + "tag": "nettle_3.0_release_20140607", + "hash": "sha256-llHAvSMm63N9DtnrQDREcSQHwBolsP6BNDLvMb682RM=" + }, + "v2_7_1": { + "version": "2.7.1", + "tag": "nettle_2.7.1_release_20130528", + "hash": "sha256-vHHr1DQ1U312d5nkFPzojlIbcnjUjIYGUSFuH8ZVW0A=" + }, + "v2_7": { + "version": "2.7", + "tag": "nettle_2.7_release_20130424", + "hash": "sha256-wpTqEzwFOCzC7/sXNNSfSr6xrYUVVDozPeSaEUIs1NY=" + } +} \ No newline at end of file diff --git a/nix/nettleshim.nix b/nix/nettleshim.nix new file mode 100644 index 00000000..7488398a --- /dev/null +++ b/nix/nettleshim.nix @@ -0,0 +1,28 @@ +{ + pkgs, + nettle, + gmp, +}: +with pkgs; +stdenv.mkDerivation rec { + name = "NettleShim"; + src = ../standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni; + + buildInputs = [ + nettle + gmp + pkg-config + jdk11_headless + ]; + + buildPhase = '' + make nettle + ''; + + NETTLE_CFLAGS = "-DECTESTER_NETTLE_${builtins.replaceStrings ["."] ["_"] nettle.version}=1"; + + installPhase = '' + mkdir --parents $out/lib + cp nettle_provider.so $out/lib + ''; +} diff --git a/nix/openssl_pkg_versions.json b/nix/openssl_pkg_versions.json new file mode 100644 index 00000000..b977c49a --- /dev/null +++ b/nix/openssl_pkg_versions.json @@ -0,0 +1,726 @@ +{ + "v331": { + "version": "3.3.1", + "hash": "sha256-d3zVlihMiDN1oqehG/XSeG/FQTJV76sgxQ1v/m0CC34=" + }, + "v330": { + "version": "3.3.0", + "hash": "sha256-U+ZrBDMipgar8Ah+dpmg4DOjf6E/65dC3zXDozsY+wI=" + }, + "v322": { + "version": "3.2.2", + "hash": "sha256-GXFJwY2enyksQ/BACsq6EuX1LKz+BQ89GZJ36nOOwuc=" + }, + "v321": { + "version": "3.2.1", + "hash": "sha256-g8cyn+UshQZ3115dCwyiRTCbl+jsvP3B39xKufrDWzk=" + }, + "v320": { + "version": "3.2.0", + "hash": "sha256-FMgm8Hx+QzcG+1xp+p4l2rlWhIRLTJYqLPG/GD60aQ4=" + }, + "v316": { + "version": "3.1.6", + "hash": "sha256-XSvkA2tHjvPLCoVMqbNTByw6DibYpW+PCrn7btMtONc=" + }, + "v315": { + "version": "3.1.5", + "hash": "sha256-auAVRn2r8EabE5rakzGTJ74kuYJR/67O2gIhhI3AkmI=" + }, + "v314": { + "version": "3.1.4", + "hash": "sha256-hAr1Nmq5tSK95SWCa+PvD7Cvgcap69hMqmAP6hcx7uM=" + }, + "v313": { + "version": "3.1.3", + "hash": "sha256-8DFqLr2J5/I1KXZEVFhon4AwIJN4jEZmkvsqGIsurPY=" + }, + "v312": { + "version": "3.1.2", + "hash": "sha256-oM5puLl+pqNblodSNapFO5Zro8uory3iNlfYtnZ9ZTk=" + }, + "v311": { + "version": "3.1.1", + "hash": "sha256-s6phM0IzuFK2PdsEjfGBF3wsZZ651DdgCBGPnAjQdnQ=" + }, + "v310": { + "version": "3.1.0", + "hash": "sha256-qqklrZgodFxMrZ2e/rJz3sqCDyzc8sOsfXwSErfEl7Q=" + }, + "v3014": { + "version": "3.0.14", + "hash": "sha256-7soDXU3U6E/CWEbZUtpil0hK+gZQpvhMaC453zpBI8o=" + }, + "v3013": { + "version": "3.0.13", + "hash": "sha256-iFJXU/edO+wn0vp8ZqoLkrOqlJja/ZPXz6SzeAza4xM=" + }, + "v3012": { + "version": "3.0.12", + "hash": "sha256-+Tyejt3l6RZhGd4xdV/Ie0qjSGNmL2fd/LoU0La2m2E=" + }, + "v3011": { + "version": "3.0.11", + "hash": "sha256-s0JdO7SiIY0Gl+tB9/wM3t4BbtGcpJ0Wi3jo2UeIf1U=" + }, + "v3010": { + "version": "3.0.10", + "hash": "sha256-F2HU9bE6ECi5tvPUuOF/6wztyTcPav5h1xk9LNzoMyM=" + }, + "v309": { + "version": "3.0.9", + "hash": "sha256-6xqwR4FHQ2D3fDGKuJ2MWgOrw45j1lpgPKu/GwCh3JA=" + }, + "v308": { + "version": "3.0.8", + "hash": "sha256-bBPSvzj98x6sPOKjRwc2c/XWMmM5jx9p0N9KQSU+Sz4=" + }, + "v307": { + "version": "3.0.7", + "hash": "sha256-gwSdBComDmlvYkBqxcCL9wb9hDg/lFzyG9YentlcOW4=" + }, + "v305": { + "version": "3.0.5", + "hash": "sha256-qn2Nm+9xrWUlxVuhHl9Dl4ic5Jwsk0nc6m0+TwsCSno=" + }, + "v304": { + "version": "3.0.4", + "hash": "sha256-KDGEPppmigq0eOcCCtY9LWXlH3KXdHLcc+/O+6/AwA8=" + }, + "v303": { + "version": "3.0.3", + "hash": "sha256-7gB4rc7x3l8APGLIDMllJ3IWCcbzu0K3eV3zH4tVjAs=" + }, + "v302": { + "version": "3.0.2", + "hash": "sha256-mOkczq1NR1auPJzeXgkZGo5YbZ9NUIOOfsCdZBHf22M=" + }, + "v301": { + "version": "3.0.1", + "hash": "sha256-wxGthTNTvOeW7a0BqGLFCopYf2Ln4hAO9GWrU+ybBtE=" + }, + "v300": { + "version": "3.0.0", + "hash": "sha256-We7fy0bCUhTJvTftYHgpe03wHQEiZ/6enu4x9hvHBTY=" + }, + "v111w": { + "version": "1.1.1w", + "hash": "sha256-zzCYlQy02FOtlcCEHx+cbT3BAtzPys1SHZOSUgi3asg=" + }, + "v111v": { + "version": "1.1.1v", + "hash": "sha256-1ml+KHHncjhGBALpNi1H0YOCsV758karpse9eA04prA=" + }, + "v111u": { + "version": "1.1.1u", + "hash": "sha256-4vjYS1I+7NBse+diaDA3AwD7zBU4a/UULXJ1j2lj68Y=" + }, + "v111t": { + "version": "1.1.1t", + "hash": "sha256-je6bJL2x3L8MPR6bAvuPa/IhZegH9Fret8lndTaFnTs=" + }, + "v111s": { + "version": "1.1.1s", + "hash": "sha256-xawB52Dub/Dath1rK70wFGck0GPrMiGAxvGKb3Tktqo=" + }, + "v111q": { + "version": "1.1.1q", + "hash": "sha256-15Oc5hQCnN/wtsIPDi5XAxWKSJpyslB7i9Ub+Mj9EMo=" + }, + "v111p": { + "version": "1.1.1p", + "hash": "sha256-v2G2Kqpmx8djmUKpTeTJroKAwI8X1OrC5EZE2fyKzm8=" + }, + "v111o": { + "version": "1.1.1o", + "hash": "sha256-k4SisFcN2ANYhBRkZ3EV33he25QccSEfdQdtcv5rQ48=" + }, + "v111n": { + "version": "1.1.1n", + "hash": "sha256-QNzrUaT2pSdb3g5r8g70uRv8Mu1XwFUuLo4VRjNysXo=" + }, + "v111m": { + "version": "1.1.1m", + "hash": "sha256-+JGZvosjykX8fLnx2NPuZzEjGChq0DD1MWrKZGLbbJY=" + }, + "v111l": { + "version": "1.1.1l", + "hash": "sha256-C3o+XlnDSCf+DDp0t+yLrvMCuY+oAIjX+RU6oW+na9E=" + }, + "v111k": { + "version": "1.1.1k", + "hash": "sha256-iSoIdbmHKs0Eqf3nmx+UMHXV6hYkFd4wR8Mn3zP7ruU=" + }, + "v111j": { + "version": "1.1.1j", + "hash": "sha256-qvL8tXXN9kkbmKtIKav3ij3shAK4uB78jyPADUQ5gb8=" + }, + "v111i": { + "version": "1.1.1i", + "hash": "sha256-6L5qNf5B0QYDw8xjXpMontAL80t5Zxo6TeZPzuANUkI=" + }, + "v111h": { + "version": "1.1.1h", + "hash": "sha256-XJyod0vXsD5XhPJq6enm10nJ2iQ4VFB35rPXVaBlldk=" + }, + "v111g": { + "version": "1.1.1g", + "hash": "sha256-3bBHdPHjLwxJdR4htnIWrIeFLOsFa3UgmvJENABjbUY=" + }, + "v111f": { + "version": "1.1.1f", + "hash": "sha256-GGxr/m7PunpbSMR/ihZz0POw5bouJWAt0jtimXXaPzU=" + }, + "v111e": { + "version": "1.1.1e", + "hash": "sha256-aU9hrBHLUcm/c/VOdx/2AisDJ6Q7vfobLxneFmKm3L4=" + }, + "v111d": { + "version": "1.1.1d", + "hash": "sha256-HjqRvB+d/OAa8mAm+FbgZOq0yO4Kj0V7WuMLQLi3EfI=" + }, + "v111c": { + "version": "1.1.1c", + "hash": "sha256-9vswea0VB2FU7alBP+1Ch31mjnBp2bhzltCAT9s/TJA=" + }, + "v111b": { + "version": "1.1.1b", + "hash": "sha256-XFV7AjIwQT37B1bzE3oT5tcmg4zNFDCIitFb+ytD6ks=" + }, + "v111a": { + "version": "1.1.1a", + "hash": "sha256-/CATD4t8vS+5GLLxTi9CnhCcMd3Q+zj8XXHZ/+0/n0E=" + }, + "v111": { + "version": "1.1.1", + "hash": "sha256-KDaHWg+JwD0P30g5QVEmE6UM+0Idb9lLn0HXJ51Yaj0=" + }, + "v110l": { + "version": "1.1.0l", + "hash": "sha256-dKL3VsZP1zhqKRhNwDRPSDEZLWHcJIGpOkxd1yf0EUg=" + }, + "v110k": { + "version": "1.1.0k", + "hash": "sha256-76SWX093NXTWy9oc+HTbvkVascDU+QYRX4Z9MEREcLE=" + }, + "v110j": { + "version": "1.1.0j", + "hash": "sha256-Mb7GwgPOGo6T1ZlPTtMExjzPB2dhGLZjTt3tEq0bMkY=" + }, + "v110i": { + "version": "1.1.0i", + "hash": "sha256-67/IRKjIzA6l3BC4bJzpf0AYN/P6CMF7LNrcEYJTz5k=" + }, + "v110h": { + "version": "1.1.0h", + "hash": "sha256-WDVibN6emWVlhfx6qiMCpzp+E0C/jBT9Y1pixmgCpRc=" + }, + "v110g": { + "version": "1.1.0g", + "hash": "sha256-3k1QEmfaOTEJBcttyMYSH3osrUWncH9234KP4bhQc68=" + }, + "v110f": { + "version": "1.1.0f", + "hash": "sha256-EvdG8/JJOy852n7PY9fuGcasnsak/NjCKdqKUiyxJ2U=" + }, + "v110e": { + "version": "1.1.0e", + "hash": "sha256-V76GGJedgMkQcoz8mTab+XsqGr2PNmq2697ol1rTh0w=" + }, + "v110d": { + "version": "1.1.0d", + "hash": "sha256-fV67nol1ZUXBVv+cE88qpiFBk7AQpGijvHicPCj+YN8=" + }, + "v110c": { + "version": "1.1.0c", + "hash": "sha256-/ENkQaLgV1LTG05GEV64lwmiiu+W1P54ar6SQJsv1vU=" + }, + "v110b": { + "version": "1.1.0b", + "hash": "sha256-pF3gcr+b5N6kNyMKrwNgAPDmjGpmWTHFfna1sDbO9vc=" + }, + "v110a": { + "version": "1.1.0a", + "hash": "sha256-wuaW40KWzeLJ7F3NrZ5PBCzXA5MlkdOVw4neSIMCRCs=" + }, + "v110": { + "version": "1.1.0", + "hash": "sha256-9caf+awUcsgLho78HBwNjc/HRtKevlY94jZd1W29jII=" + }, + "v102u": { + "version": "1.0.2u", + "hash": "sha256-7NDG/7ST3QZwfTixS7TYwiiLtwM3NWBladj5D4lmnRY=" + }, + "v102t": { + "version": "1.0.2t", + "hash": "sha256-FMtGTv56xrVHmbNEVr1pVYp0mkkx7P2c+fcdeIHKx7w=" + }, + "v102s": { + "version": "1.0.2s", + "hash": "sha256-yr1clJKCXOW9I/PDru1ql/gUL2BtiT3yFkEfB9Grq5Y=" + }, + "v102r": { + "version": "1.0.2r", + "hash": "sha256-rlHQi7qKg5WOiUlG8VMD/4lNdcK4u9RKhStk4/4R0NY=" + }, + "v102q": { + "version": "1.0.2q", + "hash": "sha256-V0TPy87CsbSGKfc1QgO8Hl6bVGaZi7zMW1/N47GOtoQ=" + }, + "v102p": { + "version": "1.0.2p", + "hash": "sha256-UKmOB7Gonrj2qZR38mLfccb6e+93303IMCWihFyCfQA=" + }, + "v102o": { + "version": "1.0.2o", + "hash": "sha256-7D9clxS6D9RctOCHMB6xM2wxfg0gtXWhJQUEcOgInk0=" + }, + "v102n": { + "version": "1.0.2n", + "hash": "sha256-Nwurt18njDngxQ6MTnSTvA8Y22hnR4NBqDKpgv0VqP4=" + }, + "v102m": { + "version": "1.0.2m", + "hash": "sha256-jG/xXsazGbUHiPQserwokMCLpaHNzTgQ65CS3q2jew8=" + }, + "v102l": { + "version": "1.0.2l", + "hash": "sha256-zgcZW2WedfTh20NVKGAHAGHxVqmLs3tnKxAbpuPd8ww=" + }, + "v102k": { + "version": "1.0.2k", + "hash": "sha256-azl3xh8q7fD5Y2fc+1xuV4zzfnuNkTtOy2ZDw8uI2MA=" + }, + "v102j": { + "version": "1.0.2j", + "hash": "sha256-56/ykr4hwlnGryZGnHqbO6Jumrqv/TJePczJeFJWxDE=" + }, + "v102i": { + "version": "1.0.2i", + "hash": "sha256-kodIfRHJVFtu+yh823BTXU6bKE3RDVFEHZuZY9AA3m8=" + }, + "v102h": { + "version": "1.0.2h", + "hash": "sha256-HUAH5TqtlKWyAC/gRe57sLPZjxpH+LK8hR3NHHQzKRk=" + }, + "v102g": { + "version": "1.0.2g", + "hash": "sha256-t4Sxs5B845q/QJhwLa3mNlUiolOtFVLiZ6mg6JWUqjM=" + }, + "v102f": { + "version": "1.0.2f", + "hash": "sha256-kytO5N7ytDT4VDXZ4+GcqLqZzpoGWmFSS0KanV6bLpw=" + }, + "v102e": { + "version": "1.0.2e", + "hash": "sha256-4jzK/bdc/N54LaAVFzGqIYUZWsdF7qOEYTPy4FwOC/8=" + }, + "v102d": { + "version": "1.0.2d", + "hash": "sha256-Zxw2SHeFYopwM3TGUq0s6+pF+pIK5WgVFd8l2fLJqMg=" + }, + "v102c": { + "version": "1.0.2c", + "hash": "sha256-ADi6N/NaY2fFjxenp/aHlT74zk+WhLvexj5iUV7TaoM=" + }, + "v102b": { + "version": "1.0.2b", + "hash": "sha256-1dSIzJ8KB5dBladCcJTqPKuYAKTpAXi5iapiH7wjjj8=" + }, + "v102a": { + "version": "1.0.2a", + "hash": "sha256-FbY5PCADCqsCyOL+AkPLHR0YBi9sCV1nvKkYcdx/Mko=" + }, + "v102": { + "version": "1.0.2", + "hash": "sha256-jEi687q+DVBdFs/AzyclicZtNiQmQJghPbD7AANHKOk=" + }, + "v101u": { + "version": "1.0.1u", + "hash": "sha256-QxK0yhIVtvLJcAdQPYDbgNUVf3b499P+u+a0xW/yZzk=" + }, + "v101t": { + "version": "1.0.1t", + "hash": "sha256-Sm7kkaL9si5RnHb9wqYouzzsEnYs1FaGHSB5lsigcIg=" + }, + "v101s": { + "version": "1.0.1s", + "hash": "sha256-5+gdgvPNU4qwzbpJQAbUSqud2Wt/YjPOmXH7fHkW1RE=" + }, + "v101r": { + "version": "1.0.1r", + "hash": "sha256-eEvY01XtAc6YuBL4c/iyMT2mHffHtWd/zy5XsIY6M0Y=" + }, + "v101q": { + "version": "1.0.1q", + "hash": "sha256-s2WLhOnqYGpd7TyXKlUXzXhSgufqhrIMeKpLdzoEf7c=" + }, + "v101p": { + "version": "1.0.1p", + "hash": "sha256-vV7mgDFlwPtgu+y6ys8kTx+Q0qoNcTU69hDCkSHpsvE=" + }, + "v101o": { + "version": "1.0.1o", + "hash": "sha256-FuZ4xqBfJQKBHgdfLEBZrAHIeNCRycWFr8SevFQfexM=" + }, + "v101n": { + "version": "1.0.1n", + "hash": "sha256-NYGkBcy+D9H28X6kF3P3fN1R21XAHhtNhUnlGYgsbK8=" + }, + "v101m": { + "version": "1.0.1m", + "hash": "sha256-CV8LewkRbAxVJkIgiAWNx+bgAKoU0irMpqTiurzf73Q=" + }, + "v101l": { + "version": "1.0.1l", + "hash": "sha256-ss9NSP5dSfJAxhyeYkGTpvIyte0LrwEGgeclljxA0dQ=" + }, + "v101k": { + "version": "1.0.1k", + "hash": "sha256-j5+urrrQiOdy9O9eOCUtRyvk2HjGs6JxjBCk/OvnpBw=" + }, + "v101j": { + "version": "1.0.1j", + "hash": "sha256-G2DKh4m6bwPo7yDaIpO43BMcOdg4FOd1Bp8C0mNU7fM=" + }, + "v101i": { + "version": "1.0.1i", + "hash": "sha256-PBefRsp3BppqC6xwISqbO4OLL2YSnLUtVog3/HnY/Mc=" + }, + "v101h": { + "version": "1.0.1h", + "hash": "sha256-nRyKmDaqY+LGrbaEGGy9Q3HJ6dzAHW47tEer8tTT0JM=" + }, + "v101g": { + "version": "1.0.1g", + "hash": "sha256-U8uBjDuQ5QeoNI9PXq7bBdi/5TWKq7UItyY8xnDD4Cg=" + }, + "v101f": { + "version": "1.0.1f", + "hash": "sha256-bMKoCxfWTea3usmFdF/aupcdVP/X0401VvmY18DJy1o=" + }, + "v101e": { + "version": "1.0.1e", + "hash": "sha256-908V6Mj/Eao9W7XydtIC7BjXJG6V+WHbdgVBmcacGuM=" + }, + "v101d": { + "version": "1.0.1d", + "hash": "sha256-iKQj+bCKmUBUWDaRuWiBWHVYDhLfdU6IHXz+nxvR9J0=" + }, + "v101c": { + "version": "1.0.1c", + "hash": "sha256-Kp6zzU6LEU65F5wNOITWFljn2Oi/SYR5il9b1I4yXr4=" + }, + "v101b": { + "version": "1.0.1b", + "hash": "sha256-EYe/LVzfCyhrlRv1x3eql4Vc19sk/blgTLVXyLHXNks=" + }, + "v101a": { + "version": "1.0.1a", + "hash": "sha256-00h+CdiRx3LPlGJzo7sMpHR555Qb5tgiJ0Mg58/MNhs=" + }, + "v101": { + "version": "1.0.1", + "hash": "sha256-TZ8KWUqaibKOGgSpUEwEEE9lCO4nrR4O/dF6em277u4=" + }, + "v100t": { + "version": "1.0.0t", + "hash": "sha256-WrbjSMbCqV1FfnoA4KplO/x+tN97JOfJq2MWOsApkJc=" + }, + "v100s": { + "version": "1.0.0s", + "hash": "sha256-+4Ofdbm3GVoKrzB8oGS0NY7bloqVJMvfCp5W1jLyens=" + }, + "v100r": { + "version": "1.0.0r", + "hash": "sha256-ZTizOhuVaByGrIxcxU0ig18PClv0LubfQTjGctfnXxc=" + }, + "v100q": { + "version": "1.0.0q", + "hash": "sha256-Iw3BnqM7h4NsOIwRF6cfjrU5y/i+Qdk8O2yKauKd7Dk=" + }, + "v100p": { + "version": "1.0.0p", + "hash": "sha256-t0XRHxlTFiCi50AhZ9VIRdJT8to+UjwtCVBZWu8QT8g=" + }, + "v100o": { + "version": "1.0.0o", + "hash": "sha256-O29apPqlGQ8pZHzOaJmxRvWWhQPEGImAxDfKbxHYyP0=" + }, + "v100n": { + "version": "1.0.0n", + "hash": "sha256-OJXrWxwroHlAbQgTQNnh3AZPT79ND0HVPO/RVK3vKqI=" + }, + "v100m": { + "version": "1.0.0m", + "hash": "sha256-Ik27+u461zN2ZeJOq1FsZ0RtUIE3mkCy9iPPeAHmct4=" + }, + "v100l": { + "version": "1.0.0l", + "hash": "sha256-KgcuZ9njrpAFSMQ9eTYwW6V2AlvQg9HpH/FNaN7R/ew=" + }, + "v100k": { + "version": "1.0.0k", + "hash": "sha256-KYKy6Wl6hXszbFwbG3tGN0flwdVg8l9qzpU2V5Gx79E=" + }, + "v100j": { + "version": "1.0.0j", + "hash": "sha256-Ym+4/LPrfpZu2+cVU/+ZPRN/boqHsFBRo2leYhCYuK8=" + }, + "v100i": { + "version": "1.0.0i", + "hash": "sha256-VIJi0Vd3xQS+Grm7j6vvHhSj3lSDemWTyPQD3YQ9Xlc=" + }, + "v100h": { + "version": "1.0.0h", + "hash": "sha256-fj38IapX7TPqZzFwBT0ZITIoA7impiSk8NLkwwi9QY0=" + }, + "v100g": { + "version": "1.0.0g", + "hash": "sha256-kFEGoVBefZ98Nu6BQI06o9QarCkalgPQwpDJUwyS/Cw=" + }, + "v100f": { + "version": "1.0.0f", + "hash": "sha256-+vHqsO+F/Ww77KJxw1azG1zIMeLGt/I89nLnq0aA/eE=" + }, + "v100e": { + "version": "1.0.0e", + "hash": "sha256-42HcJ3VzP7hN57W/e1BHeLdyhp6Pe/rAsouTXL9zgPc=" + }, + "v100d": { + "version": "1.0.0d", + "hash": "sha256-klEdHwyqopjbolBCb459XQCycYR4htGtxiQid41jINs=" + }, + "v100c": { + "version": "1.0.0c", + "hash": "sha256-9zGzbePtqjYRea5vRJZoskijYONOMekpAtl26bnWBOs=" + }, + "v100b": { + "version": "1.0.0b", + "hash": "sha256-TntOL7M+4tl8XhQ1YatJXbv8CPCoY+YXoMetyhkBczE=" + }, + "v100a": { + "version": "1.0.0a", + "hash": "sha256-GKm9H8ArjvkN3tNPr6qQibqq/vJ4oZ/E6JwqsNz3D2M=" + }, + "v100": { + "version": "1.0.0", + "hash": "sha256-G7+a/FpiFRIawJQUfQqEF4KU/kw9CiMXMQOP03F7p8o=" + }, + "v098zh": { + "version": "0.9.8zh", + "hash": "sha256-8dnz7RuFqC7PgNDi04nh/aP8qaTboL8Hrb8jHhpeL9Y=" + }, + "v098zg": { + "version": "0.9.8zg", + "hash": "sha256-BlAAYGOZMORxBQR09Tf80o7JNK+S7igteLUkYPvo9YA=" + }, + "v098zf": { + "version": "0.9.8zf", + "hash": "sha256-1SRaKRKJhBkqzFsfwB43Qpt6AcU8rcsmReVGcYswDts=" + }, + "v098ze": { + "version": "0.9.8ze", + "hash": "sha256-7j2mAoJul1tH5Neviie+gljBYIdhlImMWIgeq4FLVbg=" + }, + "v098zd": { + "version": "0.9.8zd", + "hash": "sha256-WSZtz7C+D75hge3q0ESsPtr4O8WJkfJk3PUysB1THuM=" + }, + "v098zc": { + "version": "0.9.8zc", + "hash": "sha256-RhzGlPKecvWcIufqYb9EZxpfwviz/C7qyJcUt76RWIE=" + }, + "v098zb": { + "version": "0.9.8zb", + "hash": "sha256-lQ4imCN94WlxaN69QoYL9B6tYY4MA9yaOlbiMljkNb4=" + }, + "v098za": { + "version": "0.9.8za", + "hash": "sha256-zcuY0PvAJsp5ixeRkzQxAnHTpZNVT/1qWWWbkiL9Tkg=" + }, + "v098y": { + "version": "0.9.8y", + "hash": "sha256-u+zxNJXmEpNuOphgwpwHAUE1ZLepZL93GjV16qhnzuM=" + }, + "v098x": { + "version": "0.9.8x", + "hash": "sha256-fODH8sRRBwtEl+p8pvI+umzvGlbbLobkM/ZZJqe8dJc=" + }, + "v098w": { + "version": "0.9.8w", + "hash": "sha256-U3QR/iz+JJqKW5iz+AmgftX5E7lKIWs8UQ/TUzGORZM=" + }, + "v098v": { + "version": "0.9.8v", + "hash": "sha256-cBrE29J7kjeRmyFLU7wNCOXhRI8tD74cgEeSk9I3mmU=" + }, + "v098u": { + "version": "0.9.8u", + "hash": "sha256-BUjkuRcaYty76F5j2biXo13nGOD+GbP+VgAsj1o7pYc=" + }, + "v098t": { + "version": "0.9.8t", + "hash": "sha256-a5s+9eqULXtcPOI+npKdjuzQkOgfGNh606ry65oiahQ=" + }, + "v098s": { + "version": "0.9.8s", + "hash": "sha256-7cljm+ry1eI52OXJ0v4ZWeZyal1/irhDBhODX0Yj+bo=" + }, + "v098r": { + "version": "0.9.8r", + "hash": "sha256-QrI2j3hrBe076EaDjc4Sa06OPbqPsuDOgxAt8owQL60=" + }, + "v098q": { + "version": "0.9.8q", + "hash": "sha256-1SKz6KK0joO6HhQtcgXqygE1ihN7tY6NZFg1dOaX/9c=" + }, + "v098p": { + "version": "0.9.8p", + "hash": "sha256-smReKiryIfojC172qiuTiKh1gBt0y927Fr5Vf4D0UkI=" + }, + "v098o": { + "version": "0.9.8o", + "hash": "sha256-vvraGsOBmx0xffgZe16C7HaLOdJQ/L74Hisct/Fl1Eg=" + }, + "v098n": { + "version": "0.9.8n", + "hash": "sha256-sBq8KDdrhmUV31jxsATahFMWYpF4PU50d82omwAMHwE=" + }, + "v098m": { + "version": "0.9.8m", + "hash": "sha256-NgNxYCgc9Jd9lk5APSvAaA+8oKf/n2XjMTbXX64Sy1s=" + }, + "v098l": { + "version": "0.9.8l", + "hash": "sha256-7NBU6e7S6cFiC6FSV+b8TYgsmkrqZj0jt2niE43oyRo=" + }, + "v098k": { + "version": "0.9.8k", + "hash": "sha256-fnzU85dBmbcp5uOgrwi9Qnn94DcKESDBo7NRqwkMYQE=" + }, + "v098j": { + "version": "0.9.8j", + "hash": "sha256-cTEkIELb1jH72DQ29CrqF3Xnwy9Yf6StpaAd9MOujos=" + }, + "v098i": { + "version": "0.9.8i", + "hash": "sha256-6Pxfz7cV/+klspgqqcooeDKpNJXX//A/F/ZEnwcycYw=" + }, + "v098h": { + "version": "0.9.8h", + "hash": "sha256-Ik4co67tqKzHLlxIs0hDkEudWFqq201aFVJMJfbGoc4=" + }, + "v098g": { + "version": "0.9.8g", + "hash": "sha256-DiaIaEXelXFsnxubdcDgbp1AddK9yeEVBOql9+6QHPA=" + }, + "v098f": { + "version": "0.9.8f", + "hash": "sha256-vlr9OG9des/wGayvRs2q2JqLQsyc7oXRrbJ3RifzK0I=" + }, + "v098e": { + "version": "0.9.8e", + "hash": "sha256-QU6EKLlfvFFweWX9oxOQSX0FgpA1ZCa/4IS0lGSmA0A=" + }, + "v098d": { + "version": "0.9.8d", + "hash": "sha256-AiGUlEzCDa2RfIbJFtuKTgBQ3y3pG5tnQN3U+y2vF10=" + }, + "v098c": { + "version": "0.9.8c", + "hash": "sha256-iW94MMGSFojyLG/k+z17dRic7915rMpfsMrStZkTkEg=" + }, + "v098b": { + "version": "0.9.8b", + "hash": "sha256-ae/tYnWUL5MS3mHPaarvErBsEvaxDzGWcs4CanVvZcA=" + }, + "v098a": { + "version": "0.9.8a", + "hash": "sha256-MPj2H7Exb0+1FBDHQLSHm44mtBfI2HDkhhRLELgEHHM=" + }, + "v098": { + "version": "0.9.8", + "hash": "sha256-wRVLimpFFodA7MnzjUbfrUDrJ65Rq9doM6GNTJpktR0=" + }, + "v097m": { + "version": "0.9.7m", + "hash": "sha256-yYuXA4h+LdpiF7kUBdDZSIP3xn4gX8TXqBu2kNLhBXI=" + }, + "v097l": { + "version": "0.9.7l", + "hash": "sha256-ftGYWckuHBPp+O1cPeNcPUjkW/8bUv/EOEXMDIVvo9E=" + }, + "v097k": { + "version": "0.9.7k", + "hash": "sha256-m7znXVXAP61H98peZ5D6zKSyA7KMbDNCjRpHHvc+5iI=" + }, + "v097j": { + "version": "0.9.7j", + "hash": "sha256-ZabojDOXy2jRnbtXbs+fnY3EFCOqmsMCXNKeOYcnRGA=" + }, + "v097i": { + "version": "0.9.7i", + "hash": "sha256-L92SNfwIxDU4ddCYF0GUfy+p+INfBNl8MEYcwUqYbdA=" + }, + "v097h": { + "version": "0.9.7h", + "hash": "sha256-tjjDhTEtK9ao8BdsJgW9YTyXjlVdPS14AnDhYIfyDeE=" + }, + "v097g": { + "version": "0.9.7g", + "hash": "sha256-5+GihxQd0b5/S0/t1U7Cn6kEZV7XahOsh65po/x2sGI=" + }, + "v097f": { + "version": "0.9.7f", + "hash": "sha256-Nn2z7nXmMySyCQB0sSqBcCGLps7ziydWOQ0IlBwWJgg=" + }, + "v097e": { + "version": "0.9.7e", + "hash": "sha256-JRIbXb0rgwkpUZMl4DMIbORYYc/y0AANko9IJhseC3w=" + }, + "v097d": { + "version": "0.9.7d", + "hash": "sha256-Bf39B+iBz+tYTneRnt3HTaw/laziOsvqAIwq+Ut2wUc=" + }, + "v097c": { + "version": "0.9.7c", + "hash": "sha256-wLjHD9Z3xIGwL7nXsCDqVJZrf5tOmwtrK+fpAFLlZQY=" + }, + "v097b": { + "version": "0.9.7b", + "hash": "sha256-LhniMMNuwXJzavdugx+aYYaAnDYzVXSPTlFAahEvCDE=" + }, + "v097a": { + "version": "0.9.7a", + "hash": "sha256-1cVx3PPCLCrKa50tL5oILmDgfu45eqNFIxgXfR9QlaI=" + }, + "v097": { + "version": "0.9.7", + "hash": "sha256-CoBRPltBb69HBMbi2/3hG0gmlHm+QX8JIKooNg0lkQA=" + }, + "v096m": { + "version": "0.9.6m", + "hash": "sha256-p3jAe13iSOGrizc0O8xgM/s62VXN1XmV6awKRM6UL9Y=" + }, + "v096l": { + "version": "0.9.6l", + "hash": "sha256-JyPnyLT66JkY89QKbRq53WGATe2Zh/aOAJr+i3B43Zc=" + }, + "v096k": { + "version": "0.9.6k", + "hash": "sha256-eLPwYwnagXHFwGuq/TAh3I/TMNYoxTXQhdWqcagROtE=" + }, + "v096j": { + "version": "0.9.6j", + "hash": "sha256-PPct3ugGSOpFZ7Aw0C1bMdLhCVuDCD/tRO3boYWpkwM=" + }, + "v096i": { + "version": "0.9.6i", + "hash": "sha256-59i6mRAKUQetrEZd6MsVzTX9ScxtwbEnMWmAhUVlg1k=" + }, + "v096": { + "version": "0.9.6", + "hash": "sha256-UhW2cMJnTfmmQlZepopn5tlV2O/MoaobTmpbT9J0Tug=" + } +} \ No newline at end of file diff --git a/nix/opensslshim.nix b/nix/opensslshim.nix new file mode 100644 index 00000000..be0263b8 --- /dev/null +++ b/nix/opensslshim.nix @@ -0,0 +1,23 @@ +{ pkgs, openssl }: +with pkgs; +stdenv.mkDerivation { + name = "OpenSSL Shim"; + src = ../standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni; + + buildInputs = [ + openssl + pkg-config + jdk11_headless + ]; + + buildPhase = '' + make openssl + ''; + + OPENSSL_CFLAGS = "-DECTESTER_OPENSSL_${builtins.replaceStrings ["."] ["_"] openssl.version}=1"; + + installPhase = '' + mkdir --parents $out/lib + cp openssl_provider.so $out/lib/ + ''; +} diff --git a/nix/tomcryptshim.nix b/nix/tomcryptshim.nix new file mode 100644 index 00000000..bcdc9844 --- /dev/null +++ b/nix/tomcryptshim.nix @@ -0,0 +1,26 @@ +{ + pkgs, + libtomcrypt, + libtommath, +}: +with pkgs; +stdenv.mkDerivation { + name = "TomCryptShim"; + src = ../standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni; + + buildInputs = [ + libtommath + libtomcrypt + pkg-config + jdk11_headless + ]; + + buildPhase = '' + make tomcrypt + ''; + + installPhase = '' + mkdir --parents $out/lib + cp tomcrypt_provider.so $out/lib + ''; +} diff --git a/plot_versions.py b/plot_versions.py new file mode 100644 index 00000000..012ec3f6 --- /dev/null +++ b/plot_versions.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python3 + +import argparse +import json + +from collections import defaultdict +from pathlib import Path + +import pandas as pd + +def get_all_versions(library): + with open(f"./nix/{library}_pkg_versions.json", "r") as handle: + versions = json.load(handle) + return versions + +def build_results_to_latex(library): + versions = get_all_versions(library) + lib_results = get_results(library, "lib") + lib_rows = [r"{\color{blue}\cmark}" if lib_results[ver]["success"] else r"{\color{red}\xmark}" for ver in versions.keys()] + + shim_results = get_results(library, "shim") + shim_rows = [r"{\color{blue}\cmark}" if shim_results[ver]["success"] else r"{\color{red}\xmark}" for ver in versions.keys()] + # shim_rows = [shim_results[ver] for ver in versions.keys()] + + cleaned_versions = [v.replace('_', r"{\_}") for v in versions.keys()] + df = pd.DataFrame(dict(Versions=cleaned_versions, Library=lib_rows, Shim=shim_rows)) + # FIXME there should be a translation from `openssl` -> `OpenSSL` etc. + tabledir = Path(f"./build_all/tables") + tabledir.mkdir(parents=True, exist_ok=True) + with open(tabledir / f"{library}.tex", "w") as handle: + handle.write(df.to_latex(index=False, caption=library, label=f"{library}-lib-and-shim-builds")) + +def get_results(library, variant): + with open(f"./build_all/{variant}/{library}.json", "r") as handle: + return json.load(handle) + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("-l", "--library") + # parser.add_argument("-v", "--variant", default="shim", type=valid_build_type) + args = parser.parse_args() + library = args.library + # variant = args.variant + + libraries = [ + "botan", + "cryptopp", + "openssl", + "boringssl", + "gcrypt", + "mbedtls", + "ippcp", + "nettle", + "libressl", + ] + + match library: + case None: + # print("Building all libraries") + # # Build all libraries by default + for lib in libraries: + build_results_to_latex(lib) + # print(f"Library: {lib}") + # for version in get_all_versions(lib): + # result = attempt_build(lib, version, variant) + # save_build_result(lib, variant, version, result) + # print(f"{version}: {result['success']}") + case lib if lib in libraries: + build_results_to_latex(lib) + # print(f"Library: {library}") + # for version in get_all_versions(library): + # result = attempt_build(lib, version, variant) + # save_build_result(lib, variant, version, result) + # print(f"{version}: {result['success']}") + case _: + pass + print(f"Unrecognized library '{library}'. Try one of: {', '.join(libraries)}.") + + +if __name__ == '__main__': + main() diff --git a/standalone/build.gradle.kts b/standalone/build.gradle.kts index 07bf2ab0..c8baa36d 100644 --- a/standalone/build.gradle.kts +++ b/standalone/build.gradle.kts @@ -11,8 +11,10 @@ repositories { } dependencies { - // Fallback to bundled wolfcrypt-jni if the submodule one is not built. - if (file("$rootDir/ext/wolfcrypt-jni/lib/wolfcrypt-jni.jar").exists()) { + // First see if Nix gave us a path, then try the ext build, then the bundled. + if (System.getenv("WOLFCRYPT_LIB_PATH") != null) { + implementation(files(System.getenv("WOLFCRYPT_LIB_PATH") + "/wolfcrypt-jni.jar")); + } else if (file("$rootDir/ext/wolfcrypt-jni/lib/wolfcrypt-jni.jar").exists()) { implementation(files("$rootDir/ext/wolfcrypt-jni/lib/wolfcrypt-jni.jar")) } else { implementation(files("$rootDir/ext/wolfcrypt-jni.jar")) @@ -54,10 +56,6 @@ tasks.named("test") { jvmArgs("-Xmx8G", "-Xms2G") - // Add wolfcrypt JNI lib path to LD_LIBRARY_PATH (as our native library loading does not handle it) - environment( - "LD_LIBRARY_PATH", "$rootDir/ext/wolfcrypt-jni/lib/:" + System.getenv("LD_LIBRARY_PATH") - ) // Add our preload to tests, so they do not need to start another process. environment( "LD_PRELOAD", "$rootDir/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/lib_preload.so" @@ -110,7 +108,7 @@ tasks.register("libs") { if (osdetector.os == "windows") { commandLine("makefile.bat", "/c", libName) } else if (osdetector.os == "linux") { - commandLine("make", "-k", "-B", libName) + commandLine("make", "-f", "Makefile.ext", "-k", "-B", libName) } } diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/BotanLib.java b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/BotanLib.java index c072e842..d3691df3 100644 --- a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/BotanLib.java +++ b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/BotanLib.java @@ -9,7 +9,7 @@ public class BotanLib extends NativeECLibrary { public BotanLib() { - super("Botan", "botan_provider", "botan-2"); + super("Botan", "botan_provider"); } @Override diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/CryptoppLib.java b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/CryptoppLib.java index 25f2de49..4449f992 100644 --- a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/CryptoppLib.java +++ b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/CryptoppLib.java @@ -9,7 +9,7 @@ public class CryptoppLib extends NativeECLibrary { public CryptoppLib() { - super("Crypto++","cryptopp_provider", "cryptopp"); + super("Crypto++","cryptopp_provider"); } @Override diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/GcryptLib.java b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/GcryptLib.java index d1452a9c..3647ab9b 100644 --- a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/GcryptLib.java +++ b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/GcryptLib.java @@ -9,7 +9,7 @@ public class GcryptLib extends NativeECLibrary { public GcryptLib() { - super("libgcrypt","gcrypt_provider", "gcrypt", "gpg-error"); + super("libgcrypt","gcrypt_provider"); } @Override diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/NativeECLibrary.java b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/NativeECLibrary.java index fb4e4309..210a6e98 100644 --- a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/NativeECLibrary.java +++ b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/NativeECLibrary.java @@ -38,25 +38,13 @@ public boolean initialize() { return false; } - /* Load the requirements, if they are bundled, write them in and load them. */ - try { - for (String requirement : requriements) { - if (requirement.endsWith(suffix)) { - /* The requirement is bundled, write it */ - Path reqPath = libReqDir.resolve(requirement); - found = FileUtil.write(ECTesterStandalone.LIB_RESOURCE_DIR + requirement, reqPath); - if (!found) { - return false; - } - System.load(reqPath.toString()); - } else { - System.loadLibrary(requirement); - } + /* Load the requirements, if they are bundled, write them in. */ + for (String requirement : requriements) { + if (requirement.endsWith(suffix)) { + /* The requirement is bundled, write it */ + Path reqPath = libReqDir.resolve(requirement); + FileUtil.write(ECTesterStandalone.LIB_RESOURCE_DIR + requirement, reqPath); } - } catch (UnsatisfiedLinkError ule) { - System.err.println(resource); - ule.printStackTrace(); - return false; } System.load(libPath.toString()); diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/NettleLib.java b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/NettleLib.java index aa90c383..ea9cca36 100644 --- a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/NettleLib.java +++ b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/NettleLib.java @@ -18,7 +18,7 @@ public class NettleLib extends NativeECLibrary { public NettleLib() { - super("Nettle", "nettle_provider", "nettle","hogweed", "gmp"); + super("Nettle", "nettle_provider"); } @Override diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/OpensslLib.java b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/OpensslLib.java index 69c84bc9..036739ca 100644 --- a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/OpensslLib.java +++ b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/OpensslLib.java @@ -8,7 +8,7 @@ */ public class OpensslLib extends NativeECLibrary { public OpensslLib() { - super("OpenSSL", "openssl_provider", "crypto"); + super("OpenSSL", "openssl_provider"); } @Override diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/TomcryptLib.java b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/TomcryptLib.java index e4994517..f1fac47e 100644 --- a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/TomcryptLib.java +++ b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/TomcryptLib.java @@ -9,7 +9,7 @@ public class TomcryptLib extends NativeECLibrary { public TomcryptLib() { - super("tomcrypt","tomcrypt_provider", "tommath", "tomcrypt"); + super("tomcrypt","tomcrypt_provider"); } @Override diff --git a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/Makefile b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/Makefile index f947c780..1393f82c 100644 --- a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/Makefile +++ b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/Makefile @@ -99,57 +99,59 @@ clibs: lib_timing.so lib_csignals.so lib_preload.so lib_prng.so cpplibs: lib_timing.so lib_cppsignals.so lib_preload.so lib_prng.so + # OpenSSL shim openssl: openssl_provider.so openssl_provider.so: openssl.o c_utils.o | clibs - $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. $(shell pkg-config --libs openssl) -l:lib_timing.so -l:lib_csignals.so + $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -Wl,-Bstatic $(shell pkg-config --libs libcrypto) -lcrypto -L. -Wl,-Bdynamic -l:lib_timing.so -l:lib_csignals.so openssl.o: openssl.c - $(CC) $(shell pkg-config --cflags openssl) $(CFLAGS) -c $< + $(CC) $(shell pkg-config --cflags openssl) $(OPENSSL_CFLAGS) $(CFLAGS) -c $< # BoringSSL shim boringssl: boringssl_provider.so -lib_boringssl.so: - cp $(PROJECT_ROOT_PATH)/ext/boringssl/build/crypto/libcrypto.so lib_boringssl.so - -boringssl_provider.so: boringssl.o c_utils.o | clibs lib_boringssl.so - $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. lib_boringssl.so -l:lib_timing.so -l:lib_csignals.so +boringssl_provider.so: boringssl.o c_utils.o | clibs + $(CC) $(CFLAGS) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. -Wl,-Bstatic -l:lib_boringssl.a -Wl,-Bdynamic -l:lib_timing.so -l:lib_csignals.so boringssl.o: boringssl.c - $(CC) -I$(PROJECT_ROOT_PATH)/ext/boringssl/include/ $(CFLAGS) -c $< + $(CC) $(BORINGSSL_CFLAGS) $(CFLAGS) -c $< # libgcrypt shim gcrypt: gcrypt_provider.so gcrypt_provider.so: gcrypt.o c_utils.o | clibs - $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. -pthread -lpthread $(shell libgcrypt-config --libs) -l:lib_timing.so -l:lib_csignals.so + $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. -pthread -lpthread -Wl,-Bstatic $(shell libgcrypt-config --libs) -Wl,-Bdynamic -l:lib_timing.so -l:lib_csignals.so gcrypt.o: gcrypt.c - $(CC) $(shell libgcrypt-config --cflags) $(CFLAGS) -c $< + $(CC) $(shell libgcrypt-config --cflags) $(LIBGCRYPT_CFLAGS) $(CFLAGS) -c $< # Libtomcrypt shim tomcrypt: tomcrypt_provider.so tomcrypt_provider.so: tomcrypt.o c_utils.o | clibs - $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. -ltommath $(shell pkg-config --libs libtomcrypt) -l:lib_timing.so -l:lib_csignals.so + $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. -Wl,-Bstatic $(shell pkg-config --libs libtomcrypt libtommath) -Wl,-Bdynamic -l:lib_timing.so -l:lib_csignals.so tomcrypt.o: tomcrypt.c $(CC) -DLTM_DESC $(shell pkg-config --cflags libtomcrypt) $(CFLAGS) -c $< # Botan-2 shim +BOTAN_NAME := "botan-2" +ifeq ($(shell pkg-config --exists $(BOTAN_NAME); echo $$?),1) + BOTAN_NAME := "botan-3" +endif botan: botan_provider.so botan_provider.so: botan.o cpp_utils.o | cpplibs - $(CXX) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. $(shell pkg-config --libs botan-2) -l:lib_timing.so -l:lib_cppsignals.so + $(CXX) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. -Wl,-Bstatic $(shell pkg-config --libs $(BOTAN_NAME)) -Wl,-Bdynamic -l:lib_timing.so -l:lib_cppsignals.so botan.o: botan.cpp - $(CXX) $(shell pkg-config --cflags botan-2) $(CXXFLAGS) -c $< + $(CXX) $(shell pkg-config --cflags $(BOTAN_NAME)) $(BOTAN_CXXFLAGS) $(CXXFLAGS) -c $< # Crypto++ shim @@ -160,60 +162,51 @@ endif cryptopp: cryptopp_provider.so cryptopp_provider.so: cryptopp.o cpp_utils.o | cpplibs - $(CXX) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. $(shell pkg-config --libs $(CRYPTOPP_NAME)) -l:lib_timing.so -l:lib_cppsignals.so + $(CXX) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. -Wl,-Bstatic $(shell pkg-config --libs $(CRYPTOPP_NAME)) -Wl,-Bdynamic -l:lib_timing.so -l:lib_cppsignals.so cryptopp.o: cryptopp.cpp - $(CXX) $(shell pkg-config --cflags $(CRYPTOPP_NAME)) $(CXXFLAGS) -c $< + $(CXX) $(shell pkg-config --cflags $(CRYPTOPP_NAME)) $(CRYPTOPP_CXXFLAGS) $(CXXFLAGS) -c $< # mbedTLS shim mbedtls: mbedtls_provider.so -lib_mbedtls.so: - cp $(PROJECT_ROOT_PATH)/ext/mbedtls/build/library/libmbedcrypto.so lib_mbedtls.so - -mbedtls_provider.so: mbedtls.o c_utils.o | clibs lib_mbedtls.so - $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. lib_mbedtls.so -l:lib_timing.so -l:lib_csignals.so +mbedtls_provider.so: mbedtls.o c_utils.o | clibs + $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. -Wl,-Bstatic -lmbedcrypto -Wl,-Bdynamic -l:lib_timing.so -l:lib_csignals.so mbedtls.o: mbedtls.c - $(CC) -I$(PROJECT_ROOT_PATH)/ext/mbedtls/build/include/ $(CFLAGS) -c $< + $(CC) $(MBEDTLS_CFLAGS) $(CFLAGS) -c $< # Intel Performance Primitives crypto shim ippcp: ippcp_provider.so -lib_ippcp.so: - cp $(PROJECT_ROOT_PATH)/ext/ipp-crypto/build/.build/RELEASE/lib/libippcp.so lib_ippcp.so - -ippcp_provider.so: ippcp.o c_utils.o | clibs lib_ippcp.so - $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. lib_ippcp.so -l:lib_timing.so -l:lib_csignals.so +ippcp_provider.so: ippcp.o c_utils.o | clibs + $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ $(IPP_CRYPTO_LFLAGS) -Wl,-Bstatic -l:libippcp.a -L. -Wl,-Bdynamic -l:lib_timing.so -l:lib_csignals.so ippcp.o: ippcp.c - $(CC) -I$(PROJECT_ROOT_PATH)/ext/ipp-crypto/build/.build/RELEASE/include/ $(CFLAGS) -c $< + $(CC) $(IPP_CRYPTO_CFLAGS) $(CFLAGS) -c $< # Nettle shim nettle: nettle_provider.so nettle_provider.so: nettle.o c_utils.o | clibs - $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. $(shell pkg-config --libs nettle) -l:lib_timing.so -l:lib_csignals.so $(shell pkg-config --libs hogweed) -lgmp + $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. -Wl,-Bstatic $(shell pkg-config --libs nettle hogweed gmp) \ + -Wl,-Bdynamic -l:lib_timing.so -l:lib_csignals.so nettle.o: nettle.c - $(CC) $(shell pkg-config --cflags nettle) $(shell pkg-config --libs hogweed) -lgmp $(CFLAGS) -c $< + $(CC) -Wl,-static $(shell pkg-config --cflags nettle hogweed gmp) $(NETTLE_CFLAGS) $(CFLAGS) -c $< # LibreSSL shim libressl: libressl_provider.so -lib_libressl.so: - cp $(PROJECT_ROOT_PATH)/ext/libressl/build/crypto/libcrypto.so lib_libressl.so - -libressl_provider.so: libressl.o c_utils.o | clibs lib_libressl.so - $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. lib_libressl.so -l:lib_timing.so -l:lib_csignals.so +libressl_provider.so: libressl.o c_utils.o | clibs + $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. -Wl,-Bstatic $(shell pkg-config --libs libresslcrypto) -Wl,-Bdynamic -l:lib_timing.so -l:lib_csignals.so libressl.o: libressl.c - $(CC) -I$(PROJECT_ROOT_PATH)/ext/libressl/build/include/ $(CFLAGS) -c $< - + $(CC) $(shell pkg-config --cflags libresslcrypto) $(LIBRESSL_CFLAGS) $(CFLAGS) -c $< help: @echo "# This makefile builds the JNI shims necessary to test native libraries." diff --git a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/Makefile.ext b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/Makefile.ext new file mode 100644 index 00000000..948988b7 --- /dev/null +++ b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/Makefile.ext @@ -0,0 +1,241 @@ +############################################################################### +## General CC setup. + +CC?=gcc +CXX?=g++ + +LFLAGS+=-fPIC -shared -L "$(JNI_LIBDIR)" -L "$(JNI_LIBDIR)/server" #-ljsig -ljvm +CFLAGS+=-fPIC -I"$(JNI_INCLUDEDIR)" -I"$(JNI_PLATFORMINCLUDEDIR)" -I. -Wno-deprecated-declarations +CXXFLAGS+=-fPIC -I"$(JNI_INCLUDEDIR)" -I"$(JNI_PLATFORMINCLUDEDIR)" -I. -Wno-deprecated-declarations + +DEBUG ?= 0 +PROJECT_ROOT_PATH ?= ../../../../../../../../../.. + +ifeq ($(DEBUG), 1) + CFLAGS+=-g -O0 -Wall + LFLAGS+=-g + CXXFLAGS+=-g -O0 -Wall +else + CFLAGS+=-O2 + LFLAGS+=-O2 + CXXFLAGS+=-O2 +endif + +############################################################################### +## Java JNI setup. + +ifeq ($(JAVA_HOME),) + ifeq ($(OS),Windows_NT) + which = $(shell where $1) + else + which = $(shell which $1) + endif + JAVAC ?= $(realpath $(call which,javac)) + JAVA_HOME = $(abspath $(dir $(JAVAC))..) +endif + +ifneq ($(JAVA_HOME),) + JNI_INCLUDEDIR ?= $(JAVA_HOME)/include + JNI_LIBDIR ?= $(JAVA_HOME)/lib +endif + +ifeq ($(JNI_INCLUDEDIR),) + $(error "Could not determine JNI include dir. Try specifying either JAVA_HOME or JNI_INCLUDEDIR.") +endif + +ifeq ($(JNI_LIBDIR),) + $(error "Could not determine JNI lib dir. Try specifying either JAVA_HOME or JNI_LIBDIR.") +endif + +TARGETTRIPLET := $(shell $(CC) -dumpmachine) + +ifeq ($(JNI_PLATFORM),) + ifeq ($(findstring mingw,$(TARGETTRIPLET)),mingw) + JNI_PLATFORM:= win32 + else + ifeq ($(findstring linux,$(TARGETTRIPLET)),linux) + JNI_PLATFORM:= linux + endif + endif +endif + +JNI_PLATFORMINCLUDEDIR ?= $(JNI_INCLUDEDIR)/$(JNI_PLATFORM) + +############################################################################### +## Targets. + +all: tomcrypt botan cryptopp openssl boringssl gcrypt mbedtls ippcp nettle libressl + +# Common utils +c_utils.o: c_utils.c + $(CC) $(CFLAGS) -c $< + +lib_timing.so: c_timing.c + $(CC) -o $@ -shared $(CFLAGS) -Wl,-soname,lib_timing.so $< + +prng.o: prng/prng.c + $(CC) $(CFLAGS) -c $< + +lib_prng.so: c_prng.c + $(CC) -o $@ -shared -Wl,-soname,lib_prng.so $(CFLAGS) $< + +c_preload.o: c_preload.c + $(CC) $(CFLAGS) -c $< + +lib_preload.so: c_preload.o prng.o + $(CC) -o $@ -shared $(CFLAGS) -ldl -Wl,-soname,lib_preload.so $^ + +lib_csignals.so: c_signals.c + $(CC) -o $@ -shared $(CFLAGS) -pthread -lpthread -Wl,-soname,lib_csignals.so $< + +lib_cppsignals.so: cpp_signals.cpp + $(CC) -o $@ -shared $(CFLAGS) -pthread -lpthread -Wl,-soname,lib_cppsignals.so $< + +cpp_utils.o: cpp_utils.cpp + $(CXX) $(CXXFLAGS) -c $< + + +clibs: lib_timing.so lib_csignals.so lib_preload.so lib_prng.so + +cpplibs: lib_timing.so lib_cppsignals.so lib_preload.so lib_prng.so + +# OpenSSL shim +openssl: openssl_provider.so + +openssl_provider.so: openssl.o c_utils.o | clibs + $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. $(shell pkg-config --libs openssl) -l:lib_timing.so -l:lib_csignals.so + +openssl.o: openssl.c + $(CC) $(shell pkg-config --cflags openssl) $(CFLAGS) -c $< + + +# BoringSSL shim +boringssl: boringssl_provider.so + +lib_boringssl.so: + cp $(PROJECT_ROOT_PATH)/ext/boringssl/build/crypto/libcrypto.so lib_boringssl.so + patchelf --set-soname lib_boringssl.so lib_boringssl.so + +boringssl_provider.so: boringssl.o c_utils.o | clibs lib_boringssl.so + $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. lib_boringssl.so -l:lib_timing.so -l:lib_csignals.so + +boringssl.o: boringssl.c + $(CC) -I$(PROJECT_ROOT_PATH)/ext/boringssl/include/ $(CFLAGS) -c $< + + +# libgcrypt shim +gcrypt: gcrypt_provider.so + +gcrypt_provider.so: gcrypt.o c_utils.o | clibs + $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. -pthread -lpthread $(shell libgcrypt-config --libs) -l:lib_timing.so -l:lib_csignals.so + +gcrypt.o: gcrypt.c + $(CC) $(shell libgcrypt-config --cflags) $(CFLAGS) -c $< + + +# Libtomcrypt shim +tomcrypt: tomcrypt_provider.so + +tomcrypt_provider.so: tomcrypt.o c_utils.o | clibs + $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. -ltommath $(shell pkg-config --libs libtomcrypt) -l:lib_timing.so -l:lib_csignals.so + +tomcrypt.o: tomcrypt.c + $(CC) -DLTM_DESC $(shell pkg-config --cflags libtomcrypt) $(CFLAGS) -c $< + + +# Botan-2 shim +botan: botan_provider.so + +botan_provider.so: botan.o cpp_utils.o | cpplibs + $(CXX) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. $(shell pkg-config --libs botan-2) -l:lib_timing.so -l:lib_cppsignals.so + +botan.o: botan.cpp + $(CXX) $(shell pkg-config --cflags botan-2) $(CXXFLAGS) -c $< + + +# Crypto++ shim +CRYPTOPP_NAME := "libcrypto++" +ifeq ($(shell pkg-config --exists $(CRYPTOPP_NAME); echo $$?),1) + CRYPTOPP_NAME := "libcryptopp" +endif +cryptopp: cryptopp_provider.so + +cryptopp_provider.so: cryptopp.o cpp_utils.o | cpplibs + $(CXX) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. $(shell pkg-config --libs $(CRYPTOPP_NAME)) -l:lib_timing.so -l:lib_cppsignals.so + +cryptopp.o: cryptopp.cpp + $(CXX) $(shell pkg-config --cflags $(CRYPTOPP_NAME)) $(CXXFLAGS) -c $< + + +# mbedTLS shim +mbedtls: mbedtls_provider.so + +lib_mbedtls.so: + cp $(PROJECT_ROOT_PATH)/ext/mbedtls/build/library/libmbedcrypto.so lib_mbedtls.so + patchelf --set-soname lib_mbedtls.so lib_mbedtls.so + +mbedtls_provider.so: mbedtls.o c_utils.o | clibs lib_mbedtls.so + $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. lib_mbedtls.so -l:lib_timing.so -l:lib_csignals.so + +mbedtls.o: mbedtls.c + $(CC) -I$(PROJECT_ROOT_PATH)/ext/mbedtls/build/include/ $(CFLAGS) -c $< + + +# Intel Performance Primitives crypto shim +ippcp: ippcp_provider.so + +lib_ippcp.so: + cp $(PROJECT_ROOT_PATH)/ext/ipp-crypto/build/.build/RELEASE/lib/libippcp.so lib_ippcp.so + patchelf --set-soname lib_ippcp.so lib_ippcp.so + +ippcp_provider.so: ippcp.o c_utils.o | clibs lib_ippcp.so + $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. lib_ippcp.so -l:lib_timing.so -l:lib_csignals.so + +ippcp.o: ippcp.c + $(CC) -I$(PROJECT_ROOT_PATH)/ext/ipp-crypto/build/.build/RELEASE/include/ $(CFLAGS) -c $< + + +# Nettle shim +nettle: nettle_provider.so + +nettle_provider.so: nettle.o c_utils.o | clibs + $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. $(shell pkg-config --libs nettle) -l:lib_timing.so -l:lib_csignals.so $(shell pkg-config --libs hogweed) -lgmp + +nettle.o: nettle.c + $(CC) $(shell pkg-config --cflags nettle) $(shell pkg-config --libs hogweed) -lgmp $(CFLAGS) -c $< + + +# LibreSSL shim +libressl: libressl_provider.so + +lib_libressl.so: + cp $(PROJECT_ROOT_PATH)/ext/libressl/build/crypto/libcrypto.so lib_libressl.so + patchelf --set-soname lib_libressl.so lib_libressl.so + +libressl_provider.so: libressl.o c_utils.o | clibs lib_libressl.so + $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. lib_libressl.so -l:lib_timing.so -l:lib_csignals.so + +libressl.o: libressl.c + $(CC) -I$(PROJECT_ROOT_PATH)/ext/libressl/build/include/ $(CFLAGS) -c $< + + +help: + @echo "# This makefile builds the JNI shims necessary to test native libraries." + @echo "# Targets:" + @echo " - openssl" + @echo " - boringssl" + @echo " - gcrypt" + @echo " - tomcrypt" + @echo " - botan" + @echo " - cryptopp" + @echo " - mbedtls" + @echo " - ippcp" + @echo " - nettle" + @echo " - libressl" + + +clean: + rm -rf *.o + rm -rf *.so + +.PHONY: all help clean openssl boringssl gcrypt tomcrypt botan cryptopp mbedtls ippcp nettle libressl diff --git a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/boringssl.c b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/boringssl.c index 919cc79c..307d6114 100644 --- a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/boringssl.c +++ b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/boringssl.c @@ -6,6 +6,7 @@ #include #include +#include #include #include #include @@ -569,4 +570,4 @@ JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeSigna EC_KEY_free(pub); EC_GROUP_free(curve); return (result == 1) ? JNI_TRUE : JNI_FALSE; -} \ No newline at end of file +} diff --git a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/c_utils.h b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/c_utils.h index 93a11ed2..ec62a40d 100644 --- a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/c_utils.h +++ b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/c_utils.h @@ -65,4 +65,14 @@ char *biginteger_to_hex(JNIEnv *env, jobject big, jint bytes); } while (0) #define ADD_KPG(env, self, kpg_name, kpg_class) ADD_PROPERTY(env, self, "KeyPairGenerator.", "cz.crcs.ectester.standalone.libs.jni.NativeKeyPairGeneratorSpi$", kpg_name, kpg_class) #define ADD_KA(env, self, ka_name, ka_class) ADD_PROPERTY(env, self, "KeyAgreement.", "cz.crcs.ectester.standalone.libs.jni.NativeKeyAgreementSpi$", ka_name, ka_class) -#define ADD_SIG(env, self, sig_name, sig_class) ADD_PROPERTY(env, self, "Signature.", "cz.crcs.ectester.standalone.libs.jni.NativeSignatureSpi$", sig_name, sig_class) \ No newline at end of file +#define ADD_SIG(env, self, sig_name, sig_class) ADD_PROPERTY(env, self, "Signature.", "cz.crcs.ectester.standalone.libs.jni.NativeSignatureSpi$", sig_name, sig_class) + + +/** + * Version handling. + */ +#define VERSION_GT(lib,a,b,c) ((ECTESTER_##lib##_MAJOR == a && ECTESTER_##lib##_MINOR == b && ECTESTER_##lib##_PATCH > c) || (ECTESTER_##lib##_MAJOR == a && ECTESTER_##lib##_MINOR > b) || (ECTESTER_##lib##_MAJOR > a)) +#define VERSION_EQ(lib,a,b,c) (ECTESTER_##lib##_MAJOR == a && ECTESTER_##lib##_MINOR == b && ECTESTER_##lib##_PATCH == c) +#define VERSION_GE(lib,a,b,c) (VERSION_GT(lib,a,b,c) || VERSION_EQ(lib,a,b,c)) +#define VERSION_LT(lib,a,b,c) !(VERSION_GE(lib,a,b,c)) +#define VERSION_LE(lib,a,b,c) !(VERSION_GT(lib,a,b,c)) diff --git a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/cpp_utils.hpp b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/cpp_utils.hpp index ed26c01e..0e74ee0a 100644 --- a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/cpp_utils.hpp +++ b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/cpp_utils.hpp @@ -47,4 +47,13 @@ void add_ka(JNIEnv *env, const std::string &type, const std::string &klass, jobj /** * Add a SignatureSpi class to this provider. */ -void add_sig(JNIEnv *env, const std::string &type, const std::string &klass, jobject provider, jmethodID put_method); \ No newline at end of file +void add_sig(JNIEnv *env, const std::string &type, const std::string &klass, jobject provider, jmethodID put_method); + +/** + * Version handling. + */ +#define VERSION_GT(lib,a,b,c) ((ECTESTER_##lib##_MAJOR == a && ECTESTER_##lib##_MINOR == b && ECTESTER_##lib##_PATCH > c) || (ECTESTER_##lib##_MAJOR == a && ECTESTER_##lib##_MINOR > b) || (ECTESTER_##lib##_MAJOR > a)) +#define VERSION_EQ(lib,a,b,c) (ECTESTER_##lib##_MAJOR == a && ECTESTER_##lib##_MINOR == b && ECTESTER_##lib##_PATCH == c) +#define VERSION_GE(lib,a,b,c) (VERSION_GT(lib,a,b,c) || VERSION_EQ(lib,a,b,c)) +#define VERSION_LT(lib,a,b,c) !(VERSION_GE(lib,a,b,c)) +#define VERSION_LE(lib,a,b,c) !(VERSION_GT(lib,a,b,c)) diff --git a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/cryptopp.cpp b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/cryptopp.cpp index 1f82f8ac..25e1ba4f 100644 --- a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/cryptopp.cpp +++ b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/cryptopp.cpp @@ -95,6 +95,13 @@ using CryptoPP::Integer; static jclass provider_class; static std::unique_ptr rng = std::make_unique(); +// Fallback to newest +#if !(defined(ECTESTER_CRYPTOPP_MAJOR) && defined(ECTESTER_CRYPTOPP_MINOR) && defined(ECTESTER_CRYPTOPP_PATCH)) +#define ECTESTER_CRYPTOPP_MAJOR 99 +#define ECTESTER_CRYPTOPP_MINOR 99 +#define ECTESTER_CRYPTOPP_PATCH 99 +#endif + JNIEXPORT jobject JNICALL Java_cz_crcs_ectester_standalone_libs_CryptoppLib_createProvider(JNIEnv *env, jobject self) { /* Create the custom provider. */ @@ -115,7 +122,7 @@ JNIEXPORT jobject JNICALL Java_cz_crcs_ectester_standalone_libs_CryptoppLib_crea } jstring name = env->NewStringUTF(lib_name.c_str()); - double version = lib_version / 100; + double version = lib_version / 100.0; jstring info = env->NewStringUTF(ss.str().c_str()); return env->NewObject(provider_class, init, name, version, info); @@ -163,7 +170,11 @@ static std::vector get_all_curve_oids() { } static std::string oid_to_str(const OID &oid) { +#if VERSION_LT(CRYPTOPP, 7, 0, 0) + const std::vector& oid_values = oid.m_values; +#else const std::vector& oid_values = oid.GetValues(); +#endif std::stringstream ss; for (size_t i = 0; i < oid_values.size(); ++i) { if(i != 0) @@ -839,4 +850,4 @@ JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeSigna } // unreachable return JNI_FALSE; -} \ No newline at end of file +} diff --git a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/mbedtls.c b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/mbedtls.c index 8f5e0fb7..8b7fbbb8 100644 --- a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/mbedtls.c +++ b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/mbedtls.c @@ -21,6 +21,32 @@ static mbedtls_entropy_context fixed_entropy; static jclass provider_class; +// Fallback to newest +#if !(defined(ECTESTER_MBEDTLS_MAJOR) && defined(ECTESTER_MBEDTLS_MINOR) && defined(ECTESTER_MBEDTLS_PATCH)) +#define ECTESTER_MBEDTLS_MAJOR 99 +#define ECTESTER_MBEDTLS_MINOR 99 +#define ECTESTER_MBEDTLS_PATCH 99 +#endif + + +#if VERSION_LT(MBEDTLS, 3, 0, 0) +#define MBEDTLS_PRIVATE(member) member +#else +#define MBEDTLS_PRIVATE(member) private_##member +#endif + + +#if VERSION_LT(MBEDTLS, 3, 1, 0) +#define CURVE_GRP_ID(curve_info) curve_info->MBEDTLS_PRIVATE(grp_id) +#define CURVE_NAME(curve_info) curve_info->MBEDTLS_PRIVATE(name) +#define CURVE_BIT_SIZE(curve_info) curve_info->MBEDTLS_PRIVATE(bit_size) +#else +#define CURVE_GRP_ID(curve_info) curve_info->grp_id +#define CURVE_NAME(curve_info) curve_info->name +#define CURVE_BIT_SIZE(curve_info) curve_info->bit_size +#endif + + JNIEXPORT jobject JNICALL Java_cz_crcs_ectester_standalone_libs_MbedTLSLib_createProvider(JNIEnv *env, jobject this) { /* Create the custom provider. */ jclass local_provider_class = (*env)->FindClass(env, "cz/crcs/ectester/standalone/libs/jni/NativeProvider$MbedTLS"); @@ -104,10 +130,10 @@ JNIEXPORT jobject JNICALL Java_cz_crcs_ectester_standalone_libs_MbedTLSLib_getCu jobject result = (*env)->NewObject(env, hash_set_class, hash_set_ctr); for (const mbedtls_ecp_curve_info *curve_info = mbedtls_ecp_curve_list(); - curve_info->grp_id != MBEDTLS_ECP_DP_NONE; + CURVE_GRP_ID(curve_info) != MBEDTLS_ECP_DP_NONE; curve_info++) { - jstring curve_name = (*env)->NewStringUTF(env, curve_info->name); + jstring curve_name = (*env)->NewStringUTF(env, CURVE_NAME(curve_info)); (*env)->CallBooleanMethod(env, result, hash_set_add, curve_name); } return result; @@ -132,7 +158,8 @@ JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_MbedTLSLib_setu mbedtls_entropy_init(&fixed_entropy); // This is NASTY! We are accessing something the library does not want us to. - fixed_entropy.private_source_count = 0; + + fixed_entropy.MBEDTLS_PRIVATE(source_count) = 0; mbedtls_entropy_add_source(&fixed_entropy, fixed_random, NULL, 32, MBEDTLS_ENTROPY_SOURCE_STRONG); mbedtls_ctr_drbg_seed(&ctr_drbg, mbedtls_entropy_func, &fixed_entropy, NULL, 0); @@ -141,9 +168,9 @@ JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_MbedTLSLib_setu JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeKeyPairGeneratorSpi_00024MbedTLS_keysizeSupported(JNIEnv *env, jobject this, jint keysize) { for (const mbedtls_ecp_curve_info *curve_info = mbedtls_ecp_curve_list(); - curve_info->grp_id != MBEDTLS_ECP_DP_NONE; + CURVE_GRP_ID(curve_info) != MBEDTLS_ECP_DP_NONE; curve_info++) { - if (keysize == curve_info->bit_size) { + if (keysize == CURVE_BIT_SIZE(curve_info)) { return JNI_TRUE; } } @@ -170,9 +197,9 @@ JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeKeyPa jstring name = (*env)->CallObjectMethod(env, params, get_name); const char *utf_name = (*env)->GetStringUTFChars(env, name, NULL); for (const mbedtls_ecp_curve_info *curve_info = mbedtls_ecp_curve_list(); - curve_info->grp_id != MBEDTLS_ECP_DP_NONE; + CURVE_GRP_ID(curve_info) != MBEDTLS_ECP_DP_NONE; curve_info++) { - if (strcasecmp(utf_name, curve_info->name) == 0) { + if (strcasecmp(utf_name, CURVE_NAME(curve_info)) == 0) { (*env)->ReleaseStringUTFChars(env, name, utf_name); return JNI_TRUE; } @@ -244,6 +271,13 @@ static void mpi_from_biginteger(JNIEnv* env, jobject biginteger, mbedtls_mpi *mp (*env)->ReleaseByteArrayElements(env, byte_array, byte_data, JNI_ABORT); } +#if (VERSION_LT(MBEDTLS, 3, 5, 0) && VERSION_GE(MBEDTLS, 3, 0, 0)) || VERSION_LT(MBEDTLS, 2, 28, 5) +static inline int mbedtls_ecp_group_a_is_minus_3(const mbedtls_ecp_group *grp) +{ + return grp->A.MBEDTLS_PRIVATE(p) == NULL; +} +#endif + static jobject create_ec_param_spec(JNIEnv *env, const mbedtls_ecp_group *group) { jobject p = biginteger_from_mpi(env, &group->P); jmethodID fp_field_init = (*env)->GetMethodID(env, fp_field_class, "", "(Ljava/math/BigInteger;)V"); @@ -402,7 +436,7 @@ static jobject generate_from_curve(JNIEnv *env, mbedtls_ecp_group *group) { static jobject generate_from_curve_info(JNIEnv *env, const mbedtls_ecp_curve_info *curve) { mbedtls_ecp_group group; mbedtls_ecp_group_init(&group); - mbedtls_ecp_group_load(&group, curve->grp_id); + mbedtls_ecp_group_load(&group, CURVE_GRP_ID(curve)); jobject result = generate_from_curve(env, &group); mbedtls_ecp_group_free(&group); return result; @@ -411,9 +445,9 @@ static jobject generate_from_curve_info(JNIEnv *env, const mbedtls_ecp_curve_inf JNIEXPORT jobject JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeKeyPairGeneratorSpi_00024MbedTLS_generate__ILjava_security_SecureRandom_2(JNIEnv *env, jobject this, jint keysize, jobject random) { const mbedtls_ecp_curve_info *curve = NULL; for (const mbedtls_ecp_curve_info *curve_info = mbedtls_ecp_curve_list(); - curve_info->grp_id != MBEDTLS_ECP_DP_NONE; + CURVE_GRP_ID(curve_info) != MBEDTLS_ECP_DP_NONE; curve_info++) { - if (keysize == curve_info->bit_size) { + if (keysize == CURVE_BIT_SIZE(curve_info)) { curve = curve_info; break; } @@ -443,9 +477,9 @@ JNIEXPORT jobject JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeKeyPai const char *utf_name = (*env)->GetStringUTFChars(env, name, NULL); const mbedtls_ecp_curve_info *curve = NULL; for (const mbedtls_ecp_curve_info *curve_info = mbedtls_ecp_curve_list(); - curve_info->grp_id != MBEDTLS_ECP_DP_NONE; + CURVE_GRP_ID(curve_info) != MBEDTLS_ECP_DP_NONE; curve_info++) { - if (strcasecmp(utf_name, curve_info->name) == 0) { + if (strcasecmp(utf_name, CURVE_NAME(curve_info)) == 0) { (*env)->ReleaseStringUTFChars(env, name, utf_name); curve = curve_info; break; diff --git a/test_building_all.py b/test_building_all.py new file mode 100644 index 00000000..782f8b2e --- /dev/null +++ b/test_building_all.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python + +import argparse +import json +import time + +from pathlib import Path + +import subprocess as sp + +def get_all_versions(library): + with open(f"./nix/{library}_pkg_versions.json", "r") as handle: + versions = json.load(handle) + + return versions + +def attempt_build(library, version, variant): + cmd = ["nix", "build", f".#{variant}.{library}.{version}"] + start = time.time() + + result = {} + try: + sp.check_output(cmd, stderr=sp.STDOUT) + success = True + stderr = "" + except sp.CalledProcessError as e: + stderr = e.output.decode() + success = False + + result['build_time'] = time.time() - start + result['success'] = success + result['stderr'] = stderr.split('\n') if stderr else [] + + return result + +def valid_build_type(value): + value = value.strip() + valid_types = ["shim", "lib"] + if value not in valid_types: + raise argparse.ArgumentTypeError(f"'{value}' not from expected {', '.join(valid_types)}.") + return value + +def save_build_result(library, variant, version, result): + resdir = Path(f"build_all/{variant}") + resdir.mkdir(parents=True, exist_ok=True) + try: + # Update previous results + with open(resdir / f"{library}.json", "r") as handle: + prev_results = json.load(handle) + # NOTE this is not ideal as the JSON decoding problem can be other than just an empty file + except (FileNotFoundError, json.JSONDecodeError): + prev_results = {} + + prev_results[version] = result + with open(resdir / f"{library}.json", "w") as handle: + json.dump(prev_results, handle, indent=4) + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("-l", "--library") + parser.add_argument("-v", "--variant", default="shim", type=valid_build_type) + args = parser.parse_args() + library = args.library + variant = args.variant + + libraries = [ + "botan", + "cryptopp", + "openssl", + "boringssl", + "gcrypt", + "mbedtls", + "ippcp", + "nettle", + "libressl", + ] + + match library: + case None: + print("Building all libraries") + # Build all libraries by default + for lib in libraries: + print(f"Library: {lib}") + for version in get_all_versions(lib): + result = attempt_build(lib, version, variant) + save_build_result(lib, variant, version, result) + print(f"{version}: {result['success']}") + case lib if lib in libraries: + print(f"Library: {library}") + for version in get_all_versions(library): + result = attempt_build(lib, version, variant) + save_build_result(lib, variant, version, result) + print(f"{version}: {result['success']}") + case _: + print(f"Unrecognized library '{library}'. Try one of: {', '.join(libraries)}.") + + +if __name__ == '__main__': + main()