mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2026-10-24 04:09:07 +03:00
234 lines
24 KiB
YAML
234 lines
24 KiB
YAML
name: cryptocb-only Tests
|
|
|
|
# START OF COMMON SECTION
|
|
on:
|
|
push:
|
|
branches: [ 'release/**' ]
|
|
pull_request:
|
|
types: [opened, synchronize, reopened, ready_for_review]
|
|
branches: [ '*' ]
|
|
# Weekday-morning cron (10:00 UTC) seeds the master-scoped ccache that PR runs
|
|
# restore: re-runs --build-only (compile only, no tests) on the
|
|
# default branch. PR runs are read-only (see ccache-setup).
|
|
schedule:
|
|
- cron: '12 10 * * 1-5'
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
permissions:
|
|
contents: read
|
|
# END OF COMMON SECTION
|
|
|
|
jobs:
|
|
# All former runner-per-config matrix entries build on one runner via
|
|
# .github/scripts/parallel-make-check.py (see os-check.yml for the full
|
|
# pattern): each config in its own out-of-tree ("VPATH") build directory
|
|
# off one checkout/autogen, checks on a pool of one-per-CPU worker
|
|
# threads, longest first. bubblewrap gives every test script its own
|
|
# network namespace so concurrent checks cannot collide on TCP/UDP ports
|
|
# (do not set AM_BWRAPPED here - that would disable it).
|
|
make_check:
|
|
name: make check
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
# Split the configs into two VMs (each with 4 cores). The 'all' config
|
|
# below is the long pole and takes roughly 19 min, and the rest of the
|
|
# configs can complete in under that when run in parallel. There is
|
|
# nothing to gain (currently) by adding another VM/shard.
|
|
shard: [1, 2]
|
|
if: ${{ (github.repository_owner == 'wolfssl') && (github.event_name != 'pull_request' || github.event.pull_request.draft == false) }}
|
|
runs-on: ubuntu-24.04
|
|
# Generous for a cold ccache; warm reruns finish in a fraction of this.
|
|
timeout-minutes: 40
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
name: Checkout wolfSSL
|
|
|
|
- name: Install dependencies
|
|
uses: ./.github/actions/install-apt-deps
|
|
with:
|
|
packages: autoconf automake libtool build-essential bubblewrap
|
|
ghcr-debs-tag: ubuntu-24.04-minimal
|
|
|
|
# ccache via the cross-platform composite; the script passes the
|
|
# compiler to configure as CC="ccache gcc" (or a per-config "cc").
|
|
- name: Set up ccache
|
|
uses: ./.github/actions/ccache-setup
|
|
with:
|
|
workflow-id: cryptocb-only
|
|
config-hash: shard-${{ matrix.shard }}
|
|
read-only: ${{ github.event_name == 'pull_request' }}
|
|
max-size: 200M
|
|
|
|
# Ubuntu 24.04 can restrict unprivileged user namespaces via AppArmor,
|
|
# which would stop the test scripts from re-execing under
|
|
# bwrap --unshare-net (their port-isolation mechanism).
|
|
- name: Allow unprivileged user namespaces (for bwrap)
|
|
run: sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0 || true
|
|
|
|
# The JSON below feeds .github/scripts/parallel-make-check.py: a shared
|
|
# "base" of the common configure flags, then one entry per ONLY_* macro
|
|
# whose "configure" (CPPFLAGS) is appended to the base. Add configs
|
|
# as new entries. "minutes" drives longest-first scheduling: set it per
|
|
# config, refreshed from a previous run's step-summary Minutes column.
|
|
# The value in "base" is only the default for a config that omits one.
|
|
- name: Build and make check all configs (parallel, out-of-tree)
|
|
run: |
|
|
cat > "$RUNNER_TEMP/cryptocb-only-configs.json" <<'EOF'
|
|
{"base": {"minutes": 4, "configure": [
|
|
"--enable-swdev", "--enable-cryptocb", "--enable-ecc",
|
|
"--enable-rsa", "--enable-dh", "--enable-aesgcm",
|
|
"--enable-aesccm", "--enable-aesctr", "--enable-aescfb",
|
|
"--enable-aeskeywrap=padding", "--enable-aessiv", "--enable-aesofb",
|
|
"--enable-aesxts", "--enable-camellia", "--enable-chacha",
|
|
"--enable-poly1305", "--enable-sha", "--enable-sha3",
|
|
"--enable-shake128", "--enable-shake256", "--enable-blake2",
|
|
"--enable-blake2s", "--enable-hkdf", "--enable-hashdrbg",
|
|
"--enable-hashflags", "--enable-curve25519", "--enable-ed25519",
|
|
"--enable-curve448", "--enable-ed448", "--enable-mlkem",
|
|
"--enable-dilithium", "--enable-scrypt", "--enable-pwdbased",
|
|
"--enable-pkcs7", "--enable-pkcs12", "--enable-certgen",
|
|
"--enable-certreq", "--enable-certext", "--enable-keygen",
|
|
"--enable-asn=all", "--enable-cmac", "--enable-xchacha",
|
|
"--enable-crl", "--enable-ocsp", "--enable-ocspstapling",
|
|
"--enable-ocspstapling2", "--enable-dtls", "--enable-dtls13",
|
|
"--enable-tls13"]},
|
|
"configs": [
|
|
{"name": "ecc", "minutes": 6.2,
|
|
"comment": "WOLF_CRYPTO_CB_ONLY_ECC: strips software ECC; swdev provides the software path via cryptocb. FP_ECC / ECCSI / SAKKE / deterministic-k test / OPENSSL_EXTRA compat layer all reference stripped primitives directly, so they stay off.",
|
|
"configure": ["CPPFLAGS=-DWOLF_CRYPTO_CB_ONLY_ECC"]},
|
|
{"name": "rsa", "minutes": 6.2,
|
|
"comment": "WOLF_CRYPTO_CB_ONLY_RSA: strips software RSA; swdev provides the software path via cryptocb.",
|
|
"configure": ["CPPFLAGS=-DWOLF_CRYPTO_CB_ONLY_RSA"]},
|
|
{"name": "sha256", "minutes": 6.3,
|
|
"comment": "WOLF_CRYPTO_CB_ONLY_SHA256: strips software SHA-256; swdev provides the software path via cryptocb.",
|
|
"configure": ["CPPFLAGS=-DWOLF_CRYPTO_CB_ONLY_SHA256"]},
|
|
{"name": "sha512", "minutes": 6.4,
|
|
"comment": "WOLF_CRYPTO_CB_ONLY_SHA512: strips software SHA-512 family (SHA-384, SHA-512/224, SHA-512/256, SHA-512); swdev handles every variant explicitly via cryptocb.",
|
|
"configure": ["CPPFLAGS=-DWOLF_CRYPTO_CB_ONLY_SHA512"]},
|
|
{"name": "sha512-via-general", "minutes": 4.0,
|
|
"comment": "Same as sha512 but tells swdev to refuse the SHA-384 / SHA-512/224 / SHA-512/256 variant callbacks (WOLFSSL_SWDEV_SHA512_GENERAL_ONLY). That forces the cryptocb dispatcher's fallback-to-plain-SHA-512-with-truncation path. The sha512 entry above instead has swdev handle every variant end-to-end, so the dispatcher fallback is otherwise uncovered.",
|
|
"configure": ["CPPFLAGS=-DWOLF_CRYPTO_CB_ONLY_SHA512 -DWOLFSSL_SWDEV_SHA512_GENERAL_ONLY"]},
|
|
{"name": "aes", "minutes": 4.0,
|
|
"comment": "WOLF_CRYPTO_CB_ONLY_AES: strips software AES; swdev provides the software path via cryptocb. aeskeywrap=padding covers RFC 3394 + RFC 5649 key wrap via swdev_aes_keywrap.",
|
|
"configure": ["CPPFLAGS=-DWOLF_CRYPTO_CB_ONLY_AES"]},
|
|
{"name": "aes-gcm-via-ecb", "minutes": 4.1,
|
|
"comment": "Same as aes but tells swdev to refuse AES-GCM (SWDEV_AES_ONLYECB). That forces the parent's CB_ONLY_AES host-side GCM software path: GHASH runs on the host while AES-CTR blocks dispatch back through cryptocb ECB. The aes entry instead has swdev handle GCM end-to-end, so the host-side GCM path is otherwise uncovered.",
|
|
"configure": ["CPPFLAGS=-DWOLF_CRYPTO_CB_ONLY_AES -DSWDEV_AES_ONLYECB"]},
|
|
{"name": "ed25519", "minutes": 4.0,
|
|
"comment": "WOLF_CRYPTO_CB_ONLY_ED25519: strips software Ed25519 (keygen/sign/verify/make-pub/check-key) including the ge/fe curve math and tables; swdev provides the software path via cryptocb. Streaming verify has no callback path and is left disabled.",
|
|
"configure": ["CPPFLAGS=-DWOLF_CRYPTO_CB_ONLY_ED25519"]},
|
|
{"name": "ed25519-no-curve25519", "minutes": 4.0,
|
|
"comment": "Same as ed25519 but with curve25519 off. curve25519 is the only other user of the ge/fe math, so without it the strip is complete and nothing must pull the math back in. The ed25519 entry above keeps curve25519 enabled, which leaves fe_operations.c compiled and would hide such a regression at link time.",
|
|
"configure": ["--disable-curve25519", "CPPFLAGS=-DWOLF_CRYPTO_CB_ONLY_ED25519"]},
|
|
{"name": "curve25519", "minutes": 3.6,
|
|
"comment": "WOLF_CRYPTO_CB_ONLY_CURVE25519: strips software X25519 (keygen/shared-secret); swdev provides the software path via cryptocb. Nonblock and async X25519 have no callback path and are left disabled.",
|
|
"configure": ["CPPFLAGS=-DWOLF_CRYPTO_CB_ONLY_CURVE25519"]},
|
|
{"name": "curve448", "minutes": 4.0,
|
|
"comment": "WOLF_CRYPTO_CB_ONLY_CURVE448: strips software X448 (keygen/shared-secret/make-pub/generic) including the fe448 field math; swdev provides the software path via cryptocb.",
|
|
"configure": ["CPPFLAGS=-DWOLF_CRYPTO_CB_ONLY_CURVE448"]},
|
|
{"name": "curve448-no-ed448", "minutes": 4.0,
|
|
"comment": "Same as curve448 but with ed448 off. ed448 is the only other user of the fe448 math, so without it the strip is complete and nothing must pull the math back in. The curve448 entry above keeps ed448 enabled, which leaves fe_448.c compiled and would hide such a regression at link time.",
|
|
"configure": ["--disable-ed448", "CPPFLAGS=-DWOLF_CRYPTO_CB_ONLY_CURVE448"]},
|
|
{"name": "curve448-onlycb-no-swdev", "minutes": 0.7,
|
|
"comment": "CB_ONLY_CURVE448 without swdev: runs curve448_onlycb_test, the only coverage of the cb-handled/cb-delegated (exampleVar 99/1) dispatch incl. make_pub/generic. cryptonly drops TLS so make check needs no software X448 provider.",
|
|
"configure": ["--disable-swdev", "--enable-cryptonly", "CPPFLAGS=-DWOLF_CRYPTO_CB_ONLY_CURVE448"]},
|
|
{"name": "seed-onlycb-no-swdev", "minutes": 3,
|
|
"comment": "NO_DEV_RANDOM with cryptocb selects the callback-only wc_GenerateSeed(), and the other seed sources are switched off, so the crypto callback is the only way to seed a DRBG. WOLF_CRYPTO_CB_SEED_ONLY_TEST is a test.c switch: it registers a seed-only device and runs the whole suite through it, which fails any RNG set up without a devId. No swdev: its WOLF_CRYPTO_CB_FIND would resolve INVALID_DEVID to a device and hide exactly that. cryptonly because the unit tests and examples register no seed device. rng-extras and rng-bank pull in the bank, next-seed and pool seed paths.",
|
|
"configure": ["--disable-swdev", "--enable-cryptonly", "--enable-rng-extras", "--enable-rng-bank", "--disable-intelrand", "--disable-amdrand", "--disable-entropy-memuse", "CPPFLAGS=-DNO_DEV_RANDOM -DWOLF_CRYPTO_CB_SEED_ONLY_TEST"]},
|
|
{"name": "no-hashdrbg-cb-rng", "minutes": 4,
|
|
"comment": "No DRBG, so the crypto callback is the only generator, and wc_RNG_GenerateBlock() hands every request to it. The test callback answers a no-DRBG RNG request by drawing a seed, which lands back in its own fake seed, and RSA keygen in the crypto callback test runs on that fake. This entry catches a fake seed that repeats prime candidates (the byte counter from #11517 wedged keygen at 100% CPU). No DH because wc_DhSetKey() creates an RNG with INVALID_DEVID for its primality check, which has no generator in this build and fails before the crypto callback test runs. cryptonly because TLS creates RNGs the same way. No swdev so its device-find hook does not change devId lookups. The base's --enable-hashdrbg and --enable-dh are overridden by the later disables.",
|
|
"configure": ["--disable-swdev", "--enable-cryptonly", "--disable-hashdrbg", "--disable-dh"]},
|
|
{"name": "slhdsa", "minutes": 18,
|
|
"comment": "WOLF_CRYPTO_CB_ONLY_SLHDSA: strips software SLH-DSA (hashes, WOTS+, XMSS, hypertree, FORS); swdev provides the software path via cryptocb. slhdsa is enabled per-entry rather than in the base because signing the 's' parameter sets is slow and only this entry and 'all' need it.",
|
|
"configure": ["--enable-slhdsa=yes,sha2", "CPPFLAGS=-DWOLF_CRYPTO_CB_ONLY_SLHDSA"]},
|
|
{"name": "slhdsa-verify-only", "minutes": 2,
|
|
"comment": "Same strip with signing compiled out (WOLFSSL_SLHDSA_VERIFY_ONLY). swdev has to build against the verify-only header, which omits key generation, signing and CheckKey, and the dispatcher has to stop offering those operations. Verification alone is quick, so this costs little beside the 'slhdsa' entry above.",
|
|
"configure": ["--enable-slhdsa=yes,sha2,verify-only", "CPPFLAGS=-DWOLF_CRYPTO_CB_ONLY_SLHDSA"]},
|
|
{"name": "falcon", "minutes": 4.0,
|
|
"comment": "WOLF_CRYPTO_CB_ONLY_FALCON: strips the native Falcon core (key generation, signing, verification, the key check and the fpr/FFT backends); swdev provides the software path via cryptocb. Key import/export, the size queries and the DER paths stay. Falcon is not standardized, so it needs --enable-experimental.",
|
|
"configure": ["--enable-falcon", "--enable-experimental", "CPPFLAGS=-DWOLF_CRYPTO_CB_ONLY_FALCON"]},
|
|
{"name": "falcon-onlycb-no-swdev", "minutes": 1.0,
|
|
"comment": "The 'falcon' strip without swdev, so no device serves Falcon: builds the Falcon key API that a callback-only build keeps, including its TLS and ASN callers, and runs the tests that need no device, including the NO_VALID_DEVID refusals.",
|
|
"configure": ["--disable-swdev", "--enable-falcon", "--enable-experimental", "CPPFLAGS=-DWOLF_CRYPTO_CB_ONLY_FALCON"]},
|
|
{"name": "mlkem", "minutes": 4.0,
|
|
"comment": "WOLF_CRYPTO_CB_ONLY_MLKEM: strips the ML-KEM lattice math (key generation, encapsulation, decapsulation, the NTT, matrix generation, noise sampling and compression, plus the x86 and ARM assembly); swdev provides the software path via cryptocb, including the ML-KEM key shares TLS 1.3 offers by default. The encode/decode helpers and the hash/PRF object lifecycle stay, because a callback that returns key material needs them. Key generation and encapsulation from caller-supplied randomness have no callback, so the KAT tests are skipped.",
|
|
"configure": ["CPPFLAGS=-DWOLF_CRYPTO_CB_ONLY_MLKEM"]},
|
|
{"name": "mldsa", "minutes": 4.0,
|
|
"comment": "WOLF_CRYPTO_CB_ONLY_MLDSA: strips the software ML-DSA core (NTT, matrix expansion, rejection sampling, the sign/verify workers and the x86 assembly); key import/export, the size queries and the DER paths stay, and the cached matrix/vector fields stay in the key struct so its layout is unchanged. The in-tree cryptocb test registers a callback-only ML-DSA device and drives key generation, signing, verifying and the private-key check through it, so the successful dispatch path is covered and not just the no-device refusal.",
|
|
"configure": ["CPPFLAGS=-DWOLF_CRYPTO_CB_ONLY_MLDSA"]},
|
|
{"name": "mldsa-verify-only", "minutes": 4.0,
|
|
"comment": "WOLF_CRYPTO_CB_ONLY_MLDSA against a verify-only ML-DSA build. That combination drops WOLFSSL_MLDSA_CHECK_KEY and the signing entry points, so it catches a callback-only path that assumes an API which this configuration does not compile.",
|
|
"configure": ["--enable-mldsa=verify-only", "CPPFLAGS=-DWOLF_CRYPTO_CB_ONLY_MLDSA"]},
|
|
{"name": "mldsa-no-verify", "minutes": 4.0,
|
|
"comment": "WOLF_CRYPTO_CB_ONLY_MLDSA against a sign-only ML-DSA build (WOLFSSL_MLDSA_NO_VERIFY), the mirror of the verify-only entry.",
|
|
"configure": ["--enable-mldsa=sign", "CPPFLAGS=-DWOLF_CRYPTO_CB_ONLY_MLDSA"]},
|
|
{"name": "lms", "minutes": 3,
|
|
"comment": "WOLF_CRYPTO_CB_ONLY_LMS: strips the software LMS/HSS core (wc_lms_impl.c in full); swdev provides the software path via cryptocb. The private key state stays with the caller's read/write callbacks, so the stateful signing path is exercised end to end.",
|
|
"configure": ["--enable-lms", "CPPFLAGS=-DWOLF_CRYPTO_CB_ONLY_LMS"]},
|
|
{"name": "xmss", "minutes": 3,
|
|
"comment": "WOLF_CRYPTO_CB_ONLY_XMSS: strips the software XMSS/XMSS^MT core (wc_xmss_impl.c in full); swdev provides the software path via cryptocb. Parameter parsing and key sizing stay in wc_xmss.c because the public API needs them with the core gone.",
|
|
"configure": ["--enable-xmss", "CPPFLAGS=-DWOLF_CRYPTO_CB_ONLY_XMSS"]},
|
|
{"name": "lms-xmss", "minutes": 4,
|
|
"comment": "Both stateful-signature cores stripped together, which is the combination wolfHSM presents: it supports LMS and XMSS on the same device. WOLF_CRYPTO_CB_FREE is on so swdev releases each device-resident key when the caller frees it, rather than only in its cleanup sweep.",
|
|
"configure": ["--enable-lms", "--enable-xmss", "--enable-cryptocbutils=free", "CPPFLAGS=-DWOLF_CRYPTO_CB_ONLY_LMS -DWOLF_CRYPTO_CB_ONLY_XMSS"]},
|
|
{"name": "lms-xmss-verify-only", "minutes": 2,
|
|
"comment": "Both stripped with signing compiled out (WOLFSSL_LMS_VERIFY_ONLY, WOLFSSL_XMSS_VERIFY_ONLY). swdev has to drop its keygen, sign and signatures-left handlers and keep only verification.",
|
|
"configure": ["--enable-lms=verify-only", "--enable-xmss=verify-only", "CPPFLAGS=-DWOLF_CRYPTO_CB_ONLY_LMS -DWOLF_CRYPTO_CB_ONLY_XMSS"]},
|
|
{"name": "lms-xmss-onlycb-no-swdev", "minutes": 4.0,
|
|
"comment": "Both stripped without swdev, so nothing serves a key that has no device or whose device declines: test_wc_LmsKey_cb_only_no_device and test_wc_XmssKey_cb_only_no_device check that those operations, and Reload, fail with NO_VALID_DEVID. The tests that need a software LMS/XMSS are skipped. cryptocbutils=free builds the device check before the free dispatch, which swdev's WOLF_CRYPTO_CB_FIND compiles out.",
|
|
"configure": ["--disable-swdev", "--enable-lms", "--enable-xmss", "--enable-cryptocbutils=free", "CPPFLAGS=-DWOLF_CRYPTO_CB_ONLY_LMS -DWOLF_CRYPTO_CB_ONLY_XMSS"]},
|
|
{"name": "lms-xmss-swdev", "minutes": 4.0,
|
|
"comment": "LMS and XMSS with the software cores kept. swdev's WOLF_CRYPTO_CB_FIND still sends a key bound to no device to swdev, which keeps the private key, so lms_test checks that wc_LmsKey_GetKid fails rather than return a key ID that is not in memory.",
|
|
"configure": ["--enable-lms", "--enable-xmss"]},
|
|
{"name": "lms-xmss-only-pk", "minutes": 2.0,
|
|
"comment": "LMS and XMSS stripped as the only public key algorithms, so they alone turn on swdev's public key dispatch. Every other entry also has RSA or ECC, which would hide a missing LMS/XMSS term in that guard: the build only warns and LMS/XMSS operations fail with NO_VALID_DEVID. cryptonly because TLS needs another public key algorithm; the base's ASN, PKCS#7, OCSP and CRL options need RSA or ECC, so they are off too.",
|
|
"configure": ["--enable-cryptonly", "--disable-rsa", "--disable-ecc", "--disable-dh", "--disable-curve25519", "--disable-ed25519", "--disable-curve448", "--disable-ed448", "--disable-mlkem", "--disable-dilithium", "--disable-dtls", "--disable-dtls13", "--disable-asn", "--disable-pkcs7", "--disable-ocsp", "--disable-ocspstapling", "--disable-ocspstapling2", "--disable-crl", "--enable-lms", "--enable-xmss", "CPPFLAGS=-DWOLF_CRYPTO_CB_ONLY_LMS -DWOLF_CRYPTO_CB_ONLY_XMSS"]},
|
|
{"name": "frodokem", "minutes": 4.0,
|
|
"comment": "WOLF_CRYPTO_CB_ONLY_FRODOKEM: strips the FrodoKEM lattice math (key generation, encapsulation, decapsulation, matrix-A generation, noise sampling, the matrix multiplies and pack/unpack, plus the x86 and ARM assembly); swdev provides the software path via cryptocb. The matrix store/load and one-shot hash helpers stay, because the key encode/decode API a callback needs still uses them. FrodoKEM is not wired into TLS, so nothing else has to be turned off; it does need --enable-experimental, which the shared base does not set.",
|
|
"configure": ["--enable-experimental", "--enable-frodokem", "CPPFLAGS=-DWOLF_CRYPTO_CB_ONLY_FRODOKEM"]},
|
|
{"name": "frodokem-onlycb-no-swdev", "minutes": 1.0,
|
|
"comment": "CB_ONLY_FRODOKEM without swdev: runs frodokem_onlycb_test, the only coverage of the cb-handled/cb-delegated (exampleVar 99/1) dispatch, and the NO_VALID_DEVID refusals when no device serves the key. cryptonly keeps make check short; FrodoKEM is not used by TLS.",
|
|
"configure": ["--disable-swdev", "--enable-cryptonly", "--enable-experimental", "--enable-frodokem", "CPPFLAGS=-DWOLF_CRYPTO_CB_ONLY_FRODOKEM"]},
|
|
{"name": "shake-xof", "minutes": 4.0,
|
|
"comment": "WOLF_CRYPTO_CB_SHAKE_XOF: swdev handles SHAKE absorb and squeeze. No ONLY_* strip exists for SHAKE, so software SHAKE stays in. ML-KEM and ML-DSA reach swdev_shake through WOLF_CRYPTO_CB_FIND, and cryptocb_test runs shake_cb_xof_test.",
|
|
"configure": ["CPPFLAGS=-DWOLF_CRYPTO_CB_SHAKE_XOF"]},
|
|
{"name": "all", "minutes": 22,
|
|
"comment": "All thirteen ONLY_* macros that can share a build: every supported software primitive is stripped and dispatched through cryptocb. Catches any cross-algorithm call that a single-strip entry would still resolve via the remaining software paths. MLDSA is not here because this entry also enables SLH-DSA, and the TLS 1.3 suite then runs an SLH-DSA root with an ML-DSA-44 entity certificate: with the ML-DSA software path gone that handshake needs a registered device, which swdev does not provide yet. The all-mldsa entry below covers MLDSA alongside the rest.",
|
|
"configure": ["--enable-slhdsa=yes,sha2", "--enable-lms", "--enable-xmss", "--enable-experimental", "--enable-frodokem", "CPPFLAGS=-DWOLF_CRYPTO_CB_ONLY_ECC -DWOLF_CRYPTO_CB_ONLY_RSA -DWOLF_CRYPTO_CB_ONLY_SHA256 -DWOLF_CRYPTO_CB_ONLY_SHA512 -DWOLF_CRYPTO_CB_ONLY_AES -DWOLF_CRYPTO_CB_ONLY_ED25519 -DWOLF_CRYPTO_CB_ONLY_CURVE25519 -DWOLF_CRYPTO_CB_ONLY_CURVE448 -DWOLF_CRYPTO_CB_ONLY_SLHDSA -DWOLF_CRYPTO_CB_ONLY_MLKEM -DWOLF_CRYPTO_CB_ONLY_LMS -DWOLF_CRYPTO_CB_ONLY_XMSS -DWOLF_CRYPTO_CB_ONLY_FRODOKEM"]},
|
|
{"name": "all-mldsa", "minutes": 7.5,
|
|
"comment": "The 'all' set with MLDSA in place of SLHDSA, so a stripped ML-DSA still meets the other stripped primitives. SLH-DSA is left out because only that combination pulls in the ML-DSA-44 entity certificate test described above.",
|
|
"configure": ["--enable-lms", "--enable-xmss", "--enable-experimental", "--enable-frodokem", "CPPFLAGS=-DWOLF_CRYPTO_CB_ONLY_ECC -DWOLF_CRYPTO_CB_ONLY_RSA -DWOLF_CRYPTO_CB_ONLY_SHA256 -DWOLF_CRYPTO_CB_ONLY_SHA512 -DWOLF_CRYPTO_CB_ONLY_AES -DWOLF_CRYPTO_CB_ONLY_ED25519 -DWOLF_CRYPTO_CB_ONLY_CURVE25519 -DWOLF_CRYPTO_CB_ONLY_CURVE448 -DWOLF_CRYPTO_CB_ONLY_MLKEM -DWOLF_CRYPTO_CB_ONLY_MLDSA -DWOLF_CRYPTO_CB_ONLY_LMS -DWOLF_CRYPTO_CB_ONLY_XMSS -DWOLF_CRYPTO_CB_ONLY_FRODOKEM"]},
|
|
{"name": "only", "minutes": 6.0,
|
|
"comment": "Same coverage as the \"all\" entry above, but driven by ./configure --enable-cryptocb=only instead of a hand-written CPPFLAGS list. This is the regression test for the configure option: it must emit exactly the WOLF_CRYPTO_CB_ONLY_* set that \"all\" passes by hand, for the algorithms enabled here. The \"all\" entry deliberately stays on explicit CPPFLAGS so a bug in the configure logic cannot silently weaken both. Note the base already passes --enable-cryptocb; this entry's flags are appended after the base, so --enable-cryptocb=only wins.",
|
|
"configure": ["--enable-lms", "--enable-xmss", "--enable-cryptocb=only"]},
|
|
{"name": "setkey", "minutes": 4.0,
|
|
"comment": "--enable-cryptocbutils enables all cryptocb utilities (COPY/FREE/SETKEY/EXPORT_KEY/KEYSTORE); WOLF_CRYPTO_CB_SETKEY is what lets test_wc_CryptoCb_TLS_CBC_HMAC run -- a TLS 1.2 CBC MtE handshake whose record HMAC is computed by a key-owning callback, the only config exercising the TLS_hmac update/final routing. No ONLY_* strip, so the device's software HMAC keeps its providers.",
|
|
"configure": ["--enable-cryptocbutils"]}
|
|
]}
|
|
EOF
|
|
.github/scripts/parallel-make-check.py \
|
|
${{ github.event_name == 'schedule' && '--build-only' || '' }} \
|
|
--shard "${{ matrix.shard }}/${{ strategy.job-total }}" \
|
|
--private-dir=certs \
|
|
"$RUNNER_TEMP/cryptocb-only-configs.json"
|
|
|
|
- name: ccache stats
|
|
if: always()
|
|
run: ccache -s || true
|
|
|
|
- name: Upload logs on failure
|
|
if: failure()
|
|
uses: actions/upload-artifact@v6
|
|
with:
|
|
retention-days: 7
|
|
name: cryptocb-only-logs-${{ matrix.shard }}
|
|
path: |
|
|
build-*/make-check.log
|
|
build-*/test-suite.log
|
|
build-*/config.log
|
|
if-no-files-found: ignore
|