Add 2 missing files and other changes
[gpgme.git] / gpgme / gpgme.h
1 /* gpgme.h -  GnuPG Made Easy
2  *      Copyright (C) 2000 Werner Koch (dd9jn)
3  *
4  * This file is part of GPGME.
5  *
6  * GPGME is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * GPGME 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 General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * 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
21 #ifndef GPGME_H
22 #define GPGME_H
23
24 #ifdef _MSC_VER
25   typedef long off_t 
26 #else
27 # include <sys/types.h>
28 #endif
29
30 #ifdef __cplusplus
31 extern "C" { 
32 #if 0 /* just to make Emacs auto-indent happy */
33 }
34 #endif
35 #endif
36
37
38 /*
39  * The version of this header should match the one of the library
40  * It should not be used by a program because gpgme_check_version(NULL)
41  * does return the same version.  The purpose of this macro is to
42  * let autoconf (using the AM_PATH_GPGME macro) check that this
43  * header matches the installed library.
44  * Warning: Do not edit the next line.  configure will do that for you! */
45 #define GPGME_VERSION "0.1.3a"
46
47
48
49 struct gpgme_context_s;
50 typedef struct gpgme_context_s *GpgmeCtx;
51
52 struct gpgme_data_s;
53 typedef struct gpgme_data_s *GpgmeData;
54
55 struct gpgme_recipients_s;
56 typedef struct gpgme_recipients_s *GpgmeRecipients;
57
58 struct gpgme_key_s;
59 typedef struct gpgme_key_s *GpgmeKey;
60
61
62 typedef enum {
63     GPGME_EOF = -1,
64     GPGME_No_Error = 0,
65     GPGME_General_Error = 1,
66     GPGME_Out_Of_Core = 2,
67     GPGME_Invalid_Value = 3,
68     GPGME_Busy = 4,
69     GPGME_No_Request = 5,
70     GPGME_Exec_Error = 6,
71     GPGME_Too_Many_Procs = 7,
72     GPGME_Pipe_Error = 8,
73     GPGME_No_Recipients = 9,
74     GPGME_No_Data = 10,
75     GPGME_Conflict = 11,
76     GPGME_Not_Implemented = 12,
77     GPGME_Read_Error = 13,
78     GPGME_Write_Error = 14,
79     GPGME_Invalid_Type = 15,
80     GPGME_Invalid_Mode = 16,
81     GPGME_File_Error = 17,  /* errno is set in this case */
82     GPGME_Decryption_Failed = 18,
83     GPGME_No_Passphrase = 19,
84     GPGME_Canceled = 20,
85 } GpgmeError;
86
87 typedef enum {
88     GPGME_DATA_TYPE_NONE = 0,
89     GPGME_DATA_TYPE_MEM  = 1,
90     GPGME_DATA_TYPE_FD   = 2,
91     GPGME_DATA_TYPE_FILE = 3,
92     GPGME_DATA_TYPE_CB   = 4
93 } GpgmeDataType;
94
95 typedef enum {
96     GPGME_SIG_STAT_NONE = 0,
97     GPGME_SIG_STAT_GOOD = 1,
98     GPGME_SIG_STAT_BAD  = 2,
99     GPGME_SIG_STAT_NOKEY = 3,
100     GPGME_SIG_STAT_NOSIG = 4,
101     GPGME_SIG_STAT_ERROR = 5
102 } GpgmeSigStat;
103
104 typedef enum {
105     GPGME_SIG_MODE_NORMAL = 0,
106     GPGME_SIG_MODE_DETACH = 1,
107     GPGME_SIG_MODE_CLEAR = 2
108 } GpgmeSigMode;
109
110
111 typedef const char *(*GpgmePassphraseCb)(void*,
112                                          const char *desc, void *r_hd);
113 typedef void (*GpgmeProgressCb)(void *opaque,
114                                 const char *what, 
115                                 int type, int current, int total );
116
117
118 /* Context management */
119 GpgmeError gpgme_new (GpgmeCtx *r_ctx);
120 void       gpgme_release (GpgmeCtx c);
121 void       gpgme_cancel (GpgmeCtx c);
122 GpgmeCtx   gpgme_wait (GpgmeCtx c, int hang);
123
124 char *gpgme_get_notation (GpgmeCtx c);
125 void gpgme_set_armor (GpgmeCtx c, int yes);
126 void gpgme_set_textmode (GpgmeCtx c, int yes);
127 void gpgme_set_passphrase_cb (GpgmeCtx c,
128                               GpgmePassphraseCb cb, void *cb_value);
129 void gpgme_set_progress_cb (GpgmeCtx c, GpgmeProgressCb cb, void *cb_value);
130
131
132
133 /* Functions to handle recipients */
134 GpgmeError   gpgme_recipients_new (GpgmeRecipients *r_rset);
135 void         gpgme_recipients_release ( GpgmeRecipients rset);
136 GpgmeError   gpgme_recipients_add_name (GpgmeRecipients rset,
137                                         const char *name);
138 unsigned int gpgme_recipients_count ( const GpgmeRecipients rset );
139 GpgmeError gpgme_recipients_enum_open (const GpgmeRecipients rset,void **ctx);
140 const char *gpgme_recipients_enum_read (const GpgmeRecipients rset,void **ctx);
141 GpgmeError gpgme_recipients_enum_close (const GpgmeRecipients rset,void **ctx);
142
143
144 /* Functions to handle data sources */
145 GpgmeError    gpgme_data_new ( GpgmeData *r_dh );
146 GpgmeError    gpgme_data_new_from_mem ( GpgmeData *r_dh,
147                                         const char *buffer, size_t size,
148                                         int copy );
149 GpgmeError    gpgme_data_new_with_read_cb ( GpgmeData *r_dh,
150                               int (*read_cb)(void*,char *,size_t,size_t*),
151                               void *read_cb_value );
152
153 GpgmeError    gpgme_data_new_from_file ( GpgmeData *r_dh,
154                                          const char *fname,
155                                          int copy );
156 GpgmeError    gpgme_data_new_from_filepart ( GpgmeData *r_dh,
157                                              const char *fname, FILE *fp,
158                                              off_t offset, off_t length );
159 void          gpgme_data_release ( GpgmeData dh );
160 char *        gpgme_data_release_and_get_mem ( GpgmeData dh, size_t *r_len );
161 GpgmeDataType gpgme_data_get_type ( GpgmeData dh );
162 GpgmeError    gpgme_data_rewind ( GpgmeData dh );
163 GpgmeError    gpgme_data_read ( GpgmeData dh,
164                                 char *buffer, size_t length, size_t *nread );
165 GpgmeError    gpgme_data_write ( GpgmeData dh,
166                                  const char *buffer, size_t length );
167
168
169 /* Key functions */
170 char *gpgme_key_get_as_xml ( GpgmeKey key );
171
172
173 /* Basic GnuPG functions */
174 GpgmeError gpgme_op_encrypt_start ( GpgmeCtx c,
175                                     GpgmeRecipients recp,
176                                     GpgmeData in, GpgmeData out );
177 GpgmeError gpgme_op_decrypt_start ( GpgmeCtx c, 
178                                     GpgmeData ciph, GpgmeData plain );
179 GpgmeError gpgme_op_sign_start ( GpgmeCtx c,
180                                  GpgmeData in, GpgmeData out,
181                                  GpgmeSigMode mode );
182 GpgmeError gpgme_op_verify_start ( GpgmeCtx c,
183                                    GpgmeData sig, GpgmeData text );
184 GpgmeError gpgme_op_import_start ( GpgmeCtx c, GpgmeData keydata );
185 GpgmeError gpgme_op_export_start ( GpgmeCtx c, GpgmeRecipients recp,
186                                    GpgmeData keydata );
187 GpgmeError gpgme_op_genkey_start ( GpgmeCtx c, const char *parms,
188                                    GpgmeData pubkey, GpgmeData seckey );
189
190
191
192
193 /* Key management functions */
194 GpgmeError gpgme_op_keylist_start ( GpgmeCtx c,
195                                     const char *pattern, int secret_only );
196 GpgmeError gpgme_op_keylist_next ( GpgmeCtx c, GpgmeKey *r_key );
197
198
199 /* Convenience functions for normal usage */
200 GpgmeError gpgme_op_encrypt ( GpgmeCtx c, GpgmeRecipients recp,
201                               GpgmeData in, GpgmeData out );
202 GpgmeError gpgme_op_decrypt ( GpgmeCtx c, 
203                               GpgmeData in, GpgmeData out );
204 GpgmeError gpgme_op_sign ( GpgmeCtx c, GpgmeData in, GpgmeData out,
205                            GpgmeSigMode mode);
206 GpgmeError gpgme_op_verify ( GpgmeCtx c, GpgmeData sig, GpgmeData text,
207                              GpgmeSigStat *r_status );
208 GpgmeError gpgme_op_import ( GpgmeCtx c, GpgmeData keydata );
209 GpgmeError gpgme_op_export ( GpgmeCtx c, GpgmeRecipients recp,
210                              GpgmeData keydata );
211 GpgmeError gpgme_op_genkey ( GpgmeCtx c, const char *parms,
212                              GpgmeData pubkey, GpgmeData seckey );
213
214
215 /* miscellaneous functions */
216 const char *gpgme_check_version ( const char *req_version );
217 const char *gpgme_strerror (GpgmeError err);
218 const char *gpgme_get_prompt ( GpgmeCtx c, int which );
219
220
221 #ifdef __cplusplus
222 }
223 #endif
224 #endif /* GPGME_H */
225
226
227
228
229
230
231