Removed the module registration interface
[libgcrypt.git] / src / gcrypt-module.h
1 /* gcrypt-module.h - GNU Cryptographic Library Interface
2    Copyright (C) 2003, 2007 Free Software Foundation, Inc.
3
4    This file is part of Libgcrypt.
5
6    Libgcrypt is free software; you can redistribute it and/or modify
7    it under the terms of the GNU Lesser General Public License as
8    published by the Free Software Foundation; either version 2.1 of
9    the License, or (at your option) any later version.
10
11    Libgcrypt is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU Lesser General Public License for more details.
15
16    You should have received a copy of the GNU Lesser General Public
17    License along with this program; if not, see <http://www.gnu.org/licenses/>.
18  */
19
20 /*
21    This file contains the necessary declarations/definitions for
22    working with Libgcrypt modules.  Since 1.6 this is an internal
23    interface and will eventually be merged into another header or
24    entirely removed.
25  */
26
27 #ifndef GCRYPT_MODULE_H
28 #define GCRYPT_MODULE_H
29
30 #ifdef __cplusplus
31 extern "C" {
32 #if 0 /* keep Emacsens's auto-indent happy */
33 }
34 #endif
35 #endif
36
37 /* The interfaces using the module system reserve a certain range of
38    IDs for application use.  These IDs are not valid within Libgcrypt
39    but Libgcrypt makes sure never to allocate such a module ID.  */
40 #define GCRY_MODULE_ID_USER      1024
41 #define GCRY_MODULE_ID_USER_LAST 4095
42
43
44 /* This type represents a `module'.  */
45 typedef struct gcry_module *gcry_module_t;
46
47 /* Check that the library fulfills the version requirement.  */
48
49 /* Type for the cipher_setkey function.  */
50 typedef gcry_err_code_t (*gcry_cipher_setkey_t) (void *c,
51                                                  const unsigned char *key,
52                                                  unsigned keylen);
53
54 /* Type for the cipher_encrypt function.  */
55 typedef void (*gcry_cipher_encrypt_t) (void *c,
56                                        unsigned char *outbuf,
57                                        const unsigned char *inbuf);
58
59 /* Type for the cipher_decrypt function.  */
60 typedef void (*gcry_cipher_decrypt_t) (void *c,
61                                        unsigned char *outbuf,
62                                        const unsigned char *inbuf);
63
64 /* Type for the cipher_stencrypt function.  */
65 typedef void (*gcry_cipher_stencrypt_t) (void *c,
66                                          unsigned char *outbuf,
67                                          const unsigned char *inbuf,
68                                          unsigned int n);
69
70 /* Type for the cipher_stdecrypt function.  */
71 typedef void (*gcry_cipher_stdecrypt_t) (void *c,
72                                          unsigned char *outbuf,
73                                          const unsigned char *inbuf,
74                                          unsigned int n);
75
76 typedef struct gcry_cipher_oid_spec
77 {
78   const char *oid;
79   int mode;
80 } gcry_cipher_oid_spec_t;
81
82 /* Module specification structure for ciphers.  */
83 typedef struct gcry_cipher_spec
84 {
85   const char *name;
86   const char **aliases;
87   gcry_cipher_oid_spec_t *oids;
88   size_t blocksize;
89   size_t keylen;
90   size_t contextsize;
91   gcry_cipher_setkey_t setkey;
92   gcry_cipher_encrypt_t encrypt;
93   gcry_cipher_decrypt_t decrypt;
94   gcry_cipher_stencrypt_t stencrypt;
95   gcry_cipher_stdecrypt_t stdecrypt;
96 } gcry_cipher_spec_t;
97
98
99 /* ********************** */
100
101 /* Type for the pk_generate function.  */
102 typedef gcry_err_code_t (*gcry_pk_generate_t) (int algo,
103                                                unsigned int nbits,
104                                                unsigned long use_e,
105                                                gcry_mpi_t *skey,
106                                                gcry_mpi_t **retfactors);
107
108 /* Type for the pk_check_secret_key function.  */
109 typedef gcry_err_code_t (*gcry_pk_check_secret_key_t) (int algo,
110                                                        gcry_mpi_t *skey);
111
112 /* Type for the pk_encrypt function.  */
113 typedef gcry_err_code_t (*gcry_pk_encrypt_t) (int algo,
114                                               gcry_mpi_t *resarr,
115                                               gcry_mpi_t data,
116                                               gcry_mpi_t *pkey,
117                                               int flags);
118
119 /* Type for the pk_decrypt function.  */
120 typedef gcry_err_code_t (*gcry_pk_decrypt_t) (int algo,
121                                               gcry_mpi_t *result,
122                                               gcry_mpi_t *data,
123                                               gcry_mpi_t *skey,
124                                               int flags);
125
126 /* Type for the pk_sign function.  */
127 typedef gcry_err_code_t (*gcry_pk_sign_t) (int algo,
128                                            gcry_mpi_t *resarr,
129                                            gcry_mpi_t data,
130                                            gcry_mpi_t *skey);
131
132 /* Type for the pk_verify function.  */
133 typedef gcry_err_code_t (*gcry_pk_verify_t) (int algo,
134                                              gcry_mpi_t hash,
135                                              gcry_mpi_t *data,
136                                              gcry_mpi_t *pkey,
137                                              int (*cmp) (void *, gcry_mpi_t),
138                                              void *opaquev);
139
140 /* Type for the pk_get_nbits function.  */
141 typedef unsigned (*gcry_pk_get_nbits_t) (int algo, gcry_mpi_t *pkey);
142
143 /* Module specification structure for message digests.  */
144 typedef struct gcry_pk_spec
145 {
146   const char *name;
147   const char **aliases;
148   const char *elements_pkey;
149   const char *elements_skey;
150   const char *elements_enc;
151   const char *elements_sig;
152   const char *elements_grip;
153   int use;
154   gcry_pk_generate_t generate;
155   gcry_pk_check_secret_key_t check_secret_key;
156   gcry_pk_encrypt_t encrypt;
157   gcry_pk_decrypt_t decrypt;
158   gcry_pk_sign_t sign;
159   gcry_pk_verify_t verify;
160   gcry_pk_get_nbits_t get_nbits;
161 } gcry_pk_spec_t;
162
163
164 /* ********************** */
165
166 /* Type for the md_init function.  */
167 typedef void (*gcry_md_init_t) (void *c);
168
169 /* Type for the md_write function.  */
170 typedef void (*gcry_md_write_t) (void *c, const void *buf, size_t nbytes);
171
172 /* Type for the md_final function.  */
173 typedef void (*gcry_md_final_t) (void *c);
174
175 /* Type for the md_read function.  */
176 typedef unsigned char *(*gcry_md_read_t) (void *c);
177
178 typedef struct gcry_md_oid_spec
179 {
180   const char *oidstring;
181 } gcry_md_oid_spec_t;
182
183 /* Module specification structure for message digests.  */
184 typedef struct gcry_md_spec
185 {
186   const char *name;
187   unsigned char *asnoid;
188   int asnlen;
189   gcry_md_oid_spec_t *oids;
190   int mdlen;
191   gcry_md_init_t init;
192   gcry_md_write_t write;
193   gcry_md_final_t final;
194   gcry_md_read_t read;
195   size_t contextsize; /* allocate this amount of context */
196 } gcry_md_spec_t;
197
198 #if 0 /* keep Emacsens's auto-indent happy */
199 {
200 #endif
201 #ifdef __cplusplus
202 }
203 #endif
204 #endif /*GCRYPT_MODULE_H*/