NAME
    Crypt::Nash - Implementation of Nash Cryptosystem

DESCRIPTION
    This is a self-synchronizing cipher feedback stream cipher proposed by
    John Nash in 1950, just recently declassified.

NOTES
    -- Nash doesn't say anything about the initial state of the bits in the
    system; here we allow an initial state as part of the key It would be
    reasonable and interesting to consider other possibilities, such as
    having a fixed initial state (all zeros), or running the system with
    "0"'s as input for a while to arrive at an initial state, or ... ??

    -- We implement the example given in his note. There is one arrow
    missing a label; we assume here the missing label is a "+". We also
    choose an arbitrary starting state as part of the key.

    -- There are many interesting open questions about this system; here are
    some as ``food for thought'': (a) Are there ``weak keys''? (Keys that
    shouldn't be used?) (b) If the system receives periodic input, it will
    exhibit periodic output. (E.g. input 001001001001001...) What can be
    said about the periodicities? (c) How do different guesses about what
    Nash intended for the starting state affect security? (d) How long can a
    given bit circulate internally? (e) Can you figure out the permutations
    and bit-flips if you are allowed to specify inputs to the system, and to
    reset it to the initial state whenever you like? (Effectively, a chosen
    ciphertext attack) (f) Is the output of the system balanced (equal
    number of 0's and 1's) or unbalanced (biased somehow)?

METHODS
  new <n>, <red permutation>, <red bits>, <blue permutation>, <blue bits>, <initial permutation>
    n - number of state bits (not counting D, P entry point, or output bit)
    red permutation - specifies the red permutation: redp[i] says where bit
    i comes from, in the red permutation
    red bits - 1 = complement, 0 = no complement
    blue permutation - blue permutation
    blue bits - same as for redbits
    initial permuatation - initial state P[0...n] and P[n+1]=output bit.
    P[0] is entry point

  encrypt <bit stream>
    Encrypt bitstring, return ciphertext string

  decrypt
    Decrypt bitstring, return ciphertext string

AUTHOR
    Python Implementation by Ronald L. Rivest (2/17/2012)

    Available here http://courses.csail.mit.edu/6.857/2012/files/nash.py

    Perl port by Simon Wistow

