=====================================================================
                         C H A N G E   L O G
=====================================================================

Version 0.2.2  2010-04-10
    Public API:
    * All ciphers now fully support non-string iterable arguments.
    * Ciphers now can be called from either the class or the instance.
    * Can override keys when calling on an instance.
    * Added choice parameter to randchars function.
    * Weaken restriction on number of rows for RowTranspose cipher,
      allowing the null (unencrypted) cipher and encryption/decryption
      of the empty string.
    * Explicitly prohibit using the empty string as a key for Chaff.
    * Allow Chaff.unpad to deal with messages that have been truncated
      or extended with extra junk.
    * Add support for null cipher to Vigenere.
    * Many documentation changes and cleanup of doctests.
    * Example text file containing many executable examples.

    Bug fixes:
    * Fix bug in RailFence with invalid key strings.
    * Refactor frob to fix serious bug.

    Implementation changes:
    * Significant refactoring and renaming of classes and methods.
    * Better compliance with PEP 8.

    Testing:
    * More than double the number of unit tests.
    * Refactored unit tests.
    * Fix serious problem with doctests not being run from testsuite,
      requiring complete redesign of selftest and supporting functions.
    * Provide a script which tests the speed optimisations for frob.

    Known issues and bugs:
    * How should Chaff deal with too few characters in the random stream?
    * Encryption/decryption tokens are calculated independently even when
      they don't need to be.
    * RailFence still has no decryption (scheduled for next release).
    * Serious bug in Playfair when you have repeated uppercase X.
    * RailFence doesn't properly support providing rails and key separately.


Version 0.2.2b  2010-02-17
    Provided unit tests.
    Move self-test code into a function.
    Work around lack of support for method descriptors in doctest.
    Fix silly bug in _MonoSubCipher abstract base class.
    Better/more comments in source code, including justification for some
    unusual implementation details. (Use of class object as functor.)
    Move static method ceildiv into stand-alone function.
    Simplified RailFence.iter_rails method.

Version 0.2.2a  2010-02-09
    FIRST PUBLIC RELEASE
    Refactored common code into abstract base classes.
    Added support for iterables (streaming) to additional ciphers.
    Refactored Playfair to support iterable arguments as well as strings.
    Added Playfair6 and Playfair16 ciphers.
    Added RailFence (encryption only).
    Optimised frob in the case of key length == 1.
    More documentation and doctests.

    Known issues:
        No decryption of RailFence.
        Chaff and Vigenere do not support iterables other than strings.
        doctest.testmod doesn't see tests in some methods: see reported bug
        http://bugs.python.org/issue4037

Version 0.2.1a  2010-02-01
    Added ability to stream selected ciphers (rot13 and family).
    Fixed a mistake in the algorithm for the Keyword cipher.

Version 0.2a    2010-01-31
    Add rot5, rot18, rot47, Keyword, Affine ciphers.
    Improved documentation and more doctests.

Version 0.1a    2010-01-15
    Initial version, including rot13, Caesar, atbash, Playfair, RowTranspose,
    Chaff, Vigenere, frob ciphers.



