HSM · Cryptographic Infrastructure — Custody & Signing
HSM Cryptographic Key Sharding Enclave
A C++20 threshold-signing library: any t of n share holders produce a standard Ed25519 signature (FROST, RFC 9591), and its distributed key generation never assembles the full key.
Maturity. Early-stage and pre-certification. The repository calls itself a Phase 0 foundation with Phase 1 and 2 work in progress, and is a library rather than a deployable service: the protocols are tested with all parties in one process, and there is no networking layer, node runtime or policy engine yet. An internal review by Vlaander (7 October 2026) found four high-severity issues; all four are fixed in the source you receive (8 October 2026), and two medium and eight low findings remain open. Nonce-log rollback protection is only as strong as the monotonic counter the operator plugs in: the one shipped is in memory and for tests only, so production needs an SEV-SNP or TPM counter or a quorum-replicated one. Attestation runs on a software root of trust only. Do not use it to custody real assets until an external cryptographic audit is done.
Overview
A C++20 library for threshold signing, so that no single machine needs to hold a whole signing key. The main path is FROST(Ed25519) per RFC 9591: any t of n share holders can produce a signature, and fewer cannot. Its implementation reproduces the RFC's official test vector byte for byte.
Keys can be created by a no-dealer distributed key generation (Pedersen DKG with Feldman commitments and proofs of knowledge), on which the full private key is never formed by any participant. A trusted-dealer key generation, which does form the key briefly, also ships for testing and must be kept out of production builds.
The signatures are ordinary Ed25519 signatures, and the tests check them with libsodium's standard verifier. A second, less mature path does threshold ECDSA on secp256k1 (semi-honest GG18 with Paillier), checked with OpenSSL's verifier.
It is designed to run inside attested enclaves. The attestation-verification engine, including AMD SEV-SNP report checks, is implemented and tested with a software root of trust; reading real reports from SEV-SNP hardware and fetching AMD's certificate chain are stubbed. Intel SGX and cloud confidential VMs could be added through the backend interface but are not implemented.
The problem
A signing key held whole in one place, even briefly and even inside a hardware security module, can be taken by whoever compromises that place: an insider, a compromised host or a side channel. Conventional multi-signature setups split authorisation across several complete keys rather than splitting one key. Threshold signing splits a single key into shares so that an attacker has to compromise a quorum of separate machines.
What it does
- FROST(Ed25519) threshold signing per RFC 9591, with all curve and scalar arithmetic delegated to libsodium's constant-time Ed25519 functions; the signer checks the coordinator's commitment list as RFC 9591 requires.
- Identifiable abort for FROST: an invalid signature share is detected and the participant who sent it is named.
- Distributed key generation in which the full key is never formed (a trusted-dealer path also ships, for testing).
- Proactive share refresh: shares are re-randomised without changing the group public key, and a quorum mixing old and new shares does not verify. It is a library call; scheduling it is the operator's job.
- Single-use nonce vault backed by a crash-safe, sealed, append-only log, with rollback detection anchored to a pluggable monotonic counter.
- Attested peer sessions: messages are signed by a key bound into the sender's attestation quote, a confidential mode encrypts secret payloads such as DKG round-two shares to the recipient, and peers with an untrusted root, a disallowed measurement or an out-of-date TCB are refused (tested with a software root of trust).
- AMD SEV-SNP report parsing and ECDSA P-384 signature verification, with per-component TCB checks and rejection of debug-enabled guests and VMPL other than 0.
- Threshold ECDSA on secp256k1: semi-honest GG18 with Paillier, not constant-time, n-of-n key generation without a dealer and t-of-n key generation with a trusted dealer only.
- Assurance tooling in the repository: known-answer tests, adversarial tests, five libFuzzer targets, ASan, UBSan and TSan builds, ctgrind and dudect constant-time gates on the project's own comparison and select helpers, cppcheck, and a GitHub Actions workflow configured to run them (Vlaander has not run it on GitHub).
Performance
No benchmark figuresHSM publishes no benchmark figure, so its value rests on the assurance and scope below rather than on a number to reproduce.
Value in your own metrics
- Key exposure
- On the distributed-key-generation path no participant ever holds the whole key, and an attacker needs a quorum of shares to sign.
- Signature format
- FROST output is a standard Ed25519 signature, so existing Ed25519 verifiers accept it without changes.
- Audit material
- Known-answer, adversarial, fuzz, sanitizer and constant-time gates ship with the source, so your auditors can rerun them.
Assurance and build
- Language
- C++20, built with CMake; depends on system libsodium and OpenSSL libcrypto, with no vendored third-party code
- Cryptographic posture
- FROST(Ed25519) per RFC 9591 on libsodium's constant-time primitives; threshold ECDSA is semi-honest and not constant-time
- Attestation
- Verification engine implemented and tested with a software root of trust; SEV-SNP report retrieval and AMD certificate-chain fetching are stubbed
- Backends
- One software backend; SGX and confidential VMs could be added through the interface but are not implemented
- Tests
- 107 test cases in five suites; on 7 October 2026 Vlaander ran them on the delivered code with g++ 14 and with clang 16 under ASan, UBSan and TSan, all passing (shared 4-vCPU AMD EPYC 7763 Codespace); on 8 October 2026 the delivered archive built and passed all 7 CTest entries
- Fuzzing
- Five libFuzzer targets, 8 minutes each with ASan on 7 October 2026: 47.5 million executions with no crashes, leaks or timeouts. Coverage is shallow, and the DKG and nonce-log code are not fuzzed
- Internal review
- Vlaander quality gate, 7 October 2026: 0 critical findings, 4 high (all fixed in the delivered source), 4 medium (2 fixed; open are unbound envelope sender and session identifiers, and signing speed), 8 low (open). In a head-to-head on the same shared Codespace, a full 2-of-3 FROST session took about 3 times as long as the Zcash Foundation's frost-ed25519 2.1.0
- Supply chain
- A script that generates a CycloneDX software bill of materials is included; no bill of materials file ships with the source
- Licence
- Proprietary. The LICENSE file and the SPDX header in every source file (LicenseRef-Vlaander-Proprietary) state that ownership passes to the single buyer under Vlaander's terms of sale; no open-source licence applies
- Certification status
- None. FIPS 140-3 and Common Criteria appear only as roadmap items
Releases are not yet cryptographically signed, and no release manifests or external audit summaries are published. Check the source tarball you receive against its SHA-256 in Schedule 1 of your Sale and Assignment Agreement, which you see before you sign.
Scope and maturity
What is real today, what is deliberately excluded, and what is pending — published unprompted.
Included today
- FROST(Ed25519) threshold signing, no-dealer distributed key generation, proactive share refresh and identifiable abort, as a tested C++20 library.
- The single-use nonce vault with a crash-safe sealed log and rollback detection (needs a production monotonic counter).
- Attestation verification, attested and encrypted peer messages, and SEV-SNP report verification, all with a software root of trust.
- The test, fuzz, sanitizer, constant-time and static-analysis gates, with a CI workflow.
Explicitly scoped out
- Networking, a node runtime and multi-host deployment: the protocols are driven in one process in the tests.
- The policy engine and the generic threshold-signer interfaces, which are declared but not implemented.
- Tamper-evident audit logging, which the threat model sets as a goal but the code does not implement.
Pending
- A production monotonic counter (SEV-SNP or TPM, or quorum-replicated) behind nonce-log rollback protection; the shipped counter is for tests only.
- Binding the participant id, recipient and session into signed envelopes (open review finding).
- Faster FROST signing and share verification: binding factors are recomputed per participant, and constant-time multiplication is used on public data (open review finding).
- Malicious-secure, constant-time threshold ECDSA (CGGMP21) and a no-dealer key generation for secp256k1.
- Reading attestation reports from SEV-SNP hardware and validating AMD's certificate chain.
- External cryptographic audit.
- Formal certification: FIPS 140-3 and Common Criteria.
Who it's for
- Digital-asset exchanges and custodians building their own threshold-signing stack.
- Banks and payment institutions that want signing keys split across machines.
- Stablecoin issuers that want threshold control of mint and redemption keys.
- Defence and government integrators building attested, quorum-gated signing.
Before you buy
- Treat this as an early-stage library to build on, not a product to deploy. If your control environment requires FIPS 140-3 or Common Criteria at go-live, it is not at that gate.
- Commission your own cryptographic audit and price it into the acquisition.
- Plan to supply a hardware-backed or quorum-replicated monotonic counter, and to exclude the trusted-dealer key generation from production builds.
- Budget for the networking and node runtime you will need, and for the open envelope-binding finding, before any multi-host deployment.
- Validate attestation on the exact production silicon you intend to deploy once the SEV-SNP hardware path is implemented.
- When you rerun the gates, install libsodium-dev (the README does not list it), libc6-dbg for the ctgrind gate, and run TSan builds under setarch -R on recent kernels with clang 16.
- Confirm the share-refresh protocol against your compromise-recovery playbook, including when a share holder is permanently lost.
What transfers
- The asset's sourceSubject to the Sale and Assignment Agreement, Vlaander assigns to the verified Buyer the transferable right, title and interest that Vlaander owns in the specified Asset. The assignment excludes Third Party Materials, open-source components, Vlaander’s pre-existing tools, generic know-how, development methods, trademarks, confidential information and any rights that cannot lawfully be assigned.
- Its testsThe test suite the published assurance claims rest on, as delivered in the source archive.
- Its audit artefactsSpecifications, model-checking output, reviews and the software bill of materials, where the asset has them.
- Not includedThird-party and open-source materials are not sold or assigned by Vlaander. They remain under their own licences, listed in each asset’s software bill of materials (SBOM.md in the archive), and the Buyer is responsible for complying with those licences.
First described in: VLA-GEN catalogue, 3 August 2026, §3.3. Revised by Vlaander against the delivered source; every figure is labelled with its basis.
From test to source
- 01
Check
Read the engine's page: what Vlaander measured and on which hardware, what it has not measured, and the open review findings. Nothing runs before purchase.
- 02
Buy
Verified businesses only. Place the order, give your company's details, have your authorised signatory sign the Sale and Assignment Agreement, then pay the invoice in naira by bank transfer, or in USDC on Polygon. Once the payment is verified, your account shows Paid.
- 03
Receive
We confirm the funds and release the source tarball to you. Delivering, then Download ready. Check it against the SHA-256 in Schedule 1, then rerun the tests and benchmarks yourself.