   ___      _    _____    _     ___                                      
  / __\__ _| |_  \_   \__| |   / __\___  _ __ ___  _ __ ___   ___  _ __  
 / /  / _` | __|  / /\/ _` |  / /  / _ \| '_ ` _ \| '_ ` _ \ / _ \| '_ \ 
/ /__| (_| | |_/\/ /_| (_| | / /__| (_) | | | | | | | | | | | (_) | | | |
\____/\__,_|\__\____/ \__,_| \____/\___/|_| |_| |_|_| |_| |_|\___/|_| |_|
                                                                         
   ___          _          __ _ _                              _   ___  
  / __\___   __| | ___    / /(_) |__  _ __ __ _ _ __ _   _    / | / _ \ 
 / /  / _ \ / _` |/ _ \  / / | | '_ \| '__/ _` | '__| | | |   | || | | |
/ /__| (_) | (_| |  __/ / /__| | |_) | | | (_| | |  | |_| |   | || |_| |
\____/\___/ \__,_|\___| \____/_|_.__/|_|  \__,_|_|   \__, |   |_(_)___/ 
                                                     |___/            
      CatId Common Code Library 1.0                           07/23/2009



                 Released under a BSD-style license



------------------------------------------------------------------------
======================= Contact the Author =============================
------------------------------------------------------------------------

Christopher A. Taylor

  Email: mrcatid@gmail.com
  AIM: MrCatid
  MSN: MrCatid@hotmail.com
  WWW: http://catid.org


------------------------------------------------------------------------
=========================== What's New =================================
------------------------------------------------------------------------

Latest revisions are available in the SVN log at libcatid.googlecode.com


------------------------------------------------------------------------
============================== TODO ====================================
------------------------------------------------------------------------

Tunnel:
  Update the documentation
    .docx and .pdfs with lots of pictures

Portability:
  Port the code to Mac


------------------------------------------------------------------------
============================= History ==================================
------------------------------------------------------------------------

07/23/2009 - Added switches for demo of 384-bit and 512-bit security
             Fixed 384-bit version of BigRTL::Load and BigRTL::Store
             Implemented template metaprogramming Comba Multiply
07/22/2009 - Visual Studio 2005 version works again
07/21/2009 - Split math code across many source files
             Reorganized the project for easier reuse
07/20/2009 - New key agreement protocol "Tabby" is working
             New functions added to BigTwistedEdward to support it
             Added <cat/port/AlignedAlloc.hpp> to align all math regs
             Optimized 32-bit version; now twice as fast as before
07/19/2009 - Pulled out all the old Tunnel code and rewrote it
07/17/2009 - Added <cat/crypt/rand/Fortuna.hpp>
07/15/2009 - Half way through writing Fortuna
             Slightly faster scalar point multiplication precomputation
             Worked on basic outline for new AKE protocol
07/14/2009 - Implemented and tested HMAC-MD5; this is now the Tunnel MAC
             Several bug fixes
07/13/2009 - Fixed Tunnel vulnerability to active small subgroup attack
             Fixed a bug in MrNegate()
07/12/2009 - Added inline assembly code for MultiplyXAdd()
             Added fast timing-attack resistant modular inversion
             Optimized MrSquareRoot() with a smaller window
07/11/2009 - All the math code is working again! Woohoo! =)
             Added <cat/crypt/SecureCompare.hpp> to replace memcmp()
07/10/2009 - Wrote 64-bit assembly code version of Divide()
07/09/2009 - In the middle of getting math working again
07/07/2009 - Merged Skein256 and Skein512 into the same object
07/02/2009 - Refactored math code; put a lot of unused code in the attic
             Added specialized 256-bit assembly code to math library
06/25/2009 - Improved replay attack protection to 1024 bits
06/24/2009 - Increased IV bits to 24 and moved IV code to TunnelSession
             Tunnel now has replay attack protection
             Fix: Tunnel only updates remote IV if it increased
             Split BigInt source across many files
06/23/2009 - Tunnel uses Skein for a MAC
             Tunnel no longer requires a cookie exchange
             Removed support for SHA-2 in favor of Skein
             Added math/EndianNeutral.hpp to Common
             Added math/BitMath.hpp to Common
             Added threads/Atomic.hpp to Common
06/20/2009 - Supports 512-bit ECC
             CookieJar now Supports IPv6 and variable-length addresses
             Put CAT_ before global macros
             Split up library into even more projects
06/19/2009 - Now can select a bit-twiddling version of w-MOF
06/16/2009 - Implemented Skein-256 and Skein-512 and timing tests
06/15/2009 - Implemented SHA-512 (and SHA-384) and unit tests
             ChaCha cipher now accepts up to 384-bit keys
             Hash and PRNG objects are now implemented from an interface
             Improved lockless FIFO code with opportunistic algorithm
             Now supports 384-bit ECC
06/14/2009 - Added <cat/crypto/Tunnel.hpp> and /docs/tunnel.pdf
06/13/2009 - Added ChaCha::ReconstructIV
06/12/2009 - Fixed endian neutrality of the Sha256 hash, so also ECC
             Added full handshake demo to the ECC unit test
06/11/2009 - Split the math code off from the framework code
06/10/2009 - Merged my code into this library for the first time

