See ChangeLog: Wed Oct 4 13:16:18 CEST 2000 Werner Koch
[libgcrypt.git] / src / gcrypt.h
index 4611918..5593b59 100644 (file)
@@ -35,7 +35,7 @@ extern "C" {
  * header matches the installed library.
  * Note: Do not edit the next line as configure may fix the string here.
  */
-#define GCRYPT_VERSION "1.1.0a"
+#define GCRYPT_VERSION "1.1.1a"
 
 
 #ifndef HAVE_BYTE_TYPEDEF
@@ -87,7 +87,9 @@ enum {
     GCRYERR_INV_OBJ = 65,    /* an object is not valid */
     GCRYERR_TOO_SHORT = 66,  /* provided buffer too short */
     GCRYERR_TOO_LARGE = 67,  /* object is too large */
-    GCRYERR_NO_OBJ = 68,     /* Missign item in an object */
+    GCRYERR_NO_OBJ = 68,     /* Missing item in an object */
+    GCRYERR_NOT_IMPL = 69,   /* Not implemented */
+    GCRYERR_CONFLICT = 70,
 };
 
 const char *gcry_check_version( const char *req_version );
@@ -118,6 +120,17 @@ enum gcry_ctl_cmds {
     GCRYCTL_SET_DEBUG_FLAGS   = 20,
     GCRYCTL_CLEAR_DEBUG_FLAGS = 21,
     GCRYCTL_USE_SECURE_RNDPOOL= 22,
+    GCRYCTL_DUMP_MEMORY_STATS = 23,
+    GCRYCTL_INIT_SECMEM       = 24,
+    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_GET_ALGO_USAGE      = 34
 };
 
 int gcry_control( enum gcry_ctl_cmds, ... );
@@ -140,39 +153,31 @@ enum gcry_sexp_format {
 };
 
 
-GCRY_SEXP gcry_sexp_new_data( const char *buffer, size_t length );
-GCRY_SEXP gcry_sexp_new_mpi( GCRY_MPI mpi );
-GCRY_SEXP gcry_sexp_new_name_data( const char *name,
-                                  const char *buffer, size_t length );
-GCRY_SEXP gcry_sexp_new_name_mpi( const char *name, GCRY_MPI mpi );
 void     gcry_sexp_release( GCRY_SEXP sexp );
-void     gcry_sexp_dump( GCRY_SEXP a );
-GCRY_SEXP gcry_sexp_cons( GCRY_SEXP a, GCRY_SEXP b );
-GCRY_SEXP gcry_sexp_vlist( GCRY_SEXP a, ... );
-GCRY_SEXP gcry_sexp_append( GCRY_SEXP a, GCRY_SEXP n );
-GCRY_SEXP gcry_sexp_prepend( GCRY_SEXP a, GCRY_SEXP n );
-int      gcry_sexp_sscan( GCRY_SEXP *retsexp, const char *buffer,
-                              size_t length, size_t *erroff );
-size_t     gcry_sexp_sprint( GCRY_SEXP sexp, int mode, char *buffer,
+void     gcry_sexp_dump( const GCRY_SEXP a );
+GCRY_SEXP gcry_sexp_cons( const GCRY_SEXP a, const GCRY_SEXP b );
+GCRY_SEXP gcry_sexp_alist( const GCRY_SEXP *array );
+GCRY_SEXP gcry_sexp_vlist( const GCRY_SEXP a, ... );
+GCRY_SEXP gcry_sexp_append( const GCRY_SEXP a, const GCRY_SEXP n );
+GCRY_SEXP gcry_sexp_prepend( const GCRY_SEXP a, const GCRY_SEXP n );
+int      gcry_sexp_sscan( GCRY_SEXP *retsexp, size_t *erroff,
+                          const char *buffer, size_t length );
+int      gcry_sexp_build( GCRY_SEXP *retsexp, size_t *erroff,
+                          const char *format, ... );
+size_t   gcry_sexp_sprint( GCRY_SEXP sexp, int mode, char *buffer,
                                                size_t maxlength );
 GCRY_SEXP   gcry_sexp_find_token( GCRY_SEXP list,
                                  const char *tok, size_t toklen );
-GCRY_SEXP   gcry_sexp_car( GCRY_SEXP list );
-GCRY_SEXP   gcry_sexp_cdr( GCRY_SEXP list );
-const char *gcry_sexp_car_data( GCRY_SEXP list, size_t *datalen );
-const char *gcry_sexp_cdr_data( GCRY_SEXP list, size_t *datalen );
-GCRY_MPI    gcry_sexp_car_mpi( GCRY_SEXP list, int mpifmt );
-GCRY_MPI    gcry_sexp_cdr_mpi( GCRY_SEXP list, int mpifmt );
+int        gcry_sexp_length( const GCRY_SEXP list );
+GCRY_SEXP   gcry_sexp_nth( const GCRY_SEXP list, int number );
+GCRY_SEXP   gcry_sexp_car( const GCRY_SEXP list );
+GCRY_SEXP   gcry_sexp_cdr( const GCRY_SEXP list );
+GCRY_SEXP   gcry_sexp_cadr( const GCRY_SEXP list );
+const char *gcry_sexp_nth_data( const GCRY_SEXP list, int number,
+                                                     size_t *datalen );
+GCRY_MPI    gcry_sexp_nth_mpi( GCRY_SEXP list, int number, int mpifmt );
 
 
-
-#ifndef GCRYPT_NO_SEXP_MACROS
-#define SEXP           GCRY_SEXP
-#define SEXP_NEW(a,b)  gcry_sexp_new_data( (a), (b) )
-#define SEXP_RELEASE(a) do { gcry_sexp_release( (a) ); (a)=NULL; } while(0)
-#define SEXP_CONS(a,b) gcry_sexp_cons((a),(b))
-#endif /*GCRYPT_NO_SEXP_MACROS*/
-
 /*******************************************
  *                                        *
  *  multi precision integer functions     *
@@ -183,7 +188,7 @@ enum gcry_mpi_format {
     GCRYMPI_FMT_NONE= 0,
     GCRYMPI_FMT_STD = 1,    /* twos complement stored without length */
     GCRYMPI_FMT_PGP = 2,    /* As used by OpenPGP */
-    GCRYMPI_FMT_SSH = 3,    /* As used by SSH (same as 0 but with length)*/
+    GCRYMPI_FMT_SSH = 3,    /* As used by SSH (same as 1 but with length)*/
     GCRYMPI_FMT_HEX = 4,    /* hex format */
     GCRYMPI_FMT_USG = 5,    /* like STD but this is an unsigned one */
 };
@@ -210,6 +215,8 @@ int  gcry_mpi_scan( GCRY_MPI *ret_mpi, enum gcry_mpi_format format,
                                       const char *buffer, size_t *nbytes );
 int     gcry_mpi_print( enum gcry_mpi_format format,
                         char *buffer, size_t *nbytes, const GCRY_MPI a );
+int     gcry_mpi_aprint( enum gcry_mpi_format format,
+                         void **buffer, size_t *nbytes, const GCRY_MPI a );
 
 void gcry_mpi_powm( GCRY_MPI w,
                    const GCRY_MPI b, const GCRY_MPI e, const GCRY_MPI m );
@@ -252,6 +259,9 @@ enum gcry_cipher_algos {
     GCRY_CIPHER_BLOWFISH    = 4,
     GCRY_CIPHER_SAFER_SK128 = 5,
     GCRY_CIPHER_DES_SK     = 6,
+    GCRY_CIPHER_RIJNDAEL    = 7,
+    GCRY_CIPHER_RIJNDAEL192 = 8,
+    GCRY_CIPHER_RIJNDAEL256 = 9,
     GCRY_CIPHER_TWOFISH     = 10,
 };
 
@@ -283,10 +293,12 @@ int gcry_cipher_decrypt( GCRY_CIPHER_HD h, byte *out, size_t outsize,
 
 
 /* some handy macros */
+/* We have to cast a way 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, \
-                                                                 (k), (l) )
+                                                        (char*)(k), (l) )
 #define gcry_cipher_setiv(h,k,l)  gcry_cipher_ctl( (h), GCRYCTL_SET_IV, \
-                                                                 (k), (l) )
+                                                        (char*)(k), (l) )
 #define gcry_cipher_sync(h)  gcry_cipher_ctl( (h), GCRYCTL_CFB_SYNC, \
                                                                   NULL, 0 )
 
@@ -319,11 +331,14 @@ int gcry_pk_encrypt( GCRY_SEXP *result, GCRY_SEXP data, GCRY_SEXP pkey );
 int gcry_pk_decrypt( GCRY_SEXP *result, GCRY_SEXP data, GCRY_SEXP skey );
 int gcry_pk_sign(    GCRY_SEXP *result, GCRY_SEXP data, GCRY_SEXP skey );
 int gcry_pk_verify(  GCRY_SEXP sigval, GCRY_SEXP data, GCRY_SEXP pkey );
+int gcry_pk_testkey( GCRY_SEXP key );
+int gcry_pk_genkey(  GCRY_SEXP *r_key, GCRY_SEXP s_parms );
 
 int gcry_pk_ctl( int cmd, void *buffer, size_t buflen);
 int gcry_pk_algo_info( int algo, int what, void *buffer, size_t *nbytes);
 const char *gcry_pk_algo_name( int algo );
 int gcry_pk_map_name( const char* name );
+unsigned int gcry_pk_get_nbits( GCRY_SEXP key );
 
 
 #define gcry_pk_test_algo(a) \
@@ -342,7 +357,8 @@ enum gcry_md_algos {
 };
 
 enum gcry_md_flags {
-    GCRY_MD_FLAG_SECURE = 1
+    GCRY_MD_FLAG_SECURE = 1,
+    GCRY_MD_FLAG_HMAC  = 2
 };
 
 
@@ -373,6 +389,7 @@ int gcry_md_info( GCRY_MD_HD h, int what, void *buffer, size_t *nbytes);
 int gcry_md_algo_info( int algo, int what, void *buffer, size_t *nbytes);
 const char *gcry_md_algo_name( int algo );
 int gcry_md_map_name( const char* name );
+int gcry_md_setkey( GCRY_MD_HD hd, const char *key, size_t keylen );
 
 #define gcry_md_putc(h,c)  \
            do {                                        \
@@ -390,6 +407,12 @@ int gcry_md_map_name( const char* name );
 #define gcry_md_test_algo(a) \
            gcry_md_algo_info( (a), GCRYCTL_TEST_ALGO, NULL, NULL )
 
+#define gcry_md_start_debug(a,b) \
+           gcry_md_ctl( (a), GCRYCTL_START_DUMP, (b), 0 )
+#define gcry_md_stop_debug(a,b) \
+           gcry_md_ctl( (a), GCRYCTL_STOP_DUMP, (b), 0 )
+
+
 /*********************************************
  *******  random generating functions  *******
  *********************************************/
@@ -444,7 +467,8 @@ void *gcry_xmalloc_secure( size_t n );
 void *gcry_xcalloc_secure( size_t n, size_t m );
 void *gcry_xrealloc( void *a, size_t n );
 char *gcry_xstrdup( const char * a);
-void  gcry_free( void *p );
+void  gcry_free( void *a );
+int   gcry_is_secure( const void *a );
 
 
 #ifndef GCRYPT_NO_MPI_MACROS