changes.txt 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497
  1. XXX XXth, 2019
  2. v1.2.0
  3. -- A huge refactoring of the library happened - renaming,
  4. deprecating and replacing existing functions by improved API's.
  5. All deprecated functions, macros and symbols are only marked as such
  6. so this version is still API and ABI compatible to v1.x.
  7. -- Daniel Mendler was pushing for those changes and contributing a load of patches,
  8. refactorings, code reviews and whatnotelse.
  9. -- Christoph Zurnieden re-worked internals of the library, improved the performance,
  10. did code reviews and wrote documentation.
  11. -- Francois Perrad did some refactoring and took again care of linting the sources and
  12. provided all fixes.
  13. -- Jan Nijtmans, Karel Miko and Joachim Breitner contributed various patches.
  14. -- Private symbols can now be hidden for the shared library builds, disabled by default.
  15. -- All API's follow a single code style, are prefixed the same etc.
  16. -- Unified, safer and improved API's
  17. -- Less magic numbers - return values (where appropriate) and most flags are now enums,
  18. this was implemented in a backwards compatible way where return values were int.
  19. -- API's with return values are now by default marked as "warn on unsused result", this
  20. can be disabled if required (which will most likely hide bugs), c.f. MP_WUR in tommath.h
  21. -- Provide a whole set of setters&getters for different primitive types (long, uint32_t, etc.)
  22. -- All those primitive setters are now optimized.
  23. -- It's possible to automatically tune the cutoff values for Karatsuba&Toom-Cook
  24. -- The custom allocators which were formerly known as XMALLOC(), XFREE() etc. are now available
  25. as MP_MALLOC(), MP_REALLOC(), MP_CALLOC() and MP_FREE(). MP_REALLOC() and MP_FREE() now also
  26. provide the allocated size to ease the usage of simple allocators without tracking.
  27. -- Building is now also possible with MSVC 2015, 2017 and 2019 (use makefile.msvc)
  28. -- Added mp_decr() and mp_incr()
  29. -- Added mp_log_u32()
  30. -- Improved prime-checking
  31. -- Improved Toom-Cook multiplication
  32. -- Removed the LTM book (`make docs` now builds the user manual)
  33. Jan 28th, 2019
  34. v1.1.0
  35. -- Christoph Zurnieden contributed FIPS 186.4 compliant
  36. prime-checking (PR #113), several other fixes and a load of documentation
  37. -- Daniel Mendler provided two's-complement functions (PR #124)
  38. and mp_{set,get}_double() (PR #123)
  39. -- Francois Perrad took care of linting the sources, provided all fixes and
  40. a astylerc to auto-format the sources.
  41. -- A bunch of patches by Kevin B Kenny have been back-ported from TCL
  42. -- Jan Nijtmans provided the patches to `const`ify all API
  43. function arguments (also from TCL)
  44. -- mp_rand() has now several native random provider implementations
  45. and doesn't rely on `rand()` anymore
  46. -- Karel Miko provided fixes when building for MS Windows
  47. and re-worked the makefile generating process
  48. -- The entire environment and build logic has been extended and improved
  49. regarding auto-detection of platforms, libtool and a lot more
  50. -- Prevent some potential BOF cases
  51. -- Improved/fixed mp_lshd() and mp_invmod()
  52. -- A load more bugs were fixed by various contributors
  53. Aug 29th, 2017
  54. v1.0.1
  55. -- Dmitry Kovalenko provided fixes to mp_add_d() and mp_init_copy()
  56. -- Matt Johnston contributed some improvements to mp_div_2d(),
  57. mp_exptmod_fast(), mp_mod() and mp_mulmod()
  58. -- Julien Nabet provided a fix to the error handling in mp_init_multi()
  59. -- Ben Gardner provided a fix regarding usage of reserved keywords
  60. -- Fixed mp_rand() to fill the correct number of bits
  61. -- Fixed mp_invmod()
  62. -- Use the same 64-bit detection code as in libtomcrypt
  63. -- Correct usage of DESTDIR, PREFIX, etc. when installing the library
  64. -- Francois Perrad updated all the perl scripts to an actual perl version
  65. Feb 5th, 2016
  66. v1.0
  67. -- Bump to 1.0
  68. -- Dirkjan Bussink provided a faster version of mp_expt_d()
  69. -- Moritz Lenz contributed a fix to mp_mod()
  70. and provided mp_get_long() and mp_set_long()
  71. -- Fixed bugs in mp_read_radix(), mp_radix_size
  72. Thanks to shameister, Gerhard R,
  73. -- Christopher Brown provided mp_export() and mp_import()
  74. -- Improvements in the code of mp_init_copy()
  75. Thanks to ramkumarkoppu,
  76. -- lomereiter provided mp_balance_mul()
  77. -- Alexander Boström from the heimdal project contributed patches to
  78. mp_prime_next_prime() and mp_invmod() and added a mp_isneg() macro
  79. -- Fix build issues for Linux x32 ABI
  80. -- Added mp_get_long_long() and mp_set_long_long()
  81. -- Carlin provided a patch to use arc4random() instead of rand()
  82. on platforms where it is supported
  83. -- Karel Miko provided mp_sqrtmod_prime()
  84. July 23rd, 2010
  85. v0.42.0
  86. -- Fix for mp_prime_next_prime() bug when checking generated prime
  87. -- allow mp_shrink to shrink initialized, but empty MPI's
  88. -- Added project and solution files for Visual Studio 2005 and Visual Studio 2008.
  89. March 10th, 2007
  90. v0.41 -- Wolfgang Ehrhardt suggested a quick fix to mp_div_d() which makes the detection of powers of two quicker.
  91. -- [CRI] Added libtommath.dsp for Visual C++ users.
  92. December 24th, 2006
  93. v0.40 -- Updated makefile to properly support LIBNAME
  94. -- Fixed bug in fast_s_mp_mul_high_digs() which overflowed (line 83), thanks Valgrind!
  95. April 4th, 2006
  96. v0.39 -- Jim Wigginton pointed out my Montgomery examples in figures 6.4 and 6.6 were off by one, k should be 9 not 8
  97. -- Bruce Guenter suggested I use --tag=CC for libtool builds where the compiler may think it's C++.
  98. -- "mm" from sci.crypt pointed out that my mp_gcd was sub-optimal (I also updated and corrected the book)
  99. -- updated some of the @@ tags in tommath.src to reflect source changes.
  100. -- updated email and url info in all source files
  101. Jan 26th, 2006
  102. v0.38 -- broken makefile.shared fixed
  103. -- removed some carry stores that were not required [updated text]
  104. November 18th, 2005
  105. v0.37 -- [Don Porter] reported on a TCL list [HEY SEND ME BUGREPORTS ALREADY!!!] that mp_add_d() would compute -0 with some inputs. Fixed.
  106. -- [rinick@gmail.com] reported the makefile.bcc was messed up. Fixed.
  107. -- [Kevin Kenny] reported some issues with mp_toradix_n(). Now it doesn't require a min of 3 chars of output.
  108. -- Made the make command renamable. Wee
  109. August 1st, 2005
  110. v0.36 -- LTM_PRIME_2MSB_ON was fixed and the "OFF" flag was removed.
  111. -- [Peter LaDow] found a typo in the XREALLOC macro
  112. -- [Peter LaDow] pointed out that mp_read_(un)signed_bin should have "const" on the input
  113. -- Ported LTC patch to fix the prime_random_ex() function to get the bitsize correct [and the maskOR flags]
  114. -- Kevin Kenny pointed out a stray //
  115. -- David Hulton pointed out a typo in the textbook [mp_montgomery_setup() pseudo-code]
  116. -- Neal Hamilton (Elliptic Semiconductor) pointed out that my Karatsuba notation was backwards and that I could use
  117. unsigned operations in the routine.
  118. -- Paul Schmidt pointed out a linking error in mp_exptmod() when BN_S_MP_EXPTMOD_C is undefined (and another for read_radix)
  119. -- Updated makefiles to be way more flexible
  120. March 12th, 2005
  121. v0.35 -- Stupid XOR function missing line again... oops.
  122. -- Fixed bug in invmod not handling negative inputs correctly [Wolfgang Ehrhardt]
  123. -- Made exteuclid always give positive u3 output...[ Wolfgang Ehrhardt ]
  124. -- [Wolfgang Ehrhardt] Suggested a fix for mp_reduce() which avoided underruns. ;-)
  125. -- mp_rand() would emit one too many digits and it was possible to get a 0 out of it ... oops
  126. -- Added montgomery to the testing to make sure it handles 1..10 digit moduli correctly
  127. -- Fixed bug in comba that would lead to possible erroneous outputs when "pa < digs"
  128. -- Fixed bug in mp_toradix_size for "0" [Kevin Kenny]
  129. -- Updated chapters 1-5 of the textbook ;-) It now talks about the new comba code!
  130. February 12th, 2005
  131. v0.34 -- Fixed two more small errors in mp_prime_random_ex()
  132. -- Fixed overflow in mp_mul_d() [Kevin Kenny]
  133. -- Added mp_to_(un)signed_bin_n() functions which do bounds checking for ya [and report the size]
  134. -- Added "large" diminished radix support. Speeds up things like DSA where the moduli is of the form 2^k - P for some P < 2^(k/2) or so
  135. Actually is faster than Montgomery on my AMD64 (and probably much faster on a P4)
  136. -- Updated the manual a bit
  137. -- Ok so I haven't done the textbook work yet... My current freelance gig has landed me in France till the
  138. end of Feb/05. Once I get back I'll have tons of free time and I plan to go to town on the book.
  139. As of this release the API will freeze. At least until the book catches up with all the changes. I welcome
  140. bug reports but new algorithms will have to wait.
  141. December 23rd, 2004
  142. v0.33 -- Fixed "small" variant for mp_div() which would munge with negative dividends...
  143. -- Fixed bug in mp_prime_random_ex() which would set the most significant byte to zero when
  144. no special flags were set
  145. -- Fixed overflow [minor] bug in fast_s_mp_sqr()
  146. -- Made the makefiles easier to configure the group/user that ltm will install as
  147. -- Fixed "final carry" bug in comba multipliers. (Volkan Ceylan)
  148. -- Matt Johnston pointed out a missing semi-colon in mp_exptmod
  149. October 29th, 2004
  150. v0.32 -- Added "makefile.shared" for shared object support
  151. -- Added more to the build options/configs in the manual
  152. -- Started the Depends framework, wrote dep.pl to scan deps and
  153. produce "callgraph.txt" ;-)
  154. -- Wrote SC_RSA_1 which will enable close to the minimum required to perform
  155. RSA on 32-bit [or 64-bit] platforms with LibTomCrypt
  156. -- Merged in the small/slower mp_div replacement. You can now toggle which
  157. you want to use as your mp_div() at build time. Saves roughly 8KB or so.
  158. -- Renamed a few files and changed some comments to make depends system work better.
  159. (No changes to function names)
  160. -- Merged in new Combas that perform 2 reads per inner loop instead of the older
  161. 3reads/2writes per inner loop of the old code. Really though if you want speed
  162. learn to use TomsFastMath ;-)
  163. August 9th, 2004
  164. v0.31 -- "profiled" builds now :-) new timings for Intel Northwoods
  165. -- Added "pretty" build target
  166. -- Update mp_init() to actually assign 0's instead of relying on calloc()
  167. -- "Wolfgang Ehrhardt" <Wolfgang.Ehrhardt@munich.netsurf.de> found a bug in mp_mul() where if
  168. you multiply a negative by zero you get negative zero as the result. Oops.
  169. -- J Harper from PeerSec let me toy with his AMD64 and I got 60-bit digits working properly
  170. [this also means that I fixed a bug where if sizeof(int) < sizeof(mp_digit) it would bug]
  171. April 11th, 2004
  172. v0.30 -- Added "mp_toradix_n" which stores upto "n-1" least significant digits of an mp_int
  173. -- Johan Lindh sent a patch so MSVC wouldn't whine about redefining malloc [in weird dll modes]
  174. -- Henrik Goldman spotted a missing OPT_CAST in mp_fwrite()
  175. -- Tuned tommath.h so that when MP_LOW_MEM is defined MP_PREC shall be reduced.
  176. [I also allow MP_PREC to be externally defined now]
  177. -- Sped up mp_cnt_lsb() by using a 4x4 table [e.g. 4x speedup]
  178. -- Added mp_prime_random_ex() which is a more versatile prime generator accurate to
  179. exact bit lengths (unlike the deprecated but still available mp_prime_random() which
  180. is only accurate to byte lengths). See the new LTM_PRIME_* flags ;-)
  181. -- Alex Polushin contributed an optimized mp_sqrt() as well as mp_get_int() and mp_is_square().
  182. I've cleaned them all up to be a little more consistent [along with one bug fix] for this release.
  183. -- Added mp_init_set and mp_init_set_int to initialize and set small constants with one function
  184. call.
  185. -- Removed /etclib directory [um LibTomPoly deprecates this].
  186. -- Fixed mp_mod() so the sign of the result agrees with the sign of the modulus.
  187. ++ N.B. My semester is almost up so expect updates to the textbook to be posted to the libtomcrypt.org
  188. website.
  189. Jan 25th, 2004
  190. v0.29 ++ Note: "Henrik" from the v0.28 changelog refers to Henrik Goldman ;-)
  191. -- Added fix to mp_shrink to prevent a realloc when used == 0 [e.g. realloc zero bytes???]
  192. -- Made the mp_prime_rabin_miller_trials() function internal table smaller and also
  193. set the minimum number of tests to two (sounds a bit safer).
  194. -- Added a mp_exteuclid() which computes the extended euclidean algorithm.
  195. -- Fixed a memory leak in s_mp_exptmod() [called when Barrett reduction is to be used] which would arise
  196. if a multiplication or subsequent reduction failed [would not free the temp result].
  197. -- Made an API change to mp_radix_size(). It now returns an error code and stores the required size
  198. through an "int star" passed to it.
  199. Dec 24th, 2003
  200. v0.28 -- Henrik Goldman suggested I add casts to the montomgery code [stores into mu...] so compilers wouldn't
  201. spew [erroneous] diagnostics... fixed.
  202. -- Henrik Goldman also spotted two typos. One in mp_radix_size() and another in mp_toradix().
  203. -- Added fix to mp_shrink() to avoid a memory leak.
  204. -- Added mp_prime_random() which requires a callback to make truly random primes of a given nature
  205. (idea from chat with Niels Ferguson at Crypto'03)
  206. -- Picked up a second wind. I'm filled with Gooo. Mission Gooo!
  207. -- Removed divisions from mp_reduce_is_2k()
  208. -- Sped up mp_div_d() [general case] to use only one division per digit instead of two.
  209. -- Added the heap macros from LTC to LTM. Now you can easily [by editing four lines of tommath.h]
  210. change the name of the heap functions used in LTM [also compatible with LTC via MPI mode]
  211. -- Added bn_prime_rabin_miller_trials() which gives the number of Rabin-Miller trials to achieve
  212. a failure rate of less than 2^-96
  213. -- fixed bug in fast_mp_invmod(). The initial testing logic was wrong. An invalid input is not when
  214. "a" and "b" are even it's when "b" is even [the algo is for odd moduli only].
  215. -- Started a new manual [finally]. It is incomplete and will be finished as time goes on. I had to stop
  216. adding full demos around half way in chapter three so I could at least get a good portion of the
  217. manual done. If you really need help using the library you can always email me!
  218. -- My Textbook is now included as part of the package [all Public Domain]
  219. Sept 19th, 2003
  220. v0.27 -- Removed changes.txt~ which was made by accident since "kate" decided it was
  221. a good time to re-enable backups... [kde is fun!]
  222. -- In mp_grow() "a->dp" is not overwritten by realloc call [re: memory leak]
  223. Now if mp_grow() fails the mp_int is still valid and can be cleared via
  224. mp_clear() to reclaim the memory.
  225. -- Henrik Goldman found a buffer overflow bug in mp_add_d(). Fixed.
  226. -- Cleaned up mp_mul_d() to be much easier to read and follow.
  227. Aug 29th, 2003
  228. v0.26 -- Fixed typo that caused warning with GCC 3.2
  229. -- Martin Marcel noticed a bug in mp_neg() that allowed negative zeroes.
  230. Also, Martin is the fellow who noted the bugs in mp_gcd() of 0.24/0.25.
  231. -- Martin Marcel noticed an optimization [and slight bug] in mp_lcm().
  232. -- Added fix to mp_read_unsigned_bin to prevent a buffer overflow.
  233. -- Beefed up the comments in the baseline multipliers [and montgomery]
  234. -- Added "mont" demo to the makefile.msvc in etc/
  235. -- Optimized sign compares in mp_cmp from 4 to 2 cases.
  236. Aug 4th, 2003
  237. v0.25 -- Fix to mp_gcd again... oops (0,-a) == (-a, 0) == a
  238. -- Fix to mp_clear which didn't reset the sign [Greg Rose]
  239. -- Added mp_error_to_string() to convert return codes to strings. [Greg Rose]
  240. -- Optimized fast_mp_invmod() to do the test for invalid inputs [both even]
  241. first so temps don't have to be initialized if it's going to fail.
  242. -- Optimized mp_gcd() by removing mp_div_2d calls for when one of the inputs
  243. is odd.
  244. -- Tons of new comments, some indentation fixups, etc.
  245. -- mp_jacobi() returns MP_VAL if the modulus is less than or equal to zero.
  246. -- fixed two typos in the header of each file :-)
  247. -- LibTomMath is officially Public Domain [see LICENSE]
  248. July 15th, 2003
  249. v0.24 -- Optimized mp_add_d and mp_sub_d to not allocate temporary variables
  250. -- Fixed mp_gcd() so the gcd of 0,0 is 0. Allows the gcd operation to be chained
  251. e.g. (0,0,a) == a [instead of 1]
  252. -- Should be one of the last release for a while. Working on LibTomMath book now.
  253. -- optimized the pprime demo [/etc/pprime.c] to first make a huge table of single
  254. digit primes then it reads them randomly instead of randomly choosing/testing single
  255. digit primes.
  256. July 12th, 2003
  257. v0.23 -- Optimized mp_prime_next_prime() to not use mp_mod [via is_divisible()] in each
  258. iteration. Instead now a smaller table is kept of the residues which can be updated
  259. without division.
  260. -- Fixed a bug in next_prime() where an input of zero would be treated as odd and
  261. have two added to it [to move to the next odd].
  262. -- fixed a bug in prime_fermat() and prime_miller_rabin() which allowed the base
  263. to be negative, zero or one. Normally the test is only valid if the base is
  264. greater than one.
  265. -- changed the next_prime() prototype to accept a new parameter "bbs_style" which
  266. will find the next prime congruent to 3 mod 4. The default [bbs_style==0] will
  267. make primes which are either congruent to 1 or 3 mod 4.
  268. -- fixed mp_read_unsigned_bin() so that it doesn't include both code for
  269. the case DIGIT_BIT < 8 and >= 8
  270. -- optimized div_d() to easy out on division by 1 [or if a == 0] and use
  271. logical shifts if the divisor is a power of two.
  272. -- the default DIGIT_BIT type was not int for non-default builds. Fixed.
  273. July 2nd, 2003
  274. v0.22 -- Fixed up mp_invmod so the result is properly in range now [was always congruent to the inverse...]
  275. -- Fixed up s_mp_exptmod and mp_exptmod_fast so the lower half of the pre-computed table isn't allocated
  276. which makes the algorithm use half as much ram.
  277. -- Fixed the install script not to make the book :-) [which isn't included anyways]
  278. -- added mp_cnt_lsb() which counts how many of the lsbs are zero
  279. -- optimized mp_gcd() to use the new mp_cnt_lsb() to replace multiple divisions by two by a single division.
  280. -- applied similar optimization to mp_prime_miller_rabin().
  281. -- Fixed a bug in both mp_invmod() and fast_mp_invmod() which tested for odd
  282. via "mp_iseven() == 0" which is not valid [since zero is not even either].
  283. June 19th, 2003
  284. v0.21 -- Fixed bug in mp_mul_d which would not handle sign correctly [would not always forward it]
  285. -- Removed the #line lines from gen.pl [was in violation of ISO C]
  286. June 8th, 2003
  287. v0.20 -- Removed the book from the package. Added the TDCAL license document.
  288. -- This release is officially pure-bred TDCAL again [last officially TDCAL based release was v0.16]
  289. June 6th, 2003
  290. v0.19 -- Fixed a bug in mp_montgomery_reduce() which was introduced when I tweaked mp_rshd() in the previous release.
  291. Essentially the digits were not trimmed before the compare which cause a subtraction to occur all the time.
  292. -- Fixed up etc/tune.c a bit to stop testing new cutoffs after 16 failures [to find more optimal points].
  293. Brute force ho!
  294. May 29th, 2003
  295. v0.18 -- Fixed a bug in s_mp_sqr which would handle carries properly just not very elegantly.
  296. (e.g. correct result, just bad looking code)
  297. -- Fixed bug in mp_sqr which still had a 512 constant instead of MP_WARRAY
  298. -- Added Toom-Cook multipliers [needs tuning!]
  299. -- Added efficient divide by 3 algorithm mp_div_3
  300. -- Re-wrote mp_div_d to be faster than calling mp_div
  301. -- Added in a donated BCC makefile and a single page LTM poster (ahalhabsi@sbcglobal.net)
  302. -- Added mp_reduce_2k which reduces an input modulo n = 2**p - k for any single digit k
  303. -- Made the exptmod system be aware of the 2k reduction algorithms.
  304. -- Rewrote mp_dr_reduce to be smaller, simpler and easier to understand.
  305. May 17th, 2003
  306. v0.17 -- Benjamin Goldberg submitted optimized mp_add and mp_sub routines. A new gen.pl as well
  307. as several smaller suggestions. Thanks!
  308. -- removed call to mp_cmp in inner loop of mp_div and put mp_cmp_mag in its place :-)
  309. -- Fixed bug in mp_exptmod that would cause it to fail for odd moduli when DIGIT_BIT != 28
  310. -- mp_exptmod now also returns errors if the modulus is negative and will handle negative exponents
  311. -- mp_prime_is_prime will now return true if the input is one of the primes in the prime table
  312. -- Damian M Gryski (dgryski@uwaterloo.ca) found a index out of bounds error in the
  313. mp_fast_s_mp_mul_high_digs function which didn't come up before. (fixed)
  314. -- Refactored the DR reduction code so there is only one function per file.
  315. -- Fixed bug in the mp_mul() which would erroneously avoid the faster multiplier [comba] when it was
  316. allowed. The bug would not cause the incorrect value to be produced just less efficient (fixed)
  317. -- Fixed similar bug in the Montgomery reduction code.
  318. -- Added tons of (mp_digit) casts so the 7/15/28/31 bit digit code will work flawlessly out of the box.
  319. Also added limited support for 64-bit machines with a 60-bit digit. Both thanks to Tom Wu (tom@arcot.com)
  320. -- Added new comments here and there, cleaned up some code [style stuff]
  321. -- Fixed a lingering typo in mp_exptmod* that would set bitcnt to zero then one. Very silly stuff :-)
  322. -- Fixed up mp_exptmod_fast so it would set "redux" to the comba Montgomery reduction if allowed. This
  323. saves quite a few calls and if statements.
  324. -- Added etc/mont.c a test of the Montgomery reduction [assuming all else works :-| ]
  325. -- Fixed up etc/tune.c to use a wider test range [more appropriate] also added a x86 based addition which
  326. uses RDTSC for high precision timing.
  327. -- Updated demo/demo.c to remove MPI stuff [won't work anyways], made the tests run for 2 seconds each so its
  328. not so insanely slow. Also made the output space delimited [and fixed up various errors]
  329. -- Added logs directory, logs/graph.dem which will use gnuplot to make a series of PNG files
  330. that go with the pre-made index.html. You have to build [via make timing] and run ltmtest first in the
  331. root of the package.
  332. -- Fixed a bug in mp_sub and mp_add where "-a - -a" or "-a + a" would produce -0 as the result [obviously invalid].
  333. -- Fixed a bug in mp_rshd. If the count == a.used it should zero/return [instead of shifting]
  334. -- Fixed a "off-by-one" bug in mp_mul2d. The initial size check on alloc would be off by one if the residue
  335. shifting caused a carry.
  336. -- Fixed a bug where s_mp_mul_digs() would not call the Comba based routine if allowed. This made Barrett reduction
  337. slower than it had to be.
  338. Mar 29th, 2003
  339. v0.16 -- Sped up mp_div by making normalization one shift call
  340. -- Sped up mp_mul_2d/mp_div_2d by aliasing pointers :-)
  341. -- Cleaned up mp_gcd to use the macros for odd/even detection
  342. -- Added comments here and there, mostly there but occasionally here too.
  343. Mar 22nd, 2003
  344. v0.15 -- Added series of prime testing routines to lib
  345. -- Fixed up etc/tune.c
  346. -- Added DR reduction algorithm
  347. -- Beefed up the manual more.
  348. -- Fixed up demo/demo.c so it doesn't have so many warnings and it does the full series of
  349. tests
  350. -- Added "pre-gen" directory which will hold a "gen.pl"'ed copy of the entire lib [done at
  351. zipup time so its always the latest]
  352. -- Added conditional casts for C++ users [boo!]
  353. Mar 15th, 2003
  354. v0.14 -- Tons of manual updates
  355. -- cleaned up the directory
  356. -- added MSVC makefiles
  357. -- source changes [that I don't recall]
  358. -- Fixed up the lshd/rshd code to use pointer aliasing
  359. -- Fixed up the mul_2d and div_2d to not call rshd/lshd unless needed
  360. -- Fixed up etc/tune.c a tad
  361. -- fixed up demo/demo.c to output comma-delimited results of timing
  362. also fixed up timing demo to use a finer granularity for various functions
  363. -- fixed up demo/demo.c testing to pause during testing so my Duron won't catch on fire
  364. [stays around 31-35C during testing :-)]
  365. Feb 13th, 2003
  366. v0.13 -- tons of minor speed-ups in low level add, sub, mul_2 and div_2 which propagate
  367. to other functions like mp_invmod, mp_div, etc...
  368. -- Sped up mp_exptmod_fast by using new code to find R mod m [e.g. B^n mod m]
  369. -- minor fixes
  370. Jan 17th, 2003
  371. v0.12 -- re-wrote the majority of the makefile so its more portable and will
  372. install via "make install" on most *nix platforms
  373. -- Re-packaged all the source as seperate files. Means the library a single
  374. file packagage any more. Instead of just adding "bn.c" you have to add
  375. libtommath.a
  376. -- Renamed "bn.h" to "tommath.h"
  377. -- Changes to the manual to reflect all of this
  378. -- Used GNU Indent to clean up the source
  379. Jan 15th, 2003
  380. v0.11 -- More subtle fixes
  381. -- Moved to gentoo linux [hurrah!] so made *nix specific fixes to the make process
  382. -- Sped up the montgomery reduction code quite a bit
  383. -- fixed up demo so when building timing for the x86 it assumes ELF format now
  384. Jan 9th, 2003
  385. v0.10 -- Pekka Riikonen suggested fixes to the radix conversion code.
  386. -- Added baseline montgomery and comba montgomery reductions, sped up exptmods
  387. [to a point, see bn.h for MONTGOMERY_EXPT_CUTOFF]
  388. Jan 6th, 2003
  389. v0.09 -- Updated the manual to reflect recent changes. :-)
  390. -- Added Jacobi function (mp_jacobi) to supplement the number theory side of the lib
  391. -- Added a Mersenne prime finder demo in ./etc/mersenne.c
  392. Jan 2nd, 2003
  393. v0.08 -- Sped up the multipliers by moving the inner loop variables into a smaller scope
  394. -- Corrected a bunch of small "warnings"
  395. -- Added more comments
  396. -- Made "mtest" be able to use /dev/random, /dev/urandom or stdin for RNG data
  397. -- Corrected some bugs where error messages were potentially ignored
  398. -- add etc/pprime.c program which makes numbers which are provably prime.
  399. Jan 1st, 2003
  400. v0.07 -- Removed alot of heap operations from core functions to speed them up
  401. -- Added a root finding function [and mp_sqrt macro like from MPI]
  402. -- Added more to manual
  403. Dec 31st, 2002
  404. v0.06 -- Sped up the s_mp_add, s_mp_sub which inturn sped up mp_invmod, mp_exptmod, etc...
  405. -- Cleaned up the header a bit more
  406. Dec 30th, 2002
  407. v0.05 -- Builds with MSVC out of the box
  408. -- Fixed a bug in mp_invmod w.r.t. even moduli
  409. -- Made mp_toradix and mp_read_radix use char instead of unsigned char arrays
  410. -- Fixed up exptmod to use fewer multiplications
  411. -- Fixed up mp_init_size to use only one heap operation
  412. -- Note there is a slight "off-by-one" bug in the library somewhere
  413. without the padding (see the source for comment) the library
  414. crashes in libtomcrypt. Anyways a reasonable workaround is to pad the
  415. numbers which will always correct it since as the numbers grow the padding
  416. will still be beyond the end of the number
  417. -- Added more to the manual
  418. Dec 29th, 2002
  419. v0.04 -- Fixed a memory leak in mp_to_unsigned_bin
  420. -- optimized invmod code
  421. -- Fixed bug in mp_div
  422. -- use exchange instead of copy for results
  423. -- added a bit more to the manual
  424. Dec 27th, 2002
  425. v0.03 -- Sped up s_mp_mul_high_digs by not computing the carries of the lower digits
  426. -- Fixed a bug where mp_set_int wouldn't zero the value first and set the used member.
  427. -- fixed a bug in s_mp_mul_high_digs where the limit placed on the result digits was not calculated properly
  428. -- fixed bugs in add/sub/mul/sqr_mod functions where if the modulus and dest were the same it wouldn't work
  429. -- fixed a bug in mp_mod and mp_mod_d concerning negative inputs
  430. -- mp_mul_d didn't preserve sign
  431. -- Many many many many fixes
  432. -- Works in LibTomCrypt now :-)
  433. -- Added iterations to the timing demos... more accurate.
  434. -- Tom needs a job.
  435. Dec 26th, 2002
  436. v0.02 -- Fixed a few "slips" in the manual. This is "LibTomMath" afterall :-)
  437. -- Added mp_cmp_mag, mp_neg, mp_abs and mp_radix_size that were missing.
  438. -- Sped up the fast [comba] multipliers more [yahoo!]
  439. Dec 25th,2002
  440. v0.01 -- Initial release. Gimme a break.
  441. -- Todo list,
  442. add details to manual [e.g. algorithms]
  443. more comments in code
  444. example programs