* primegen.c (check_prime): New args CB_FUNC and CB_ARG; call them
authorWerner Koch <wk@gnupg.org>
Fri, 20 Feb 2004 18:32:40 +0000 (18:32 +0000)
committerWerner Koch <wk@gnupg.org>
Fri, 20 Feb 2004 18:32:40 +0000 (18:32 +0000)
at different stages.  Pass these arguments through all callers.

* gcrypt.h (GCRY_PRIME_CHECK_AT_GOT_PRIME)
(GCRY_PRIME_CHECK_AT_FINISH),
(GCRY_PRIME_CHECK_AT_MAYBE_PRIME): New.

NEWS
cipher/ChangeLog
cipher/primegen.c
src/ChangeLog
src/gcrypt.h
src/libgcrypt-config.in

diff --git a/NEWS b/NEWS
index 1f2b380..14a1cdc 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -5,9 +5,23 @@ Noteworthy changes in version 1.1.92 (unreleased)
 
  * Included a limited implementation of RFC2268.
 
+ * Changed API of the gcry_ac_ functions.  Only a very few programs
+   should be affected by this.
+
  * Interface changes relative to the 1.1.91 release:
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 GCRY_CIPHER_RFC2268_40          NEW.
+gcry_ac_data_set                CHANGED: New argument FLAGS.
+gcry_ac_data_get_name           CHANGED: New argument FLAGS.
+gcry_ac_data_get_index          CHANGED: New argument FLAGS.
+cry_ac_key_pair_generate        CHANGED: New and reordered arguments.
+gcry_ac_key_test                CHANGED: New argument HANDLE.
+gcry_ac_key_get_nbits           CHANGED: New argument HANDLE.
+gcry_ac_key_get_grip            CHANGED: New argument HANDLE.
+gcry_ac_data_search             REMOVED.
+gcry_ac_data_add                REMOVED.
+GCRY_AC_DATA_FLAG_NO_BLINDING   REMOVED.
+GCRY_AC_FLAG_NO_BLINDING        NEW: Replace above.
 
 
 Noteworthy changes in version 1.1.91 (2003-12-19)
index cabb83a..a0575a8 100644 (file)
@@ -1,3 +1,8 @@
+2004-02-20  Werner Koch  <wk@gnupg.org>
+
+       * primegen.c (check_prime): New args CB_FUNC and CB_ARG; call them
+       at different stages.  Pass these arguments through all callers.
+
 2004-02-06  Werner Koch  <wk@gnupg.org>
 
        * des.c: Add a new OID as used by pkcs#12.
index 2a9b107..afd435e 100644 (file)
@@ -1,5 +1,6 @@
 /* primegen.c - prime number generator
- * Copyright (C) 1998, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+ * Copyright (C) 1998, 2000, 2001, 2002, 2003
+ *               2004 Free Software Foundation, Inc.
  *
  * This file is part of Libgcrypt.
  *
@@ -38,7 +39,8 @@
 static gcry_mpi_t gen_prime (unsigned int nbits, int secret, int randomlevel, 
                              int (*extra_check)(void *, gcry_mpi_t),
                              void *extra_check_arg);
-static int check_prime( gcry_mpi_t prime, gcry_mpi_t val_2 );
+static int check_prime( gcry_mpi_t prime, gcry_mpi_t val_2,
+                        gcry_prime_check_func_t cb_func, void *cb_arg );
 static int is_prime( gcry_mpi_t n, int steps, int *count );
 static void m_out_of_n( char *array, int m, int n );
 
@@ -192,7 +194,8 @@ prime_generate_internal (int mode,
                         unsigned int qbits, gcry_mpi_t g,
                         gcry_mpi_t **ret_factors,
                         gcry_random_level_t randomlevel, unsigned int flags,
-                         int all_factors)
+                         int all_factors,
+                         gcry_prime_check_func_t cb_func, void *cb_arg)
 {
   gcry_err_code_t err = 0;
   gcry_mpi_t *factors_new = NULL; /* Factors to return to the
@@ -369,7 +372,7 @@ prime_generate_internal (int mode,
        else
          count2 = 0;
     }
-  while (! ((nprime == pbits) && check_prime (prime, val_2)));
+  while (! ((nprime == pbits) && check_prime (prime, val_2, cb_func, cb_arg)));
 
   if (DBG_CIPHER)
     {
@@ -519,7 +522,8 @@ _gcry_generate_elg_prime (int mode, unsigned pbits, unsigned qbits,
   gcry_mpi_t prime = NULL;
   
   err = prime_generate_internal (mode, &prime, pbits, qbits, g,
-                                ret_factors, GCRY_WEAK_RANDOM, 0, 0);
+                                ret_factors, GCRY_WEAK_RANDOM, 0, 0,
+                                 NULL, NULL);
 
   return prime;
 }
@@ -635,10 +639,11 @@ gen_prime (unsigned int nbits, int secret, int randomlevel,
  * Returns: true if this may be a prime
  */
 static int
-check_prime( gcry_mpi_t prime, gcry_mpi_t val_2 )
+check_prime( gcry_mpi_t prime, gcry_mpi_t val_2,
+             gcry_prime_check_func_t cb_func, void *cb_arg)
 {
   int i;
-  unsigned x;
+  unsigned int x;
   int count=0;
 
   /* Check against small primes. */
@@ -665,9 +670,16 @@ check_prime( gcry_mpi_t prime, gcry_mpi_t val_2 )
     mpi_free( result );
   }
 
