Skip to main content
The Rust crate is the heart of the SDK: the TypeScript and Dart bindings are generated from it. Use it directly in services, CLI tools and agents where a native dependency is fine.

1. Get the crate

The public repository is everabyte/crypto-sdk — a Cargo workspace, so a git dependency resolves the crate directly:
Pin a tag for reproducible builds (git = "…", tag = "v0.1.0"). A local checkout works too: path = "../crypto-sdk/core".

2. Generate the account key (UMK)

Seal it under a recovery phrase (BIP-39, Argon2id m=64 MiB / t=2 / p=1) and register the chain with the REST API exactly as in the TypeScript quickstart (same endpoints, same JSON):

3. Encrypt a file

4. Upload ciphertext, attach the envelope

If envelope attachment times out, reconcile whether it committed before cleanup; a timeout may happen after the server stores the envelope. After a confirmed failure, resolve the uploaded row by bucket and opaque wire name, confirm it has no envelope, and hard-delete it through the file API as required by the E2EE upload contract. Handle retention blocks explicitly.

5. Download and decrypt

Streaming large files

seal_all/open_all are whole-buffer helpers: they accept and return the complete plaintext/ciphertext in memory. For large objects, use the streaming API, which processes at most one chunk at a time:
Decryption mirrors it with content::Decryptor. DEK material is zeroized on drop; nothing secret is logged.

Next steps