# @suaveplan/crypto-sodium - libsodium-backed engine implementations for @suaveplan/crypto — AEAD (XChaCha20-Poly1305, ChaCha20-Poly1305, AES-256-GCM), Ed25519 sign, X25519 agree, sealed-box, auth-box, KDF, BLAKE2b auth, Argon2id pwhash, Ristretto255 group ops. ## Summary libsodium-backed engine implementations for `@suaveplan/crypto`. Provides AEAD encryption, Ed25519 signing, X25519 key agreement, sealed-box, auth-box, deterministic KDF, BLAKE2b MAC, Argon2id password hashing, and Ristretto255 group operations — all via the `libsodium-wrappers-sumo` WASM module. ## Documentation tree - [sodium-aead-engine](./src/engines/sodium-aead-engine/sodium-aead-engine.md) — _(no submodules)_ - [sodium-aead-engine](./src/engines/sodium-aead-engine/sodium-aead-engine.md) — _(no submodules)_ - [sodium-agree-engine](./src/engines/sodium-agree-engine/sodium-agree-engine.md) — _(no submodules)_ - [sodium-agree-engine](./src/engines/sodium-agree-engine/sodium-agree-engine.md) — _(no submodules)_ - [sodium-auth-box-engine](./src/engines/sodium-auth-box-engine/sodium-auth-box-engine.md) — _(no submodules)_ - [sodium-auth-box-engine](./src/engines/sodium-auth-box-engine/sodium-auth-box-engine.md) — _(no submodules)_ - [sodium-sealed-box-engine](./src/engines/sodium-sealed-box-engine/sodium-sealed-box-engine.md) — _(no submodules)_ - [sodium-sealed-box-engine](./src/engines/sodium-sealed-box-engine/sodium-sealed-box-engine.md) — _(no submodules)_ - [sodium-sign-engine](./src/engines/sodium-sign-engine/sodium-sign-engine.md) — _(no submodules)_ - [sodium-sign-engine](./src/engines/sodium-sign-engine/sodium-sign-engine.md) — _(no submodules)_ - [codes](./src/errors/codes/codes.md) — _(no submodules)_ - [codes](./src/errors/codes/codes.md) — _(no submodules)_ - [sodium-error](./src/errors/sodium-error/sodium-error.md) — _(no submodules)_ - [sodium-error](./src/errors/sodium-error/sodium-error.md) — _(no submodules)_ - [init](./src/init/init.md) — _(no submodules)_ - [init](./src/init/init.md) — _(no submodules)_ - [crypto-auth](./src/primitives/crypto-auth/crypto-auth.md) — _(no submodules)_ - [crypto-auth](./src/primitives/crypto-auth/crypto-auth.md) — _(no submodules)_ - [crypto-kdf](./src/primitives/crypto-kdf/crypto-kdf.md) — _(no submodules)_ - [crypto-kdf](./src/primitives/crypto-kdf/crypto-kdf.md) — _(no submodules)_ - [crypto-pwhash](./src/primitives/crypto-pwhash/crypto-pwhash.md) — _(no submodules)_ - [crypto-pwhash](./src/primitives/crypto-pwhash/crypto-pwhash.md) — _(no submodules)_ - [ristretto255](./src/primitives/ristretto255/ristretto255.md) — _(no submodules)_ - [ristretto255](./src/primitives/ristretto255/ristretto255.md) — _(no submodules)_ - [sodium-aead-engine](./src/engines/sodium-aead-engine/sodium-aead-engine.md) — _(no submodules)_- [sodium-agree-engine](./src/engines/sodium-agree-engine/sodium-agree-engine.md) — _(no submodules)_- [sodium-agree-engine](./src/engines/sodium-agree-engine/sodium-agree-engine.md) — _(no submodules)_- [sodium-auth-box-engine](./src/engines/sodium-auth-box-engine/sodium-auth-box-engine.md) — _(no submodules)_- [sodium-auth-box-engine](./src/engines/sodium-auth-box-engine/sodium-auth-box-engine.md) — _(no submodules)_- [sodium-sealed-box-engine](./src/engines/sodium-sealed-box-engine/sodium-sealed-box-engine.md) — _(no submodules)_- [sodium-sealed-box-engine](./src/engines/sodium-sealed-box-engine/sodium-sealed-box-engine.md) — _(no submodules)_- [sodium-sign-engine](./src/engines/sodium-sign-engine/sodium-sign-engine.md) — _(no submodules)_- [sodium-sign-engine](./src/engines/sodium-sign-engine/sodium-sign-engine.md) — _(no submodules)_- [codes](./src/errors/codes/codes.md) — _(no submodules)_- [codes](./src/errors/codes/codes.md) — _(no submodules)_- [sodium-error](./src/errors/sodium-error/sodium-error.md) — _(no submodules)_- [sodium-error](./src/errors/sodium-error/sodium-error.md) — _(no submodules)_- [init](./src/init/init.md) — _(no submodules)_- [init](./src/init/init.md) — _(no submodules)_- [crypto-auth](./src/primitives/crypto-auth/crypto-auth.md) — _(no submodules)_- [crypto-auth](./src/primitives/crypto-auth/crypto-auth.md) — _(no submodules)_- [crypto-kdf](./src/primitives/crypto-kdf/crypto-kdf.md) — _(no submodules)_- [crypto-kdf](./src/primitives/crypto-kdf/crypto-kdf.md) — _(no submodules)_- [crypto-pwhash](./src/primitives/crypto-pwhash/crypto-pwhash.md) — _(no submodules)_- [crypto-pwhash](./src/primitives/crypto-pwhash/crypto-pwhash.md) — _(no submodules)_- [ristretto255](./src/primitives/ristretto255/ristretto255.md) — _(no submodules)_- [ristretto255](./src/primitives/ristretto255/ristretto255.md) — _(no submodules)_- [sodium-aead-engine](./src/engines/sodium-aead-engine/sodium-aead-engine.md) — _(no submodules)_- [sodium-agree-engine](./src/engines/sodium-agree-engine/sodium-agree-engine.md) — _(no submodules)_- [sodium-agree-engine](./src/engines/sodium-agree-engine/sodium-agree-engine.md) — _(no submodules)_- [sodium-auth-box-engine](./src/engines/sodium-auth-box-engine/sodium-auth-box-engine.md) — _(no submodules)_- [sodium-auth-box-engine](./src/engines/sodium-auth-box-engine/sodium-auth-box-engine.md) — _(no submodules)_- [sodium-sealed-box-engine](./src/engines/sodium-sealed-box-engine/sodium-sealed-box-engine.md) — _(no submodules)_- [sodium-sealed-box-engine](./src/engines/sodium-sealed-box-engine/sodium-sealed-box-engine.md) — _(no submodules)_- [sodium-sign-engine](./src/engines/sodium-sign-engine/sodium-sign-engine.md) — _(no submodules)_- [sodium-sign-engine](./src/engines/sodium-sign-engine/sodium-sign-engine.md) — _(no submodules)_- [codes](./src/errors/codes/codes.md) — _(no submodules)_- [codes](./src/errors/codes/codes.md) — _(no submodules)_- [sodium-error](./src/errors/sodium-error/sodium-error.md) — _(no submodules)_- [sodium-error](./src/errors/sodium-error/sodium-error.md) — _(no submodules)_- [init](./src/init/init.md) — _(no submodules)_- [init](./src/init/init.md) — _(no submodules)_- [crypto-auth](./src/primitives/crypto-auth/crypto-auth.md) — _(no submodules)_- [crypto-auth](./src/primitives/crypto-auth/crypto-auth.md) — _(no submodules)_- [crypto-kdf](./src/primitives/crypto-kdf/crypto-kdf.md) — _(no submodules)_- [crypto-kdf](./src/primitives/crypto-kdf/crypto-kdf.md) — _(no submodules)_- [crypto-pwhash](./src/primitives/crypto-pwhash/crypto-pwhash.md) — _(no submodules)_- [crypto-pwhash](./src/primitives/crypto-pwhash/crypto-pwhash.md) — _(no submodules)_- [ristretto255](./src/primitives/ristretto255/ristretto255.md) — _(no submodules)_- [ristretto255](./src/primitives/ristretto255/ristretto255.md) — _(no submodules)_- [sodium-aead-engine](./src/engines/sodium-aead-engine/sodium-aead-engine.md) — _(no submodules)_- [sodium-agree-engine](./src/engines/sodium-agree-engine/sodium-agree-engine.md) — _(no submodules)_- [sodium-agree-engine](./src/engines/sodium-agree-engine/sodium-agree-engine.md) — _(no submodules)_- [sodium-auth-box-engine](./src/engines/sodium-auth-box-engine/sodium-auth-box-engine.md) — _(no submodules)_- [sodium-auth-box-engine](./src/engines/sodium-auth-box-engine/sodium-auth-box-engine.md) — _(no submodules)_- [sodium-sealed-box-engine](./src/engines/sodium-sealed-box-engine/sodium-sealed-box-engine.md) — _(no submodules)_- [sodium-sealed-box-engine](./src/engines/sodium-sealed-box-engine/sodium-sealed-box-engine.md) — _(no submodules)_- [sodium-sign-engine](./src/engines/sodium-sign-engine/sodium-sign-engine.md) — _(no submodules)_- [sodium-sign-engine](./src/engines/sodium-sign-engine/sodium-sign-engine.md) — _(no submodules)_- [codes](./src/errors/codes/codes.md) — _(no submodules)_- [codes](./src/errors/codes/codes.md) — _(no submodules)_- [sodium-error](./src/errors/sodium-error/sodium-error.md) — _(no submodules)_- [sodium-error](./src/errors/sodium-error/sodium-error.md) — _(no submodules)_- [init](./src/init/init.md) — _(no submodules)_- [init](./src/init/init.md) — _(no submodules)_- [crypto-auth](./src/primitives/crypto-auth/crypto-auth.md) — _(no submodules)_- [crypto-auth](./src/primitives/crypto-auth/crypto-auth.md) — _(no submodules)_- [crypto-kdf](./src/primitives/crypto-kdf/crypto-kdf.md) — _(no submodules)_- [crypto-kdf](./src/primitives/crypto-kdf/crypto-kdf.md) — _(no submodules)_- [crypto-pwhash](./src/primitives/crypto-pwhash/crypto-pwhash.md) — _(no submodules)_- [crypto-pwhash](./src/primitives/crypto-pwhash/crypto-pwhash.md) — _(no submodules)_- [ristretto255](./src/primitives/ristretto255/ristretto255.md) — _(no submodules)_- [ristretto255](./src/primitives/ristretto255/ristretto255.md) — _(no submodules)_- [sodium-aead-engine](./src/engines/sodium-aead-engine/sodium-aead-engine.md) — _(no submodules)_- [sodium-agree-engine](./src/engines/sodium-agree-engine/sodium-agree-engine.md) — _(no submodules)_ - [sodium-agree-engine](./src/engines/sodium-agree-engine/sodium-agree-engine.md) — _(no submodules)_- [sodium-auth-box-engine](./src/engines/sodium-auth-box-engine/sodium-auth-box-engine.md) — _(no submodules)_ - [sodium-auth-box-engine](./src/engines/sodium-auth-box-engine/sodium-auth-box-engine.md) — _(no submodules)_- [sodium-sealed-box-engine](./src/engines/sodium-sealed-box-engine/sodium-sealed-box-engine.md) — _(no submodules)_ - [sodium-sealed-box-engine](./src/engines/sodium-sealed-box-engine/sodium-sealed-box-engine.md) — _(no submodules)_- [sodium-sign-engine](./src/engines/sodium-sign-engine/sodium-sign-engine.md) — _(no submodules)_ - [sodium-sign-engine](./src/engines/sodium-sign-engine/sodium-sign-engine.md) — _(no submodules)_- [codes](./src/errors/codes/codes.md) — _(no submodules)_ - [codes](./src/errors/codes/codes.md) — _(no submodules)_- [sodium-error](./src/errors/sodium-error/sodium-error.md) — _(no submodules)_ - [sodium-error](./src/errors/sodium-error/sodium-error.md) — _(no submodules)_- [init](./src/init/init.md) — _(no submodules)_ - [init](./src/init/init.md) — _(no submodules)_- [crypto-auth](./src/primitives/crypto-auth/crypto-auth.md) — _(no submodules)_ - [crypto-auth](./src/primitives/crypto-auth/crypto-auth.md) — _(no submodules)_- [crypto-kdf](./src/primitives/crypto-kdf/crypto-kdf.md) — _(no submodules)_ - [crypto-kdf](./src/primitives/crypto-kdf/crypto-kdf.md) — _(no submodules)_- [crypto-pwhash](./src/primitives/crypto-pwhash/crypto-pwhash.md) — _(no submodules)_ - [crypto-pwhash](./src/primitives/crypto-pwhash/crypto-pwhash.md) — _(no submodules)_- [ristretto255](./src/primitives/ristretto255/ristretto255.md) — _(no submodules)_ - [ristretto255](./src/primitives/ristretto255/ristretto255.md) — _(no submodules)_ ## Installation ```sh bun add @suaveplan/crypto-sodium ``` ## Initialisation libsodium loads as WebAssembly. Call `sodiumReady()` before using any synchronous engine: ```ts import { sodiumReady } from "@suaveplan/crypto-sodium/init"; await sodiumReady(); // one-time WASM init ``` Async primitives (`cryptoKdf`, `cryptoAuth`, `ristretto255.*`, etc.) call `sodiumReady()` internally. ## Modules | Subpath | Exports | |---------|---------| | `@suaveplan/crypto-sodium` | Everything (re-exports all modules) | | `@suaveplan/crypto-sodium/init` | [`init.md`](src/init/init.md) — `sodiumReady` | | `@suaveplan/crypto-sodium/engines` | All five engines | | `@suaveplan/crypto-sodium/engines/aead` | [`sodium-aead-engine.md`](src/engines/sodium-aead-engine.md) — AEAD | | `@suaveplan/crypto-sodium/engines/sign` | [`sodium-sign-engine.md`](src/engines/sodium-sign-engine.md) — Ed25519 | | `@suaveplan/crypto-sodium/engines/agree` | [`sodium-agree-engine.md`](src/engines/sodium-agree-engine.md) — X25519 | | `@suaveplan/crypto-sodium/engines/sealed-box` | [`sodium-sealed-box-engine.md`](src/engines/sodium-sealed-box-engine.md) — anonymous box | | `@suaveplan/crypto-sodium/engines/auth-box` | [`sodium-auth-box-engine.md`](src/engines/sodium-auth-box-engine.md) — authenticated box | | `@suaveplan/crypto-sodium/primitives/kdf` | [`crypto-kdf.md`](src/primitives/crypto-kdf.md) — BLAKE2b KDF | | `@suaveplan/crypto-sodium/primitives/auth` | [`crypto-auth.md`](src/primitives/crypto-auth.md) — BLAKE2b MAC | | `@suaveplan/crypto-sodium/primitives/pwhash` | [`crypto-pwhash.md`](src/primitives/crypto-pwhash.md) — Argon2id | | `@suaveplan/crypto-sodium/primitives/ristretto255` | [`ristretto255.md`](src/primitives/ristretto255.md) — group ops | | `@suaveplan/crypto-sodium/errors` | [`sodium-error.md`](src/errors/sodium-error.md) — `SodiumError`, `SODIUM_CODES` | ## Quick Examples ```ts import { sodiumReady, sodiumSignEngine, cryptoKdf } from "@suaveplan/crypto-sodium"; await sodiumReady(); // Ed25519 sign/verify const kp = sodiumSignEngine.generateKeypair(); const sig = sodiumSignEngine.sign(kp.secretKey, new TextEncoder().encode("msg")); const ok = sodiumSignEngine.verify(kp.publicKey, sig, new TextEncoder().encode("msg")); // BLAKE2b KDF const masterKey = crypto.getRandomValues(new Uint8Array(32)); const encKey = await cryptoKdf(masterKey, 1, "SuavEncr", 32); ``` ## License MIT