Color scheme: Dark
You are here: start » en » Documentation » Post-Quantum Cryptography » WvdS Crypto Service overview » Get started » Build and test

Build and test

This walkthrough takes you from a fresh clone to both forms built and tested, and to a running Windows service that answers its first request. Plan on 10 to 20 minutes the first time; most of that is the OpenSSL build.

Before you begin, install the tools listed in Prerequisites.

1. Build and test the L4Re form

Change to the form's directory. From the repository root, the form's .cargo/config.toml doesn't take effect.

cd l4re
cargo test

On Windows, Strawberry Perl must come before any other Perl on the path, for example $env:PATH = "C:\Strawberry\perl\bin;" + $env:PATH.

Each test group ends with test result: ok. Among other things, the tests confirm that the linked OpenSSL provides ML-DSA, that a tampered signature is rejected, and that the test vectors have the real sizes of signatures and ciphertexts.

For the Linux targets:

cd l4re
cargo build --release --target x86_64-unknown-linux-gnu
cargo build --release --target aarch64-unknown-linux-gnu   # cross-compilation

A program built this way runs a demonstration outside L4Re and exits; it doesn't accept requests.

2. Build and test the Windows form

Point the build at the OpenSSL to link against, and build from the win directory:

$env:OPENSSL_DIR = "C:\OpenSSL-3.6"   # your installation directory
cd win
cargo test
cargo build --release

If lib\ contains only static libraries, also set $env:OPENSSL_STATIC = "1". The program ends up in win\target\release\wvds_crypto_service.exe.

3. Start the Windows service

.\target\release\wvds_crypto_service.exe --no-tui --single

The startup banner shows the OpenSSL version actually linked, for example OpenSSL 3.5.4 30 Sep 2025. The service then logs Starting gateway: Default Gateway on \\.\pipe\wvds_crypto and waits for connections.

4. Send a first request

Open a second PowerShell window and ask the service for its status:

$pipe = [System.IO.Pipes.NamedPipeClientStream]::new('.', 'wvds_crypto', 'InOut')
$pipe.Connect(5000)
$utf8 = [System.Text.UTF8Encoding]::new($false)
$reader = [System.IO.StreamReader]::new($pipe, $utf8)
$writer = [System.IO.StreamWriter]::new($pipe, $utf8)
$writer.NewLine = "`n"; $writer.AutoFlush = $true
$writer.WriteLine('{"operation":"info","request_id":"i1"}')
$reader.ReadLine()
$pipe.Dispose()

The response is a single JSON line with "success":true, "status":"running", and the list of algorithms. To generate keys, sign, and encrypt, see Call the Windows service.

5. Verify the test vectors independently

You can recompute the L4Re form's test vectors with any OpenSSL 3.5 or later:

python tools/verify-test-vectors.py l4re/crypto_test_vectors.json "C:\Program Files\OpenSSL\bin\libcrypto-3-x64.dll"

The script reports 8 vectors, 0 failures when every vector checks out. For details, see Verify the test vectors.

Next steps

en/wiki/pqcrypt/svc/getting-started/build-and-test.txt · Last modified: by Wolfgang van der Stille