pulse-proton
Proton Drive adapter for PULSE Protocol.
Store and retrieve secrets in Proton Drive using PULSE semantic messages.
Security model
Two independent encryption layers:
- AES-256-GCM — applied by the adapter before upload (key derivation: PBKDF2-HMAC-SHA256, 600K iterations)
- Proton Drive E2E encryption — applied by Proton at the storage layer
A compromised Proton session cannot read secret values in plaintext.
Installation
pip install pulse-proton
Credentials — environment variables only
export PROTON_USERNAME="you@proton.me"
export PROTON_PASSWORD="your-proton-password"
export PULSE_VAULT_KEY="your-strong-master-key"
Quickstart
import os
from pulse_proton import ProtonAdapter
from pulse.message import PulseMessage
adapter = ProtonAdapter(
username=os.environ["PROTON_USERNAME"],
password=os.environ["PROTON_PASSWORD"],
vault_key=os.environ["PULSE_VAULT_KEY"],
)
adapter.connect()
# Store a secret
adapter.send(PulseMessage(
action="ACT.STORE.SECRET",
parameters={"key": "openai-api-key", "value": "sk-..."},
))
# Retrieve a secret
response = adapter.send(PulseMessage(
action="ACT.GET.SECRET",
parameters={"key": "openai-api-key"},
))
print(response.content["parameters"]["value"]) # sk-...
# List all secrets
response = adapter.send(PulseMessage(action="ACT.LIST.SECRETS", parameters={}))
print(response.content["parameters"]["keys"]) # ["openai-api-key", ...]
# Delete a secret
adapter.send(PulseMessage(
action="ACT.DELETE.SECRET",
parameters={"key": "openai-api-key"},
))
adapter.disconnect()
Supported PULSE actions
| Action | Parameters | Description |
|---|---|---|
ACT.STORE.SECRET |
key, value, tags? |
Encrypt and upload to Proton Drive |
ACT.GET.SECRET |
key |
Download and decrypt from Proton Drive |
ACT.DELETE.SECRET |
key |
Remove secret file from Proton Drive |
ACT.LIST.SECRETS |
— | List all stored secret keys |
Storage format
Each secret is stored as <key>.json in a dedicated Drive folder (pulse-secrets by default):
{
"key": "openai-api-key",
"value": "<AES-256-GCM encrypted, base64>",
"created_at": "2026-04-03T12:00:00+00:00",
"tags": {"env": "prod"}
}
License
Apache 2.0
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
pulse_proton-0.1.0.tar.gz
(18.7 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pulse_proton-0.1.0.tar.gz.
File metadata
- Download URL: pulse_proton-0.1.0.tar.gz
- Upload date:
- Size: 18.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d67f532ad7f42accbb5a51b4fcf900a715beeeabde17f3ef1adc98632b1416b2
|
|
| MD5 |
a08436b8f2f1a5673807b1c84a86a609
|
|
| BLAKE2b-256 |
98d60e0408a914190ce001ddb2d416fd6b39da743f0220f11472d9415d75e51a
|
File details
Details for the file pulse_proton-0.1.0-py3-none-any.whl.
File metadata
- Download URL: pulse_proton-0.1.0-py3-none-any.whl
- Upload date:
- Size: 14.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8629898ee831d07c5e355d5bb8d97078e4facfbb00c152d8db1dc948af24e244
|
|
| MD5 |
c6bf8f1ffc81f70ad7b12f46c1799ad1
|
|
| BLAKE2b-256 |
628c1d8347c7654cd1bbf88164330576576d2286de8b685885656506ce893b69
|