summaryrefslogtreecommitdiff
path: root/src/engine-backend.h
blob: 53af6622880cf783f8054eb54ae0d6ea1edf5a60 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
/* engine-backend.h - A crypto backend for the engine interface.
   Copyright (C) 2002, 2003, 2004, 2009 g10 Code GmbH

   This file is part of GPGME.

   GPGME is free software; you can redistribute it and/or modify it
   under the terms of the GNU Lesser General Public License as
   published by the Free Software Foundation; either version 2.1 of
   the License, or (at your option) any later version.

   GPGME is distributed in the hope that it will be useful, but
   WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Lesser General Public License for more details.

   You should have received a copy of the GNU Lesser General Public
   License along with this program; if not, see <https://www.gnu.org/licenses/>.
 */

#ifndef ENGINE_BACKEND_H
#define ENGINE_BACKEND_H

#include "engine.h"

struct engine_ops
{
  /* Static functions.  */

  /* Return the default file name for the binary of this engine.  */
  const char *(*get_file_name) (void);

  /* Return the default home dir for the binary of this engine.  If
     this function pointer is not set, the standard default home dir
     of the engine is used. */
  const char *(*get_home_dir) (void);

  /* Returns a malloced string containing the version of the engine
     with the given binary file name (or the default if FILE_NAME is
     NULL.  */
  char *(*get_version) (const char *file_name);

  /* Returns a statically allocated string containing the required
     version.  */
  const char *(*get_req_version) (void);

  gpgme_error_t (*new) (void **r_engine,
			const char *file_name, const char *home_dir,
                        const char *version);

  /* Member functions.  */
  void (*release) (void *engine);
  gpgme_error_t (*reset) (void *engine);
  void (*set_status_cb) (void *engine, gpgme_status_cb_t cb, void *cb_value);
  void (*set_status_handler) (void *engine, engine_status_handler_t fnc,
			      void *fnc_value);
  gpgme_error_t (*set_command_handler) (void *engine,
					engine_command_handler_t fnc,
					void *fnc_value, gpgme_data_t data);
  gpgme_error_t (*set_colon_line_handler) (void *engine,
					   engine_colon_line_handler_t fnc,
					   void *fnc_value);
  gpgme_error_t (*set_locale) (void *engine, int category, const char *value);
  gpgme_error_t (*set_protocol) (void *engine, gpgme_protocol_t protocol);
  gpgme_error_t (*decrypt) (void *engine,
                            gpgme_decrypt_flags_t flags,
                            gpgme_data_t ciph,
			    gpgme_data_t plain, int export_session_key,
                            const char *override_session_key);
  gpgme_error_t (*delete) (void *engine, gpgme_key_t key, int allow_secret);
  gpgme_error_t (*edit) (void *engine, int type, gpgme_key_t key,
			 gpgme_data_t out, gpgme_ctx_t ctx /* FIXME */);
  gpgme_error_t (*encrypt) (void *engine, gpgme_key_t recp[],
			    gpgme_encrypt_flags_t flags,
			    gpgme_data_t plain, gpgme_data_t ciph,
			    int use_armor);
  gpgme_error_t (*encrypt_sign) (void *engine, gpgme_key_t recp[],
				 gpgme_encrypt_flags_t flags,
				 gpgme_data_t plain, gpgme_data_t ciph,
				 int use_armor, gpgme_ctx_t ctx /* FIXME */);
  gpgme_error_t (*export) (void *engine, const char *pattern,
			   gpgme_export_mode_t mode, gpgme_data_t keydata,
			   int use_armor);
  gpgme_error_t (*export_ext) (void *engine, const char *pattern[],
			       gpgme_export_mode_t mode, gpgme_data_t keydata,
			       int use_armor);
  gpgme_error_t (*genkey) (void *engine,
                           const char *userid, const char *algo,
                           unsigned long reserved, unsigned long expires,
                           gpgme_key_t key, unsigned int flags,
                           gpgme_data_t help_data,
                           unsigned int extraflags,
			   gpgme_data_t pubkey, gpgme_data_t seckey);
  gpgme_error_t (*import) (void *engine, gpgme_data_t keydata,
                           gpgme_key_t *keyarray);
  gpgme_error_t (*keylist) (void *engine, const char *pattern,
			    int secret_only, gpgme_keylist_mode_t mode,
			    int engine_flags);
  gpgme_error_t (*keylist_ext) (void *engine, const char *pattern[],
				int secret_only, int reserved,
				gpgme_keylist_mode_t mode,
				int engine_flags);
  gpgme_error_t (*keylist_data) (void *engine, gpgme_data_t data);
  gpgme_error_t (*keysign) (void *engine,
                            gpgme_key_t key, const char *userid,
                            unsigned long expires, unsigned int flags,
                            gpgme_ctx_t ctx);
  gpgme_error_t (*tofu_policy) (void *engine,
                                gpgme_key_t key,
                                gpgme_tofu_policy_t policy);
  gpgme_error_t (*sign) (void *engine, gpgme_data_t in, gpgme_data_t out,
			 gpgme_sig_mode_t mode, int use_armor,
			 int use_textmode, int include_certs,
			 gpgme_ctx_t ctx /* FIXME */);
  gpgme_error_t (*trustlist) (void *engine, const char *pattern);
  gpgme_error_t (*verify) (void *engine, gpgme_data_t sig,
			   gpgme_data_t signed_text, gpgme_data_t plaintext,
                           gpgme_ctx_t ctx);
  gpgme_error_t  (*getauditlog) (void *engine, gpgme_data_t output,
                                 unsigned int flags);
  gpgme_error_t  (*opassuan_transact) (void *engine,
                                       const char *command,
                                       gpgme_assuan_data_cb_t data_cb,
                                       void *data_cb_value,
                                       gpgme_assuan_inquire_cb_t inq_cb,
                                       void *inq_cb_value,
                                       gpgme_assuan_status_cb_t status_cb,
                                       void *status_cb_value);

