2003-07-02 Moritz Schulte <moritz@g10code.com>
authorMoritz Schulte <mo@g10code.com>
Wed, 2 Jul 2003 15:50:04 +0000 (15:50 +0000)
committerMoritz Schulte <mo@g10code.com>
Wed, 2 Jul 2003 15:50:04 +0000 (15:50 +0000)
* gcrypt.h: Added all definitions and declarations necessary for
the new ac interface.

2003-06-30  Moritz Schulte  <moritz@g10code.com>

* g10lib.h: Added declarations: _gcry_pk_module_lookup,
_gcry_pk_module_release.

src/ChangeLog
src/g10lib.h
src/gcrypt.h

index 99cbdc5..355762f 100644 (file)
@@ -1,3 +1,13 @@
+2003-07-02  Moritz Schulte  <moritz@g10code.com>
+
+       * gcrypt.h: Added all definitions and declarations necessary for
+       the new ac interface.
+
+2003-06-30  Moritz Schulte  <moritz@g10code.com>
+
+       * g10lib.h: Added declarations: _gcry_pk_module_lookup,
+       _gcry_pk_module_release.
+
 2003-06-18  Werner Koch  <wk@gnupg.org>
 
        * benchmark.c (cipher_bench): Adjusted for new API of get_blklen
index e0eb4eb..8811864 100644 (file)
@@ -212,7 +212,7 @@ gpg_err_code_t _gcry_module_add (gcry_module_t **entries,
                                 void *spec,
                                 gcry_module_t **module);
 
-typedef int (*gcry_module_tLookup) (void *spec, void *data);
+typedef int (*gcry_module_lookup_t) (void *spec, void *data);
 
 /* Public function.  Lookup a module specification by it's ID.  After a
    successfull lookup, the module has it's resource counter
@@ -222,7 +222,7 @@ gcry_module_t *_gcry_module_lookup_id (gcry_module_t *entries,
 
 /* Internal function.  Lookup a module specification.  */
 gcry_module_t *_gcry_module_lookup (gcry_module_t *entries, void *data,
-                                gcry_module_tLookup func);
+                                   gcry_module_lookup_t func);
 
 /* Public function.  Release a module.  In case the use-counter
    reaches zero, destroy the module.  */
@@ -235,4 +235,7 @@ gpg_err_code_t _gcry_cipher_init (void);
 gpg_err_code_t _gcry_md_init (void);
 gpg_err_code_t _gcry_pk_init (void);
 
+gpg_err_code_t _gcry_pk_module_lookup (int id, gcry_module_t **module);
+void _gcry_pk_module_release (gcry_module_t *module);
+
 #endif /* G10LIB_H */
index d72ad3b..8fff209 100644 (file)
@@ -724,7 +724,166 @@ unsigned char *gcry_pk_get_keygrip (gcry_sexp_t key, unsigned char *array);
            gcry_pk_algo_info( (a), GCRYCTL_TEST_ALGO, NULL, NULL )
 
 
