VOA
A command line interface and library for interacting with the "File Hierarchy for the Verification of OS Artifacts" (VOA).
Documentation
- https://voa.archlinux.page/rustdoc/voa/ for development version of the crate
- https://docs.rs/voa/latest/voa/ for released versions of the crate
Examples
Library
Import and search
use Write;
use ;
use ;
#
Verification
โ ๏ธ DO NOT USE IN PRODUCTION: Artifact verification is still in an early experimental development stage.
use ;
use ;
#
CLI
The voa CLI offers a simple interface for dealing with data in a VOA hierarchy.
Import verifiers
Verifiers can be imported using the voa import subcommand.
Assuming that the environment variable OPENPGP_CERT contains the path to an OpenPGP certificate with signing capabilities, we can import it to a VOA hierarchy directory (represented by the VOA_DIR environment variable).
The following imports the OpenPGP certificate to the directory os/packages/openpgp/ in VOA_DIR, implying that this verifier is to be used for the verification of package files on the OS os.
# ๐ EdDSA/Curve25519 v4 f992bda338ded64fe062302b5bd40d64577b8ea2
# โฑ Created 2025-09-20 06:13:33 UTC
#
# ๐ชช ID "John Doe <john.doe@example.org>"
# ๐ CertGeneric 2025-09-20 06:13:33 UTC, by 5bd40d64577b8ea2 [EdDSALegacy, SHA256, V4]
#
# .
# โโโ os
# โโโ packages
# โโโ default
# โโโ openpgp
# โโโ f992bda338ded64fe062302b5bd40d64577b8ea2.openpgp
# ๐ EdDSA/Curve25519 v4 f992bda338ded64fe062302b5bd40d64577b8ea2
# โฑ Created 2025-09-20 06:13:33 UTC
#
# ๐ชช ID "John Doe <john.doe@example.org>"
# ๐ CertGeneric 2025-09-20 06:13:33 UTC, by 5bd40d64577b8ea2 [EdDSALegacy, SHA256, V4]
#
List verifiers
Verifiers can be listed using the voa list subcommand.
# /home/user/.config/voa/os/packages/default/openpgp/f992bda338ded64fe062302b5bd40d64577b8ea2.openpgp
# [{"load_path":{"load_path":"/home/user/.config/voa","writable":true,"ephemeral":false},"verifier_path":"/home/user/.config/voa/arch/packages/default/openpgp/f992bda338ded64fe062302b5bd40d64577b8ea2.openpgp","os":{"id":"arch","version_id":null,"variant_id":null,"image_id":null,"image_version":null},"purpose":{"role":"packages","mode":""},"context":"default","technology":"openpgp"}]
List origins of available technology settings
Technology settings for an OS or for specific contexts of an OS are loaded from voa configuration files.
Which origins are used for all of them can be listed using the voa config list subcommand.
# ๐ฅ example
# โคท Config file: /usr/share/voa/example.yaml
# โคท Built-in defaults
# โ example/image/installation-medium
# โคท Config file: /usr/share/voa/example.yaml
# โคท Config file: /usr/share/voa/example.yaml
# โคท Built-in defaults
# โ example/package/default
# โคท Config file: /usr/share/voa/example.yaml
# โคท Config file: /usr/share/voa/example.yaml
# โคท Built-in defaults
# โ example/repository-metadata/test-repo
# โคท Config file: /usr/share/voa/example.yaml
# โคท Built-in defaults
|
# {
# "os": {
# "example": [
# {
# "config_file": "/usr/share/voa/example.yaml"
# },
# "default"
# ]
# },
# "os_purpose_context": {
# "example/image/installation-medium": [
# {
# "config_file": "/usr/share/voa/example.yaml"
# },
# {
# "config_file": "/usr/share/voa/example.yaml"
# },
# "default"
# ],
# "example/package/default": [
# {
# "config_file": "/usr/share/voa/example.yaml"
# },
# {
# "config_file": "/usr/share/voa/example.yaml"
# },
# "default"
# ],
# "example/repository-metadata/test-repo": [
# {
# "config_file": "/usr/share/voa/example.yaml"
# },
# "default"
# ]
# }
# }
Show technology settings
Based on the voa config file format, technology settings can be set generically for an OS, or for specific contexts of an OS.
These technology settings can be shown using the voa config show subcommand.
# OpenPGP settings
#
# ๐ Each artifact requires 1 valid data signature(s) from artifact verifiers to be successfully verified.
#
# โ
Each artifact is verified using the "trust anchor" verification method.
#
# ๐ง A valid certificate is not required to use a specific domain in any of its User IDs, but needs 3 certification(s) from individual trust anchors on one User ID for the certificate to be considered as artifact verifier.
#
# ๐พ A valid certificate is not required to match a specific OpenPGP fingerprint to be considered as trust anchor.
#
# ๐ The following sources have been considered for the creation of the settings:
# โคท Built-in defaults
|
# {
# "origins": [
# "default"
# ],
# "openpgp": {
# "num_data_signatures": 1,
# "verification_method": {
# "trust_anchor": {
# "required_certifications": 3,
# "artifact_verifier_identity_domain_matches": [],
# "trust_anchor_fingerprint_matches": []
# }
# }
# }
# }
Verify artifacts
โ ๏ธ DO NOT USE IN PRODUCTION: Artifact verification is still in an early experimental development stage.
OS artifacts can be verified using the voa verify subcommand.
Currently, only OpenPGP verification is available.
# โ
/path/to/an/image-1.2.3.tar.zst.sig 1734644649 f1d2d2f924e986ac86fdf7b36c94bcdf32beec15 e242ed3bffccdf271b7fbaf34ed72d089537b42f
# [{"signature":"/path/to/an/image-1.2.3.tar.zst.sig","result":{"valid":{"signature_creation_time":1734644649,"primary_key_fingerprint":"f1d2d2f924e986ac86fdf7b36c94bcdf32beec15","verifying_component_key_fingerprint":"e242ed3bffccdf271b7fbaf34ed72d089537b42f"}}}]
Building from source
This crate offers a command line interface, which is hidden behind the cli feature.
To build the CLI, pass in the feature:
Contributing
Please refer to the contribution guidelines to learn how to contribute to this project.
License
This project can be used under the terms of the Apache-2.0 or MIT. Contributions to this project, unless noted otherwise, are automatically licensed under the terms of both of those licenses.