gcry_check_version()

Werner Koch wk@gnupg.org
Wed, 13 Aug 2003 11:07:38 +0200


On Wed, 13 Aug 2003 11:20:11 +0300, Nikos Mavroyanopoulos said:

> Hello,
>  Some questions:
> Does the gcry_check_version() has to be called before or after 
> initialization? Are the gcry_set_allocation_handler() and
> the gcry_control (GCRYCTL_INITIALIZATION_FINISHED, NULL,0);
> still required to be called?

  For proper initialization of the library, you must call
  gcry_check_version() *before calling any other functions* except for a
  these gcry_control operations:
     GCRYCTL_SUSPEND_SECMEM_WARN
     GCRYCTL_DISABLE_INTERNAL_LOCKING
     GCRYCTL_ANY_INITIALIZATION_P
     GCRYCTL_INITIALIZATION_FINISHED_P

Better do a GCRYCTL_INITIALIZATION_FINISHED after gcry_check_version
and possible other stuff you want to do like
gcry_set_allocation_handler ().  It is not really necessary but it
won't harm and might help in the future.

Becuase you can't know in a library whether another library has
already initialized the library, I suggest to do this:

 if (!gcry_control (GCRYCTL_ANY_INITIALIZATION_P))
   { /* No other library has already initialized libgcrypt. */

     if (!gcry_check_version (NEED_LIBGCRYPT_VERSION) )
       {
          log_fatal (_("libgcrypt is too old (need %s, have %s)\n"),
                     NEED_LIBGCRYPT_VERSION, gcry_check_version (NULL));
       }
     gcry_set_allocation_handler (...);
     gcry_control (GCRYCTL_INITIALIZATION_FINISHED);
   }

If you need to initialize other libraries, do it after or before that
code block, but never ever in between.



Salam-Shalom,

   Werner

-- 
Werner Koch                                      <wk@gnupg.org>
The GnuPG Experts                                http://g10code.com
Free Software Foundation Europe	                 http://fsfeurope.org