Tigrbl KMS 🔐
A lightweight key management service powered by FastAPI and the Tigrbl engine.
✨ Features
- 🔑 Manage symmetric keys with versioning and rotation.
- 🚀 Ships with a ready-to-run FastAPI application.
- 🤖 Extensible through
swarmauri_crypto_*plugins. - 📦 Backed by SQLAlchemy and Pydantic models.
🚀 Quick Start
Run the built-in app
Tigrbl KMS ships a FastAPI application at tigrbl_kms.app:app. Configure the database URL if needed (defaults to sqlite+aiosqlite:///./kms.db) and launch it with uvicorn:
export KMS_DATABASE_URL=sqlite+aiosqlite:///./kms.db
uv run --package tigrbl_kms --directory pkgs/standards/tigrbl_kms \
uvicorn tigrbl_kms.app:app --host 127.0.0.1 --port 8000 --reload
Verify
Once the service starts, you can verify it is running:
curl http://127.0.0.1:8000/system/healthz
The endpoint returns {"ok": true} when deployment succeeds.
🛠️ Build a custom app
You can construct a bespoke Tigrbl KMS service by creating your own TigrblApp and adding the KMS resources:
from tigrbl import TigrblApp
from tigrbl.engine import engine
from tigrbl_kms.orm import Key, KeyVersion
from swarmauri_standard.key_providers import InMemoryKeyProvider
from swarmauri_crypto_pgp import PgpCrypto # swap for any swarmauri_crypto_* plugin
db = engine("sqlite+aiosqlite:///./kms.db")
crypto = PgpCrypto()
key_provider = InMemoryKeyProvider()
async def add_services(ctx):
ctx["crypto"] = crypto
ctx["key_provider"] = key_provider
app = TigrblApp(engine=db, api_hooks={"*": {"PRE_TX_BEGIN": [add_services]}})
app.include_models([Key, KeyVersion], base_prefix="/kms")
app.mount_jsonrpc(prefix="/kms/rpc")
app.attach_diagnostics(prefix="/system")
@app.on_event("startup")
async def startup():
await app.initialize()
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="127.0.0.1", port=8000)
The PgpCrypto instance above can be replaced with any other swarmauri_crypto_* plugin such as swarmauri_crypto_paramiko or swarmauri_crypto_rust.
🔒 Create a key and encrypt data
In another terminal, create a key:
curl -s -X POST http://127.0.0.1:8000/kms/Key \
-H "Content-Type: application/json" \
-d '{"name":"demo","algorithm":"AES256_GCM"}'
Example response:
{"id":"5e454eb6-7739-453b-9aee-21d60032a773","name":"demo","algorithm":"AES256_GCM","status":"enabled","primary_version":1}
Encrypt some data with the key (the plaintext must be base64-encoded):
PLAINTEXT=$(echo -n 'hello world' | base64)
curl -s -X POST http://127.0.0.1:8000/kms/Key/5e454eb6-7739-453b-9aee-21d60032a773/encrypt \
-H "Content-Type: application/json" \
-d "{\"plaintext_b64\":\"$PLAINTEXT\"}"
Sample output:
{"kid":"5e454eb6-7739-453b-9aee-21d60032a773","version":1,"alg":"AES256_GCM","nonce_b64":"bg==","ciphertext_b64":"ZGxyb3cgb2xsZWg=","tag_b64":"dA=="}
The ciphertext is base64 encoded and can be decrypted with the corresponding decrypt endpoint.
📄 License
This project is licensed under the terms of the Apache 2.0 license.
Metadata
Release files for tigrbl_kms 0.3.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| tigrbl_kms-0.3.2.tar.gz | 16.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tigrbl_kms-0.3.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 34.5 kB
Release files / tigrbl_kms-0.3.2.tar.gz
| Download URL | tigrbl_kms-0.3.2.tar.gz |
|---|---|
| Size | 16.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
83e4ecafea7e020a577c151600fe419684ac36bb20dbc4077413292e790ac502
|
|
BLAKE2b-256 checksum How to use checksums |
da4324b5a415372ca9b42e5243a7d635adeb3ec4b16a7b70e85f8802c10dd6f4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.0 {"installer":{"name":"uv","version":"0.11.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / tigrbl_kms-0.3.2-py3-none-any.whl
| Download URL | tigrbl_kms-0.3.2-py3-none-any.whl |
|---|---|
| Size | 18.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
82bfecca55ccfcf2c5464522da5672716d8ff95ae63d2b870a0cbcd5251157fe
|
|
BLAKE2b-256 checksum How to use checksums |
d1d66182bfaf322681eff2ed636b6f3d3500833050367dfc2104d231451d8610
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.0 {"installer":{"name":"uv","version":"0.11.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|