Class Kem
java.lang.Object
zeroecho.Kem
Command-line utility that performs hybrid file encryption and decryption
using a KEM envelope and an AES or ChaCha payload.
Overview
This tool encapsulates a symmetric key with a selected KEM (post-quantum friendly) and then applies a symmetric cipher to the payload. The symmetric stage is configured onKemDataContentBuilder and
supports AES (GCM/CTR/CBC) and ChaCha (AEAD or stream) including AAD,
IV/nonce, counters, and an optional compact header. Keys are loaded from
KeyringStore by alias. Use --list-kems to discover valid KEM
identifiers.
Examples
# List available KEM identifiers
ZeroEcho -E --list-kems
# Encrypt with Kyber768 + AES-GCM (128-bit tag), writing a header
ZeroEcho -E --encrypt in.bin -o out.bin --keyring keys.txt --pub alice-pub \
--kem ML-KEM --hkdf 5a45524f --key-bytes 32 --max-kem-ct 65536 \
--aes --aes-cipher gcm --aes-tag-bits 128 --aad DEADBEEF --header
# Decrypt with the corresponding private key
ZeroEcho -E --decrypt out.bin -o plain.bin --keyring keys.txt --priv alice-priv \
--kem ML-KEM --aes --aes-cipher gcm --aes-tag-bits 128 --header
# Encrypt with ChaCha20-Poly1305 (AEAD) and header
ZeroEcho -E --encrypt in.bin -o out.cc20p.bin --keyring keys.txt --pub alice-pub \
--kem ML-KEM --chacha --chacha-nonce 00112233445566778899AABB \
--aad 01020304 --header
# Encrypt with ChaCha20 stream mode and explicit counters
ZeroEcho -E --encrypt in.bin -o out.cc20.bin --keyring keys.txt --pub alice-pub \
--kem ML-KEM --chacha --chacha-nonce 00112233445566778899AABB \
--chacha-initial 1 --chacha-counter 00000007
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final org.apache.commons.cli.OptionAAD (hex): --aad <hex>static final org.apache.commons.cli.OptionPayload switch: --aesstatic final org.apache.commons.cli.OptionAES mode: --aes-cipher gcm|ctr|cbcstatic final org.apache.commons.cli.OptionAES IV: --aes-iv <hex>static final org.apache.commons.cli.OptionAES tag bits: --aes-tag-bits <int>static final org.apache.commons.cli.OptionPayload switch: --chachastatic final org.apache.commons.cli.OptionChaCha counter value: --chacha-counter <int>static final org.apache.commons.cli.OptionChaCha initial counter: --chacha-initial <int>static final org.apache.commons.cli.OptionChaCha nonce: --chacha-nonce <hex>static final org.apache.commons.cli.OptionDecrypt mode: -d|--decrypt <input>static final org.apache.commons.cli.OptionDirect secret: --directstatic final org.apache.commons.cli.OptionEncrypt mode: -e|--encrypt <input>static final org.apache.commons.cli.OptionHeader toggle: --headerstatic final org.apache.commons.cli.OptionHKDF: --hkdf [infoHex]static final org.apache.commons.cli.OptionKEM id: --kem <id>static final org.apache.commons.cli.OptionDerived key bytes: --key-bytes <int>static final org.apache.commons.cli.OptionKeyring path: -K|--keyring <file>static final org.apache.commons.cli.OptionDiscovery: --list-kemsstatic final org.apache.commons.cli.OptionMax KEM ciphertext len: --max-kem-ct <int>static final org.apache.commons.cli.OptionOutput path: -o|--output <file>static final org.apache.commons.cli.OptionRecipient private alias (decrypt): --priv <alias>static final org.apache.commons.cli.OptionRecipient public alias (encrypt): --pub <alias> -
Method Summary
Modifier and TypeMethodDescriptionstatic intExecutes the KEM command using interactive keyring unlocking.static intmain(String[] args, org.apache.commons.cli.Options opts, KeyringUnlockProvider unlockProvider) Executes the KEM command with an explicit keyring unlock source.
-
Field Details
-
OPT_ENCRYPT
public static final org.apache.commons.cli.Option OPT_ENCRYPTEncrypt mode: -e|--encrypt <input> -
OPT_DECRYPT
public static final org.apache.commons.cli.Option OPT_DECRYPTDecrypt mode: -d|--decrypt <input> -
OPT_OUTPUT
public static final org.apache.commons.cli.Option OPT_OUTPUTOutput path: -o|--output <file> -
OPT_KEYRING
public static final org.apache.commons.cli.Option OPT_KEYRINGKeyring path: -K|--keyring <file> -
OPT_PUB
public static final org.apache.commons.cli.Option OPT_PUBRecipient public alias (encrypt): --pub <alias> -
OPT_PRIV
public static final org.apache.commons.cli.Option OPT_PRIVRecipient private alias (decrypt): --priv <alias> -
OPT_KEM
public static final org.apache.commons.cli.Option OPT_KEMKEM id: --kem <id> -
OPT_LIST_KEMS
public static final org.apache.commons.cli.Option OPT_LIST_KEMSDiscovery: --list-kems -
OPT_AES
public static final org.apache.commons.cli.Option OPT_AESPayload switch: --aes -
OPT_CHACHA
public static final org.apache.commons.cli.Option OPT_CHACHAPayload switch: --chacha -
OPT_AAD
public static final org.apache.commons.cli.Option OPT_AADAAD (hex): --aad <hex> -
OPT_HEADER
public static final org.apache.commons.cli.Option OPT_HEADERHeader toggle: --header -
OPT_HKDF
public static final org.apache.commons.cli.Option OPT_HKDFHKDF: --hkdf [infoHex] -
OPT_DIRECT
public static final org.apache.commons.cli.Option OPT_DIRECTDirect secret: --direct -
OPT_KEY_BYTES
public static final org.apache.commons.cli.Option OPT_KEY_BYTESDerived key bytes: --key-bytes <int> -
OPT_MAX_KEM_CT
public static final org.apache.commons.cli.Option OPT_MAX_KEM_CTMax KEM ciphertext len: --max-kem-ct <int> -
OPT_AES_CIPHER
public static final org.apache.commons.cli.Option OPT_AES_CIPHERAES mode: --aes-cipher gcm|ctr|cbc -
OPT_AES_IV
public static final org.apache.commons.cli.Option OPT_AES_IVAES IV: --aes-iv <hex> -
OPT_AES_TAG_BITS
public static final org.apache.commons.cli.Option OPT_AES_TAG_BITSAES tag bits: --aes-tag-bits <int> -
OPT_CHACHA_NONCE
public static final org.apache.commons.cli.Option OPT_CHACHA_NONCEChaCha nonce: --chacha-nonce <hex> -
OPT_CHACHA_COUNTER
public static final org.apache.commons.cli.Option OPT_CHACHA_COUNTERChaCha counter value: --chacha-counter <int> -
OPT_CHACHA_INITIAL
public static final org.apache.commons.cli.Option OPT_CHACHA_INITIALChaCha initial counter: --chacha-initial <int>
-
-
Method Details
-
main
public static int main(String[] args, org.apache.commons.cli.Options opts) throws org.apache.commons.cli.ParseException, IOException, GeneralSecurityException Executes the KEM command using interactive keyring unlocking.- Parameters:
args- command argumentsopts- command options- Returns:
- process exit code
- Throws:
org.apache.commons.cli.ParseException- if arguments are invalidIOException- if I/O failsGeneralSecurityException- if cryptographic processing fails
-
main
public static int main(String[] args, org.apache.commons.cli.Options opts, KeyringUnlockProvider unlockProvider) throws org.apache.commons.cli.ParseException, IOException, GeneralSecurityException Executes the KEM command with an explicit keyring unlock source.- Parameters:
args- command argumentsopts- command optionsunlockProvider- keyring password provider- Returns:
- process exit code
- Throws:
org.apache.commons.cli.ParseException- if arguments are invalidIOException- if I/O failsGeneralSecurityException- if cryptographic processing fails
-