Swarmauri In‑Memory Key Provider
Volatile, in‑memory key provider for Swarmauri. All key material is kept strictly in process memory (no disk writes). Ideal for testing, CI, and ephemeral gateways where persistence is not desired. Not intended for long‑term or production storage of secrets.
Installation
Install the package with your preferred Python tooling:
pip install swarmauri_keyprovider_inmemory
poetry add swarmauri_keyprovider_inmemory
pip install uv
uv pip install swarmauri_keyprovider_inmemory
Usage
Create and manage symmetric (or opaque/asymmetric placeholder) keys entirely in memory. The snippet below creates a new symmetric key and returns a KeyRef with material present when allowed by the export policy.
import asyncio
from swarmauri_keyprovider_inmemory import InMemoryKeyProvider
from swarmauri_core.key_providers.types import (
KeySpec,
KeyClass,
KeyAlg, # optional, not enforced by the provider
KeyUse,
ExportPolicy,
)
async def main() -> None:
provider = InMemoryKeyProvider()
# Create a symmetric key kept only in memory
spec = KeySpec(
klass=KeyClass.symmetric,
alg=KeyAlg.AES256_GCM, # optional hint – not strictly enforced
uses=(KeyUse.ENCRYPT, KeyUse.DECRYPT),
export_policy=ExportPolicy.SECRET_WHEN_ALLOWED, # material may be present
label="session-key",
)
ref = await provider.create_key(spec)
assert ref.kid and ref.version == 1
# ref.material may be populated depending on export_policy
# Rotate to get a new version, still in memory only
ref2 = await provider.rotate_key(ref.kid)
assert ref2.version == 2
# List available versions
versions = await provider.list_versions(ref.kid)
print(versions) # e.g., (1, 2)
# Import existing key material
imported = await provider.import_key(
spec,
material=b"\x00" * 32,
)
assert imported.version == 1
# Fetch current version
current = await provider.get_key(ref.kid)
assert current.version == max(versions)
# Destroy a specific version or the whole key
await provider.destroy_key(ref.kid, version=1) # delete only v1
await provider.destroy_key(imported.kid) # delete all versions
# Utilities
rand = await provider.random_bytes(16)
okm = await provider.hkdf(b"ikm", salt=b"salt", info=b"ctx", length=32)
print(len(rand), len(okm))
asyncio.run(main())
Capabilities
- Class support:
symmetric,asymmetric (opaque) - Features:
create,import,rotate,destroy,list_versions,get_key,random_bytes,hkdf - No persistence: data is lost when the process exits
- Not supported: JWK/JWKS export (will raise
NotImplementedError)
Security Considerations
- Keys exist only for the lifetime of the Python process; restarting drops all material.
- No hardware isolation or disk persistence is provided.
- Use only for development, CI, or other ephemeral scenarios.
Notes
- Exported
KeyRef.materialpresence depends on theExportPolicy. UseExportPolicy.NONEto prevent material from being surfaced to callers. - For gateways, set this provider as the default to keep keys off disk in development and CI.
Want to help?
If you want to contribute to swarmauri-sdk, read up on our guidelines for contributing that will help you get started.
Metadata
Release files for swarmauri_keyprovider_inmemory 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| swarmauri_keyprovider_inmemory-0.2.0.tar.gz | 9.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| swarmauri_keyprovider_inmemory-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 19.3 kB
Release files / swarmauri_keyprovider_inmemory-0.2.0.tar.gz
| Download URL | swarmauri_keyprovider_inmemory-0.2.0.tar.gz |
|---|---|
| Size | 9.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
774142cf687264860e4bef8afbee4f44260917729cb58f2da01237a8627a8018
|
|
BLAKE2b-256 checksum How to use checksums |
25b6dfe3102025d8545d1a41a2399a6a9d033acda977b2797ac91db3549a0837
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.27 {"installer":{"name":"uv","version":"0.9.27","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 / swarmauri_keyprovider_inmemory-0.2.0-py3-none-any.whl
| Download URL | swarmauri_keyprovider_inmemory-0.2.0-py3-none-any.whl |
|---|---|
| Size | 10.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5695517aedd24a9ecab1ac8ca3959e9ff1913f1936712d96046191ecbc86e56a
|
|
BLAKE2b-256 checksum How to use checksums |
4126b84186d4af2589d466062e9847e021fe6717a5da24e12f9a1664e94eca8c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.27 {"installer":{"name":"uv","version":"0.9.27","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}
|