AFAICS, only real use-case is a symmetric encryption facility without invoking a subprocess, as Lars said. This patch tries to add a command for it. This is not intended for inclusion (at the moment, at least), but wanted to show the fact: one would need fair amount of work to implement a simple and reasonably secure encryption function, even if raw encryption primitives are available. So, decrypt function is currently missing on purpose (now that encryption is available, it is not hard to implement - just do reverse), and not too secure as it uses `random'. To try, run admin/merge-gnulib and recompile. You will then find the `simple-encrypt-string' function: --8<---------------cut here---------------start------------->8--- simple-encrypt-string is a built-in function in `C source code'. (simple-encrypt-string STRING KEY) Symmetrically encrypt STRING with KEY and returns ciphertext. The format of the return value is compatible with GnuPG. This function currently uses 128-bit AES for the cipher algorithm, SHA-256 for the hash algorithm, and 8-octet random salt for key derivation. --8<---------------cut here---------------end--------------->8--- (simple-encrypt-string "string" "key") => cipher (let ((context (epg-make-context 'OpenPGP))) (epg-decrypt-string context (simple-encrypt-string "string" "key"))) => "string" I chose OpenPGP format not only for interoperability (though Ted doesn't seem to care), but also because it is well-tested by cryptanalysts: http://eprint.iacr.org/2005/033.pdf This is what I suggested to him before, he agreed, but has never been realized. To be honest, I doubt that this feature is generally useful (maybe only Ted and his auth-source.el users are complaining?) and still prefer EPG because of security, but I'm tired with the repeated nonsensical discussions with them. Regards, -- Daiki Ueno