OpenKeel implementation in Go of OpenStack Barbican (key manager), generated from the reverse-specification of branch stable/2026.2 by the generate-go-from-spec skill. It replaces the Python service without its clients noticing: same routes, status codes, error bodies, microversions and policies. What is reproduced and what differs is in docs/CONFORMANCE.md; the security checklist is in docs/SECURITY.md.
Go module: github.com/openkeel/openkeel-barbican
Binaries (one image holds all four): | Binary | Replaces | Role | |---|---|---| | barbican-api | barbican-wsgi-api | REST API on port 9311, health and metrics on 9090; -migrate applies the schema | | barbican-worker | barbican-worker | processes orders (key and asymmetric generation) from RabbitMQ, oslo.messaging wire format | | barbican-keystone-listener | barbican-keystone-listener | deletes a project's resources on Keystone's identity.project.deleted notification | | barbican-manage | barbican-manage | db upgrade/clean/sync_secret_stores, simple_crypto rewrap_pkek/new_pkek/rewrap_secrets, hsm gen_mkek/check_mkek/gen_hmac/check_hmac/rewrap_pkek | barbican-retry is not ported (no retry is ever scheduled on this branch, CONFORMANCE.md).
Secret stores: simple_crypto (Fernet, master KEK file), p11_crypto (PKCS#11 HSM, cgo build only, below), vault_plugin (Vault or OpenBao KV v1/v2). The database is shareable with Python Barbican (Alembic head 8c74e2d7f1ff).
Configuration: YAML, see config/config.example.yaml
Setting up a development environment, the database and the tests: docs/GETTING-STARTED.md
Database schema, migrations and upgrades: docs/DATABASE.md
Excerpt from openkeel-barbican/README.md (in English).
REST API
57 operations of the original REST API (routes and body actions), and their state in OpenKeel.
Barbican is checked by replay, by Barbican's own functional tests, by sending the same requests to Python and Go, and by running both side by side on one database and bus.
Replay of recorded exchanges
E2E replay of functional exchanges
The recorded functional exchanges give the same answers from the Go service.
How it runs
make e2e-strict on the embedded engine and on MariaDB 11.4.
Latest result 2 766 / 2 792 equal, 26 known differences (random keys, recorded dates, shared database); all pass live.
Source: openkeel-barbican/docs/CONFORMANCE.md
Client contract
Barbican functionaltests on Go
Barbican's upstream functionaltests/ pass against the Go service with a real Keystone.
How it runs
test/functional/run_functional.py --target go through the conformance adapter.
Latest result 563 ok, 0 failures, 69 skipped.
Source: openkeel-barbican/docs/CONFORMANCE.md
Differential test
Differential probe Python vs Go
The same requests sent to Python and Go Barbican, sharing one Keystone, get the same answers.
How it runs
test/functional/diff_probe.py, and --new-defaults for the RBAC defaults.