Home | History | Annotate | Download | only in libtomcrypt
      1 December 16th, 2006
      2 v1.16 -- Brian Gladman pointed out that a recent change to GCM broke how the IV was handled.  Currently the code complies against his test vectors
      3          so the code should be considered frozen now.
      4       -- Trevor from Cryptography Research Inc. submitted patches to convert the ECC code to be generic allowing curve parameters to be submitted
      5          at runtime.  
      6       -- Fixed various doxygen comments
      7       -- Added UTF8 support to the ASN1 code
      8       -- Fixed STOREXXH macros for x86 platforms (Fix found at Elliptic Inc.)
      9       -- Added makefile.unix which is BSD compatible, you have to manually tweak it since well I don't use it normally
     10       -- removed a few lingering memcpy's
     11       -- Fixed memory free errors in ecc_sign_hash() that can arise if the mp_init_multi() fails
     12       -- Fixed incorrect return value in pkcs_1_pss_decode() which would correctly set res to 0 (indicating an incorrect signature) but 
     13          would return CRYPT_OK to the caller
     14       -- ltc_ecc_mulmod() could leak memory if mp_init(&mu) failed, fixed.  Would you believe that ltc_ecc_mulmod_timing() had the same
     15          bug?  Also fixed.  :-)
     16       -- Added Shamir's trick to the ECC side (defined as LTC_ECC_SHAMIR, enabled by default), gets ~1.34x to ~1.40x faster ECC verifications
     17       -- Added Brian's vector #46 to the GCM code.  It catches the ctr counter error from v1.15.  Originally I was going to add all of his vectors,
     18          but they're not as easy to parse and I got a lot of other things to do.  Regression!
     19       -- Various other small fixes to the ECC code to clean up error handling (I think most of that was from the move in 1.06 to the plugins)
     20          All of the errors were in cleaning up from heap failures.  So they were not likely to be triggered in normal usage
     21          Made similar fixes to the RSA and DSA code (my bad)
     22       -- Cryptography Research Inc. contributed a bunch of fixes to silence warnings (with MSVC) w.r.t. assigned data to unsigned char types.
     23       -- Martin Marko suggested some fixes to make the RNG build with WinCE.
     24       -- Updates to the manual for print (some fixes thanks to Martin Marko)
     25       
     26 
     27 November 17th, 2006
     28 v1.15 -- Andreas Lange found that if sha256_init DID fail in fortuna it wouldn't clean up the state correctly.  Thanks.
     29          Fortunately sha256_init cannot fail (as of v1.14) :-)
     30       -- Andreas Lange contributed RMD-256 and RMD-320 code.
     31       -- Removed mutex locks from fortuna_import as they create a deadlock and aren't required anyways [Avi Zelmanovich]
     32       -- Added LTC_NO_PROTOTYPES to avoid prototyping functions like memset/memcpy.  Required for fans of GCC 3.3.x
     33       -- David Eder caught a off by one overrun bug in pmac_done() which can be exploited if your output tag buffer is 
     34          smaller than the block size of the cipher, e.g. if you have a 4-byte buffer and you tell pmac_done that you want
     35          a 4-byte TAG it will store 4 bytes but return an outlen of 5.
     36       -- Added signatures to the ECC and RSA benchmarks
     37       -- Added LTC_PROFILE to run the PK tests only once in the timing demo (so you can capture events properly)
     38       -- Andreas contributed PKCS #1 v1.5 code that merged cleanly with the existing PKCS code.  w00t.
     39          (update: I had to fix it to include the digestInfo and what not.  Bad Andreas, bad! hehehe)
     40       -- Fixed a signed variable error in gcm_process() (hard to trigger bug fortunately)
     41       -- Removed all memcmp/memset/memcpy from the source (replaced with X macros)
     42       -- Renamed macros HMAC/OMAC/PMAC to have a LTC_ prefix.  If you pass these on the command line please update your makefiles
     43       -- Added XCBC-MAC support [RFC 3566]
     44       -- fixed LOAD32H and LOAD64H to stop putting out that darn warning :-)
     45       -- Added the Korean SEED block cipher [RFC 4269]
     46       -- Added LTC_VALGRIND define which makes SOBER-128 and RC4 a pure PRNG (and not a stream cipher).  Useful if you use 
     47          Valgrind to debug your code (reported by Andreas Lange)
     48       -- Made SOBER-128 more portable by removing the ASCII key in the test function (my bad, sorry).
     49       -- Martin Mocko pointed out that if you have no PRNGs defined the lib won't build.  Fixed, also fixed for if you have no
     50          hashes defined.
     51       -- Sped up F8 mode with LTC_FAST
     52       -- Made CTR mode RFC 3686 compliant (increment counter first), to enable, OR the value LTC_CTR_RFC3686 to the "mode"
     53          parameter you pass to ctr_start(), otherwise it will be LTC compliant (e.g. encrypt then increment)
     54       -- Added ctr_test() to test CTR mode against RFC 3686
     55       -- Added crypt_fsa() ... O_o
     56       -- Fixed LTC_ECC_TIMING_RESISTANT so it once again builds properly (pt add/dbl are through the plugin now)
     57       -- Added ANSI X9.63 (sec 4.3.6) import/export of public keys (cannot export to compressed formats but will import 
     58          hybrid compressed)
     59       -- Added SECP curves for 112, 128, and 160 bits (only the 'r1' curves)
     60       -- Added 3GPP-F9 MAC (thanks to Greg Rose for the test vectors)
     61       -- Added the KASUMI block cipher
     62       -- Added F9/XCBC/OMAC callbacks to the cipher plugin
     63       -- Added RSA PKCS #1 v1.5 signature/encrypt tests to rsa_test.c
     64       -- Fix to yarrow_test() to not call yarrow_done() which is invalid in that context (thanks Valgrind)
     65       -- Christophe Devine pointed out that Anubis would fail on various 64-bit UNIX boxes when "x>>24" was used as an index, we needed 
     66          to mask it with 0xFF.  Thanks.  Fixed.
     67 
     68 August 0x1E, 0x07D6
     69 v1.14 -- Renamed the chaining mode macros from XXX to LTC_XXX_MODE.  Should help avoid polluting the macro name space.
     70       -- clean up of SHA-256
     71       -- Chris Colman pointed out that der_decode_sequence_* allows LTC_ASN1_SETOF to accept SEQUENCEs and vice versa.
     72          Decoder [non-flexi decoder that is] is more strict now and requires a match.
     73       -- Steffen Jaeckel pointed out a typo in the user manual (re: rsa_exptmod).  Fixed.  This disproves the notion that
     74          nobody reads it.  :-)
     75       -- Made GCM a bit more portable w.r.t. handling the CTR IV (e.g. & with 255)
     76       -- Add LTC_VERBOSE if you really want to see what test is doing :-)
     77       -- Added SSE2 support to GCM [use GCM_TABLES_SSE2 to enable], shaves 2 cycles per byte on Opteron processors
     78          Shaved 4 cycles on a Prescott (Intel P4)
     79          Requires you align your gcm_state on a 16 byte boundary, see gcm_memory() for more info
     80       -- Added missing prototype for f8_test_mode()
     81       -- two fixes to CCM for corner cases [L+noncelen > 15] and fixing the CTR pad to encrypt the CBC-MAC tag
     82       -- Franz Glasner pointed out the ARGTYPE=4 is not actually valid.  Fixed.
     83       -- Fixed bug in f8_start() if your key < saltkey unspecified behaviour occurs.  :-(
     84       -- Documented F8 mode.  Yeah, because you read the manual.  
     85       -- Minor updates to the technotes.
     86 
     87 
     88 June 17th, 2006
     89 v1.13 -- Fixed to fortuna_start() to clean up state if an error occurs.  Not really useful at this stage (sha256 can't fail) but useful
     90          if I ever make fortuna pluggable
     91       -- Mike Marin submitted a whole bunch of patches for fixing up the libs on traditional UNIX platforms.  Go AIX!  Thanks!
     92       -- One of bugs found in the multi demo highlights that at least with gcc you need to pass integers with a UL prefix to ensure
     93          they're unsigned long
     94       -- Updated the FP ECC code to use affine points.  It's teh fast.
     95       -- Made it so many functions which return CRYPT_BUFFER_OVERFLOW now also indicate the required buffer size, note that not all functions
     96          do this (most do though).
     97       -- Added F8 chaining mode.  It's super neato.
     98 
     99 May 29th, 2006
    100 v1.12 -- Fixed OID encoder/decoder/length to properly handle the first two parts of an OID, matches 2002 X.690 now.
    101       -- [Wesley Shields] Allows both GMP/LTM and TFM to be defined now.  
    102       -- [Wesley Shields] GMP pluggin is cleaner now and doesn't use deprecated symbols. Yipee
    103       -- Added count_lsb_bits to get the number of leading LSB zero bits there are.
    104       -- Fixed a bug in the INTEGER encoders for values of -(256**k)/2
    105       -- Added BOOLEAN type to ASN.1 thingy-ma-do-hicky
    106       -- Testprof doesn't strictly require GMP ... oops [Nils Durner]
    107       -- Added LTC_CALL and LTC_EXPORT macros in tomcrypt_cfg.h to support various calling and linker conventions
    108          (Thanks to John Kirk from Demonware)
    109       -- In what has to be the best thing since sliced bread I bring you MECC_FP which is the fixed point
    110          ECC point multiplier.  It's fast, it's sexy and what's more it's hella fast [did I mention it's fast?]
    111          You can tune it somewhat with FP_LUT (default to 8) for look-up width.
    112          Read section 8.2 of the manual for more info.
    113          It is disabled by default, you'll have to build LTC with it defined to get it.  
    114       -- Fixed bug in ecc_test.c (from testprof) to include the 521 [not 512] bit curve.  :-)
    115 
    116 April 4th, 2006
    117 v1.11 -- Removed printf's from lrw_test ... whoops
    118       -- lrw_process now checks the return of the cipher ecb encrypt/decrypt calls
    119       -- lrw_start was not using num_rounds ...
    120       -- Adam Miller reported a bug in the flexi decoder with elements past the end of a sequence.  Fixed.
    121       -- Bruce Guenter suggested I use --tag=CC for libtool builds where the compiler may think it's C++.  (I applied this to LTM and TFM)
    122       -- Optimized the ECC for TFM a bit by removing the useless "if" statements (most TFM functions don't return error codes)
    123          Actually shaved a good chunk of time off and made the code smaller.  By default with TFM the stock LTC point add/dbl functions 
    124          will be totally omitted (ECC-256 make key times on a Prescott for old vs. new are 11.03M vs. 9.59M cycles)
    125       -- added missing CVS tags to ltc_ecc_mulmod.c
    126       -- corrected typo in tomcrypt_cfg.h about what the file has been called 
    127       -- corrected my address in the user manual.  A "bit" out of date.
    128       -- added lrw_gen to tv_gen
    129       -- added GMP plugin, only tested on a AMD64 and x86_32 Gentoo Linux box so be aware
    130       -- made testme.sh runs diff case insensitivityly [whatever...] cuz GMP outputs lowercase satan text
    131       -- added LDFLAGS to the makefile to allow cross porting linking options
    132       -- added lrw_test() to the header file ... whoops
    133       -- changed libtomcrypt.org to libtomcrypt.com .... mumble mumble
    134       -- Updates to detect __STRICT_ANSI__ which is defined in --std=c99 modes (note -ansi is not supported as it lacks long long) so you can
    135          build LTC out of the box with c99 (note: it'll be slower as there is no asm in this case)
    136       -- Updated pelican.c and aes_tab.c to undef tables not-required.  The tables are static so both AES and Pelican MAC would have copies.  Save a few KB in the final binary.
    137       -- Added LTC_NO_FAST to the makefile.icc to compensate for the fact ICC v9 can't handle it (Pelican MAC fails for instance)
    138 
    139 February 11th, 2006
    140 v1.10 -- Free ecb/cbc/ctr/lrw structures in timing code by calling the "done" function
    141       -- fixed bug in lrw_process() which would always use the slow update ...
    142       -- vastly sped up gcm_gf_mult() when LTC_FAST is defined.  This speeds up LRW and GCM state creation, useful for servers with GCM
    143       -- Removed NLS since there are some attacks against it.  
    144       -- fixed memory leak in rsa_import reported by John Kuhns
    145       ++ re-released as the rsa fix was incorrect (bad John bad ... hehehe) and I missed some NULLs in the static descriptor entry for ciphers 
    146 
    147 January 26th, 2006
    148 v1.09 -- Added missing doxygen comments to some of the ASN.1 routines
    149       -- Added "easy button" define LTC_EASY and LTC will build with a subset of all the algos.  Reduces build times for typical
    150          configurations.  Tunable [see tomcrypt_custom.h]
    151       -- Added some error detection to reg_algs() of the testprof.a library to detect when the PRNG is not setup correctly (took me 10 mins to figure out, PITA!)
    152       -- Similar fixes to timing demo (MD5 not defined when EASY is defined)
    153       -- Added the NLS enc+mac stream cipher from QUALCOMM, disabled for this release, waiting on test vectors
    154       -- Finally added an auto-update script for the makefiles.  So when I add new files/dirs it can automatically fix up the makefiles [all four of them...]
    155       -- Added LRW to the list of cipher modes supported
    156       -- cleaned up ciphers definitions to remove cbc/cfb/ofb/ctr/etc from the namespace when not used.
    157 
    158 November 24th, 2005
    159 v1.08 -- Added SET and SET OF support to the ASN.1 side
    160       -- Fixed up X macros, added QSORT to the mix [thanks SET/SETOF]
    161       -- Added XMEMCMP to the list of X macros
    162       -- In der_decode_sequence() the SHORT_INTEGER type was not being handled correctly [oddly enough it worked just enough to make RSA work ... go figure!]
    163       -- Fixed bug in math descriptors where if you hadn't defined MECC (ECC support) you would get linker errors
    164       -- Added RSA accelerators to the math descriptors to make it possible to not include the stock routines if you supply your own.
    165       -- dsa_decrypt_key() was erroneously dependent on MECC not MDSA ... whoops
    166       -- Moved DSA size limits to tomcrypt_pk.h so they're defined with LTC_NO_PK+MDSA
    167       -- cleaned up tomcrypt_custom.h to make customizable PK easier (and also cleaned up the error traps so they're correctly reported)
    168 
    169 November 18th, 2005
    170 v1.07 -- Craig Schlenter pointed out the "encrypt" demo doesn't call ctr_start() correctly.  That's because as of a few releases ago
    171          I added support to set the mode of the counter at init time
    172       -- Fixed some "testprof" make issues
    173       -- Added RSA keygen to the math descriptors
    174       -- Fixed install_test target ... oops
    175       -- made the "ranlib" program renamable useful for cross-compiling
    176       -- Made the cipher accelerators return error codes.  :-)
    177       -- Made CCM accept a pre-scheduled key to speed it up if you use the same key for multiple packets
    178       -- Added "Katja" public key crypto.  It's based on the recent N = p^2q work by Katja.  I added OAEP padding
    179          to it.  Note this code has been disabled not because it doesn't work but because it hasn't been thoroughly
    180          analyzed.   It does carry some advantages over RSA (slightly smaller public key, faster decrypt) but also
    181          some annoying "setup" issues like the primes are smaller which makes ECM factoring more plausible.
    182       -- Made makefile accept a NODOCS flag to disable the requirement of tetex to install LTC for you no tetex people... all 3 of ya  :-)
    183       -- Cleaned up rsa_export() since "zero" was handled with a SHORT_INTEGER
    184       -- Cleaned up the LIBTEST_S definitions in both GNU makefiles.  A few minor touchups as well.
    185       -- Made the cipher ecb encrypt/decrypt return an int as well, changed ALL dependent code to check for this.  
    186       -- der_decode_choice() would fail to mark a NULL as "used" when decoding.  Fixed
    187       -- ecc_decrypt_key() now uses find_hash_oid() to clean up the code ;-)
    188       -- Added mp_neg() to the math descriptors.
    189       -- Swapped arguments for the pkcs_1_mgf1() function so the hash_idx is the first param (to be more consistent)
    190       -- Made the math descriptors buildable when RSA has been undefined
    191       -- ECC timing demo now capable of detecting which curves have been defined
    192       -- Refactored the ECC code so it's easier to maintain.  (note: the form of this code hasn't really changed since I first added ECC ... :-/)
    193       -- Updated the documentation w.r.t. ECC and the accelerators to keep it current
    194       -- Fixed bug in ltc_init_multi() which would fail to free all allocated memory on error.
    195       -- Fixed bug in ecc_decrypt_key() which could possibly lead to overflows (if MAXBLOCKSIZE > ECC_BUF_SIZE and you have a hash that emits MAXBLOCKSIZE bytes)
    196       -- Added encrypt/decrypt to the DSA side (basically DH with DSA parameters)
    197       -- Updated makefiles to remove references to the old DH object files and the ecc_sys.o crap ... clean code ahead!
    198       -- ecc_import() now checks if the point it reads in lies on the curve (to prevent degenerative points from being used)
    199       -- ECC code now ALWAYS uses the accelerator interface.  This allows people who use the accelerators to not have the stock
    200          ECC point add/dbl/mul code linked in.  Yeah space savings! Rah Rah Rah.
    201       -- Added LTC_MUTEX_* support to Yarrow and Fortuna allowing you to use respective prng_state as a global PRNG state [e.g. thread-safe] if you define one of the LTC_* defines at
    202          build time (e.g. LTC_PTHREAD == pthreads)
    203       -- Added PPC32 support to the rotate macros (tested on an IBM PPC 405) and LTC_FAST macros (it aint fast but it's faster than stock)
    204       -- Added ltc_mp checks in all *_make_key() and *_import() which will help catch newbs who don't register their bignum first :-)
    205       -- the UTCTIME type was missing from der_length_sequence() [oops, oh like you've never done that]
    206       -- the main makefile allows you to rename the make command [e.g. MAKE=gmake gmake install] so you can build LTC on platforms where the default make command sucks [e.g. BSD]
    207       -- Added DER flexi decoder which allows the decoding of arbitrary DER encoded packets without knowing
    208          their structure in advance (thanks to MSVC for finding 3 bugs in it just prior to release! ... don't ask)
    209 
    210 August 1st, 2005
    211 v1.06 -- Fixed rand_prime() to accept negative inputs as a signal for BBS primes. [Fredrik Olsson]
    212       -- Added fourth ARGCHK type which outputs to stderr and continues.  Useful if you trap sigsegv.   [Valient Gough]
    213       -- Removed the DH code from the tree
    214       -- Made the ECC code fully public (you can access ecc_mulmod directly now) useful for debuging
    215       -- Added ecc test to tv_gen
    216       -- Added hmac callback to hash descriptors.
    217       -- Fixed two doxy comment errors in the UTCTIME functions
    218       -- rsa_import() can now read OpenSSL format DER public keys as well as the PKCS #1 RSAPublicKey format.
    219          Note that rsa_export()  **ONLY** writes PKCS #1 formats
    220       -- Changed MIN/MAX to only define if not already present.  -- Kirk J from Demonware ... 
    221       -- Ported tv_gen to new framework (and yes, I made ecc vectors BEFORE changing the API and YES they match now :-))
    222       -- ported testing scripts to support pluggable math.  yipee!
    223       -- Wrote a TFM descriptor ... yipee
    224       -- Cleaned up LTC_FAST in CBC mode a bit 
    225       -- Merged in patches from Michael Brown for the sparc/sparc64 targets
    226       -- Added find_hash_oid() to search for a hash by its OID
    227       -- Cleaned up a few stray CLEAN_STACKs that should have been LTC_CLEAN_STACK
    228       -- Added timing resistant ECC, enable by defining LTC_ECC_TIMING_RESISTANT then use ECC API as normal 
    229       -- Updated the ECC documentation as it was a bit out of date
    230 
    231 June 27th, 2005
    232 v1.05
    233       -- Added Technote #6 which covers the current PK compliance.  
    234       -- Fixed buffer overflow in OAEP decoder
    235       -- Added CHOICE to the list of ASN.1 types
    236       -- Added UTCTIME to the list of ASN.1 types
    237       -- Added MUTEX locks around descriptor table functions [but not on the functions that are dependent on them]
    238          All functions call *_is_valid() before using a descriptor index which means the respective table must be unlocked before 
    239          it can be accessed.  However, during the operation [e.g. CCM] if the descriptor has been altered the results will be 
    240          undefined.  
    241       -- Minor updates to the manual to reflect recent changes
    242       -- Added a catch to for an error that should never come up in rsa_exptmod().  Just being thorough.
    243 
    244 June 15th, 2005
    245 v1.04
    246       -- Fixed off by one [bit] error in dsa_make_key() it was too high by one bit [not a security problem just inconsistent]
    247       -- ECC-224 curve was wrong [it was an ok curve just not NIST, so no security flaw just interoperability].
    248       -- Removed point compression since it slows down ECC ops to save a measly couple bytes.
    249          This makes the ecc export format incompatible with 1.03 [it shouldn't change in the future]
    250       -- Removed ECC-160 from timing and added the other curves
    251 
    252 June 9th, 2005
    253 v1.03
    254       -- Users may want to note that on a P4/GCC3.4 platform "-fno-regmove" greatly accelerates the ciphers/hashes.
    255       --------------------------------------------------------------------------------------------------------------
    256       -- Made it install the testing library in the icc/static makefiles
    257       -- Found bug in ccm_memory.c which would fail to compile when LTC_CLEAN_STACK was enabled
    258       -- Simon Johnson proposed I do a fully automated test suite.  Hence "testme.sh" was born
    259       -- Added LTC_NO_TEST which forces test vectors off (regardless of what tomcrypt_custom.h has)
    260       -- Added LTC_NO_TABLES which disables large tables (where possible, regardless of what tomcrypt_custom.h has)
    261       -- New test script found a bug in twofish.c when TABLES was disabled.  Yeah testing!
    262       -- Added a LTC_FAST specific test to the testing software.
    263       -- Updated test driver to actually halt on errors and just print them out (useful for say... automated testing...)
    264       -- Added bounds checking to Pelican MAC
    265       -- Added BIT and OCTET STRING to the ASN.1 side of things.  
    266       -- Pekka Riikonen pointed out that my ctr_start() function should accept the counter mode. 
    267       -- Cleaned up warnings in testprof
    268       -- Removed redundant mu and point mapping in ecc_verify_hash() so it should be a bit faster now
    269       -- Pekka pointed out that the AES key structure was using 32 bytes more than it ought to.
    270       -- Added quick defines to remove entire classes of algorithms.  This makes it easier if you want to build with just 
    271          one algorithm (say AES or SHA-256).  Defines are LTC_NO_CIPHERS, LTC_NO_MODES, LTC_NO_HASHES, LTC_NO_MACS,
    272          LTC_NO_PRNGS, LTC_NO_PK, LTC_NO_PKCS
    273       -- As part of the move for ECC to X9.62 I've changed the signature algorithm to EC DSA.  No API changes.
    274       -- Pekka helped me clean up the PKCS #1 v2.1 [OAEP/PSS] code
    275       -- Wrote new DER SEQUENCE coder/decoder
    276       -- RSA, DSA and ECDSA now use the DER SEQUENCE code (saves a lot of code!)
    277       -- DSA output is now a DER SEQUENCE (so not compatible with previous releases).  
    278       -- Added Technote #5 which shows how to build LTC on an AMD64 to have a variety of algorithms in only ~80KB of code.
    279       -- Changed temp variable in LOAD/STORE macros to "ulong32" for 32-bit ops.  Makes it safer on Big endian platforms
    280       -- Added INSTALL_GROUP and INSTALL_USER which you can specify on the build to override the default USER/GROUP the library 
    281          is to be installed as
    282       -- Removed "testprof" from the default build.  
    283       -- Added IA5, NULL and Object Identifier to the list of ASN.1 DER supported types
    284       -- The "no_oops" target (part of zipup) now scans for non-cvs files.  This helps prevent temp/scratch files from appearing in releases ;-)
    285       -- Added DERs for missing hashes, but just the OID not the PKCS #1 v1.5 additions. 
    286       -- Removed PKCS #1 v1.5 from the tree since it's taking up space and you ought to use v2.1 anyways
    287       -- Kevin Kenny pointed out a few stray // comments
    288       -- INTEGER code properly supports negatives and zero padding [Pekka!]
    289       -- Sorted asn1/der/ directory ... less of a mess now ;-)
    290       -- Added PRINTABLE STRING type
    291       -- Removed ECC-160 as it wasn't a standard curve
    292       -- Made ecc_shared_secret() ANSI X9.63 compliant
    293       -- Changed "printf" to "fprintf(stderr, " in the testbench... ;-)
    294       -- Optimized the GCM table creation.  On 1KB packets [with key switching] the new GCM is 12.7x faster than before.
    295       -- Changed OID representation for hashes to be just a list of unsigned longs (so you can compare against them nicely after decoding a sequence)
    296       -- ECC code now uses Montgomery reduction ... it's even faster [ECC-256 make key down from 37.4M to 4.6M cycles on an Athlon64]
    297       -- Added SHORT_INTEGER so users can easily store DER encoded INTEGER types without using the bignum math library
    298       -- Fixed OMAC code so that with LTC_FAST it doesn't require that LTC_FAST_TYPE divides 16 [it has to divide the block size instead]
    299       -- ECC key export is now a simple [and documented] SEQUENCE, the "encrypt_key" also uses a new SEQUENCE format.
    300       -- Thanks goes to the following testers
    301             Michael Brown             - Solaris 10/uSPARCII
    302             Richard Outerbridge       - MacOS
    303             Martin Carpenter          - Solaris 8/uSPARCII [Thanks for cleaning up the scripts]
    304             Greg Rose                 -  ... SunOS 5.8/SPARC [... what's with the SPARCS?]
    305             Matt Johnston             - MacOS X  [Thanks for pointing out GCC 4 problems with -Os]
    306 
    307 April 19th, 2005
    308 v1.02
    309       -- Added LTC_TEST support to gcm_test()
    310       -- "pt/ct" can now be NULL in gcm_process() if you are processing zero bytes
    311       -- Optimized GCM by removing the "double copy" handling of the plaintext/aad
    312       -- Richard Outerbridge pointed out that x86_prof won't build on MACOS and that the manual 
    313          erroneously refers to "mycrypt" all over the place.  Fixed.
    314 
    315 April 17th, 2005
    316 v1.01
    317        ** Secure Science Corporation has supported this release cycle by sponsoring the development time taken.  Their 
    318           continuing support of this project has helped me maintain a steady pace in order to keep LibTomCrypt up to date,
    319           stable and more efficient.
    320        -----------------------------------------------------------------------------------------------------
    321        -- Updated base64_decode.c so if there are more than 3 '=' signs it would stop parsing
    322        -- Merged in latest mpi that fixed a few bugs here and there
    323        -- Updated OAEP encoder/decoder to catch when the hash output is too large
    324           Cleaned up PSS code too
    325        -- Andy Bontoft fixed a bug in my demos/tests/makefile.msvc ... seems "dsa_test.c" isn't an object
    326           afterall.  Thanks.
    327        -- Made invalid ECC key sizes (configuration) not hard fault the program (it returns an error code now)
    328        -- SAFER has been re-enabled after I was pointed to http://www.ciphersbyritter.com/NEWS2/95032301.HTM
    329           [Mark Kotiaho]
    330        -- Added CCM mode to the encauth list (now has EAX, OCB and CCM, c'est un treo magnifique!)
    331        -- Added missing ASN.1 header to the RSA keys ... oops... now the rsa_export/import are FULLY compatible
    332           with other libs like OpenSSL (comment:  Test vectors would go a long way RSA...)
    333        -- Manually merged in fix to the prime_random_ex() LTM function that ensures the 2nd MSB is set properly.  Now
    334           When you say "I want a 1024/8 byte RSA key" the MSB bit of the modulus is set as expected.  Note I generally 
    335           don't view this as a "huge issue" but it's just one less nit to worry about. [Bryan Klisch]
    336        -- A new CVS has been setup on my Athlon64 box... if you want developer access send me an email (and at this point the email would have to be awesome).
    337        -- Updated API for ECB and CBC shell code.  Now can process N whole blocks in one call (like $DEITY intended)
    338        -- Introduced a new "hardware accel" framework that can be used to speed up cipher ECB, CBC and CTR mode
    339           calls.  Later on dependent code (e.g. OMAC, CCM) will be re-written to use the generic cbc/ctr functions.  But now
    340           if you [say] call ctr_encrypt() with a cipher descriptor that has hardware CTR it will automatically
    341           be used (e.g. no code rewrites)
    342        -- Now ships with 20% more love.
    343        -- x86_prof now uses ECB shell code (hint: accelerators) and outputs cycles per BLOCK not byte.  This will make it a bit 
    344           easier to compare hardware vs. software cipher implementations.  It also emits timings for CBC and CTR modes
    345        -- [Peter LaDow] fixed a typo w.r.t. XREALLOC macro (spelling counts kids!)
    346        -- Fixed bug with __x86_64__ where ROL64/ROR64 with LTC_NO_ROLC would be the 32-bit versions instead...
    347        -- Shipping with preliminary GCM code (disabled).  It's buggy (stack overflow hidden somewhere).  If anyone can spot it let me know.
    348        -- Added Pelican MAC [it's an AES based fast MAC] to the list of supported MACs
    349        -- Added LTC_FAST [and you can disable by defining LTC_NO_FAST] so that CBC and CTR mode XOR whole words [e.g. 32 or 64 bits] at a time
    350           instead of one byte.  On my AMD64 this reduced the overhead for AES-128-CBC from 4.56 cycles/byte to around 1 cycle/byte.  This requires
    351           that you either allow unaligned read/writes [e.g. x86_32/x86_64] or align all your data.  It won't go out of it's way to ensure 
    352           aligned access.  Only enabled for x86_* platforms by default since they allow unaligned read/writes.
    353        -- Added LTC_FAST support to PMAC (drops the cycle/byte by about 9 cycles on my AMD64) [note: I later rewrote this prior to release]
    354        -- Updated "profiled" target to work with the new directory layout
    355        -- Added [demo only] optimized RC5-CTR code to x86_prof demo to show off how to make an accelerator
    356           [This has been removed prior to release... It may re-appear later]
    357        -- Added CCM acelerator callbacks to the list [now supports ECB, CTR, CBC and now CCM].
    358        -- Added chapter to manual about accelerators (you know you want it)
    359        -- Added "bswap" optimizations to x86 LOAD/STORE with big endian.  Can be disabled by defining LTC_NO_BSWAP
    360        -- LTC_NO_ASM is now the official "disable all non-portable stuff" macro.  When defined it will make the code endian-neutral,
    361           disable any form of ASM and disable LTC_FAST load/stores.  Essentially build the library with this defined if you're having
    362           trouble building the library (old GCCs for instance dislike the ROLc macro)
    363        -- Added tomcrypt_mac.h and moved MAC/encMAC functions from tomcrypt_hash.h into it
    364        -- Added "done" function to ciphers and the five chaining modes [and things like omac/pmac/etc]
    365        -- Changed install group to "wheel" from "root".
    366        -- Replaced // comments with /**/ so it will build on older UNIX-like platforms
    367        -- x86_prof builds and runs with IntelCC fine now 
    368        -- Added "stest" build to intel CC to test static linked from within the dir (so you don't have to install to test)
    369        -- Moved testing/benchmark into testprof directory and build it as part of the build.  Now you can link against libtomcrypt_prof.a to get 
    370           testing info (hint: hardware developers ;-) )
    371        -- Added CCM to tv_gen 
    372        -- Added demos to MSVC makefile
    373        -- Removed -funroll-all-loops from GCC makefile and replaced with -funroll-loops which is a bit more sane (P4 ain't got much cache for the IDATA)
    374        -- Fixed GCM prior to release and re-enabled it.  It has not been optimized but it does conform when compiled with optimizations.
    375        -- I've since optimized GCM and CCM.  They're close in speed but GCM is more flexible imho (though EAX is more flexible than both)
    376        -- For kicks I optimized the ECC code to use projective points.  Gets between 3.21x (Prescott P4) to 4.53x (AMD64) times faster than before at 160-bit keys and the
    377           speedup grows as the keysize grows.  Basically removing most practical reasons to "not use the ECC code".  Enjoy.
    378        -- Added LTC_FAST support to OMAC/PMAC and doubled it's speed on my amd64 [faster on the P4 too I guess]
    379        -- Added GCM to tv_gen
    380        -- Removed "makefile.cygwin_dll" as it's not really used by anyone and not worth the effort (hell I hardly maintain the MSVC makefiles ...)
    381        -- Updated a few files in the "misc" directory to have correct @file comments for doxygen
    382        -- Removed "profile" target since it was slower anyways (go figure...)
    383 
    384 December 31st, 2004
    385 v1.00  
    386        -- Added "r,s == 0" check to dsa_verify_hash()
    387        -- Added "multi block" helpers for hash, hmac, pmac and omac routines so you can process multiple non-adjacent
    388           blocks of data with one call (added demos/multi.c to make sure they work)
    389           -- Note these are not documented but they do have doxygen comments inside them
    390           -- Also I don't use them in other functions (like pkcs_5_2()) because I didn't have the time.  Job for the new LTC maintainer ;-)
    391        -- Added tweaked Anubis test vectors and made it default (undefined ANUBIS_TWEAK to get original Anubis)
    392        -- Merged in fix for mp_prime_random_ex() to deal with MSB and LSB "bugs"
    393        -- Removed tim_exptmod() completely, updated several RSA functions (notably v15 and the decrypt/verify) so they 
    394           don't require a prng now
    395        -- This release brought to you by the fine tunes of Macy Gray.  We miss you.
    396 
    397 December 23rd, 2004
    398 v1.00rc1
    399        -- Renamed "mycrypt_*" to "tomcrypt_*" to be more specific and professional
    400           Now just include "tomcrypt.h" instead of "mycrypt.h" to get LTC ;-)
    401        -- Cleaned up makefiles to ensure all headers are correctly installed
    402        -- Added "rotate by constant" macros for portable, x86-32 and x86-64
    403           You can disable this new code with LTC_NO_ROLC which is useful for older GCCs
    404        -- Cleaned up detection of x86-64 so it works for ROL/ROR macros
    405        -- Fixed rsa_import() so that it would detect multi-prime RSA keys and error appropriately
    406        -- Sorted the source files by category and updated the makefiles appropriately
    407        -- Added LTC_DER define so you can trim out DER code if not required
    408        -- Fixed up RSA's decrypt functions changing "res" to "stat" to be more in sync
    409           with the signature variables nomenclature. (no code change just renamed the arguments)
    410        -- Removed all labels starting with __ and replaced with LBL_ to avoid namespace conflicts (Randy Howard)
    411        -- Merged in LTM fix to mp_prime_random_ex() which zap'ed the most significant byte if the bit size
    412           requested was a multiple of eight.
    413        -- Made RSA_TIMING off by default as it's not terribly useful [and likely to be deprecated]
    414        -- Renamed SMALL_CODE, CLEAN_STACK and NO_FILE to have a LTC_ prefix to avoid namespace collisions
    415           with other programs.  e.g. SMALL_CODE => LTC_SMALL_CODE
    416        -- Zed Shaw pointed out that on certain systems installing libs as "root" isn't possible as the super-user
    417           is not root.  Now the makefiles allow this to be changed easily.
    418        -- Renamed "struct _*_descriptor" to "struct ltc_*_descriptor" to avoid using a leading _
    419           Also renamed _ARGCHK to LTC_ARGCHK
    420        -- Zed Shaw pointed out that I still defined the prng structs in tomcrypt_prng.h even if they 
    421           weren't defined.  This made undef'ing FORTUNA break the build.
    422        -- Added LTC_NO_ASM to disable inline asm macros [ROL/ROR/etc]
    423        -- Changed RSA decrypt functions to change the output length variable name from "keylen" to "outlen" to make 
    424           it more consistent.
    425        -- Added the 64-bit Khazad block cipher [NESSIE]
    426        -- Added the 128-bit Anubis block cipher [with key support for 128...320 bit keys] [NESSIE]
    427        -- Changes to several MAC functions to rename input arguments to more sensible names
    428        -- Removed FAST_PK support from dh_sys.c
    429        -- Declared deskey() from des.c as static instead of a global
    430        -- Added pretty much all practical GCC warning tests to the GCC [related] makefiles.  These additional
    431           warnings can easily be disabled for those with older copies of GCC [or even non GNU cc's]
    432        -- Added doxygen @ tags to the code...  phew that was a hell of a lot of [repetitive] work
    433        -- Also added pre-configured Doxygen script.
    434        -- Cleaned up quite a few functions [ciphers, pk, etc] to make the parameters naming style consistent
    435           E.g. ciphers keys are called "skey" consistently now.  The input to PK encryption is called "in", etc.
    436           These changes require no code changes on the behalf of developers fortunately
    437        -- Started a SAFER+ optimizer [does encrypt only] which shaves a good 30 or so cycles/byte on my AMD64
    438           at an expense of huge code.  It's in notes/etc/saferp_optimizer.c
    439        -- DSA sign/verify now uses DER encoded output/inputs and no LTC style headers.  
    440        -- Matt Johnston found a missing semi-colon in mp_exptmod().  Fix has been merged in.  
    441 
    442 October 29th, 2004
    443 v0.99  -- Merged in the latest version of LTM which includes all of the recent bug fixes
    444        -- Deprecated LTMSSE and removed it (to be replaced with TFM later on)
    445        -- Stefan Arentz pointed out that mp_s_rmap should be extern
    446        -- Kristian Gj?steen pointed out that there are typos in the 
    447           "test" makefile and minor issues in Yarrow and Sober [just cosmetics really]
    448        -- Matthew P. Cashdollar pointed out that "export" is a C++ keyword 
    449           so changed the PRNG api to use "pexport" and "pimport"
    450        -- Updated "hashsum" demo so it builds ;-)
    451        -- Added automatic support for x86-64 (will configure for 64-bit little endian automagically)
    452        -- Zhi Chen pointed out a bug in rsa_exptmod which would leak memory on error. 
    453        -- Made hash functions "init" return an int.  slight change to API ;-(
    454        -- Added "CHC" mode which turns any cipher into a hash the other LTC functions can use
    455        -- Added CHC mode stuff to demos such as tv_gen and hashsum
    456        -- Added "makefile.shared" which builds and installs shared/static object copies
    457           of the library.
    458        -- Added DER for bignum support 
    459        -- RSA is now fully joy.  rsa_export/rsa_import use PKCS #1 encodings and should be 
    460           compatible with other crypto libs that use the format.
    461        -- Added support for x86-64 for the ROL/ROR macros 
    462        -- Changed the DLL and SO makefiles to optimize for speed, commented SMALL_CODE in
    463           mycrypt_custom.h and added -DSMALL_CODE to the default makefile
    464        -- Updated primality testing code so it does a minimum of 5 tests [of Miller-Rabin]
    465           (AFAIK not a security fix, just warm fuzzies)
    466        -- Minor updates to the OMAC code (additional __ARGCHK and removed printf from omac_test... oops!)
    467        -- Update build and configuration info which was really really really out of date.  (Chapter 14)
    468        ++ Minor update, switch RSA to use the PKCS style CRT
    469 
    470 August 6th, 2004
    471 v0.98  -- Update to hmac_init to free all allocated memory on error
    472        -- Update to PRNG API to fix import/export functions of Fortuna and Yarrow
    473        -- Added test functions to PRNG api, RC4 now conforms ;-) [was a minor issue]
    474        -- Added the SOBER-128 PRNG based off of code donated by Greg Rose.
    475        -- Added Tech Note #4 [notes/tech0004.txt] 
    476        -- Changed RC4 back [due to request].  It will now XOR the output so you can use it like 
    477           a stream cipher easily.
    478        -- Update Fortuna's export() to emit a hash of each pool.  This means that the accumulated 
    479           entropy that was spread over all the pools isn't entirely lost when you export/import.
    480        -- Zhi Chen suggested a comment for rsa_encrypt_key() to let users know [easily] that it was
    481           PKCS #1 v2.0 padding.  (updated other rsa_* functions)
    482        -- Cleaned up Noekeon to remove unrolling [wasn't required, was messy and actually slower with GCC/ICC]
    483        -- Updated RC4 so that when you feed it >256 bytes of entropy it quietly ignores additional
    484           bytes.  Also removed the % from the key setup to speed it up a bit.
    485        -- Added cipher/hash/prng tests to x86_prof to help catch bugs while testing
    486        -- Made the PRNG "done" return int, fixed sprng_done to not require prng* to be non-null
    487        -- Spruced up mycrypt_custom.h to trap more errors and also help prevent LTMSSE from being defined
    488           on non-i386 platforms by accident.
    489        -- Added RSA/ECC/DH speed tests to x86_prof and cleaned it up to build with zero warnings
    490        -- Changed Fortuna to count only entropy [not the 2 byte header] added to pool[0] into the 
    491           reseed mechanism.  
    492        -- Added "export_size" member to prng_descriptor tables so you can know in advance the size of 
    493           the exported state for any given PRNG.  
    494        -- Ported over patch on LTM 0.30 [not ready to release LTM 0.31] that fixes bug in mp_mul()/mp_div()
    495           that used to result in negative zeroes when you multiplied zero by a negative integer.  
    496           (patch due to "Wolfgang Ehrhardt" <Wolfgang.Ehrhardt (a] munich.netsurf.de>)
    497        -- Fixed rsa_*decrypt_key() and rsa_*verify_hash() to default to invalid "stat" or "res".  This way
    498           if any of the higher level functions fail [before you get to the padding] the result will be in
    499           a known state].  Applied to both v2 and v1.5 padding helpers.
    500        -- Added MACs to x86_prof
    501        -- Fixed up "warnings" in x86_prof and tv_gen
    502        -- Added a "profiled" target back [for GCC 3.4 and ICC v8].  Doesn't seem to help but might be worth
    503           tinkering with.
    504        -- Beefed up load/store test in demos/test
    505 
    506        ++ New note, in order to use the optimized LOAD/STORE macros your platform
    507           must support unaligned 32/64 bit load/stores.  The x86s support this
    508           but some [ARM for instance] do not.  If your platform cannot perform
    509           unaligned operations you must use the endian neutral code which is safe for 
    510           any sort of platform.
    511 
    512 July 23rd, 2004
    513 v0.97b -- Added PKCS #1 v1.5 RSA encrypt/sign helpers (like rsa_sign_hash, etc...)
    514        -- Added missing prng check to rsa_decrypt_key() [not critical as I don't use 
    515           descriptors directly in that function]
    516        -- Merged in LTM-SSE, define LTMSSE before you build and you will get SSE2 optimized math ;-)
    517           (roughly 3x faster on a P4 Northwood).  By default it will compile as ISO C portable
    518           code (when LTMSSE is undefined).
    519        -- Fixed bug in ltc_tommath.h where I had the kara/toom cutoffs not marked as ``extern''
    520           Thanks to "Stefan Arentz" <stefan at organicnetwork.net>
    521        -- Steven Dake <scd (a] broked.org> and Richard Amacker <ramacker (a] yahoo.com> submitted patches to 
    522           fix pkcs_5_2().  It now matches the output of another crypto library.  Whoops... hehehe
    523        -- Updated PRNG api.  Added Fortuna PRNG to the list of supported PRNGs
    524        -- Fixed up the descriptor tables since globals are automatically zero'ed on startup.
    525        -- Changed RC4 to store it's output.  If you want to encrypt with RC4
    526           you'll have to do the XOR yourself.
    527        -- Fixed buffer overflows/overruns in the HMAC code.  
    528 
    529        ++ API change for the PRNGs there now is a done() function per PRNG.  You
    530           should call it when you are done with a prng state.  So far it's
    531           not absolutely required (won't cause problems) but is a good idea to
    532           start.  
    533 
    534 
    535 June 23rd, 2004
    536 v0.97a ++ Fixed several potentially crippling bugs... [read on]
    537        -- Fixed bug in OAEP decoder that would incorrectly report 
    538           buffer overflows. [Zhi Chen]
    539        -- Fixed headers which had various C++ missing [extern "C"]'s
    540        -- Added "extern" to sha384_desc descriptor which I removed by mistake
    541        -- Fixed bugs in ENDIAN_BIG macros using the wrong byte order [Matt Johnston]
    542        -- Updated tiger.c and des.c to not shadow "round" which is intrinsic on
    543           some C compilers.
    544        -- Updated demos/test/rsa_test.c to test the RSA functionality better
    545        ++ This update has been tested with GCC [v3.3.3], ICC [v8] and MSVC [v6+SP6] 
    546           all on a x86 P4  [GCC/ICC tested in Gentoo Linux, MSVC in WinXP]
    547        ++ Outcome: The bug Zhi Chen pointed out has been fixed.  So have the bugs
    548           that Matt Johnston found.  
    549 
    550 June 19th, 2004
    551 v0.97  -- Removed spurious unused files [arrg!]
    552        -- Patched buffer overflow in tim_exptmod()
    553        -- Fixed buffer overrun bug in pkcs_1_v15_es_decode()
    554        -- Reduced stack usage in PKCS #1 v2.0 padding functions (by several KBs)
    555        -- Removed useless extern's that were an artifact from the project start... ;-)
    556        -- Replaced memcpy/memset with XMEMCPY and XMEMSET for greater flexibility
    557        -- fixed bugs in hmac_done()/hmac_init()/[various others()] where I didn't trap errors 
    558        -- Reduced stack usage in OMAC/PMAC/HMAC/EAX/OCB/PKCS#5 by mallocing any significant sized
    559           arrays (e.g. > 100 bytes or so).  Only in non-critical functions (e.g. eax_init())
    560        -- "Zhi Chen" <zhi (a] massiveincorporated.com> pointed out that rsa_decrypt_key() requires
    561           an incorrect output size (too large).  Fixed.
    562        -- Added a "pretty" target to the GCC makefile.  Requires PERL.  It is NEAT!
    563        -- Minor updates to ch1 of the manual.
    564        -- Cleaned up the indentation and added comments to rsa_make_key(), rsa_exptmod() and 
    565           rsa_verify_hash()
    566        -- Updated makefile.icc so the "install" target would work ;-)
    567        -- Removed demos/test.c [deprecated from demos/test/test.c]
    568        -- Changed MAXBLOCKSIZE from 128 to 64 to reflect the true size...
    569 
    570 May 30th, 2004
    571 v0.96  -- Removed GF and Keyring code
    572        -- Extended OAEP decoder to distinguish better [and use a more uniform API]
    573        -- Changed PSS/OAEP API slightly to be more consistent with other PK functions (order of arguments)
    574        -- rsa_exptmod() now pads with leading zeroes as per I2OSP.
    575        -- added error checking to yarrow code
    576        --  pointed out that tommath.h from this distro will overwrite tommath.h
    577           from libtommath.  I changed this to ltc_tommath.h to avoid any such problems.
    578        -- Fixed bug in PSS encoder/decoder that didn't handle the MSB properly
    579        -- refactored AES, now sports an "encrypt only" descriptor which uses half as much code space.
    580        -- modded Yarrow to try and use refactored AES code and added WHIRLPOOL support (d'oh) ;-)
    581        -- updated ECB, OCB and CBC decrypt functions to detect when "encrypt only" descriptor is used.
    582        -- replaced old RSA code with new code that uses PKCS #1 v2.0 padding
    583        -- replaced old test harness with new over-engineer'ed one in /demos/test/
    584        -- updated cbc/cfb/ofb/ctr code with setiv/getiv functions to change/read the IV without re-keying.
    585        -- Added PKCS #1 v1.5 RSA encryption and signature padding routines
    586        -- Added DER OID's to most hash descriptors (as many as I could find) 
    587        -- modded rsa_exptmod() to use timing-resilient tim_exptmod() when doing private key operations 
    588           added #define RSA_TIMING which can turn on/off this feature.
    589        -- No more config.pl so please just read mycrypt_custom.h for build-time tweaks
    590        -- Small update to rand_prime()
    591        -- Updated sha1, md5 and sha256 so they are smaller when SMALL_CODE is defined.  If you want speed though,
    592           you're going to have to undefine SMALL_CODE ;-)
    593        -- Worked over AES so that it's even smaller now [in both modes].
    594        
    595 May 12th, 2004
    596 v0.95  -- Optimized AES and WHIRLPOOL for SMALL_CODE by taking advantage of the fact
    597           the transforms are circulant.  AES dropped 5KB and WHIRLPOOL dropped 13KB
    598           using the default build options on the x86.
    599        -- Updated eax so the eax_done() would clear the state [like hmac,pmac,ocb] when
    600           CLEAN_STACK has been defined.
    601        -- added LTC_TEST support to rmd160
    602        -- updates to mycrypt_pk.h
    603        -- updated rand_prime() to faciliate making RSA composites 
    604        -- DSA/RSA now makes composites of the exact size desired.
    605        -- Refactored quite a bit of the code, fewer functions per C file
    606        -- cleaned up the makefiles to organize the objects logically
    607        -- added ICC makefile along with "profiled" targets for both GNU and ICC compilers
    608        -- Marked functions for removal before v1.00 see PLAN for more information
    609        -- GCC 3.4.0 tested and seems to work
    610        -- Added PKCS #5 support
    611        -- Fixed typo in comment header of .C files  ;-)
    612        -- Added PKCS #1 OAEP and PSS support.  
    613        
    614 Feb 20th, 2004
    615 v0.94  -- removed unused variables from ocb.c and fixed it to match known test vectors.
    616        -- Added PMAC support, minor changes to OMAC/EAX code [I think....]
    617        -- Teamed up with Brian Gladman.  His code verifies against my vectors and my code
    618           verifies against his test vectors.  Hazaa for co-operation!
    619        -- Various small changes (added missing ARGCHKs and cleaned up indentation)
    620        -- Optimization to base64, removed unused variable "c"
    621        -- Added base64 gen to demos/tv_gen.c
    622        -- Fix to demos/x86_prof.c to correctly identify the i386 architecture... weird...
    623        -- Fixed up all of the PK code by adding missing error checking, removed "res" variables,
    624           shrunk some stack variables, removed non-required stack variables and added proper
    625           error conversion from MPI to LTC codes.  I also spotted a few "off by one" error
    626           checking which could have been used to force the code to read past the end of
    627           the buffer (in theory, haven't checked if it would work) by a few bytes.
    628        -- Added checks to OUTPUT_BIGNUM so the *_export() functions cannot overflow the output and I 
    629           also modded it so it stores in the output provided to the function (that is not on
    630           the local stack) which saves memory and time.
    631        -- Made SAFER default to disabled for now (plans are to cleanhouse write an implementation later)
    632        -- Added the 512-bit one-way hash WHIRLPOOL which clocks in at 138 cycles per byte on my
    633           Athlon XP [for comparison, SHA-512 clocks in at 77 cycles per byte].  This code uses the 
    634           teams new sbox design (not the original NESSIE one).
    635       
    636 
    637 Jan 25th, 2004
    638 v0.93  -- [note: deleted v0.93 changes by accident... recreating from memory...]
    639        -- Fix to RC2 to not deference pointer before ARGCHK
    640        -- Fix to NOEKEON to match published test vectors as well as cleaned up the code a bit
    641        -- Optimized Twofish [down to 28 cycles/byte on my box] and Blowfish
    642        -- Fix to OMAC to test cipher block size first [prevents wasting any time]
    643        -- Added more OMAC test vectors
    644        -- Added EAX Encrypt+Authenticate support
    645        -- Fix to DSA to check return of a few LTM functions I forgot [mp_to_unsigned_bin]
    646        -- Added common headers to all C files
    647        -- CTR mode supports big and little [default] endian counters now.  
    648        -- fix to find_cipher_any() so that it can handle a fragmented cipher_descriptor table.
    649        -- added find_hash_any() akin to find_cipher_any().
    650        -- Added EAX code to demos/tv_gen.c  Hazaa! 
    651        -- Removed SONY defines and files from codebase.
    652        -- Added OCB support [patents be damned] and to demos/tv_gen.c
    653        -- Merge all of the INPUT/OUTPUT BIGNUM macros (less toc) into mycrypt_pk.h
    654        -- Made appropriate changes to the debug string in crypt.c
    655 
    656 Dec 24th, 2003
    657 v0.92  -- Updated the config.pl script so the options have more details.
    658        -- Updated demos/tv_gen to include RIPEMD hashes
    659        -- Updated Twofish so when TWOFISH_ALL_TABLES is defined a pre-computed RS table
    660           is included [speedup: slight, about 4k cycles on my Athlon].
    661        -- Re-wrote the twofish large key generation [the four 8x32 key dependent tables].  Now about twice as fast.
    662           With both optimizations [e.g. TWOFISH_ALL_TABLES defined] a 128-bit Twofish key can now be scheduled
    663           in 26,000 cycles on my Athlon XP [as opposed to 49,000 before] when optimized for size.
    664        -- config.pl has been updated so rmd128.o and rmd160.o are objects included in the build [oops]
    665        -- Andrew Mann found a bug in rsa_exptmod() which wouldn't indicate if the wrong type of key was specified
    666           (e.g. not PK_PRIVATE or PK_PUBLIC)
    667        -- Fixed up demos/x86_prof so it sorts the output now :-)  
    668        -- The project is now powered by radioactive rubber pants.
    669        -- Fixed dh_encrypt_key() so if you pass it a hash with a smaller output than the input key it 
    670           will return CRYPT_INVALID_HASH [to match what ecc_encrypt_key() will do]
    671        -- Merge the store/encrypt key part of ecc_encrypt_key() as per dh_encrypt_key() [can you guess what I'm upto?]
    672        -- Massive updates to the prime generation code.  I use the LTM random prime functions [and provide a nice 
    673           interface between the LTC PRNG's and the LTM generic prng prototype].  I also use a variable number of tests
    674           depending on the input size.  This nicely speeds up most prime generation/testing within the library.
    675        -- Added SHA-224 to the list of hashes.
    676        -- Made HMAC test vectors constant and static [takes ROM space instead of RAM]
    677        -- This release was brought to you by the letter P which stands for Patent Infringement.
    678        -- Added generic HASH_PROCESS macro to mycrypt_hash.h which simplifies the hash "process" functions
    679           I also optimized the compression functions of all but MD2 to not perform input copies when avoidable.
    680        -- Removed the division from the Blowfish setup function [dropped 3k cycles on my Athlon]
    681        -- Added stack cleaning to rijndael, cast5 so now all ciphers have CLEAN_STACK code.  
    682        -- Added Skipjack to the list of ciphers [made appropriate changes to demos/test.c, demos/tv_gen.c and 
    683           demos/x86_prof.c]
    684        -- Added mechanical testing to cipher test vector routines.  Now it encrypts 1000 times, then decrypts and
    685           compares.  Any fault (e.g. bug in code, compiler) in the routines is likely to show through.  Doesn't
    686           stress test the key gen though...
    687        -- Matt Johnson found a bug in the blowfish.c  apparently I was out of my mind and put twofish defines in there 
    688           The code now builds with any config.  Thanks.
    689        -- Added OMAC1 Message Authentication Code support to the library.
    690        -- Re-prototyped the hash "process" and "done" to prevent buffer overflows [which don't seem easy to exploit].  
    691           Updated HMAC code to use them too.  Hazaa!
    692        -- Fixed bug in ECC code which wouldn't do an _ARGCHK on stat in ecc_verify_hash().
    693        -- Fixed [temp fix] bug in all PK where the OUTPUT_BIGNUM macros would not trap errors on the to_unsigned_bin 
    694           conversion [now returns CRYPT_MEM, will fix it up better later]
    695        -- Added DSA to the list of supported PK algorithms.  
    696        -- Fixed up various ciphers to &255 the input key bytes where required [e.g. where used to index a table] to prevent
    697           problems on platforms where CHAR_BIT != 8 
    698        -- Merged in LibTomMath v0.28
    699        -- Updated demos/x86_prof.c to use Yarrow during the key sched testing [was horribly slow on platforms with blockable
    700           /dev/random]. 
    701        -- Added OMAC/HMAC tests to demos/tv_gen and I now store the output of this in notes/ 
    702        -- Fixed a bug in config.pl that wouldn't have TWOFISH_TABLES defined by default (too many commas on the line)
    703        -- Fixed bug in hmac_done().  Apparently FIPS-198 [HMAC] specifies that the output can be truncated.  My code
    704           would not support that (does now just like the new OMAC code).
    705        -- Removed "hashsize" from hmac_state as it wasn't being used.
    706        -- Made demos/test.c stop if OMAC or HMAC tests fail (instead of just printing a failed message and keep going).
    707        -- Updated notes/tech0003.txt to take into account the existence of Skipjack [also I fixed a few typos].
    708        -- Slight changes to Noekeon, with SMALL_CODE undefined it uses a fully unrolled version.  Dropped +10 cycles/byte
    709           on my Athlon (35 cycles per byte or 410.4Mbit/sec at 1795Mhz)
    710        -- Added _ARGCHK() calls to is_prime() for the two input pointers.
    711 
    712 Sept 25th, 2003
    713 v0.91  -- HMAC fix of 0.90 was incorrect for keys larger than the block size of the hash.
    714        -- Added error CRYPT_FILE_NOTFOUND for the file [hmac/hash] routines.
    715        -- Added RIPEMD hashes to the hashsum demo.
    716        -- Added hashsum demo to MSVC makefile.
    717        -- Added RMD160 to the x86_prof demo [oops]
    718        -- Merged in LibTomMath-0.27 with a patch to mp_shrink() that will be in LibTomMath-0.28
    719           Fixes another potential memory leak.
    720 
    721 Sept 7th, 2003
    722 v0.90  -- new ROL/ROR for x86 GCC
    723        -- Jochen Katz submitted a patch to the makefile to prevent "make" from making the .a library
    724           when not required.
    725        == By default the KR code is not enabled [it's only a demo anyways!]
    726        -- changed the "buf" in ecc_make_key from 4KB to 128 bytes [since the largest key is 65 bytes]
    727        -- hmac_done() now requires you pass it the size of the destination buffer to prevent
    728           buffer overflows.  (API CHANGE)
    729        -- hmac/hash filebased routines now return CRYPT_NOP if NO_FILE is defined.
    730        -- I've removed the primes from dh.c and replaced them with DR safe primes suitable for the default
    731           configuration of LibTomMath.  Check out these comparisons on a 1.3Ghz Athlon XP, optimized for size,
    732 
    733 768-bit,     4 vs.  10
    734 1024-bit,    8 vs.  18
    735 1280-bit,   12 vs.  34
    736 1536-bit,   20 vs.  56
    737 1792-bit    28 vs.  88
    738 2048-bit,   40 vs. 124
    739 2560-bit,   71 vs. 234
    740 3072-bit,  113 vs. 386
    741 4096-bit,  283 vs. 916
    742 
    743           Times are all in milliseconds for key generation.  New primes times on the left.  This makes the code binary
    744           incompatible with previous releases.  However, this addition is long overdue as LibTomMath has supported DR
    745           reductions for quite some time.
    746        -- Added RIPE-MD 128 and 160 to the list of supported hashes [10 in total].
    747        -- The project has been released as public domain.  TDCAL no longer applies.
    748 
    749 July 15th, 2003
    750 v0.89  -- Fix a bug in bits.c which would prevent it from building with msvc
    751        -- Merged in LibTomMath v0.24 [and I used the alloc/free macros this time!]
    752        -- Removed the LTC version of next_prime() and replaced it with a call to the
    753           mp_prime_next_prime() from LibTomMath
    754        -- reverted bits.c to the 0.86 copy since the new one doesn't build in MSVC
    755           or cygwin.
    756 
    757 Jul 10th, 2003
    758 v0.88  -- Sped up CAST5 key schedule for MSVC
    759        -- added "ulong32" which allows people on 64-bit platforms to force the 32-bit tables in
    760           ciphers like blowfish and AES to be 32-bits.  E.g. when unsigned long is 64-bits.
    761        -- Optimized the SAFER-SK64, SAFER-SK128, SAFER+, RC5 and RC6 key schedule [big time!]
    762        -- Optimized SHA-1 and SHA-256 quite a bit too.
    763        -- Fixed up the makefile to use -fomit-frame-pointer more liberally
    764        -- Added tv_gen program which makes test vectors for ciphers/hashes
    765        -- Merged in LibTomMath v0.22
    766        
    767 Jun 19th, 2003
    768 v0.87  -- Many MSVC optimizations to the code base
    769        -- Improved the AES and Twofish key schedule [faster, more constant time]
    770        -- Tons of optimizations here and there.  
    771        
    772 Jun 15th, 2003
    773 v0.86  -- Fixed up AES to workaround MSVC optimizer bug
    774        -- Merged in fresh LTM base [based on v0.20] so there are no warnings with MSVC
    775        -- Wrote x86_prof which will time the hashes and ciphers downto cycles per byte.
    776        -- Fixed up demos/encrypt to remove serpent_desc from the list
    777        -- Re-enabled MSVC optimizations w00t w00t
    778        -- Replaced "errno" with "err" in all functions that had it so it wouldn't clash
    779           with the global "errno"
    780        -- Removed a set of unused variables from certain functions
    781        -- Removed {#line 0 "..."} stuff from mpi.c to comply with ISO C  :-)
    782        
    783 Jun 11th, 2003
    784 v0.85  -- Swapped in a new AES routine
    785        -- Removed Serpent
    786        -- Added TDCAL policy document
    787        
    788 Jun 1st, 2003
    789 v0.84  -- Removed a 4KB buffer from rsa_decrypt_key that wasn't being used no more
    790        -- Fixed another potential buffer problem.  Not an overflow but could cause the 
    791           PK import routines to read past the end of the buffer.
    792        -- Optimized the ECC mulmod more by removing a if condition that will always be false
    793        -- Optimized prime.c to not include a 2nd prime table, removed code from is_prime calls prime
    794           test from LibTomMath now
    795        -- Added LTC_TEST define which when defined will enable the test vector routines [see mycrypt_custom.h]
    796        -- Removed ampi.o from the depends cuz it ain't no not working in *nix with it [routines are in mpi.c now].
    797         
    798 
    799 Mar 29th, 2003
    800 v0.83  -- Optimized the ecc_mulmod, it's faster and takes less heap/stack space
    801        -- Fixed a free memory error in ecc_mulmod and del_point which would try to free NULL
    802        -- Fixed two serious bugs in rsa_decrypt_key and rsa_verify_hash that would allow a trivialy
    803           buffer overflow.
    804        -- Fixed a bug in the hmac testing code if you don't register all the hashes it won't return
    805           errors now.
    806        
    807 Mar 15th, 2003
    808 v0.82  -- Manual updated
    809        -- Added MSVC makefile [back, actually its written from scratch to work with NMAKE]
    810        -- Change to HMAC helper functions API to avoid buffer overflow [source changes]
    811        -- the rsa_encrypt_key was supposed to reject key sizes out of bounds ... 
    812           same fix to the rsa_sign_hash 
    813        -- Added code to ensure that that chaining mode code (cfb/ofb/ctr/cbc) have valid
    814           structures when being called.  E.g. the indexes to the pad/ivs are not out of bounds
    815        -- Cleaned up the DES code and simplified the core desfunc routine.
    816        -- Simplified one of the boolean functions in MD4
    817        
    818 Jan 16th, 2003
    819 v0.81  -- Merged in new makefile from Clay Culver and Mike Frysinger
    820        -- Sped up the ECC mulmod() routine by making the word size adapt to the input.  Saves a whopping 9 point
    821           operations on 521-bit keys now (translates to about 8ms on my Athlon XP).  I also now use barrett reduction
    822           as much as possible.  This sped the routine up quite a bit.
    823        -- Fixed a huge flaw in ecc_verify_hash() where it would return CRYPT_OK on error... Now fixed.
    824        -- Fixed up config.pl by fixing an invalid query and the file is saved in non-windows [e.g. not CR/LF] format
    825           (fix due to Mika Bostr?m)
    826        -- Merged in LibTomMath for kicks
    827        -- Changed the build process so that by default "mycrypt_custom.h" is included and provided
    828           The makefile doesn't include any build options anymore
    829        -- Removed the PS2 and VC makefiles.
    830        
    831 Dec 16th, 2002
    832 v0.80  -- Found a change I made to the MPI that is questionable.  Not quite a bug but definately not desired.  Had todo
    833           with the digit shifting.  In v0.79 I simply truncated without zeroing.  It didn't cause problems during my
    834           testing but I fixed it up none the less.
    835        -- Optimized s_mp_mul_dig() from MPI to do a minimal number of passes.
    836        -- Fixed in rsa_exptmod() where I was getting the size of the result.  Basically it accomplishes the same thing
    837           but the fixed code is more readable.
    838        -- Fixed slight bug in dh_sign_hash() where the random "k" value was 1 byte shorter than it should have been.  I've
    839           also made the #define FAST_PK speed up signatures as well.  Essentially FAST_PK tells the DH sub-system to 
    840           limit any private exponent to 256-bits.   Note that when FAST_PK is defined does not make the library
    841           binary or source incompatible with a copy of the library with it undefined.
    842        -- Removed the DSA code.  If you want fast diffie-hellman just define FAST_PK :-)
    843        -- Updated dh_sign_hash()/dh_verify_hash() to export "unsigned" bignums.  Saves two bytes but is not binary
    844           compatible with the previous release... sorry!  I've performed the same fix to the ecc code as well.
    845        -- Fixed up the PK code to remove all use of mp_toraw() and mp_read_raw() [get all the changes out of the way now]
    846        -- Fixed a bug in the DH code where it missed trapping a few errors if they occurred.
    847        -- Fixed a slight "its-not-a-bug-but-could-be-done-better" bug in the next_prime() function.  Essentially it was
    848           testing to ensure that in the loop that searches for the next candidate that the step never grows beyond
    849           65000.  Should have been testing for MP_DIGIT_MAX
    850        -- Spruced up the config.pl script.  It now makes a header file "mycrypt_custom.h" which can be included *before*
    851           you include mycrypt.h.  This allows you to add libtomcrypt to a project without completely changing your make
    852           system around.  Note that you should use the makefile it writes to at least build the library initially.
    853        -- Used splint to check alot of the code out.  Tons of minor fixes and explicit casts added.
    854        -- Also made all the internal functions of MPI are now static to avoid poluting the namespace
    855        -- **Notice**:  There are no planned future releases for at least a month from the this release date.
    856        
    857 Dec 14th, 2002
    858 v0.79  -- Change to PK code [binary and source].  I made it so you have to pass the buffer size to the *_decrypt_key and
    859           *_verify_hash functions.  This prevents malformed packets from performing buffer overflows.  I've also trimmed
    860           the packet header size [by 4 bytes].
    861        -- Made the test program halt on the first error it occurs.  Also made it trap more errors than before.
    862        -- Wrote the first chapter of my new book [DRAFT!], not in this package but check my website!
    863        -- Included a perl script "config.pl" that will make "makefile.out" according to the users needs.  
    864        -- Added shell script to look for latest release
    865        -- Merge DH and ECC key defines from mycrypt_cfg.h into the makefiles
    866        -- updated the makefile to use BSD friendly archiving invokations
    867        -- Changed the DH and ECC code to use base64 static key settings [e.g. the primes].  Dropped the code size by 3KB
    868           and is ever-so-slightly faster than before.
    869        -- added "mp_shrink" function to shrink the size of bignums.  Specially useful for PK code :-)
    870        -- Added new exptmod function that calculates a^b mod c with fewer multiplies then before [~20% for crypto
    871           sized numbers].  Also added a "low mem" variant that doesn't use more than 20KB [upto 4096 bit nums] of
    872           heap todo the calculation.  Both are #define'able controlled
    873        -- Added XREALLOC macro to provide realloc() functionality.
    874        -- Added fix where in rsa_import() if you imported a public key or a non-optimized key it would free the mp_int's
    875           not being used.
    876        -- Fixed potential bug in the ECC code.  Only would occur on platforms where char is not eight bits [which isn't
    877           often!]
    878        -- Fixed up the ECC point multiplication, its about 15% faster now
    879        -- While I was at it [since the lib isn't binary backwards compatible anyways] I've fixed the PK export routines
    880           so they export as "unsigned" types saving 1 byte per bignum outputted.  Not a lot but heck why not.
    881           
    882 Nov 28th, 2002
    883 v0.78  -- Made the default ARGCHK macro a function call instead which reduced the code size from 264KB to 239KB.
    884        -- Fixed a bug in the XTEA keysize function which called ARGCHK incorrectly.
    885        -- Added Noekeon block cipher at 2,800 bytes of object code and 345Mbit/sec it is a welcome addition.
    886        -- Made the KR code check if the other PK systems are included [provides error when building otherwise].
    887        -- Made "aes" an alias for Rijndael via a pre-processor macro.  Now you can use "aes_ecb_encrypt", etc... :-)
    888           Thanks to Jean-Luc Cooke for the "buzzword conformance" suggestion.
    889        -- Removed the old PK code entirely (e.g. rsa_sign, dh_encrypt).  The *_sign_hash and *_encrypt_key functions
    890           are all that is to remain.
    891        -- **NOTE** Changed the PK *_import (including the keyring) routine to accept a "inlen" parameter.  This fixes a
    892           bug where improperly made key packets could result in reading passed the end of the buffer.  This means
    893           the code is no longer source compatible but still binary compatible.
    894        -- Fixed a few other minor bugs in the PK import code while I was at it.
    895        
    896 Nov 26th, 2002
    897 v0.77  -- Updated the XTEA code to use pre-computed keys.  With optimizations for speed it achieves 222Mbit/sec
    898           compared to the 121Mbit/sec before.  It is 288 bytes bigger than before.
    899        -- Cleaned up some of the ciphers and hashes (coding style, cosmetic changes)
    900        -- Optimized AES slightly for 256-bit keys [only one if statement now, still two for 192-bit keys]
    901        -- Removed most test cases from Blowfish, left three of them there.  Makes it smaller and faster to test.
    902        -- Changed the primality routines around.  I now use 8 rounds of Rabin-Miller, I use 256 primes in the sieve
    903           step and the "rand_prime" function uses a modified sieve that avoids alot of un-needed bignum work.
    904        -- Fixed a bug in the ECC/DH signatures where the keys "setting" value was not checked for validity.  This means
    905           that a invalid value could have caused segfaults, etc...
    906        -- **NOTE** Changed the way the ECC/DH export/import functions work.  They are source but not binary compatible
    907           with v0.76.  Essentially insteading of exporting the setting index like before I export the key size.  Now
    908           if you ever re-configure which key settings are supported the lib will still be able to make use of your 
    909           keys.
    910        -- Optimized Blowfish by inlining the round function, unrolling it for four rounds then using a for loop for the 
    911           rest.  It achieves a rate of 425Mbit/sec with the new code compared to 314Mbit/sec before.  The new blowfish 
    912           object file is 7,813 bytes compared to 8,663 before and is 850 bytes smaller.  So the code is both smaller and 
    913           faster!
    914        -- Optimized Twofish as well by inlining the round function.  Gets ~400Mbit/sec compared to 280Mbit/sec before
    915           and the code is only 78 bytes larger than the previous copy.
    916        -- Removed SMALL_PRIME_TAB build option.  I use the smaller table always.
    917        -- Fixed some mistakes concerning prime generation in the manual.
    918        -- [Note: sizes/speeds are for GCC 3.2 on an x86 Athlon XP @ 1.53Ghz]
    919 
    920 Nov 25th, 2002
    921 v0.76  -- Updated makefiles a bit more, use "-Os" instead of "-O2" to optimize for size.  Got the lib
    922           downto 265KB using GCC 3.2 on my x86 box.
    923        -- Updated the SAFER+, Twofish and Rijndael test vector routine to use the table driven design.
    924        -- Updated all other test vector routines to return as soon as an error is found
    925        -- fixed a bug in the test program where errors in the hash test routines would not be reported
    926           correctly.  I found this by temporarily changing one of the bytes of the test vectors.  All the
    927           hashes check out [the demos/test.c would still have reported an error, just the wrong one].
    928           
    929 
    930 Nov 24th, 2002
    931 v0.75  -- Fixed a flaw in hash_filehandle, it should ARGCHK that the filehandle is not NULL
    932        -- Fixed a bug where in hash_file if the call to hash_filehandle failed the open file would 
    933           not be closed.
    934        -- Added more strict rules to build process, starting to weed out "oh this works in GCC" style code
    935           In the next release "-Wconversion" will be enabled which will deal with all implicit casts.
    936 
    937 Nov 22nd, 2002 [later in the day]
    938 v0.74  -- Wrote a small variant of SAFER+ which shaved 50KB off the size of the library on x86 platforms
    939        -- Wrote a build option to remove the PK packet functions [keeps the encrypt_key/sign_hash functions]
    940        -- Wrote a small variant of Rijndael (trimmed 13KB)
    941        -- Trimmed the TIGER/192 hash function a bit
    942        -- Overall the entire lib compiled is 295KB [down from 400KB before]
    943        -- Fixed a few minor oversights in the MSVC makefile
    944 
    945 Nov 22nd, 2002
    946 v0.73  -- Fixed bug in RC4 code where it could only use 255 byte keys.
    947        -- Fixed bug in yarrow code where it would allow cast5 or md2 to be used with it...
    948        -- Removed the ecc compress/expand points from the global scope.  Reduces namespace polution
    949        -- Fixed bug where if you used the SPRNG you couldn't pass NULL as your prng_state which you should be
    950           able todo since the SPRNG has no state...
    951        -- Corrected some oversights in the manual and the examples...
    952        -- By default the GF(2^W) math library is excluded from the build.  The source is maintained because I wrote it
    953           and like it :-).  This way the built library is a tad smaller
    954        -- the MSVC makefile will now build for a SPACE optimized library rather than TIME optimized.
    955 
    956 Nov 21th, 2002
    957 v0.72  -- Fixed bug in the prime testing.  In the Miller-Rabin test I was raising the base to "N-1" not "r".
    958           The math still worked out fine because in effect it was performing a Fermat test.  Tested the new code and it 
    959           works properly
    960        -- Fixed some of the code where it was still using the old error syntax
    961        -- Sped up the RSA decrypt/sign routines
    962        -- Optimized the ecc_shared_secret routine to not use so much stack
    963        -- Fixed up the makefile to make releases where the version # is in the file name and directory it will unzip
    964           to
    965 
    966 Nov 19th, 2002
    967 v0.71  -- HELP TOM.  I need tuition for the January semester.  Now I don't want to force donations [nor will I ever]
    968           but I really need the help!  See my website http://tom.iahu.ca/help_tom.html for more details.  Please help
    969           if you can! 
    970        --------------------------------------------------------------------------------------------------------------
    971        -- Officially the library is no longer supported in GCC 3.2 in windows [cygwin].
    972           In windows you can either use GCC 2.95.3 or try your luck with 3.2  It seems that
    973           "-fomit-frame-pointer" is broken in the windows build [but not the linux x86 build???]
    974           If you simply must use 3.2 then I suggest you limit the optimizations to simply "-O2"
    975        -- Started new error handling API.  Similar to the previous except there are more error codes than just
    976           CRYPT_ERROR
    977        -- Added my implementation of the MD2 hash function [despite the errors in the RFC I managed to get it right!]
    978        -- Merged in more changes from Sky Schulz.  I have to make mention here that he has been a tremendous help in 
    979           getting me motivated to make some much needed updates to the library!
    980        -- Fixed one of the many mistakes in the manual as pointed out by Daniel Richards
    981        -- Fixed a bug in the RC4 code [wasn't setting up the key correctly]
    982        -- Added my implementation of the CAST5 [aka CAST-128] block cipher (conforms...)
    983        -- Fixed numerous bugs in the PK code.  Essentially I was "freeing" keys when the import failed.  This is neither
    984           required nor a good a idea [double free].  
    985        -- Tom needs a job.
    986        -- Fixed up the test harness as requested by Sky Schulz.  Also modifed the timing routines to run for X seconds
    987           and count # of ops performed.  This is more suitable than say encrypting 10 million blocks on a slow processor
    988           where it could take minutes!
    989        -- Modified test programs hashsum/encrypt to use the new algorithms and error handling syntax
    990        -- Removed the PKCS code since it was incomplete.  In the future I plan on writing a "add-on" library that
    991           provides PKCS support... 
    992        -- updated the config system so the #defines are in the makefiles instead of mycrypt_cfg.h  
    993        -- Willing to work on an hourly basis for 15$ CDN per hour.
    994        -- updated the test program to not test ciphers not included
    995        -- updated the makefile to make "rsa_sys.c" a dependency of rsa.o [helps develop the code...]
    996        -- fixed numerous failures to detect buffer overflows [minor] in the PK code.
    997        -- fixed the safer [64-bit block version] test routines which didn't check the returns of the setup
    998           function
    999        -- check out my CV at http://tom.iahu.ca/cv.html
   1000        -- removed the GBA makefile and code from demos/test.c [not a particularly useful demo...]
   1001        -- merged in rudimentary [for testing] PS2 RNG from Sky Schulz
   1002        -- merged in PS2 timer code [only shell included due to NDA reasons...]
   1003        -- updated HMAC code to return errors where possible
   1004        -- Thanks go to Sky Schulz who bought me a RegCode for TextPad [the official editor of libtomcrypt]
   1005 
   1006 Nov 12th, 2002
   1007 v0.70  -- Updated so you can swap out the default malloc/calloc/free routines at build time with others. (Sky Schulz)
   1008        -- Sky Schulz contributed some code towards autodetecting the PS2 in mycrypt_cfg.h
   1009        -- Added PS2 makefile contributed by Sky Schulz [see a pattern forming?]
   1010        -- Added ability to have no FILE I/O functions at all (see makefile), Sky Schulz....
   1011        -- Added support for substituting out the clock() function (Sky Schulz)
   1012        -- Fixed up makefile to include new headers in the HEADERS variable
   1013        -- Removed "coin.c" as its not really useful anyways
   1014        -- Removed many "debug" printfs that would show up on failures.  Basically I wanted to ensure the only output
   1015           would be from the developer themselves.
   1016        -- Added "rc4.c" a RC4 implementation with a PRNG interface.  Since RC4 isn't a block cipher it wouldn't work
   1017           too well as a block cipher.
   1018        -- Fixed ARGCHK macro usage when ARGTYPE=1 throughout the code
   1019        -- updated makefile to make subdirectory properly (Sku Schulz)
   1020        -- Started towards new API setup.  Instead of checking for "== CRYPT_ERROR" you should check "!= CRYPT_OK"
   1021           In future releases functions will return things other than CRYPT_ERROR on error to give more useful
   1022           thread safe error reporting.  The manual will be updated to reflect this.  For this release all
   1023           errors are returned as CRYPT_ERROR (except as noted) but in future releases this will change.         
   1024        -- Removed the zlib branch since its not really required anyways.  Makes the package smaller
   1025 
   1026 Nov 11th, 2002
   1027 v0.69  -- Added ARGCHK (see mycrypt_argchk.h) "arguement checking" to all functions that accept pointers
   1028        -- Note I forgot to change the CRYPT version tag in v0.68... fixed now.
   1029 
   1030 Nov 8th, 2002
   1031 v0.68  -- Fixed flaw in kr_import/kr_export that wasted 4 bytes.  Source but not binary compatible with v0.67
   1032        -- Fixed bug in kr_find_name that used memcmp to match strings.  Uses strncmp now.
   1033        -- kr_clear now sets the pointer to NULL to facilate debugging [e.g. using the keyring after clearing]
   1034        -- static functions in _write/_read in keyring.c now check the return of ctr_encrypt/ctr_decrypt.
   1035        -- Updated blowfish/rc2/rc5/rc6 keysize() function to not reject keys larger than the biggest key the
   1036           respective ciphers can use.  
   1037        -- Fixed a bug in hashsum demo that would report the hash for files that don't exist!
   1038 
   1039 Oct 16th, 2002
   1040 v0.67  -- Moved the function prototypes into files mycrypt_*.h.  To "install" the lib just copy all the 
   1041           header files "*.h" from the base of this project into your global include path.
   1042        -- Made the OFB/CFB/CTR functions use "unsigned long" for the length instead of "int"
   1043        -- Added keyring support for the PK functions
   1044        -- ***API CHANGE*** changed the ecc_make_key and dh_make_key to act more like rsa_make_key.  Basically
   1045           move the first argument to the next to last.
   1046        -- Fixed bug in dh_test() that wouldn't test the primality of the order of the sub-group
   1047        -- replaced the primes in the DH code with new ones that are larger than the size they are 
   1048           associated with.  That is a 1024-bit DH key will have a 1025-bit prime as the modulus
   1049        -- cleaned up all the PK code, changed a bit of the API around [not source compatible with v0.66]
   1050        -- major editing of the manual, started Docer program
   1051        -- added 160 and 224 bit key settings for ECC.  This makes the DH and ECC binary wise incompatible with v0.66
   1052        -- Added an additional check for memory errors in is_prime() and cleaned up prime.c a bit
   1053        -- Removed ID_TAG from all files [meh, not a big fan...]
   1054        -- Removed unused variable from yarrow state and made AES/SHA256 the default cipher/hash combo
   1055        -- Fixed a bug in the Yarrow code that called prng_is_valid instead of cipher_is_valid from yarrow_start()
   1056        -- The ECB/CBC/OFB/CFB/CTR wrappers now check that the cipher is valid in the encrypt/decrypt calls
   1057           Returns int now instead of void.
   1058 
   1059 Sept 24th, 2002
   1060 v0.66  -- Updated the /demos/test.c program to time the hashes correctly.  Also it uses the yarrow PRNG for all of the 
   1061           tests meaning its possible to run on RNG less platforms 
   1062        -- Updated the /demos/hashsum.c program to hash from the standard input
   1063        -- Updated the RSA code to make keys a bit quicker [update by Wayne Scott] by not making both primes at the same
   1064           time.
   1065        -- Dan Kaminsky suggested some cleanups for the code and the MPI config
   1066           Code ships in unix LF format by default now too... will still build in MSVC and all... but if you want
   1067           to read the stuff you'll have to convert it 
   1068        -- Changes to the manual to reflect new API [e.g. hash_memory/file have v0.65 prototypes]and some typos fixed
   1069 
   1070 Sept 20th, 2002
   1071 v0.65  -- Wayne Scott (wscott (a] bitmover.com) made a few of suggestions to improve the library.  Most 
   1072           importantly he pointed out the math lib is not really required.  He's also tested the lib on 18 
   1073           different platforms.  According to him with only a few troubles [lack of /dev/random, etc] the 
   1074           library worked as it was supposed to.  You can find the list at 
   1075           http://www.bitkeeper.com/Products.BitKeeper.Platforms.html
   1076        -- Updated the hash_file and hash_memory functions to keep track of the size of the output
   1077        -- Wayne Scott updated the demos/test.c file to use the SPRNG less and Yarrow more
   1078        -- Modified the mycrypt_cfg.h to autodetect x86-32 machines
   1079 
   1080 Sept 19th, 2002
   1081 v0.64  -- wrote makefile for the GBA device [and hacked the demos/test.c file to support it conditionally]
   1082        -- Fixed error in PK (e.g. ECC, RSA, DH) import functions where I was clobbering the packet error messages
   1083        -- fixed more typos in the manual
   1084        -- removed all unused variables from the core library (ignore the ID_TAG stuff)
   1085        -- added "const char *crypt_build_settings" string which is a build time constant that gives a listing
   1086           of all the build time options.  Useful for debugging since you can send that to me and I will know what 
   1087           exactly you had set for the mycrypt_cfg.h file.
   1088        -- Added control over endianess.  Out of the box it defaults to endianess neutral but you can trivially 
   1089           configure the library for your platform.  Using this I boosted RC5 from 660Mbit/sec to 785Mbit/sec on my 
   1090           Athlon box.  See "mycrypt_cfg.h" for more information.
   1091 
   1092 Sept 11th, 2002
   1093 v0.63  -- Made hashsum demo output like the original md5sum program 
   1094        -- Made additions to the examples in the manual (fixed them up a bunch)
   1095        -- Merged in the base64 code from Wayne Scott (wscott (a] bitmover.com)
   1096 
   1097 Aug 29th, 2002
   1098 v0.62  -- Added the CLEAN_STACK functionality to several of the hashes I forgot to update.
   1099 
   1100 Aug 9th, 2002
   1101 v0.61  -- Fixed a bug in the DES code [oops I read something wrong].
   1102 
   1103 Aug 8th, 2002
   1104 v0.60  -- Merged in DES code [and wrote 3DES-EDE code based on it] from Dobes V.
   1105 
   1106 Aug 7th, 2002
   1107 v0.59  -- Fixed a "unsigned long long" bug that caused v0.58 not to build in MSVC.
   1108        -- Cleaned up a little in the makefile
   1109        -- added code that times the hash functions too in the test program
   1110 
   1111 Aug 3rd, 2002
   1112 v0.58  -- Added more stack cleaning conditionals throughout the code.  
   1113        -- corrected some CLEAR_STACK conditionals... should have been CLEAN_STACK
   1114        -- Simplified the RSA, DH and ECC encrypt() routines where they use CTR to encode the message
   1115           now they only make one call to ctr_encrypt()/ctr_decrypt().
   1116 
   1117 Aug 2nd, 2002
   1118 v0.57  -- Fixed a few errors messages in the SAFER code to actually report the correct cipher name.
   1119        -- rsa_encrypt() uses the "keysize()" method of the cipher being used to more accurately pick a
   1120           key size.  By default rsa_encrypt() will choose to use a 256-bit key but the cipher can turn that 
   1121           down if required.
   1122        -- The rsa_exptmod() function will now more reliably detect invalid inputs (e.g. greater than the modulus).
   1123        -- The padding method for RSA is more clearly documented.  Namely if you want to encrypt/sign something of length
   1124           N then your modulus must be of length 1+3N.  So to sign a message with say SHA-384 [48 bytes] you need a 
   1125           145 byte (1160 bits) modulus.  This is all in the manual now.
   1126        -- Added build option CLEAN_STACK which will allow you to choose whether you want to clean the stack or not after every
   1127           cipher/hash call
   1128        -- Sped up the hash "process()" functions by not copying one byte at a time.
   1129        ++ (added just after I uploaded...)
   1130           MD4 process() now handles input buffers > 64 bytes
   1131 
   1132 Aug 1st, 2002
   1133 v0.56  -- Cleaned up the comments in the Blowfish code.
   1134        -- Oh yeah, in v0.55 I made all of the descriptor elements constant.  I just forgot to mention it.
   1135        -- fixed a couple of places where descriptor indexes were tested wrong.  Not a huge bug but now its harder
   1136           to mess up.
   1137        -- Added the SAFER [64-bit block] ciphers K64, SK64, K128 and SK128 to the library.
   1138        -- Added the RC2 block cipher to the library.
   1139        -- Changed the SAFER define for the SAFER+ cipher to SAFERP so that the new SAFER [64-bit] ciphers
   1140           can use them with less confusion.
   1141 
   1142 July 29th, 2002
   1143 v0.55  -- My god stupid Blowfish has yet again been fixed.  I swear I hate that cipher.  Next bug in it and boom its out of the
   1144           library.  Use AES or something else cuz I really hate Blowfish at this stage....
   1145        -- Partial PKCS support [hint DONT USE IT YET CUZ ITS UNTESTED!]
   1146 
   1147 July 19th, 2002
   1148 v0.54  -- Blowfish now conforms to known test vectors.  Silly bad coding tom!
   1149        -- RC5/RC6/Serpent all have more test vectors now [and they seemed to have been working before]
   1150 
   1151 July 18th, 2002
   1152 v0.53  -- Added more test vectors to the blowfish code just for kicks [and they are const now too :-)]
   1153        -- added prng/hash/cipher is_valid functions and used them in all of the PK code so you can't enter the code
   1154           with an invalid index ever now.
   1155        -- Simplified the Yarrow code once again :-)
   1156 
   1157 July 12th, 2002
   1158 v0.52  -- Fixed a bug in MD4 where the hash descriptor ID was the same as SHA-512.  Now MD4 will work with
   1159           all the routines...
   1160        -- Fixed the comments in SHA-512 to be a bit more meaningful
   1161        -- In md4 I made the PADDING array const [again to store it in ROM]
   1162        -- in hash_file I switched the constant "512" to "sizeof(buf)" to be a bit safer
   1163        -- in SHA-1's test routine I fixed the string literal to say SHA-1 not sha1
   1164        -- Fixed a logical error in the CTR code which would make it skip the first IV value.  This means
   1165           the CTR code from v0.52 will be incompatible [binary wise] with previous releases but it makes more
   1166           sense this way.
   1167        -- Added {} braces for as many if/for/blocks of code I could find.  My rule is that every for/if/while/do block
   1168           must have {} braces around it.
   1169        -- made the rounds table in saferp_setup const [again for the ROM think about the ROM!]
   1170        -- fixed RC5 since it no longer requires rc5 to be registered in the lib.  It used to since the descriptors used to 
   1171           be part of the table...
   1172        -- the packet.c code now makes crypt_error literal string errors when an error occurs
   1173        -- cleaned up the SAFER+ key schedule to be a bit easier to read.
   1174        -- fixed a huge bug in Twofish with the TWOFISH_SMALL define.  Because I clean the stack now I had
   1175           changed the "g_func()" to be called indirectly.  I forgot to actually return the return of the Twofish
   1176           g_func() function which caused it not to work... [does now :-)]
   1177 
   1178 July 11th, 2002
   1179 v0.51  -- Fixed a bug in SHA512/384 code for multi-block messages.
   1180        -- Added more test vectors to the SHA384/512 and TIGER hash functions
   1181        -- cleaned up the hash done routines to make more sense
   1182  
   1183 July 10th, 2002
   1184 v0.50  -- Fixed yarrow.c so that the cipher/hash used would be registered.  Also fixed
   1185           a bug where the SAFER+ name was "safer" but should have been "safer+".
   1186        -- Added an element to the hash descriptors that gives the size of a block [sent into the compressor]
   1187        -- Cleaned up the support for HMAC's
   1188        -- Cleaned up the test vector routines to make the test vector data const.  This means on some platforms it will be
   1189           placed in ROM not RAM now.
   1190        -- Added MD4 code submited by Dobes Vandermeer (dobes (a] smartt.com)
   1191        -- Added "burn_stack" function [idea taken from another source of crypto code].  The idea is if a function has
   1192           alot of variables it will clean up better.  Functions like the ecb serpent and twofish code will now have their
   1193           stacks cleaned and the rest of the code is getting much more straightforward.
   1194        -- Added a hashing demo by Daniel Richards (kyhwana (a] world-net.co.nz)
   1195        -- I (Tom) modified some of the test vector routines to use more vectors ala Dobes style.
   1196           For example, the MD5/SHA1 code now uses all of the test vectors from the RFC/FIPS spec.
   1197        -- Fixed the register/unregister functions to properly report errors in crypt_error
   1198        -- Correctly updated yarrow code to remove a few unused variables.
   1199        -- Updated manual to fix a few erroneous examples.
   1200        -- Added section on Hash based Message Authentication Codes (HMAC) to the manual
   1201 
   1202 June 19th, 2002
   1203 v0.46  -- Added in HMAC code from Dobes Vandermeer (dobes (a] smartt.com)
   1204 
   1205 June 8th, 2002
   1206 v0.45  -- Fixed bug in rc5.c where if you called rc5_setup() before registering RC5 it would cause
   1207           undefined behaviour.
   1208        -- Fixed mycrypt_cfg.h to eliminate the 224 bit ECC key.
   1209        -- made the "default" makefile target have depends on mycrypt.h and mycrypt_cfg.h
   1210 
   1211 Apr 4th, 2002
   1212 v0.44  -- Fixed bug in ecc.c::new_point() where if the initial malloc fails it would not catch it.
   1213 
   1214 Mar 22nd, 2002
   1215 v0.43  -- Changed the ZLIB code over to the 1.1.4 code base to avoid the "double free" bug.  
   1216        -- Updated the GCC makefile not to use -O3 or -funroll-loops
   1217        -- Version tag in mycrypt.h has been updated :-)
   1218 
   1219 Mar 10th, 2002
   1220 v0.42  -- The RNG code can now use /dev/urandom before trying /dev/random (J. Klapste)
   1221 
   1222 Mar 3rd, 2002
   1223 v0.41  -- Added support to link and use ciphers at compile time.  This can greatly reduce the code size!
   1224        -- Added a demo to show off how small an application can get... 46kb!
   1225        -- Disastry pointed out that Blowfish is supposed to be high endian.
   1226        -- Made registry code for the PRNGs as well [now the smallest useable link is 43kb]
   1227 
   1228 Feb 11th, 2002
   1229 v0.40  -- RSA signatures use [and check for] fixed padding scheme.
   1230        -- I'm developing in Linux now :-)
   1231        -- No more warnings from GCC 2.96
   1232 
   1233 Feb 5th, 2002
   1234 v0.39  -- Updated the XTEA code to work in accordance with the XTEA design
   1235 
   1236 January 24th, 2002
   1237 v0.38  -- CFB and OFB modes can now handle blocks of variable size like the CTR code
   1238        -- Wrote a wrapper around the memory compress functions in Zlib that act like the functions
   1239           in the rest of my crypto lib
   1240 
   1241 January 23rd, 2002
   1242 v0.37  -- Added support code so that if a hash size and key size for a cipher don't match up they will
   1243           use the next lower key supported.  (mainly for the PK code).  So you can now use SHA-1 with
   1244           Twofish, etc...
   1245        -- Added more options for Twofish.  You can now tell it to use precomputed sboxes and MDS multiplications
   1246           This will speed up the TWOFISH_SMALL implementation by increasing the code size by 1024 bytes.
   1247        -- Fixed a bug in prime.c that would not use the correct table if you undefined SMALL_PRIME_TAB
   1248        -- Fixed all of the PK packet code to use the same header format [see packet.c].  This makes the PK code
   1249           binary wise incompatible with previous releases while the API has not changed at all.
   1250 
   1251 January 22nd, 2002
   1252 v0.36  -- Corrections to the manual
   1253        -- Made a modification to Twofish which lets you build a "small ram" variant.  It requires
   1254           about 190 bytes of ram for the key storage compared to the 4,200 bytes the normal 
   1255           variant requires.
   1256        -- Reduced the stack space used in all of the PK routines.
   1257 
   1258 January 19th, 2002
   1259 v0.35  -- If you removed the first hash or cipher from the library it wouldn't return an error if 
   1260           you used an ID=0 [i.e blowfish or sha256] in any routine.  Now it checks for that and will
   1261           return an error like it should
   1262        -- Merged in new routines from Clay Culver.  These routines are for the PK code so you can easily 
   1263           encode a symmetric key for multiple recipients.
   1264        -- Made the ecc and DH make_key() routines make secret keys of the same size as the keysize listed.
   1265           Originally I wanted to ensure that the keys were smaller than the order of the field used
   1266           However, the bias is so insignifcant using full sizes.  For example, with a ECC-192 key the order
   1267           is about 2^191.99, so instead I rounded down and used a 184-bit secret key.  Now I simply use a full 192-bit
   1268           key the code will work just the same except that some 192-bit keys will be duplicates which is not a big
   1269           deal since 1/2^192 is a very small bias!
   1270        -- Made the configuration a bit simpler and more exacting.  You can for example now select which DH or ECC
   1271           key settings you wish to support without including the data for all other key settings.  I put the #defines
   1272           in a new file called "mycrypt_cfg.h"
   1273        -- Configured "mpi-config.h" so its a bit more conservative with the memory required and code space used
   1274        -- Jason Klapste submitted bug fixes to the yarrow, hash and various other issues.  The yarrow code will now
   1275           use what ever remaining hash/cipher combo is left [after you #undef them] at build time.   He also suggested
   1276           a fix to remove unused structures from the symmetric_key and hash_state unions.
   1277        -- Made the CTR code handle variable length blocks better. It will buffer the encryption pad so you can
   1278           encrypt messages any size block at a time.
   1279        -- Simplified the yarrow code to take advantage of the new CTR code.
   1280        -- Added a 4096-bit DH key setting.  That took me about 36 hours to find!
   1281        -- Changed the base64 routines to use a real base64 encoding scheme.
   1282        -- Added in DH and ECC "encrypt_key()" functions.  They are still rather "beta"ish.
   1283        -- Added **Twofish** to the list of ciphers!
   1284 
   1285 January 18th, 2002
   1286 v0.34  -- Added "sha512" to the list of hashes.  Produces a 512-bit message digest.  Note that with the current
   1287           padding with the rsa_sign() function you cannot use sha512 with a key less than 1536 bits for signatures.
   1288        -- Cleaned up the other hash functions to use the LOAD and STORE macros...
   1289 
   1290 January 17th, 2002
   1291 v0.33  -- Made the lower limit on keysizes for RSA 1024 bits again because I realized that 768 bit keys wouldn't
   1292           work with the padding scheme and large symmetric keys.
   1293        -- Added information concerning the Zlib license to the manual
   1294        -- Added a 3072-bit key setting for the DH code.
   1295        -- Made the "find_xyz()" routines take "const char *" as per Clay Culver's suggestion.
   1296        -- Fixed an embarassing typo in the manual concerning the hashes.  Thank's Clay for finding it!
   1297        -- Fixed rand_prime() so that it makes primes bigger than the setting you give.  For example,
   1298           if you want a 1024-bit prime it would make a 1023-bit one.  Now it ensures that the prime
   1299           it makes is always greater than 2^(8n) (n == bytes in prime).  This doesn't have a huge
   1300           impact on security but I corrected it just the same.
   1301        -- Fixed the CTR routine to work on platforms where char != 8-bits 
   1302        -- Fixed sha1/sha256/md5/blowfish to not assume "unsigned long == 32-bits", Basically any operation with carries
   1303           I "AND" with 0xFFFFFFFF.  That forces only the lower 32-bits to have information in it.  On x86 platforms
   1304           most compilers optimize out the AND operation since its a nop.
   1305 
   1306 January 16th, 2002
   1307 v0.32  -- Made Rijndael's setup function fully static so it is thread safe
   1308        -- Svante Seleborg suggested a cosmetic style fixup for aes.c, 
   1309           basically to remove some of the #defines to clean it up
   1310        -- Made the PK routines not export the ASCII version of the names of ciphers/hashes which makes
   1311           the PK message formats *incompatible* with previous releases.
   1312        -- Merge in Zlib :-)
   1313  
   1314   
   1315 January 15th, 2002
   1316 v0.31  -- The RSA routines can now use CRT to speed up decryption/signatures.  The routines are backwards 
   1317           compatible with previous releases.
   1318        -- Fixed another bug that Svante Seleborg found.  Basically you could buffer-overrun the 
   1319           rsa_exptmod() function itself if you're not careful.  That's fixed now.  Fixed another bug in
   1320           rsa_exptmod() where if it knows the buffer you passed is too small it wouldn't free all used 
   1321           memory.       
   1322        -- improved the readability of the PK import/export functions
   1323        -- Added a fix to RSA.C by Clay Culver
   1324        -- Changed the CONST64 macro for MSVC to use the "unsigned __int64" type, e.g. "ui64" instead of "i64".
   1325 
   1326 January 14th, 2002
   1327 v0.30  -- Major change to the Yarrow PRNG code, fixed a bug that Eugene Starokoltsev found.
   1328           Basically if you added entropy to the pool in small increments it could in fact
   1329           cancel out.  Now I hash the pool with the new data which is way smarter.
   1330 
   1331 January 12th, 2002
   1332 v0.29  -- Added MPI code written by Svante Seleborg to the library.  This will make the PK code much
   1333           easier to follow and debug.  Actually I've already fixed a memory leak in dh_shared_secret().
   1334        -- Memory leaks found and correct in all three PK routines.  The leaks would occur when a bignum
   1335           operation fails so it wouldn't normally turn up in the course of a program
   1336        -- Fixed bugs in dh_key_size and ecc_key_size which would return garbage for invalid key idx'es
   1337 
   1338 January 11th, 2002
   1339 v0.28  -- Cleaned up some code so that it doesn't assume "char == 8bits".  Mainly SAFER+ has been 
   1340           changed.
   1341        -- ***HUGE*** changes in the PK code.  I check all return values in the bignum code so if there
   1342           are errors [insufficient memory, etc..] it will be reported.  This makes the code fairly more
   1343           robust and likely to catch any errors.
   1344        -- Updated the is_prime() function to use a new prototype [it can return errors now] and it also
   1345           does trial divisions against more primes before the Rabin Miller steps
   1346        -- Added OFB, CFB and ECB generic wrappers for the symmetric ciphers to round out the implementations.
   1347        -- Added Xtea to the list of ciphers, to the best of my ability I have verified this implementation.
   1348           I should note that there is not alot of concrete information about the cipher.  "Ansi C" versions
   1349           I found did not address endianess and were not even portable!.  This code is portable and to the
   1350           best of my knowledge implements the Xtea algorithm as per the [short] X-Tea paper.
   1351        -- Reformated the manual to include the **FULL** source code optimized to be pritable.
   1352 
   1353 January 9th, 2002
   1354 v0.27  -- Changed the char constants to numerical values.  It is backwards compatible and should work on
   1355           platforms where 'd' != 100 [for example].
   1356        -- Made a change to rand_prime() which takes the input length as a signed type so you can pass
   1357           a negative len to get a "3 mod 4" style prime... oops
   1358        -- changed the MSVC makefile to build with a warning level of three, no warnings!
   1359 
   1360 January 8th, 2002
   1361 v0.26  -- updated SHA-256 to use ROR() for a rotate so 64-bit machines won't corrupt
   1362           the output
   1363        -- Changed #include <> to #include "" for local .h files as per Richard Heathfields' suggestions.
   1364        -- Fixed bug in MPI [well bug in MSVC] that compiled code incorrectly in mp_set_int()
   1365           I added a work around that catches the error and continues normally.
   1366 
   1367 January 8th, 2002
   1368 v0.25  -- Added a stupid define so MSVC 6.00 can build the library.
   1369        -- Big thanks to sci.crypt and "Ajay K. Agrawal" for helping me port this to MSVC
   1370 
   1371 January 7th, 2002
   1372 v0.24  -- Sped up Blowfish by unrolling and removing the swaps.
   1373        -- Made the code comply with more traditional ANSI C standards
   1374           Should compile with MSVC with less errors
   1375        -- moved the demos and documentation into their own directories
   1376           so you can easily build the library with other tool chains
   1377           by compiling the files in the root
   1378        -- converted functions with length of outputs to use 
   1379           "unsigned long" so 16-bit platforms will like this library more.
   1380 
   1381 January 5th, 2002
   1382 v0.23  -- Fixed a small error in the MPI config it should build fine anywhere.
   1383 
   1384 January 4th, 2002
   1385 v0.22  -- faster gf_mul() code
   1386        -- gf_shl() and gf_shr() are safe on 64-bit platforms now
   1387        -- Fixed an error in the hashes that Brian Gladman found.  
   1388           Basically if the message has exactly 56 bytes left to be 
   1389           compressed I handled them incorrectly.
   1390 
   1391 January 4th, 2002
   1392 v0.21  -- sped up the ECC code by removing redundant divisions in the 
   1393           point add and double routines.  I also extract the bits more
   1394           efficiently in "ecc_mulmod()" now.
   1395        -- sped up [and documented] the rand_prime() function.  Now it just
   1396           makes a random integer and increments by two until a prime is found
   1397           This is faster since it doesn't require alot of calls to the PRNG and
   1398           it doesn't require loading huge integers over and over.  rand_prime()
   1399           can also make primes congruent to 3 mod 4 [i.e for a blum integer]
   1400        -- added a gf_sqrt() function that finds square roots in a GF(2^w) field
   1401        -- fixed a bug in gf_div() that would return the wrong results if the divisor had a greator
   1402           divisor than the dividend.
   1403 
   1404 January 4th, 2002
   1405 v0.20  -- Added the fixed MPI back in so RSA and DH are much faster again
   1406 
   1407 v0.19  -- Updated the manual to reflect the fact that Brian Gladman wrote the AES and Serpent code.
   1408        -- DH, ECC and RSA signature/decryption functions check if the key is private
   1409        -- new DH signature/verification code works just like the RSA/ECC versions
   1410 
   1411 January 3rd, 2002
   1412 v0.18  -- Added way more comments to each .C file 
   1413        -- fixed a bug in cbc_decrypt(pt, ct, key) where pt == ct [i.e same buffer]
   1414        -- fixed RC5 so it reads the default rounds out of the cipher_descriptor table
   1415        -- cleaned up ecc_export()
   1416        -- Cleaned up dh_import() and ecc_import() which also perform more 
   1417           error checking now
   1418        -- Fixed a serious flaw in rsa_import() with private keys.
   1419 
   1420 January 2nd, 2002
   1421 v0.17  -- Fixed a bug in the random prime generator that fixes the wrong bits to one
   1422        -- ECC and DH code verify that the moduli and orders are in fact prime.  That 
   1423           slows down the test routines alot but what are you gonna do? 
   1424        -- Fixed a huge bug in the mp_exptmod() function which incorrectly calculates g^x mod p for some
   1425           values of p.  I replaced it with a slow function.  Once the author of MPI fixes his faster routine
   1426           I will switch back.
   1427   
   1428 January 1st, 2002 [whoa new year!]
   1429 v0.16  -- Improved GF division code that is faster.
   1430        -- documented the GF code
   1431 
   1432 December 31st, 2001
   1433 v0.15  -- A 1792-bit and 2048-bit DH setting was added.  Took me all night to 
   1434           find a 1792 and 2048-bit strong prime but what the heck
   1435        -- Library now has polynomial-basis GF(2^w) routines I wrote myself.  Can be used to perform
   1436           ECC over GF(2^w) later on....
   1437        -- Fixed a bug with the defines that allows it to build in windows
   1438        
   1439 December 30th, 2001
   1440 v0.14  -- Fixed the xxx_encrypt() packet routines to make an IV of appropriate size 
   1441           for the cipher used.  It was defaulting to making a 256-bit IV...
   1442        -- base64_encode() now appends a NULL byte, um "duh" stupid mistake now fixed...
   1443        -- spell checked the manual again... :-)
   1444 
   1445 December 30th, 2001
   1446 v0.13  -- Switching back to older copy of MPI since it works! arrg..
   1447        -- Added sign/verify functions for ECC
   1448        -- all signature verification routines default to invalid signatures.
   1449        -- Changed all calls to memset to zeromem.  Fixed up some buffer problems 
   1450           in other routines.  All calls to zeromem let the compiler determine the size
   1451           of the data to wipe.
   1452 
   1453 December 29th, 2001
   1454 v0.12  -- Imported a new version of MPI [the bignum library] that should
   1455           be a bit more stable [if you want to write your own bignum
   1456           routines with the library that is...]
   1457        -- Manual has way more info
   1458        -- hash_file() clears stack now [like it should]
   1459        -- The artificial cap on the hash input size of 2^32 bits has been
   1460           removed.  Basically I was too lazy todo 64-bit math before
   1461           [don't ask why... I can't remember].  Anyways the hashes
   1462           support the size of 2^64 bits [if you ever use that many bits in a message
   1463           that's just wierd...]
   1464        -- The hashes now wipe the "hash_state" after the digest is computed.  This helps
   1465           prevent the internal state of the hash being leaked accidently [i.e stack problems]
   1466 
   1467 December 29th, 2001
   1468 v0.11  -- Made #define's so you can trim the library down by removing
   1469           ciphers, hashs, modes of operation, prngs, and even PK algorithms
   1470           For example, the library with rijndael+ctr+sha1+ECC is 91KB compared
   1471           to the 246kb the full library takes.
   1472        -- Added ECC packet routines for encrypt/decrypt/sign/verify much akin to
   1473           the RSA packet routines.
   1474        -- ECC now compresses the public key, a ECC-192 public key takes 33 bytes 
   1475           for example....
   1476 
   1477 December 28th, 2001
   1478 v0.10  -- going to restart the manual from scratch to make it more 
   1479           clear and professional
   1480        -- Added ECC over Z/pZ.  Basically provides as much as DH
   1481           except its faster since the numbers are smaller.  For example,
   1482           A comparable 256-bit ECC key provides as much security as expected
   1483           from a DH key over 1024-bits.
   1484        -- Cleaned up the DH code to not export the symbol "sets[]"
   1485        -- Fixed a bug in the DH code that would not make the correct size 
   1486           random string if you made the key short.  For instance if you wanted 
   1487           a 512-bit DH key it would make a 768-bit one but only make up 512-bits 
   1488           for the exponent... now it makes the full 768 bits [or whatever the case 
   1489           is]
   1490        -- Fixed another ***SERIOUS*** bug in the DH code that would default to 768-bit
   1491           keys by mistake.
   1492 
   1493 December 25th, 2001
   1494 v0.09  -- Includes a demo program called file_crypt which shows off
   1495           how to use the library to make a command line tool which
   1496           allows the user to encode/decode a file with any
   1497           hash (on the passphrase) and cipher in CTR mode.
   1498        -- Switched everything to use typedef's now to clear up the code.
   1499        -- Added AES (128/192 and 256 bit key modes)
   1500 
   1501 December 24th, 2001
   1502 v0.08  -- fixed a typo in the manual. MPI stores its bignums in
   1503           BIG endian not little.
   1504        -- Started adding a RNG to the library.  Right now it tries
   1505           to open /dev/random and if that fails it uses either the 
   1506           MS CSP or the clock drift RNG.  It also allows callbacks 
   1507           since the drift RNG is slow (about 3.5 bytes/sec)
   1508        -- the RNG can also automatically setup a PRNG as well now
   1509 
   1510 v0.07  -- Added basic DH routines sufficient to 
   1511           negotiate shared secrets 
   1512           [see the manual for a complete example!]
   1513        -- Fixed rsa_import to detect when the input
   1514           could be corrupt.  
   1515        -- added more to the manual.
   1516 
   1517 December 22nd, 2001
   1518 v0.06  -- Fixed some formatting errors in 
   1519           the hash functions [just source code cleaning]
   1520        -- Fixed a typo in the error message for sha256 :-)
   1521        -- Fixed an error in base64_encode() that 
   1522           would fail to catch all buffer overruns
   1523        -- Test program times the RSA and symmetric cipher 
   1524           routines for kicks...
   1525        -- Added the "const" modifier to alot of routines to 
   1526           clear up the purpose of each function.
   1527        -- Changed the name of the library to "TomCrypt" 
   1528           following a suggestion from a sci.crypt reader....
   1529 
   1530 v0.05  -- Fixed the ROL/ROR macro to be safe on platforms 
   1531           where unsigned long is not 32-bits
   1532        -- I have added a bit more to the documentation 
   1533           manual "crypt.pdf" provided.
   1534        -- I have added a makefile for LCC-Win32.  It should be 
   1535           easy to port to other LCC platforms by changing a few lines.
   1536        -- Ran a spell checker over the manual.
   1537        -- Changed the header and library from "crypt" to "mycrypt" to not
   1538           clash with the *nix package "crypt".
   1539 
   1540 v0.04  -- Fixed a bug in the RC5,RC6,Blowfish key schedules
   1541           where if the key was not a multiple of 4 bytes it would
   1542           not get loaded correctly.
   1543 
   1544 December 21st, 2001
   1545 
   1546 v0.03  -- Added Serpent to the list of ciphers.
   1547 
   1548 v0.02  -- Changed RC5 to only allow 12 to 24 rounds
   1549        -- Added more to the manual.
   1550 
   1551 v0.01  -- We will call this the first version.
   1552 
   1553 /* $Source: /cvs/libtom/libtomcrypt/changes,v $ */
   1554 /* $Revision: 1.274 $ */
   1555 /* $Date: 2006/12/16 19:08:17 $ */
   1556 
   1557