Okay, it runs at least on Windows 95
[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.1"
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
96 /* Context management */
97 GpgmeError gpgme_new (GpgmeCtx *r_ctx);
98 void       gpgme_release ( GpgmeCtx c );
99 GpgmeCtx   gpgme_wait ( GpgmeCtx c, int hang );
100
101 char *gpgme_get_notation ( GpgmeCtx c );
102 void gpgme_set_armor ( GpgmeCtx c, int yes );
103 void gpgme_set_textmode ( GpgmeCtx c, int yes );
104
105
106
107 /* Functions to handle recipients */
108 GpgmeError   gpgme_recipients_new (GpgmeRecipients *r_rset);
109 void         gpgme_recipients_release ( GpgmeRecipients rset);
110 GpgmeError   gpgme_recipients_add_name (GpgmeRecipients rset,
111                                         const char *name);
112 unsigned int gpgme_recipients_count ( const GpgmeRecipients rset );
113
114 /* Functions to handle data sources */
115 GpgmeError    gpgme_data_new ( GpgmeData *r_dh );
116 GpgmeError    gpgme_data_new_from_mem ( GpgmeData *r_dh,
117                                         const char *buffer, size_t size,
118                                         int copy );
119 GpgmeError    gpgme_data_new_with_read_cb ( GpgmeData *r_dh,
120                               int (*read_cb)(void*,char *,size_t,size_t*),
121                               void *read_cb_value );
122
123 GpgmeError    gpgme_data_new_from_file ( GpgmeData *r_dh,
124                                          const char *fname,
125                                          int copy );
126 void          gpgme_data_release ( GpgmeData dh );
127 char *        gpgme_data_release_and_get_mem ( GpgmeData dh, size_t *r_len );
128 GpgmeDataType gpgme_data_get_type ( GpgmeData dh );
129 GpgmeError    gpgme_data_rewind ( GpgmeData dh );
130 GpgmeError    gpgme_data_read ( GpgmeData dh,
131                                 char *buffer, size_t length, size_t *nread );
132
133 /* Key functions */
134 char *gpgme_key_get_as_xml ( GpgmeKey key );
135
136
137 /* Basic GnuPG functions */
138 GpgmeError gpgme_op_encrypt_start ( GpgmeCtx c,
139                                     GpgmeRecipients recp,
140                                     GpgmeData in, GpgmeData out );
141 GpgmeError gpgme_op_decrypt_start ( GpgmeCtx c, GpgmeData passphrase,
142                                     GpgmeData ciph, GpgmeData plain );
143 GpgmeError gpgme_op_sign_start ( GpgmeCtx c, GpgmeData in, GpgmeData out );
144 GpgmeError gpgme_op_verify_start ( GpgmeCtx c,
145                                    GpgmeData sig, GpgmeData text );
146
147
148 /* Key management functions */
149 GpgmeError gpgme_op_keylist_start ( GpgmeCtx c,
150                                     const char *pattern, int secret_only );
151 GpgmeError gpgme_op_keylist_next ( GpgmeCtx c, GpgmeKey *r_key );
152
153
154 /* Convenience functions for normal usage */
155 GpgmeError gpgme_op_encrypt ( GpgmeCtx c, GpgmeRecipients recp,
156                               GpgmeData in, GpgmeData out );
157 GpgmeError gpgme_op_decrypt ( GpgmeCtx c, GpgmeData passphrase,
158                               GpgmeData in, GpgmeData out );
159 GpgmeError gpgme_op_sign ( GpgmeCtx c, GpgmeData in, GpgmeData out );
160 GpgmeError gpgme_op_verify ( GpgmeCtx c, GpgmeData sig, GpgmeData text,
161                              GpgmeSigStat *r_status );
162
163
164 /* miscellaneous functions */
165 const char *gpgme_check_version ( const char *req_version );
166 const char *gpgme_strerror (GpgmeError err);
167 const char *gpgme_get_prompt ( GpgmeCtx c, int which );
168
169
170 #ifdef __cplusplus
171 }
172 #endif
173 #endif /* GPGME_H */
174
175
176
177
178
179
180