2003-06-18 Moritz Schulte <moritz@g10code.com>
[libgcrypt.git] / src / cipher.h
1 /* cipher.h
2  *      Copyright (C) 1998, 2002, 2003 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, write to the Free Software
18  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
19  */
20 #ifndef G10_CIPHER_H
21 #define G10_CIPHER_H
22
23 #include <gcrypt.h>
24
25 #define DBG_CIPHER _gcry_get_debug_flag( 1 )
26
27 #include "../cipher/random.h"
28
29 #define PUBKEY_FLAG_NO_BLINDING 1 << 0
30
31 /*-- rmd160.c --*/
32 void _gcry_rmd160_hash_buffer (char *outbuf, const char *buffer, size_t length);
33
34 /*-- smallprime.c --*/
35 extern ushort small_prime_numbers[];
36
37 /*-- dsa.c --*/
38 void _gcry_register_pk_dsa_progress (gcry_handler_progress_t cbc, void *cb_data);
39 /*-- elgamal.c --*/
40 void _gcry_register_pk_elg_progress (gcry_handler_progress_t cb, void *cb_data);
41 /*-- primegen.c --*/
42 void _gcry_register_primegen_progress (gcry_handler_progress_t cb, void *cb_data);
43
44 typedef gpg_err_code_t (*gcry_pk_generate_t) (int algo,
45                                               unsigned int nbits,
46                                               unsigned long use_e,
47                                               gcry_mpi_t *skey,
48                                               gcry_mpi_t **retfactors);
49 typedef gpg_err_code_t (*gcry_pk_check_secret_key_t) (int algo, gcry_mpi_t *skey);
50 typedef gpg_err_code_t (*gcry_pk_encrypt_t) (int algo,
51                                              gcry_mpi_t *resarr,
52                                              gcry_mpi_t data,
53                                              gcry_mpi_t *pkey,
54                                              int flags);
55 typedef gpg_err_code_t (*gcry_pk_decrypt_t) (int algo,
56                                              gcry_mpi_t *result,
57                                              gcry_mpi_t *data,
58                                              gcry_mpi_t *skey,
59                                              int flags);
60 typedef gpg_err_code_t (*gcry_pk_sign_t) (int algo,
61                                           gcry_mpi_t *resarr,
62                                           gcry_mpi_t data,
63                                           gcry_mpi_t *skey);
64 typedef gpg_err_code_t (*gcry_pk_verify_t) (int algo,
65                                             gcry_mpi_t hash,
66                                             gcry_mpi_t *data,
67                                             gcry_mpi_t *pkey,
68                                             int (*cmp)(void *, gcry_mpi_t),
69                                             void *opaquev);
70 typedef unsigned (*gcry_pk_get_nbits_t) (int algo, gcry_mpi_t *pkey);
71
72 typedef struct gcry_pubkey_spec
73 {
74   const char *name;
75   char **sexp_names;
76   int id;
77   const char *elements_pkey;
78   const char *elements_skey;
79   const char *elements_enc;
80   const char *elements_sig;
81   const char *elements_grip;
82   int use;
83   gcry_pk_generate_t generate;
84   gcry_pk_check_secret_key_t check_secret_key;
85   gcry_pk_encrypt_t encrypt;
86   gcry_pk_decrypt_t decrypt;
87   gcry_pk_sign_t sign;
88   gcry_pk_verify_t verify;
89   gcry_pk_get_nbits_t get_nbits;
90 } gcry_pubkey_spec_t;
91
92 typedef void (*gcry_md_init_t) (void *c);
93 typedef void (*gcry_md_write_t) (void *c, unsigned char *buf, size_t nbytes);
94 typedef void (*gcry_md_final_t) (void *c);
95 typedef unsigned char *(*gcry_md_read_t) (void *c);
96
97 typedef struct gcry_digest_spec
98 {
99   const char *name;
100   int id;
101   unsigned char *asnoid;
102   int asnlen;
103   int mdlen;
104   gcry_md_init_t init;
105   gcry_md_write_t write;
106   gcry_md_final_t final;
107   gcry_md_read_t read;
108   size_t contextsize; /* allocate this amount of context */
109 } gcry_digest_spec_t;
110
111 typedef gpg_err_code_t (*gcry_cipher_setkey_t) (void *c,
112                                                 const unsigned char *key,
113                                                 unsigned keylen);
114 typedef void (*gcry_cipher_encrypt_t) (void *c,
115                                        unsigned char *outbuf,
116                                        const unsigned char *inbuf);
117 typedef void (*gcry_cipher_decrypt_t) (void *c,
118                                        unsigned char *outbuf,
119                                        const unsigned char *inbuf);
120 typedef void (*gcry_cipher_stencrypt_t) (void *c,
121                                          unsigned char *outbuf,
122                                          const unsigned char *inbuf,
123                                          unsigned int n);
124 typedef void (*gcry_cipher_stdecrypt_t) (void *c,
125                                          unsigned char *outbuf,
126                                          const unsigned char *inbuf,
127                                          unsigned int n);
128
129 typedef struct gcry_cipher_spec
130 {
131   const char *name;
132   int id;
133   size_t blocksize;
134   size_t keylen;
135   size_t contextsize;
136   gcry_cipher_setkey_t setkey;
137   gcry_cipher_encrypt_t encrypt;
138   gcry_cipher_decrypt_t decrypt;
139   gcry_cipher_stencrypt_t stencrypt;
140   gcry_cipher_stdecrypt_t stdecrypt;
141 } gcry_cipher_spec_t;
142
143 /* Declarations for the cipher specifications.  */
144 extern gcry_cipher_spec_t cipher_spec_blowfish;
145 extern gcry_cipher_spec_t cipher_spec_des;
146 extern gcry_cipher_spec_t cipher_spec_tripledes;
147 extern gcry_cipher_spec_t cipher_spec_arcfour;
148 extern gcry_cipher_spec_t cipher_spec_cast5;
149 extern gcry_cipher_spec_t cipher_spec_aes;
150 extern gcry_cipher_spec_t cipher_spec_aes192;
151 extern gcry_cipher_spec_t cipher_spec_aes256;
152 extern gcry_cipher_spec_t cipher_spec_twofish;
153 extern gcry_cipher_spec_t cipher_spec_twofish128;
154 extern gcry_cipher_spec_t cipher_spec_serpent128;
155 extern gcry_cipher_spec_t cipher_spec_serpent192;
156 extern gcry_cipher_spec_t cipher_spec_serpent256;
157
158 /* Declarations for the digest specifications.  */
159 extern gcry_digest_spec_t digest_spec_crc32;
160 extern gcry_digest_spec_t digest_spec_crc32_rfc1510;
161 extern gcry_digest_spec_t digest_spec_crc24_rfc2440;
162 extern gcry_digest_spec_t digest_spec_md4;
163 extern gcry_digest_spec_t digest_spec_md5;
164 extern gcry_digest_spec_t digest_spec_rmd160;
165 extern gcry_digest_spec_t digest_spec_sha1;
166 extern gcry_digest_spec_t digest_spec_sha256;
167 extern gcry_digest_spec_t digest_spec_sha512;
168 extern gcry_digest_spec_t digest_spec_sha384;
169 extern gcry_digest_spec_t digest_spec_tiger;
170
171 /* Declarations for the pubkey cipher specifications.  */
172 extern gcry_pubkey_spec_t pubkey_spec_rsa;
173 extern gcry_pubkey_spec_t pubkey_spec_elg;
174 extern gcry_pubkey_spec_t pubkey_spec_dsa;
175
176 #endif /*G10_CIPHER_H*/