Skip to content
/ enoch Public

Feature-rich ANSI C (C89) implementation of Bruce Schneier's Pontifex/Solitaire crypto system

License

Notifications You must be signed in to change notification settings

Turysaz/enoch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

57 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Enoch

ANSI C implementation of Bruce Schneier's playing card based Solitaire symmetric crypto system, that's being used by the characters in Neil Stephenson's novel Cryptonomicon.

Features

  • encryption and decryption
  • password-based key generation
  • explicit key definition
  • output of password-generated keys
  • key stream output
  • C89

("Key" means the card deck order)

Example

$ # encrypt:
$ enoch -p cryptonomicon | tee out.txt
solitaire
^D
-----BEGIN PONTIFEX MESSAGE-----
KIRAK SFJAN 
-----END PONTIFEX MESSAGE-----

$ # decrypt:
$ enoch -d -p cryptonomicon -i out.txt
SOLITAIREX

$ # print 40 characters of key stream
$ enoch -p foobar -s 40
AHCIM TKLCX XZSFC KYAJD KTZWY CXJWI LYTUG ACQTM

Usage

$ enoch --help
Usage: enoch [OPTION...] 
Implementation of Bruce Schneier's solitaire/pontifex cryptosystem.

  -d, --decrypt              Decrypt input.
  -e, --encrypt              Encrypt input. This is the default.
      --gen-key              Generate and print a passwd-based key.
  -s, --stream=N             Just print N keystream symbols.
  -i, --input=FILE           Read input from FILE instead of stdin.
  -o, --output=FILE          Write output to FILE instead of stdout.
  -f, --key-file=FILE        Read key from FILE.
  -j, --move-jokers          Move jokers for key generation. (-p or --gen-key
                             only)
  -k, --key=KEY              Define symmetric key.
  -p, --password=PASSWD      Use an alphabetic  passphrase
  -q, --quiet                Reduces all log output except errors
  -r, --raw                  Skip PONTIFEX MESSAGE frame. (-e / -d)
  -v, --verbose              Increases verbosity (up to '-vv')
  -?, --help                 Give this help list
      --usage                Give a short usage message
  -V, --version              Print program version

Mandatory or optional arguments to long options are also mandatory or optional
for any corresponding short options.

Dependencies

Build

Run make. This will build and execute the unit tests as well. To execute the Valgrind tests as well, run make valgrind To build enoch only, run make enoch.

About

Feature-rich ANSI C (C89) implementation of Bruce Schneier's Pontifex/Solitaire crypto system

Topics

Resources

License

Stars

Watchers

Forks