caesium/caesium "0.15.0"{:public :secret} mapsurn:nacl:pk:ed25519:<base64url>)fluree/crypto "4.0.0":eddsa algorithm| Library | Platform | Notes |
|---|---|---|
| hiredman/ed25519 | JVM | Pure Clojure port of Python ed25519.py, proof-of-concept |
| geheimnis | cljc | AES/RSA/MD5 only — no 25519 |
| hasch | cljc | Deterministic SHA-512 hashing of EDN values (canonical serialization) |
| tweetnacl-java | JVM | Pure Java NaCl port, no native deps |
| salty-coffee | JVM | Pure Java NaCl, Java 11+, zero deps |
| TweetNaCl.js | JS | Via npm, usable from ClojureScript |
Ed25519 Signatures (JEP 339, Java 15+):
KeyPairGenerator.getInstance("Ed25519") // no init needed
Signature.getInstance("Ed25519") // sign/verify
// Types: EdECPublicKey, EdECPrivateKey, EdECPoint
X25519 Key Agreement (JEP 324, Java 11+):
KeyPairGenerator kpg = KeyPairGenerator.getInstance("XDH");
kpg.initialize(new NamedParameterSpec("X25519"));
KeyAgreement.getInstance("XDH") // Diffie-Hellman
// Types: XECPublicKey, XECPrivateKey
Ed25519 (all major browsers as of 2025):
await crypto.subtle.generateKey({ name: "Ed25519" }, true, ["sign", "verify"]);
await crypto.subtle.sign({ name: "Ed25519" }, privateKey, data);
await crypto.subtle.verify({ name: "Ed25519" }, publicKey, signature, data);
X25519 (all major browsers as of early 2025):
await crypto.subtle.generateKey({ name: "X25519" }, true, ["deriveKey", "deriveBits"]);
await crypto.subtle.deriveBits({ name: "X25519", public: theirKey }, myKey, 256);
Key consideration: WebCrypto is async-only (returns Promises).
No existing library combines all of:
This is exactly the gap signet aims to fill.
Can you improve this documentation?Edit on GitHub
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |