summaryrefslogtreecommitdiff
path: root/src/engine-backend.h
blob: e540acb9f64d33fab87eb96e3b543499d8fbd612 (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
/* 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 <http://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);

  /* Member functions.  */
  void (*release) (void *engine);
  gpgme_error_t (*reset) (void *engine);
  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_data_t ciph,
			    gpgme_data_t plain);
  gpgme_error_t (*decrypt_verify) (void *engine, gpgme_data_t ciph,
				   gpgme_data_t plain);
  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, gpgme_data_t help_data, int use_armor,
			   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);
  gpgme_error_t (*keylist_ext) (void *engine, const char *pattern[],
				int secret_only, int reserved,
				gpgme_keylist_mode_t mode);
  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_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);

  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);
};


extern struct engine_ops _gpgme_engine_ops_gpg;		/* OpenPGP.  */
#ifdef ENABLE_GPGSM
extern struct engine_ops _gpgme_engine_ops_gpgsm;	/* CMS.  */
#endif
#ifdef ENABLE_GPGCONF
extern struct engine_ops _gpgme_engine_ops_gpgconf;	/* gpg-conf.  */
#endif
#ifdef ENABLE_ASSUAN
extern struct engine_ops _gpgme_engine_ops_assuan;	/* Low-level Assuan. */
#endif
#ifdef ENABLE_G13
extern struct engine_ops _gpgme_engine_ops_g13;         /* Crypto VFS. */
#endif
#ifdef ENABLE_UISERVER
extern struct engine_ops _gpgme_engine_ops_uiserver;
#endif

#endif /* ENGINE_BACKEND_H */