summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMoritz Schulte <mo@g10code.com>2003-09-17 22:24:00 +0000
committerMoritz Schulte <mo@g10code.com>2003-09-17 22:24:00 +0000
commita01ebe18bfecdcdc7e84cd1a45988f20c9d055d1 (patch)
tree1630c0d5049f9b9c80a3cb2bc8b759790c73b3d9
parentfed4a5b844499f4c8a7ef7fb6589239fce03bb3c (diff)
downloadlibgcrypt-a01ebe18bfecdcdc7e84cd1a45988f20c9d055d1.tar.gz
2003-09-18 Moritz Schulte <mo@g10code.com>
* gcrypt-module.h: Include <stddef.h>. * gcrypt-module.h (gcry_pk_generate_t, gcry_pk_check_secret_key_t, gcry_pk_encrypt_t, gcry_pk_decrypt_t, gcry_pk_sign_t, gcry_pk_verify_t, gcry_pk_get_nbits_t, gcry_pk_spec_t): Removed types. Removed declarations for: gcry_pk_register, gcry_pk_unregister. New declerations for: gcry_ac_register, gcry_ac_unregister. (gcry_ac_struct_spec_t, gcry_ac_generate_t, gcry_ac_key_secret_check_t, gcry_ac_encrypt_t, gcry_ac_decrypt_t, gcry_ac_sign_t, gcry_ac_verify_t, gcry_ac_get_nbits_t, gcry_ac_get_grip_t, gcry_ac_spec_t): New types. (_GCRY_AC_SPEC, GCRY_AC_SPEC_KEY_PUBLIC, GCRY_AC_SPEC_KEY_SECRET) (GCRY_AC_SPEC_DATA_ENCRYPTED, GCRY_AC_SPEC_DATA_SIGNED) (_GCRY_AC_ELEM, GCRY_AC_ELEM_KEY_PUBLIC, GCRY_AC_ELEM_KEY_SECRET) (GCRY_AC_ELEM_DATA_ENCRYPTED, GCRY_AC_ELEM_DATA_SIGNED): New macros.
-rw-r--r--src/gcrypt-module.h132
1 files changed, 81 insertions, 51 deletions
diff --git a/src/gcrypt-module.h b/src/gcrypt-module.h
index 1099c92c..52bb5f71 100644
--- a/src/gcrypt-module.h
+++ b/src/gcrypt-module.h
@@ -31,6 +31,8 @@ extern "C" {
#endif
#endif
+#include <stddef.h>
+
/* This type represents a `module'. */
typedef struct gcry_module *gcry_module_t;
@@ -98,78 +100,106 @@ void gcry_cipher_unregister (gcry_module_t module);
/* ********************** */
+#define _GCRY_AC_SPEC(identifier) \
+ static gcry_ac_struct_spec_t spec_##identifier[]
+
+#define GCRY_AC_SPEC_KEY_PUBLIC _GCRY_AC_SPEC (key_public)
+#define GCRY_AC_SPEC_KEY_SECRET _GCRY_AC_SPEC (key_secret)
+#define GCRY_AC_SPEC_DATA_ENCRYPTED _GCRY_AC_SPEC (data_encrypted)
+#define GCRY_AC_SPEC_DATA_SIGNED _GCRY_AC_SPEC (data_signed)
+
+#define _GCRY_AC_ELEM(elem, type) { #elem, offsetof (type, elem) }
+
+#define GCRY_AC_ELEM_KEY_PUBLIC(elem) _GCRY_AC_ELEM (elem, key_public_t)
+#define GCRY_AC_ELEM_KEY_SECRET(elem) _GCRY_AC_ELEM (elem, key_secret_t)
+#define GCRY_AC_ELEM_DATA_ENCRYPTED(elem) _GCRY_AC_ELEM (elem, data_encrypted_t)
+#define GCRY_AC_ELEM_DATA_SIGNED(elem) _GCRY_AC_ELEM (elem, data_signed_t)
+
+typedef struct gcry_ac_struct_spec
+{
+ const char *name;
+ size_t offset;
+} gcry_ac_struct_spec_t;
+
/* Type for the pk_generate function. */
-typedef gcry_err_code_t (*gcry_pk_generate_t) (int algo,
- unsigned int nbits,
- unsigned long use_e,
- gcry_mpi_t *skey,
- gcry_mpi_t **retfactors);
+typedef gcry_err_code_t (*gcry_ac_generate_t) (unsigned int nbits,
+ void *generate_spec,
+ void *key_secret,
+ void *key_public,
+ gcry_mpi_t **misc_data);
/* Type for the pk_check_secret_key function. */
-typedef gcry_err_code_t (*gcry_pk_check_secret_key_t) (int algo,
- gcry_mpi_t *skey);
+typedef gcry_err_code_t (*gcry_ac_key_secret_check_t) (void *key_secret);
/* Type for the pk_encrypt function. */
-typedef gcry_err_code_t (*gcry_pk_encrypt_t) (int algo,
- gcry_mpi_t *resarr,
- gcry_mpi_t data,
- gcry_mpi_t *pkey,
- int flags);
+typedef gcry_err_code_t (*gcry_ac_encrypt_t) (gcry_mpi_t data,
+ void *key_public,
+ void *data_encrypted,
+ unsigned int flags);
/* Type for the pk_decrypt function. */
-typedef gcry_err_code_t (*gcry_pk_decrypt_t) (int algo,
- gcry_mpi_t *result,
- gcry_mpi_t *data,
- gcry_mpi_t *skey,
- int flags);
+typedef gcry_err_code_t (*gcry_ac_decrypt_t) (void *data_encrypted,
+ void *key_secret,
+ gcry_mpi_t *data_decrypted,
+ unsigned int flags);
/* Type for the pk_sign function. */
-typedef gcry_err_code_t (*gcry_pk_sign_t) (int algo,
- gcry_mpi_t *resarr,
- gcry_mpi_t data,
- gcry_mpi_t *skey);
+typedef gcry_err_code_t (*gcry_ac_sign_t) (gcry_mpi_t data,
+ void *key_secret,
+ void *data_signed);
/* Type for the pk_verify function. */
-typedef gcry_err_code_t (*gcry_pk_verify_t) (int algo,
- gcry_mpi_t hash,
- gcry_mpi_t *data,
- gcry_mpi_t *pkey,
- int (*cmp) (void *, gcry_mpi_t),
- void *opaquev);
+typedef gcry_err_code_t (*gcry_ac_verify_t) (gcry_mpi_t data,
+ void *key_public,
+ void *data_signed);
/* Type for the pk_get_nbits function. */
-typedef unsigned (*gcry_pk_get_nbits_t) (int algo, gcry_mpi_t *pkey);
+typedef gcry_err_code_t (*gcry_ac_get_nbits_t) (void *key_public,
+ void *key_secret,
+ unsigned int *key_nbits);
+
+/* Type for the pk_get_grip function. */
+typedef gcry_err_code_t (*gcry_ac_get_grip_t) (void *key_public,
+ unsigned char *key_grip);
/* Module specification structure for message digests. */
-typedef struct gcry_pk_spec
+typedef struct gcry_ac_spec
{
const char *name;
char **aliases;
- const char *elements_pkey;
- const char *elements_skey;
- const char *elements_enc;
- const char *elements_sig;
- const char *elements_grip;
- int use;
- gcry_pk_generate_t generate;
- gcry_pk_check_secret_key_t check_secret_key;
- gcry_pk_encrypt_t encrypt;
- gcry_pk_decrypt_t decrypt;
- gcry_pk_sign_t sign;
- gcry_pk_verify_t verify;
- gcry_pk_get_nbits_t get_nbits;
-} gcry_pk_spec_t;
-
-/* Register a new pubkey module whose specification can be found in
- PUBKEY. On success, a new algorithm ID is stored in ALGORITHM_ID
- and a pointer representhing this module is stored in MODULE. */
-gcry_error_t gcry_pk_register (gcry_pk_spec_t *pubkey,
+ size_t size_key_public;
+ size_t size_key_secret;
+ size_t size_data_encrypted;
+ size_t size_data_signed;
+ unsigned int elems_key_public;
+ unsigned int elems_key_secret;
+ unsigned int elems_data_encrypted;
+ unsigned int elems_data_signed;
+ gcry_ac_struct_spec_t *spec_key_public;
+ gcry_ac_struct_spec_t *spec_key_secret;
+ gcry_ac_struct_spec_t *spec_data_encrypted;
+ gcry_ac_struct_spec_t *spec_data_signed;
+ gcry_ac_generate_t generate;
+ gcry_ac_key_secret_check_t key_secret_check;
+ gcry_ac_encrypt_t encrypt;
+ gcry_ac_decrypt_t decrypt;
+ gcry_ac_sign_t sign;
+ gcry_ac_verify_t verify;
+ gcry_ac_get_nbits_t get_nbits;
+ gcry_ac_get_grip_t get_grip;
+} gcry_ac_spec_t;
+
+/* Register a new algorithm module whose specification can be found in
+ ALGORITHM. On success, a new algorithm ID is stored in
+ ALGORITHM_ID and a pointer representhing this module is stored in
+ MODULE. */
+gcry_error_t gcry_ac_register (gcry_ac_spec_t *algorithm,
unsigned int *algorithm_id,
gcry_module_t *module);
-/* Unregister the pubkey identified by ID, which must have been
- registered with gcry_pk_register. */
-void gcry_pk_unregister (gcry_module_t module);
+/* Unregister the algorithm identified by MODULE, which must have been
+ registered with gcry_ac_register. */
+void gcry_ac_unregister (gcry_module_t module);
/* ********************** */