+/* Alternative interface for asymetric cryptography.  */
+
+/* The algorithm IDs. */
+typedef enum gcry_ac_id
+  {
+    GCRY_AC_RSA = 1,
+    GCRY_AC_DSA = 17,
+    GCRY_AC_ELG = 20,
+  }
+gcry_ac_id_t;
+
+/* Key types.  */
+typedef enum gcry_ac_key_type
+  {
+    GCRY_AC_KEY_SECRET,
+    GCRY_AC_KEY_PUBLIC,
+  }
+gcry_ac_key_type_t;
+
+/* Flags for data. */
+#define GCRY_AC_FLAG_DATA_NO_BLINDING 1 << 0
+
+/* This type represents a `data set'.  */
+typedef struct gcry_ac_data *gcry_ac_data_t;
+
+/* This type represents a single `key', either a secret one or a
+   public one.  */
+typedef struct gcry_ac_key *gcry_ac_key_t;
+
+/* This type represents a `key pair' containing a secret and a public
+   key.  */
+typedef struct gcry_ac_key_pair *gcry_ac_key_pair_t;
+
+/* This type represents a `handle' that is needed by functions
+   performing cryptographic operations.  */
+typedef struct gcry_ac_handle *gcry_ac_handle_t;
+
+/* The caller of gcry_ac_key_pair_generate can provide one of these
+   structures in order to influence the key generation process in an
+   algorithm-specific way.  */
+typedef struct gcry_ac_key_spec_rsa
+{
+  gcry_mpi_t e;                        /* E to use.  */
+} gcry_ac_key_spec_rsa_t;
+
+/* Returns a new, empty data set in DATA.  */
+gpg_error_t gcry_ac_data_new (gcry_ac_data_t *data);
+
+/* Destroy the data set DATA.  */
+void gcry_ac_data_destroy (gcry_ac_data_t data);
+
+/* Add the value MPI to DATA with the label NAME.  If there is already
+   a value with that label, replace it, otherwise add it.  */
+gpg_error_t gcry_ac_data_set (gcry_ac_data_t data,
+                             const char *name,
+                             gcry_mpi_t mpi);
+
+/* Return the number of named MPI values inside of the data set
+   DATA.  */
+unsigned int gcry_ac_data_length (gcry_ac_data_t data);
+
+/* Store the value labelled with NAME found in DATA in MPI or NULL if
+   a value with that label was not found.  */
+gpg_error_t gcry_ac_data_get_name (gcry_ac_data_t data, const char *name,
+                                  gcry_mpi_t *mpi);
+
+/* Return the MPI value with index INDEX contained in the data set
+   DATA.  */
+gpg_error_t gcry_ac_data_get_index (gcry_ac_data_t data, unsigned int index,
+                                   const char **name, gcry_mpi_t *mpi);
+
+/* Destroy any values contained in the data set DATA.  */
+void gcry_ac_data_clear (gcry_ac_data_t data);
+
+/* Create a new ac handle.  */
+gpg_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.  */
+gpg_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);
+
+/* Generate a new key pair.  */
+gpg_error_t gcry_ac_key_pair_generate (gcry_ac_handle_t handle,
+                                      gcry_ac_key_pair_t *key_pair,
+                                      unsigned int nbits,
+                                      void *spec);
+
+/* Returns a specified key from a key pair.  */
+gcry_ac_key_t gcry_ac_key_pair_extract (gcry_ac_key_pair_t key_pair,
+                                       gcry_ac_key_type_t which);
+
+/* Verify that the key KEY is sane.  */
+gpg_error_t gcry_ac_key_test (gcry_ac_key_t key);
+
+/* Return the number of bits of the key KEY in NBITS.  */
+gpg_error_t gcry_ac_key_get_nbits (gcry_ac_key_t key,
+                                  unsigned int *nbits);
+
+/* Write the 20 byte long key grip of the key KEY to KEY_GRIP.  */
+gpg_error_t gcry_ac_key_get_grip (gcry_ac_key_t key,
+                                 unsigned char *key_grip);
+
+/* Destroy a key.  */
+void gcry_ac_key_destroy (gcry_ac_key_t key);
+
+/* Destroy a key pair.  */
+void gcry_ac_key_pair_destroy (gcry_ac_key_pair_t key_pair);
+
+/* Encrypt the plain text MPI value DATA_PLAIN with the key KEY under
+   the control of the flags FLAGS and store the resulting data set
+   into DATA_ENCRYPTED.  */
+gpg_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);
+
+/* 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.  */
+gpg_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);
+
+/* Sign the data contained in DATA with the key KEY and store the
+   resulting signature in the data set DATA_SIGNATURE.  */
+gpg_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);
+
+/* 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.  */
+gpg_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);
+
+/* Store the textual representation of the algorithm whose id is given
+   in ALGORITHM in NAME.  */
+gpg_error_t gcry_ac_id_to_name (gcry_ac_id_t algorithm,
+                               const char **name);
+
+/* Store the numeric ID of the algorithm whose textual representation
+   is contained in NAME in ALGORITHM.  */
+gpg_error_t gcry_ac_name_to_id (const char *name,
+                               gcry_ac_id_t *algorithm);
+
 \f
+
 /************************************
  *                                  *
  *   cryptograhic hash functions    *