You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

123 lines
5.3 KiB

  1. May 3, 2104:
  2. Minor changes to internal routines mean that this version is not
  3. compatible with the previous one.
  4. Added ARM NEON code.
  5. Added the ability to precompute multiples of a partner's public key. This
  6. takes slightly longer than a signature verification, but reduces future
  7. verifications with the precomputed key by ~63% and ECDH by ~70%.
  8. goldilocks_precompute_public_key
  9. goldilocks_destroy_precomputed_public_key
  10. goldilocks_verify_precomputed
  11. goldilocks_shared_secret_precomputed
  12. The precomputation feature are is protected by a macro
  13. GOLDI_IMPLEMENT_PRECOMPUTED_KEYS
  14. which can be #defined to 0 to compile these functions out. Unlike most
  15. of Goldilocks' functions, goldilocks_precompute_public_key uses malloc()
  16. (and goldilocks_destroy_precomputed_public_key uses free()).
  17. Changed private keys to be derived from just the symmetric part. This
  18. means that you can compress them to 32 bytes for cold storage, or derive
  19. keypairs from crypto secrets from other systems.
  20. goldilocks_derive_private_key
  21. goldilocks_underive_private_key
  22. goldilocks_private_to_public
  23. Fixed a number of bugs related to vector alignment on Sandy Bridge, which
  24. has AVX but uses SSE2 alignment (because it doesn't have AVX2). Maybe I
  25. should just switch it to use AVX2 alignment?
  26. Beginning to factor out curve-specific magic, so as to build other curves
  27. with the Goldilocks framework. That would enable fair tests against eg
  28. E-521, Ed25519 etc. Still would be a lot of work.
  29. More thorough testing of arithmetic. Now uses GMP for testing framework,
  30. but not in the actual library.
  31. Added some high-level tests for the whole library, including some (bs)
  32. negative testing. Obviously, effective negative testing is a very difficult
  33. proposition in a crypto library.
  34. March 29, 2014:
  35. Added a test directory with various tests. Currently testing SHA512 Monte
  36. Carlo, compatibility of the different scalarmul functions, and some
  37. identities on EC point ops. Began moving these tests out of benchmarker.
  38. Added scan-build support.
  39. Improved some internal interfaces. Made a structure for Barrett primes
  40. instead of passing parameters individually. Moved some field operations
  41. to places that make more sense, eg Barrett serialize and deserialize. The
  42. deserialize operation now checks that its argument is in [0,q).
  43. Added more documentation.
  44. Changed the names of a bunch of functions. Still not entirely consistent,
  45. but getting more so.
  46. Some minor speed improvements. For example, multiply is now a couple cycles
  47. faster.
  48. Added a hackish attempt at thread-safety and initialization sanity checking
  49. in the Goldilocks top-level routines.
  50. Fixed some vector alignment bugs. Compiling with -O0 should now work.
  51. Slightly simplified recode_wnaf.
  52. Add a config.h file for future configuration. EXPERIMENT flags moved here.
  53. I've decided against major changes to SHA512 for the moment. They add speed
  54. but also significantly bloat the code, which is going to hurt L1 cache
  55. performance. Perhaps we should link to OpenSSL if a faster SHA512 is desired.
  56. Reorganize the source tree into src, test; factor arch stuff into src/arch_*.
  57. Make most of the code 32-bit clean. There's now a 32-bit generic and 32-bit
  58. vectorless ARM version. No NEON version yet because I don't have a test
  59. machine (could use my phone in a pinch I guess?). The 32-bit version still
  60. isn't heavily optimized, but on ARM it's using a nicely reworked signed/phi-adic
  61. multiplier. The squaring is also based on this, but could really stand some
  62. improvement.
  63. When passed an even exponent (or extra doubles), the Montgomery ladder should
  64. now be accept points if and only if they lie on the curve. This needs
  65. additional testing, but it passes the zero bit exponent test.
  66. On 32-bit, use 8x4x14 instead of 5x5x18 table organization. Probably there's
  67. a better heuristic.
  68. March 5, 2014:
  69. First revision.
  70. Private keys are now longer. They now store a copy of the public key, and
  71. a secret symmetric key for signing purposes.
  72. Signatures are now supported, though like everything else in this library,
  73. their format is not stable. They use a deterministic Schnorr mode,
  74. similar to EdDSA. Precomputed low-latency signing is not supported (yet?).
  75. The hash function is SHA-512.
  76. The deterministic hashing mode needs to be changed to HMAC (TODO!). It's
  77. currently envelope-MAC.
  78. Probably in the future there will be a distinction between ECDH key and
  79. signing keys (and possibly also MQV keys etc).
  80. Began renaming internal functions. Removing p448_ prefixes from EC point
  81. operations. Trying to put the verb first. For example,
  82. "p448_isogeny_un_to_tw" is now called "twist_and_double".
  83. Began documenting with Doxygen. Use "make doc" to make a very incomplete
  84. documentation directory.
  85. There have been many other internal changes.
  86. Feb 21, 2014:
  87. Initial import and benchmarking scripts.
  88. Keygen and ECDH are implemented, but there's no hash function.