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