Add missing return statement in main()
Load OpenSSL error strings in main()

So we can report errors from OpenSSL.
Use OpenSSL's RNG instead of /dev/random

Rationale:

 * /dev/random blocks unpredictably on Linux, leading to slow
   key generation.
 * OpenSSL's RNG is more cross-platform than /dev/(u)random.
   Some platforms might not have a (u)random device, or worse,
   have a /dev/(u)random that produces insecure random numbers
   (like Cygwin, apparently).