Generate & keep keys on the stick
RSA and EC key pairs, plus AES and HMAC keys. Customer private and symmetric key material stays inside the secure element.
Small hardware. Open possibilities.
Meet Enigma Stick. A homebrew USB hardware security module, built around the NXP SE051 secure element.
For developers, hardware enthusiasts, and the cryptographically curious.
Coming soon - pending hardware validation

A little room to experiment
A place to generate keys, try cryptographic operations, and explore what belongs on either side of the USB connection.
Explore the mechanismsRSA and EC key pairs, plus AES and HMAC keys. Customer private and symmetric key material stays inside the secure element.
Experiment with RSA-PSS, ECDSA, AES-GCM, HMAC, and ECDH followed by HKDF. Export public keys to work with your existing tools.
Use the Rust host library, call its C API, or explore the binary USB protocol. Your application handles the experience; Enigma handles device operations.
From application to silicon
CLI, Seal, Keyring,
or something you build.
Typed operations over
the USB command protocol.
Commands, sessions,
and key metadata.
Secret key storage
and cryptographic operations.
Made for the stick
Inspect device status, manage keys, and run cryptographic operations from your terminal.
Meet the CLIEncrypt files on your computer with a file encryption key protected by Enigma Stick.
Meet SealKeep encrypted secrets in a local database. Ask the stick to encrypt or decrypt their values.
Meet KeyringBring your own idea
The host library gives your software a direct interface to the stick. Start by opening a device and checking its state.
use enigma::Device;
fn main() -> Result<(), enigma::EnigmaError> {
let mut stick = Device::open()?;
let status = stick.status()?;
println!("Token: {:?}", status.token);
println!("Session: {:?}", status.session);
stick.close()?;
Ok(())
}