-  /* perform stronger tests */
-  if ( is_prime(prime, 5, &count ) )
-    return 1; /* Probably a prime. */
+  if (!cb_func || cb_func (cb_arg, GCRY_PRIME_CHECK_AT_MAYBE_PRIME, prime))
+    {
+      /* Perform stronger tests. */
+      if ( is_prime( prime, 5, &count ) )
+        {
+          if (!cb_func
+              || cb_func (cb_arg, GCRY_PRIME_CHECK_AT_GOT_PRIME, prime))
+            return 1; /* Probably a prime. */
+        }
+    }
   progress('.');
   return 0;
 }
@@ -883,13 +895,14 @@ gcry_prime_generate (gcry_mpi_t *prime, unsigned int prime_bits,
   err = prime_generate_internal (mode, &prime_generated, prime_bits,
                                 factor_bits, NULL,
                                  factors? &factors_generated : NULL,
-                                random_level, flags, 1);
+                                random_level, flags, 1,
+                                 cb_func, cb_arg);
 
   if (! err)
     if (cb_func)
       {
        /* Additional check. */
-       if (! (*cb_func) (cb_arg, 0, prime_generated))
+       if ( !cb_func (cb_arg, GCRY_PRIME_CHECK_AT_FINISH, prime_generated))
          {
            /* Failed, deallocate resources.  */
            unsigned int i;
@@ -922,7 +935,7 @@ gcry_prime_check (gcry_mpi_t x, unsigned int flags)
   gcry_err_code_t err = GPG_ERR_NO_ERROR;
   gcry_mpi_t val_2 = mpi_alloc_set_ui (2); /* Used by the Fermat test. */
 
-  if (! check_prime (x, val_2))
+  if (! check_prime (x, val_2, NULL, NULL))
     err = GPG_ERR_NO_PRIME;
 
   mpi_free (val_2);
index 6b8a316..4ea3e64 100644 (file)
@@ -1,3 +1,13 @@
+2004-02-20  Werner Koch  <wk@gnupg.org>
+
+       * gcrypt.h (GCRY_PRIME_CHECK_AT_GOT_PRIME)
+       (GCRY_PRIME_CHECK_AT_FINISH),
+       (GCRY_PRIME_CHECK_AT_MAYBE_PRIME): New.
+
+2004-02-18  Werner Koch  <wk@gnupg.org>
+
+       * libgcrypt-config.in: Ignore setting of --prefix.
+
 2004-02-13  Werner Koch  <wk@gnupg.org>
 
        * gcrypt.h: Added GCRY_CIPHER_RFC2268_128, alsthough not yet
index 3c607cd..a80decd 100644 (file)
@@ -191,11 +191,11 @@ enum gcry_ctl_cmds
     GCRYCTL_TERM_SECMEM       = 25,
     GCRYCTL_DISABLE_SECMEM_WARN = 27,
     GCRYCTL_SUSPEND_SECMEM_WARN = 28,
-    GCRYCTL_RESUME_SECMEM_WARN = 29,
-    GCRYCTL_DROP_PRIVS         = 30,
-    GCRYCTL_ENABLE_M_GUARD     = 31,
-    GCRYCTL_START_DUMP         = 32,
-    GCRYCTL_STOP_DUMP          = 33,
+    GCRYCTL_RESUME_SECMEM_WARN  = 29,
+    GCRYCTL_DROP_PRIVS          = 30,
+    GCRYCTL_ENABLE_M_GUARD      = 31,
+    GCRYCTL_START_DUMP          = 32,
+    GCRYCTL_STOP_DUMP           = 33,
     GCRYCTL_GET_ALGO_USAGE      = 34,
     GCRYCTL_IS_ALGO_ENABLED     = 35,
     GCRYCTL_DISABLE_INTERNAL_LOCKING = 36,
@@ -229,7 +229,7 @@ typedef struct gcry_sexp *GcrySexp _GCRY_GCC_ATTR_DEPRECATED;
 enum gcry_sexp_format
   {
     GCRYSEXP_FMT_DEFAULT   = 0,
-    GCRYSEXP_FMT_CANON    = 1,
+    GCRYSEXP_FMT_CANON     = 1,
     GCRYSEXP_FMT_BASE64    = 2,
     GCRYSEXP_FMT_ADVANCED  = 3
   };
@@ -237,28 +237,30 @@ enum gcry_sexp_format
 /* Create an new S-expression object from BUFFER of size LENGTH and
    return it in RETSEXP.  With AUTODETECT set to 0 the data in BUFFER
    is expected to be in canonized format.  */
-gcry_error_t gcry_sexp_new (gcry_sexp_t *retsexp, const void *buffer, size_t length,
-                          int autodetect);
+gcry_error_t gcry_sexp_new (gcry_sexp_t *retsexp,
+                            const void *buffer, size_t length,
+                            int autodetect);
 
  /* Same as gcry_sexp_new but allows to pass a FREEFNC which has the
-   effect to transfer ownership of BUFFER to the created object.  */
-gcry_error_t gcry_sexp_create (gcry_sexp_t *retsexp, void *buffer, size_t length,
-                             int autodetect, void (*freefnc) (void *));
+    effect to transfer ownership of BUFFER to the created object.  */
+gcry_error_t gcry_sexp_create (gcry_sexp_t *retsexp,
+                               void *buffer, size_t length,
+                               int autodetect, void (*freefnc) (void *));
 
 /* Scan BUFFER and return a new S-expression object in RETSEXP.  This
    function expects a printf like string in BUFFER.  */
 gcry_error_t gcry_sexp_sscan (gcry_sexp_t *retsexp, size_t *erroff,
-                            const char *buffer, size_t length);
+                              const char *buffer, size_t length);
 
 /* Same as gcry_sexp_sscan but expects a string in FORMAT and can thus
    only be used for certain encodings.  */
 gcry_error_t gcry_sexp_build (gcry_sexp_t *retsexp, size_t *erroff,
-                            const char *format, ...);
+                              const char *format, ...);
 
 /* Like gcry_sexp_build, but uses an array instead of variable
    function arguments.  */
 gcry_error_t gcry_sexp_build_array (gcry_sexp_t *retsexp, size_t *erroff,
-                                  const char *format, void **arg_list);
+                                   const char *format, void **arg_list);
 
 /* Release the S-expression object SEXP */
 void gcry_sexp_release (gcry_sexp_t sexp);