  gpgme_error_t  (*conf_load) (void *engine, gpgme_conf_comp_t *conf_p);
  gpgme_error_t  (*conf_save) (void *engine, gpgme_conf_comp_t conf);

  gpgme_error_t  (*query_swdb) (void *engine,
                                const char *name, const char *iversion,
                                gpgme_query_swdb_result_t result);

  void (*set_io_cbs) (void *engine, gpgme_io_cbs_t io_cbs);
  void (*io_event) (void *engine, gpgme_event_io_t type, void *type_data);

  /* Cancel the whole engine session.  */
  gpgme_error_t (*cancel) (void *engine);

  /* Cancel only the current operation, not the whole session.  */
  gpgme_error_t (*cancel_op) (void *engine);

  /* Change the passphrase for KEY. */
  gpgme_error_t (*passwd) (void *engine, gpgme_key_t key, unsigned int flags);

  /* Set the pinentry mode.  */
  gpgme_error_t (*set_pinentry_mode) (void *engine, gpgme_pinentry_mode_t mode);

  /* The spawn command.  */
  gpgme_error_t (*opspawn) (void * engine,
                            const char *file, const char *argv[],
                            gpgme_data_t datain,
                            gpgme_data_t dataout,
                            gpgme_data_t dataerr, unsigned int flags);

};


extern struct engine_ops _gpgme_engine_ops_gpg;		/* OpenPGP.  */
extern struct engine_ops _gpgme_engine_ops_gpgsm;	/* CMS.  */
extern struct engine_ops _gpgme_engine_ops_gpgconf;	/* gpg-conf.  */
extern struct engine_ops _gpgme_engine_ops_assuan;	/* Low-level Assuan. */
extern struct engine_ops _gpgme_engine_ops_g13;         /* Crypto VFS. */
#ifdef ENABLE_UISERVER
extern struct engine_ops _gpgme_engine_ops_uiserver;
#endif
extern struct engine_ops _gpgme_engine_ops_spawn;       /* Spawn engine. */


/* Prototypes for extra functions in engine-gpgconf.c  */
gpgme_error_t _gpgme_conf_arg_new (gpgme_conf_arg_t *arg_p,
                                   gpgme_conf_type_t type, const void *value);
void _gpgme_conf_arg_release (gpgme_conf_arg_t arg, gpgme_conf_type_t type);
gpgme_error_t _gpgme_conf_opt_change (gpgme_conf_opt_t opt, int reset,
				      gpgme_conf_arg_t arg);
void _gpgme_conf_release (gpgme_conf_comp_t conf);
gpgme_error_t _gpgme_conf_load (void *engine, gpgme_conf_comp_t *conf_p);



#endif /* ENGINE_BACKEND_H */