- Reflect many of the recent additions and refactoring in libsnark
(at least at the level of brief mentions and pointers).
- More build instructions/hints.
- Minor cleanups.
- Refactor CXXFLAGS so that feature flags and optimization flags can be easily overriden from command line
- Add NO_SUPERCOP=1 option
- Avoid need to manually create ./depinst directory when ./prepare-depends is not needed (i.e., when BN128 and SUPERCOP are not used)
- Fix the flags for static build
- Build executables that need GTest even if we used an existing GTest rather than compiling it
- Minor cleanups and comments
On most modern linux systems, there's essentially no security
difference between /dev/random and /dev/urandom, meaning that the
blocking property of /dev/random is actually harmful in many
cases. This advice is not necessarily true if you care about
e.g. embedded systems where you're going to generate crypto keys
immediately after boot (or, in some cases, even a long time after
boot).
In general, the best advice is to use external high-quality randomness
for keys (or to use urandom on a system where you believe it has been
keyed appropriately). See
http://sockpuppet.org/blog/2014/02/25/safely-generate-random-numbers/
for a careful explanation. Also know that there's a lot of active work
to improve the behavior and cluefulness of both /dev/random and
/dev/urandom. I don't know enough about the state of that to summarize
it, though.