@@ -289,7 +291,7 @@ gcry_sexp_t gcry_sexp_prepend (const gcry_sexp_t a, const gcry_sexp_t n);
    newly allocated S-expression consisting of the found sublist or
    `NULL' when not found.  */
 gcry_sexp_t gcry_sexp_find_token (gcry_sexp_t list,
-                               const char *tok, size_t toklen);
+                                const char *tok, size_t toklen);
 /* Return the length of the LIST.  For a valid S-expression this
    should be at least 1.  */
 int gcry_sexp_length (const gcry_sexp_t list);
@@ -321,7 +323,7 @@ gcry_sexp_t gcry_sexp_cadr (const gcry_sexp_t list);
    *Note:* The returned pointer is valid as long as LIST is not
    modified or released.  */
 const char *gcry_sexp_nth_data (const gcry_sexp_t list, int number,
-                               size_t *datalen);
+                                size_t *datalen);
 
 /* This function is used to get and convert data from a LIST. This
    data is assumed to be an MPI stored in the format described by
@@ -334,9 +336,9 @@ gcry_mpi_t gcry_sexp_nth_mpi (gcry_sexp_t list, int number, int mpifmt);
 
 \f
 /*******************************************
- *                                        *
- *  multi precision integer functions     *
- *                                        *
+ *                                         *
+ *  multi precision integer functions      *
+ *                                         *
  *******************************************/
 
 /* Different formats of external big integer representation. */
@@ -464,7 +466,8 @@ void gcry_mpi_mod (gcry_mpi_t r, gcry_mpi_t dividend, gcry_mpi_t divisor);
 
 /* W = B ^ E mod M. */
 void gcry_mpi_powm (gcry_mpi_t w,
-                    const gcry_mpi_t b, const gcry_mpi_t e, const gcry_mpi_t m);
+                    const gcry_mpi_t b, const gcry_mpi_t e,
+                    const gcry_mpi_t m);
 
 /* Set G to the greatest common divisor of A and B.  
    Return true if the G is 1. */
@@ -521,7 +524,7 @@ int gcry_mpi_get_flag (gcry_mpi_t a, enum gcry_mpi_flag flag);
 /* Unless the GCRYPT_NO_MPI_MACROS is used, provide a couple of
    convenience macors for the big integer functions. */
 #ifndef GCRYPT_NO_MPI_MACROS
-#define mpi_new(n)         gcry_mpi_new( (n) )
+#define mpi_new(n)          gcry_mpi_new( (n) )
 #define mpi_secure_new( n ) gcry_mpi_snew( (n) )
 #define mpi_release(a)      \
   do \
@@ -531,8 +534,8 @@ int gcry_mpi_get_flag (gcry_mpi_t a, enum gcry_mpi_flag flag);
     } \
   while (0)
 
-#define mpi_copy( a )      gcry_mpi_copy( (a) )
-#define mpi_set( w, u)     gcry_mpi_set( (w), (u) )
+#define mpi_copy( a )       gcry_mpi_copy( (a) )
+#define mpi_set( w, u)      gcry_mpi_set( (w), (u) )
 #define mpi_set_ui( w, u)   gcry_mpi_set_ui( (w), (u) )
 #define mpi_cmp( u, v )     gcry_mpi_cmp( (u), (v) )
 #define mpi_cmp_ui( u, v )  gcry_mpi_cmp_ui( (u), (v) )
@@ -585,13 +588,13 @@ typedef struct gcry_cipher_handle *GcryCipherHd _GCRY_GCC_ATTR_DEPRECATED;
    More IDs may be registered at runtime. */
 enum gcry_cipher_algos
   {
-    GCRY_CIPHER_NONE       = 0,
-    GCRY_CIPHER_IDEA       = 1,
-    GCRY_CIPHER_3DES       = 2,
-    GCRY_CIPHER_CAST5      = 3,
+    GCRY_CIPHER_NONE        = 0,
+    GCRY_CIPHER_IDEA        = 1,
+    GCRY_CIPHER_3DES        = 2,
+    GCRY_CIPHER_CAST5       = 3,
     GCRY_CIPHER_BLOWFISH    = 4,
     GCRY_CIPHER_SAFER_SK128 = 5,
-    GCRY_CIPHER_DES_SK     = 6,
+    GCRY_CIPHER_DES_SK      = 6,
     GCRY_CIPHER_AES         = 7,
     GCRY_CIPHER_AES192      = 8,
     GCRY_CIPHER_AES256      = 9,
@@ -631,32 +634,32 @@ enum gcry_cipher_modes
 /* Flags used with the open function. */ 
 enum gcry_cipher_flags
   {
-    GCRY_CIPHER_SECURE     = 1,  /* Allocate in secure memory. */
+    GCRY_CIPHER_SECURE      = 1,  /* Allocate in secure memory. */
     GCRY_CIPHER_ENABLE_SYNC = 2,  /* Enable CFB sync mode. */
-    GCRY_CIPHER_CBC_CTS            = 4,  /* Enable CBC cipher text stealing (CTS). */
-    GCRY_CIPHER_CBC_MAC            = 8   /* Enable CBC message auth. code (MAC). */
+    GCRY_CIPHER_CBC_CTS     = 4,  /* Enable CBC cipher text stealing (CTS). */
+    GCRY_CIPHER_CBC_MAC     = 8   /* Enable CBC message auth. code (MAC). */
   };
 
 
 /* Create a handle for algorithm ALGO to be used in MODE.  FLAGS may
    be given as an bitwise OR of the gcry_cipher_flags values. */
 gcry_error_t gcry_cipher_open (gcry_cipher_hd_t *handle,
-                             int algo, int mode, unsigned int flags);
+                              int algo, int mode, unsigned int flags);
 
 /* Close the cioher handle H and release all resource. */
 void gcry_cipher_close (gcry_cipher_hd_t h);
 
 /* Perform various operations on the cipher object H. */
 gcry_error_t gcry_cipher_ctl (gcry_cipher_hd_t h, int cmd, void *buffer,
-                            size_t buflen);
+                             size_t buflen);
 
 /* Retrieve various information about the cipher object H. */
 gcry_error_t gcry_cipher_info (gcry_cipher_hd_t h, int what, void *buffer,
-                             size_t *nbytes);
+                              size_t *nbytes);
 
 /* Retrieve various information about the cipher algorithm ALGO. */
 gcry_error_t gcry_cipher_algo_info (int algo, int what, void *buffer,
-                                  size_t *nbytes);
+                                   size_t *nbytes);
 
 /* Map the cipher algorithm id ALGO to a string representation of that
    algorithm name.  For unknown algorithms this functions returns an
@@ -677,23 +680,23 @@ int gcry_cipher_mode_from_oid (const char *string) _GCRY_GCC_ATTR_PURE;
    most algorithms it is possible to pass NULL for in and 0 for INLEN
    and do a in-place decryption of the data provided in OUT.  */
 gcry_error_t gcry_cipher_encrypt (gcry_cipher_hd_t h,
-                                unsigned char *out, size_t outsize,
-                                const unsigned char *in, size_t inlen);
+                                 unsigned char *out, size_t outsize,
+                                 const unsigned char *in, size_t inlen);
 
 /* The counterpart to gcry_cipher_encrypt.  */
 gcry_error_t gcry_cipher_decrypt (gcry_cipher_hd_t h,
-                                unsigned char *out, size_t outsize,
-                                const unsigned char *in, size_t inlen);
+                                 unsigned char *out, size_t outsize,
+                                 const unsigned char *in, size_t inlen);
 
 /* Set key K of length L for the cipher handle H.  (We have to cast
    away a const char* here - this catch-all ctl function was probably
    not the best choice) */
 #define gcry_cipher_setkey(h,k,l)  gcry_cipher_ctl( (h), GCRYCTL_SET_KEY, \
-                                                        (char*)(k), (l) )
+                                                         (char*)(k), (l) )
 
 /* Set initialization vector K of length L for the cipher handle H. */
 #define gcry_cipher_setiv(h,k,l)  gcry_cipher_ctl( (h), GCRYCTL_SET_IV, \
-                                                        (char*)(k), (l) )
+                                                         (char*)(k), (l) )
 
 /* Reset the handle to the state after open.  */
 #define gcry_cipher_reset(h)  gcry_cipher_ctl ((h), GCRYCTL_RESET, NULL, 0)
@@ -701,16 +704,16 @@ gcry_error_t gcry_cipher_decrypt (gcry_cipher_hd_t h,
 /* Perform the the OpenPGP sync operation if this is enabled for the
    cipher handle H. */
 #define gcry_cipher_sync(h)  gcry_cipher_ctl( (h), GCRYCTL_CFB_SYNC, \
-                                                                  NULL, 0 )
+                                                                   NULL, 0 )
 
 /* Enable or disable CTS in future calls to gcry_encrypt(). CBC mode only. */
 #define gcry_cipher_cts(h,on)  gcry_cipher_ctl( (h), GCRYCTL_SET_CBC_CTS, \
-                                                                  NULL, on )
+                                                                   NULL, on )
 
 /* Set counter for CTR mode.  (K,L) must denote a buffer of block size
    length, or (NULL,0) to set the CTR to the all-zero block. */
 #define gcry_cipher_setctr(h,k,l)  gcry_cipher_ctl( (h), GCRYCTL_SET_CTR, \
-                                                   (char*)(k), (l) )
+                                                    (char*)(k), (l) )
 
 /* Retrieved the key length used with algorithm A. */
 size_t gcry_cipher_get_algo_keylen (int algo);
@@ -720,7 +723,7 @@ size_t gcry_cipher_get_algo_blklen (int algo);
 
 /* Return 0 if the algorithm A is available for use. */
 #define gcry_cipher_test_algo(a) \
-           gcry_cipher_algo_info( (a), GCRYCTL_TEST_ALGO, NULL, NULL )
+            gcry_cipher_algo_info( (a), GCRYCTL_TEST_ALGO, NULL, NULL )
 
 /* Get a list consisting of the IDs of the loaded cipher modules.  If
    LIST is zero, write the number of loaded cipher modules to
@@ -741,8 +744,8 @@ gcry_error_t gcry_cipher_list (int *list, int *list_length);
 enum gcry_pk_algos 
   {
     GCRY_PK_RSA = 1,
-    GCRY_PK_RSA_E = 2,     /* deprecated */
-    GCRY_PK_RSA_S = 3,     /* deprecated */
+    GCRY_PK_RSA_E = 2,      /* deprecated */
+    GCRY_PK_RSA_S = 3,      /* deprecated */
     GCRY_PK_ELG_E = 16,     /* use only for OpenPGP */
     GCRY_PK_DSA   = 17,
     GCRY_PK_ELG   = 20
@@ -754,18 +757,22 @@ enum gcry_pk_algos
 
 /* Encrypt the DATA using the public key PKEY and store the result as
    a newly created S-expression at RESULT. */
-gcry_error_t gcry_pk_encrypt (gcry_sexp_t *result, gcry_sexp_t data, gcry_sexp_t pkey);
+gcry_error_t gcry_pk_encrypt (gcry_sexp_t *result,
+                              gcry_sexp_t data, gcry_sexp_t pkey);
 
 /* Decrypt the DATA using the private key SKEY and store the result as
    a newly created S-expression at RESULT. */
-gcry_error_t gcry_pk_decrypt (gcry_sexp_t *result, gcry_sexp_t data, gcry_sexp_t skey);
+gcry_error_t gcry_pk_decrypt (gcry_sexp_t *result,
+                              gcry_sexp_t data, gcry_sexp_t skey);
 
 /* Sign the DATA using the private key SKEY and store the result as
    a newly created S-expression at RESULT. */
-gcry_error_t gcry_pk_sign (gcry_sexp_t *result, gcry_sexp_t data, gcry_sexp_t skey);
+gcry_error_t gcry_pk_sign (gcry_sexp_t *result,
+                           gcry_sexp_t data, gcry_sexp_t skey);
 
 /* Check the signature SIGVAL on DATA using the public key PKEY. */
-gcry_error_t gcry_pk_verify (gcry_sexp_t sigval, gcry_sexp_t data, gcry_sexp_t pkey);
+gcry_error_t gcry_pk_verify (gcry_sexp_t sigval,
+                             gcry_sexp_t data, gcry_sexp_t pkey);
 
 /* Check that private KEY is sane. */
 gcry_error_t gcry_pk_testkey (gcry_sexp_t key);
@@ -779,7 +786,8 @@ gcry_error_t gcry_pk_genkey (gcry_sexp_t *r_key, gcry_sexp_t s_parms);
 gcry_error_t gcry_pk_ctl (int cmd, void *buffer, size_t buflen);
 
 /* Retrieve information about the public key algorithm ALGO. */
-gcry_error_t gcry_pk_algo_info (int algo, int what, void *buffer, size_t *nbytes);
+gcry_error_t gcry_pk_algo_info (int algo, int what,
+                                void *buffer, size_t *nbytes);
 
 /* Map the public key algorithm id ALGO to a string representation of the
    algorithm name.  For unknown algorithms this functions returns an
@@ -800,7 +808,7 @@ unsigned char *gcry_pk_get_keygrip (gcry_sexp_t key, unsigned char *array);
 
 /* Return 0 if the public key algorithm A is available for use. */
 #define gcry_pk_test_algo(a) \
-           gcry_pk_algo_info( (a), GCRYCTL_TEST_ALGO, NULL, NULL )
+            gcry_pk_algo_info( (a), GCRYCTL_TEST_ALGO, NULL, NULL )
 
 /* Get a list consisting of the IDs of the loaded pubkey modules.  If
    LIST is zero, write the number of loaded pubkey modules to
@@ -855,7 +863,7 @@ typedef struct gcry_ac_handle *gcry_ac_handle_t;
    algorithm-specific way.  */
 typedef struct gcry_ac_key_spec_rsa
 {
-  gcry_mpi_t e;                        /* E to use.  */
+  gcry_mpi_t e;                 /* E to use.  */
 } gcry_ac_key_spec_rsa_t;
 
 /* Returns a new, empty data set in DATA.  */
@@ -866,7 +874,7 @@ void gcry_ac_data_destroy (gcry_ac_data_t data);
 
 /* Create a copy of the data set DATA and store it in DATA_CP.  */
 gcry_error_t gcry_ac_data_copy (gcry_ac_data_t *data_cp,
-                              gcry_ac_data_t data);
+                               gcry_ac_data_t data);
 
 /* Return the number of named MPI values inside of the data set
    DATA.  */
@@ -881,41 +889,46 @@ void gcry_ac_data_clear (gcry_ac_data_t data);
    GCRY_AC_FLAG_DATA_COPY, the values contained in the data set will
    be deallocated when they are to be removed from the data set.  */
 gcry_error_t gcry_ac_data_set (gcry_ac_data_t data, unsigned int flags,
-                              const char *name, gcry_mpi_t mpi);
+                               const char *name, gcry_mpi_t mpi);
 
 /* Store the value labelled with NAME found in DATA in MPI.  If FLAGS
    contains GCRY_AC_FLAG_COPY, store a copy of the MPI value contained
    in the data set.  MPI may be NULL.  */
 gcry_error_t gcry_ac_data_get_name (gcry_ac_data_t data, unsigned int flags,
-                                   const char *name, gcry_mpi_t *mpi);
+                                    const char *name, gcry_mpi_t *mpi);
 
 /* Stores in NAME and MPI the named MPI value contained in the data
    set DATA with the index IDX.  If FLAGS contains GCRY_AC_FLAG_COPY,
    store copies of the values contained in the data set. NAME or MPI
    may be NULL.  */
-gcry_error_t gcry_ac_data_get_index (gcry_ac_data_t data, unsigned int flags, unsigned int idx,
-                                    const char **name, gcry_mpi_t *mpi);
+gcry_error_t gcry_ac_data_get_index (gcry_ac_data_t data, unsigned int flags,
+                                     unsigned int idx,
+                                     const char **name, gcry_mpi_t *mpi);
 
 /* Create a new ac handle.  */
-gcry_error_t gcry_ac_open (gcry_ac_handle_t *handle, gcry_ac_id_t algorithm, unsigned int flags);
+gcry_error_t gcry_ac_open (gcry_ac_handle_t *handle,
+                           gcry_ac_id_t algorithm, unsigned int flags);
 
 /* Destroy an ac handle.  */
 void gcry_ac_close (gcry_ac_handle_t handle);
 
 /* Initialize a key from a given data set.  */
 gcry_error_t gcry_ac_key_init (gcry_ac_key_t *key, gcry_ac_handle_t handle,
-                              gcry_ac_key_type_t type, gcry_ac_data_t data);
+                               gcry_ac_key_type_t type, gcry_ac_data_t data);
 
 /* Generates a new key pair via the handle HANDLE of NBITS bits and
    stores it in KEY_PAIR.  In case non-standard settings are wanted, a
    pointer to a structure of type gcry_ac_key_spec_<algorithm>_t,
    matching the selected algorithm, can be given as KEY_SPEC.
    MISC_DATA is not used yet.  */
-gcry_error_t gcry_ac_key_pair_generate (gcry_ac_handle_t handle, unsigned int nbits, void *spec,
-                                       gcry_ac_key_pair_t *key_pair, gcry_mpi_t **misc_data);
+gcry_error_t gcry_ac_key_pair_generate (gcry_ac_handle_t handle,
+                                        unsigned int nbits, void *spec,
+                                        gcry_ac_key_pair_t *key_pair,
+                                        gcry_mpi_t **misc_data);
 
 /* Returns the key of type WHICH out of the key pair KEY_PAIR.  */
-gcry_ac_key_t gcry_ac_key_pair_extract (gcry_ac_key_pair_t key_pair, gcry_ac_key_type_t which);
+gcry_ac_key_t gcry_ac_key_pair_extract (gcry_ac_key_pair_t key_pair,
+                                        gcry_ac_key_type_t which);
 
 /* Returns the data set contained in the key KEY.  */
 gcry_ac_data_t gcry_ac_key_data_get (gcry_ac_key_t key);
@@ -924,11 +937,13 @@ gcry_ac_data_t gcry_ac_key_data_get (gcry_ac_key_t key);
 gcry_error_t gcry_ac_key_test (gcry_ac_handle_t handle, gcry_ac_key_t key);
 
 /* Stores the number of bits of the key KEY in NBITS via HANDLE.  */
-gcry_error_t gcry_ac_key_get_nbits (gcry_ac_handle_t handle, gcry_ac_key_t key, unsigned int *nbits);
+gcry_error_t gcry_ac_key_get_nbits (gcry_ac_handle_t handle,
+                                    gcry_ac_key_t key, unsigned int *nbits);
 
 /* Writes the 20 byte long key grip of the key KEY to KEY_GRIP via
    HANDLE.  */
-gcry_error_t gcry_ac_key_get_grip (gcry_ac_handle_t handle, gcry_ac_key_t key, unsigned char *key_grip);
+gcry_error_t gcry_ac_key_get_grip (gcry_ac_handle_t handle, gcry_ac_key_t key,
+                                   unsigned char *key_grip);
 
 /* Destroy a key.  */
 void gcry_ac_key_destroy (gcry_ac_key_t key);
@@ -940,44 +955,44 @@ void gcry_ac_key_pair_destroy (gcry_ac_key_pair_t key_pair);
    the control of the flags FLAGS and store the resulting data set
    into DATA_ENCRYPTED.  */
 gcry_error_t gcry_ac_data_encrypt (gcry_ac_handle_t handle,
-                                  unsigned int flags,
-                                  gcry_ac_key_t key,
-                                  gcry_mpi_t data_plain,
-                                  gcry_ac_data_t *data_encrypted);
+                                   unsigned int flags,
+                                   gcry_ac_key_t key,
+                                   gcry_mpi_t data_plain,
+                                   gcry_ac_data_t *data_encrypted);
 
 /* Decrypt the decrypted data contained in the data set DATA_ENCRYPTED
    with the key KEY under the control of the flags FLAGS and store the
    resulting plain text MPI value in DATA_PLAIN.  */
 gcry_error_t gcry_ac_data_decrypt (gcry_ac_handle_t handle,
-                                  unsigned int flags,
-                                  gcry_ac_key_t key,
-                                  gcry_mpi_t *data_plain,
-                                  gcry_ac_data_t data_encrypted);
+                                   unsigned int flags,
+                                   gcry_ac_key_t key,
+                                   gcry_mpi_t *data_plain,
+                                   gcry_ac_data_t data_encrypted);
 
 /* Sign the data contained in DATA with the key KEY and store the
    resulting signature in the data set DATA_SIGNATURE.  */
 gcry_error_t gcry_ac_data_sign (gcry_ac_handle_t handle,
-                               gcry_ac_key_t key,
-                               gcry_mpi_t data,
-                               gcry_ac_data_t *data_signature);
+                                gcry_ac_key_t key,
+                                gcry_mpi_t data,
+                                gcry_ac_data_t *data_signature);
 
 /* Verify that the signature contained in the data set DATA_SIGNATURE
    is indeed the result of signing the data contained in DATA with the
    secret key belonging to the public key KEY.  */
 gcry_error_t gcry_ac_data_verify (gcry_ac_handle_t handle,
-                                 gcry_ac_key_t key,
-                                 gcry_mpi_t data,
-                                 gcry_ac_data_t data_signature);
+                                  gcry_ac_key_t key,
+                                  gcry_mpi_t data,
+                                  gcry_ac_data_t data_signature);
 
 /* Store the textual representation of the algorithm whose id is given
    in ALGORITHM in NAME.  */
 gcry_error_t gcry_ac_id_to_name (gcry_ac_id_t algorithm,
-                               const char **name);
+                                const char **name);
 
 /* Store the numeric ID of the algorithm whose textual representation
    is contained in NAME in ALGORITHM.  */
 gcry_error_t gcry_ac_name_to_id (const char *name,
-                               gcry_ac_id_t *algorithm);
+                                gcry_ac_id_t *algorithm);
 
 \f
 
@@ -1002,18 +1017,18 @@ enum gcry_md_algos
     GCRY_MD_SHA384  = 9,
     GCRY_MD_SHA512  = 10,
     GCRY_MD_MD4     = 301,
-    GCRY_MD_CRC32              = 302,
-    GCRY_MD_CRC32_RFC1510      = 303,
-    GCRY_MD_CRC24_RFC2440      = 304
+    GCRY_MD_CRC32               = 302,
+    GCRY_MD_CRC32_RFC1510       = 303,
+    GCRY_MD_CRC24_RFC2440       = 304
   };
 
 /* Flags used with the open function.  */
 enum gcry_md_flags
   {
     GCRY_MD_FLAG_SECURE = 1,  /* Allocate all buffers in "secure"
-                                memory.  */
-    GCRY_MD_FLAG_HMAC  = 2   /* Make an HMAC out of this
-                                algorithm.  */
+                                 memory.  */
+    GCRY_MD_FLAG_HMAC   = 2   /* Make an HMAC out of this
+                                 algorithm.  */
   };
 
 /* Forward declaration.  */
@@ -1057,7 +1072,7 @@ void gcry_md_reset (gcry_md_hd_t hd);
 
 /* Perform various operations on the digets object HD. */
 gcry_error_t gcry_md_ctl (gcry_md_hd_t hd, int cmd, unsigned char *buffer,
-                        size_t buflen);
+                         size_t buflen);
 
 /* Pass LENGTH bytes of data in BUFFER to the digest object HD so that
    it can update the digest values.  This is the actual hash
@@ -1074,7 +1089,7 @@ unsigned char *gcry_md_read (gcry_md_hd_t hd, int algo);
    DIGEST which must be large enough to hold the digest of the given
    algorithm. */
 void gcry_md_hash_buffer (int algo, void *digest,
-                         const void *buffer, size_t length);
+                          const void *buffer, size_t length);
 
 /* Retrieve the algorithm used with HD.  This does not work reliable
    if more than one algorithm is enabled in HD. */
@@ -1093,11 +1108,11 @@ int gcry_md_is_secure (gcry_md_hd_t a);
 
 /* Retrieve various information about the object H.  */
 gcry_error_t gcry_md_info (gcry_md_hd_t h, int what, void *buffer,
-                         size_t *nbytes);
+                          size_t *nbytes);
 
 /* Retrieve various information about the algorithm ALGO.  */
 gcry_error_t gcry_md_algo_info (int algo, int what, void *buffer,
-                              size_t *nbytes);
+                               size_t *nbytes);
 
 /* Map the digest algorithm id ALGO to a string representation of the
    algorithm name.  For unknown algorithms this functions returns an
@@ -1115,21 +1130,21 @@ gcry_error_t gcry_md_setkey (gcry_md_hd_t hd, const void *key, size_t keylen);
 /* Update the hash(s) of H with the character C.  This is a buffered
    version of the gcry_md_write function. */
 #define gcry_md_putc(h,c)  \
-           do {                                          \
+            do {                                          \
                 gcry_md_hd_t h__ = (h);                       \
-               if( (h__)->bufpos == (h__)->bufsize )     \
-                   gcry_md_write( (h__), NULL, 0 );      \
-               (h__)->buf[(h__)->bufpos++] = (c) & 0xff; \
-           } while(0)
+                if( (h__)->bufpos == (h__)->bufsize )     \
+                    gcry_md_write( (h__), NULL, 0 );      \
+                (h__)->buf[(h__)->bufpos++] = (c) & 0xff; \
+            } while(0)
 
 /* Finalize the digest calculation.  This is not really needed because
    gcry_md_read() does this implicitly. */
 #define gcry_md_final(a) \
-           gcry_md_ctl ((a), GCRYCTL_FINALIZE, NULL, 0)
+            gcry_md_ctl ((a), GCRYCTL_FINALIZE, NULL, 0)
 
 /* Return 0 if the algorithm A is available for use. */
 #define gcry_md_test_algo(a) \
-           gcry_md_algo_info( (a), GCRYCTL_TEST_ALGO, NULL, NULL )
+            gcry_md_algo_info( (a), GCRYCTL_TEST_ALGO, NULL, NULL )
 
 /* Return an DER encoded ASN.1 OID for the algorithm A in buffer B. N
    must point to size_t variable with the available size of buffer B.
@@ -1142,11 +1157,11 @@ gcry_error_t gcry_md_setkey (gcry_md_hd_t hd, const void *key, size_t keylen);
    dbgmd-<n>.<string> while hashing.  B is a string used as the suffix
    for the filename. */
 #define gcry_md_start_debug(a,b) \
-           gcry_md_ctl( (a), GCRYCTL_START_DUMP, (b), 0 )
+            gcry_md_ctl( (a), GCRYCTL_START_DUMP, (b), 0 )
 
 /* Disable the debugging of A. */
 #define gcry_md_stop_debug(a,b) \
-           gcry_md_ctl( (a), GCRYCTL_STOP_DUMP, (b), 0 )
+            gcry_md_ctl( (a), GCRYCTL_STOP_DUMP, (b), 0 )
 
 /* Get a list consisting of the IDs of the loaded message digest
    modules.  If LIST is zero, write the number of loaded message
@@ -1179,13 +1194,13 @@ gcry_random_level_t;
 /* Fill BUFFER with LENGTH bytes of random, using random numbers of
    quality LEVEL. */
 void gcry_randomize (unsigned char *buffer, size_t length,
-                    enum gcry_random_level level);
+                     enum gcry_random_level level);
 
 /* Add the external random from BUFFER with LENGTH bytes into the
    pool. QUALITY should either be -1 for unknown or in the range of 0
    to 100 */
 gcry_error_t gcry_random_add_bytes (const void *buffer, size_t length,
-                                  int quality);
+                                   int quality);
 
 /* Return NBYTES of allocated random using a random numbers of quality
    LEVEL. */
@@ -1212,8 +1227,15 @@ void gcry_create_nonce (unsigned char *buffer, size_t length);
 
 /* Prime interface.  */
 
+/* Mode values passed to a gcry_prime_check_func_t. */
+#define GCRY_PRIME_CHECK_AT_FINISH      0
+#define GCRY_PRIME_CHECK_AT_GOT_PRIME   1
+#define GCRY_PRIME_CHECK_AT_MAYBE_PRIME 2
+
+/* The function should return 1 if the operation shall continue, 0 to
+   reject the prime candidate. */
 typedef int (*gcry_prime_check_func_t) (void *arg, int mode,
-                                       gcry_mpi_t candidate);
+                                        gcry_mpi_t candidate);
 
 /* Flags for gcry_prime_generate():  */
 
@@ -1231,13 +1253,13 @@ typedef int (*gcry_prime_check_func_t) (void *arg, int mode,
    factors and store it in FACTORS.  FLAGS might be used to influence
    the prime number generation process.  */
 gcry_error_t gcry_prime_generate (gcry_mpi_t *prime,
-                                 unsigned int prime_bits,
-                                 unsigned int factor_bits,
-                                 gcry_mpi_t **factors,
-                                 gcry_prime_check_func_t cb_func,
-                                 void *cb_arg,
-                                 gcry_random_level_t random_level,
-                                 unsigned int flags);
+                                  unsigned int prime_bits,
+                                  unsigned int factor_bits,
+                                  gcry_mpi_t **factors,
+                                  gcry_prime_check_func_t cb_func,
+                                  void *cb_arg,
+                                  gcry_random_level_t random_level,
+                                  unsigned int flags);
 
 /* Find a generator for PRIME where the factorization of (prime-1) is
    in the NULL terminated array FACTORS. Return the generator as a
@@ -1305,11 +1327,12 @@ void gcry_set_progress_handler (gcry_handler_progress_t cb, void *cb_data);
 
 
 /* Register a custom memory allocation functions. */
-void gcry_set_allocation_handler (gcry_handler_alloc_t func_alloc,
-                                 gcry_handler_alloc_t func_alloc_secure,
-                                 gcry_handler_secure_check_t func_secure_check,
-                                 gcry_handler_realloc_t func_realloc,
-                                 gcry_handler_free_t func_free);
+void gcry_set_allocation_handler (
+                             gcry_handler_alloc_t func_alloc,
+                             gcry_handler_alloc_t func_alloc_secure,
+                             gcry_handler_secure_check_t func_secure_check,
+                             gcry_handler_realloc_t func_realloc,
+                             gcry_handler_free_t func_free);
 
 /* Register a function used instead of the internal out of memory
    handler. */
index 3d8017e..a6b2e98 100644 (file)
@@ -85,9 +85,15 @@ while test $# -gt 0; do
                usage 1 1>&2
            fi
            ;;
+        --prefix=*)
+            # For compatibility reasons with old M4 macros, we ignore
+            # setting of prefix.
+            ;;
        --prefix)
            echo_prefix=yes
            ;;
+        --exec-prefix=*)
+            ;;
        --exec-prefix)
            echo_exec_prefix=yes
            ;;