# OO Interface
$ref = Crypt::Solitaire->new( $passphrase );
$encrypted = $ref->encrypt( $text );
$ref2 = Crypt::Solitaire->new( $passphrase );
$decrypted = $ref2->decrypt( $encrypted );
# Functional Interface
my $encrypted = Pontifex( $plaintext, $passphrase, $mode );
Solitaire is a top-notch pencil-and-paper encryption system developed by Bruce Schneier.
Here is the description in Schneiers own words:
In Neal Stephensons novel Cryptonomicon, the character Enoch Root describes a
cryptosystem code-named Pontifex to another character named Randy Waterhouse, and later
reveals that the steps of the algorithm are intended to be carried out using a deck of
playing cards. These two characters go on to exchange several encrypted messages using
this system. The system is called Solitaire (in the novel, Pontifex" is a code name
intended to temporarily conceal the fact that it employs a deck of cards) and I designed
it to allow field agents to communicate securely without having to rely on electronics or
having to carry incriminating tools. An agent might be in a situation where he just does
not have access to a computer, or may be prosecuted if he has tools for secret
communication. But a deck of cards...what harm is that?
Solitaire gets its security from the inherent randomness in a shuffled deck of cards. By
manipulating this deck, a communicant can create a string of random" letters that he
then combines with his message. Of course Solitaire can be simulated on a computer, but
it is designed to be implemented by hand.
Solitaire may be low-tech, but its security is intended to be high-tech. I designed
Solitaire to be secure even against the most well-funded military adversaries with the
biggest computers and the smartest cryptanalysts. Of course, there is no guarantee that
someone wont find a clever attack against Solitaire, but the algorithm is certainly
better than any other pencil-and-paper cipher Ive ever seen.
Simple system, easy to use, and relatively fast.