Update NEWS file
[gnupg.git] / agent / agent.h
1 /* agent.h - Global definitions for the agent
2  * Copyright (C) 2001, 2002, 2003, 2005, 2011 Free Software Foundation, Inc.
3  * Copyright (C) 2015 g10 Code GmbH.
4  *
5  * This file is part of GnuPG.
6  *
7  * GnuPG is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * GnuPG is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, see <http://www.gnu.org/licenses/>.
19  */
20
21 #ifndef AGENT_H
22 #define AGENT_H
23
24 #ifdef GPG_ERR_SOURCE_DEFAULT
25 #error GPG_ERR_SOURCE_DEFAULT already defined
26 #endif
27 #define GPG_ERR_SOURCE_DEFAULT  GPG_ERR_SOURCE_GPGAGENT
28 #include <gpg-error.h>
29 #define map_assuan_err(a) \
30         map_assuan_err_with_source (GPG_ERR_SOURCE_DEFAULT, (a))
31 #include <errno.h>
32
33 #include <gcrypt.h>
34 #include "../common/util.h"
35 #include "../common/membuf.h"
36 #include "../common/sysutils.h" /* (gnupg_fd_t) */
37 #include "../common/session-env.h"
38 #include "../common/shareddefs.h"
39
40 /* To convey some special hash algorithms we use algorithm numbers
41    reserved for application use. */
42 #ifndef GCRY_MODULE_ID_USER
43 #define GCRY_MODULE_ID_USER 1024
44 #endif
45 #define MD_USER_TLS_MD5SHA1 (GCRY_MODULE_ID_USER+1)
46
47 /* Maximum length of a digest.  */
48 #define MAX_DIGEST_LEN 64
49
50 /* The maximum length of a passphrase (in bytes).  Note: this is
51    further contrained by the Assuan line length (and any other text on
52    the same line).  However, the Assuan line length is 1k bytes so
53    this shouldn't be a problem in practice.  */
54 #define MAX_PASSPHRASE_LEN 255
55
56
57 /* A large struct name "opt" to keep global flags */
58 struct
59 {
60   unsigned int debug;  /* Debug flags (DBG_foo_VALUE) */
61   int verbose;         /* Verbosity level */
62   int quiet;           /* Be as quiet as possible */
63   int dry_run;         /* Don't change any persistent data */
64   int batch;           /* Batch mode */
65   const char *homedir; /* Configuration directory name */
66
67   /* True if we handle sigusr2.  */
68   int sigusr2_enabled;
69
70   /* Environment settings gathered at program start or changed using the
71      Assuan command UPDATESTARTUPTTY. */
72   session_env_t startup_env;
73   char *startup_lc_ctype;
74   char *startup_lc_messages;
75
76   /* Enable pinentry debugging (--debug 1024 should also be used).  */
77   int debug_pinentry;
78
79   /* Filename of the program to start as pinentry.  */
80   const char *pinentry_program;
81
82   /* Filename of the program to handle smartcard tasks.  */
83   const char *scdaemon_program;
84
85   int disable_scdaemon;         /* Never use the SCdaemon. */
86
87   int no_grab;         /* Don't let the pinentry grab the keyboard */
88
89   /* The name of the file pinentry shall touch before exiting.  If
90      this is not set the file name of the standard socket is used. */
91   const char *pinentry_touch_file;
92
93   /* A string where the first character is used by the pinentry as a
94      custom invisible character.  */
95   char *pinentry_invisible_char;
96
97   /* The default and maximum TTL of cache entries. */
98   unsigned long def_cache_ttl;     /* Default. */
99   unsigned long def_cache_ttl_ssh; /* for SSH. */
100   unsigned long max_cache_ttl;     /* Default. */
101   unsigned long max_cache_ttl_ssh; /* for SSH. */
102
103   /* Flag disallowing bypassing of the warning.  */
104   int enforce_passphrase_constraints;
105
106   /* The require minmum length of a passphrase. */
107   unsigned int min_passphrase_len;
108
109   /* The minimum number of non-alpha characters in a passphrase.  */
110   unsigned int min_passphrase_nonalpha;
111
112   /* File name with a patternfile or NULL if not enabled.  */
113   const char *check_passphrase_pattern;
114
115   /* If not 0 the user is asked to change his passphrase after these
116      number of days.  */
117   unsigned int max_passphrase_days;
118
119   /* If set, a passphrase history will be written and checked at each
120      passphrase change.  */
121   int enable_passhrase_history;
122
123   int running_detached; /* We are running detached from the tty. */
124
125   /* If this global option is true, the passphrase cache is ignored
126      for signing operations.  */
127   int ignore_cache_for_signing;
128
129   /* If this global option is true, the user is allowed to
130      interactively mark certificate in trustlist.txt as trusted. */
131   int allow_mark_trusted;
132
133   /* If this global option is true, the Assuan command
134      PRESET_PASSPHRASE is allowed.  */
135   int allow_preset_passphrase;
136
137   /* If this global option is true, the Assuan option
138      pinentry-mode=loopback is allowed.  */
139   int allow_loopback_pinentry;
140
141   /* Allow the use of an external password cache.  If this option is
142      enabled (which is the default) we send an option to Pinentry
143      to allow it to enable such a cache.  */
144   int allow_external_cache;
145
146   /* If this global option is true, the Assuan option of Pinentry
147      allow-emacs-prompt is allowed.  */
148   int allow_emacs_pinentry;
149
150   int keep_tty;      /* Don't switch the TTY (for pinentry) on request */
151   int keep_display;  /* Don't switch the DISPLAY (for pinentry) on request */
152
153   /* This global options indicates the use of an extra socket. Note
154      that we use a hack for cleanup handling in gpg-agent.c: If the
155      value is less than 2 the name has not yet been malloced. */
156   int extra_socket;
157
158   /* This global options indicates the use of an extra socket for web
159      browsers. Note that we use a hack for cleanup handling in
160      gpg-agent.c: If the value is less than 2 the name has not yet
161      been malloced. */
162   int browser_socket;
163 } opt;
164
165
166 /* Bit values for the --debug option.  */
167 #define DBG_COMMAND_VALUE 1     /* debug commands i/o */
168 #define DBG_MPI_VALUE     2     /* debug mpi details */
169 #define DBG_CRYPTO_VALUE  4     /* debug low level crypto */
170 #define DBG_MEMORY_VALUE  32    /* debug memory allocation stuff */
171 #define DBG_CACHE_VALUE   64    /* debug the caching */
172 #define DBG_MEMSTAT_VALUE 128   /* show memory statistics */
173 #define DBG_HASHING_VALUE 512   /* debug hashing operations */
174 #define DBG_IPC_VALUE     1024  /* Enable Assuan debugging.  */
175
176 /* Test macros for the debug option.  */
177 #define DBG_COMMAND (opt.debug & DBG_COMMAND_VALUE)
178 #define DBG_CRYPTO  (opt.debug & DBG_CRYPTO_VALUE)
179 #define DBG_MEMORY  (opt.debug & DBG_MEMORY_VALUE)
180 #define DBG_CACHE   (opt.debug & DBG_CACHE_VALUE)
181 #define DBG_HASHING (opt.debug & DBG_HASHING_VALUE)
182 #define DBG_IPC     (opt.debug & DBG_IPC_VALUE)
183
184 /* Forward reference for local definitions in command.c.  */
185 struct server_local_s;
186
187 /* Declaration of objects from command-ssh.c.  */
188 struct ssh_control_file_s;
189 typedef struct ssh_control_file_s *ssh_control_file_t;
190
191 /* Forward reference for local definitions in call-scd.c.  */
192 struct scd_local_s;
193
194 /* Collection of data per session (aka connection). */
195 struct server_control_s
196 {
197   /* Private data used to fire up the connection thread.  We use this
198      structure do avoid an extra allocation for only a few bytes while
199      spawning a new connection thread.  */
200   struct {
201     gnupg_fd_t fd;
202   } thread_startup;
203
204   /* Flag indicating the connection is run in restricted mode.
205      A value of 1 if used for --extra-socket,
206      a value of 2 is used for --browser-socket.  */
207   int restricted;
208
209   /* Private data of the server (command.c). */
210   struct server_local_s *server_local;
211
212   /* Private data of the SCdaemon (call-scd.c). */
213   struct scd_local_s *scd_local;
214
215   /* Environment settings for the connection.  */
216   session_env_t session_env;
217   char *lc_ctype;
218   char *lc_messages;
219
220   /* The current pinentry mode.  */
221   pinentry_mode_t pinentry_mode;
222
223   /* The TTL used for the --preset option of certain commands.  */
224   int cache_ttl_opt_preset;
225
226   /* Information on the currently used digest (for signing commands).  */
227   struct {
228     int algo;
229     unsigned char value[MAX_DIGEST_LEN];
230     int valuelen;
231     int raw_value: 1;
232   } digest;
233   unsigned char keygrip[20];
234   int have_keygrip;
235
236   /* A flag to enable a hack to send the PKAUTH command instead of the
237      PKSIGN command to the scdaemon.  */
238   int use_auth_call;
239
240   /* A flag to inhibit enforced passphrase change during an explicit
241      passwd command.  */
242   int in_passwd;
243
244   /* The current S2K which might be different from the calibrated
245      count. */
246   unsigned long s2k_count;
247 };
248
249
250 /* Information pertaining to pinentry requests.  */
251 struct pin_entry_info_s
252 {
253   int min_digits; /* min. number of digits required or 0 for freeform entry */
254   int max_digits; /* max. number of allowed digits allowed*/
255   int max_tries;  /* max. number of allowed tries.  */
256   int failed_tries; /* Number of tries so far failed.  */
257   int with_qualitybar; /* Set if the quality bar should be displayed.  */
258   int with_repeat;  /* Request repetition of the passphrase.  */
259   int repeat_okay;  /* Repetition worked. */
260   gpg_error_t (*check_cb)(struct pin_entry_info_s *); /* CB used to check
261                                                          the PIN */
262   void *check_cb_arg;  /* optional argument which might be of use in the CB */
263   const char *cb_errtext; /* used by the cb to display a specific error */
264   size_t max_length;   /* Allocated length of the buffer PIN. */
265   char pin[1];         /* The buffer to hold the PIN or passphrase.
266                           It's actual allocated length is given by
267                           MAX_LENGTH (above).  */
268 };
269
270
271 /* Types of the private keys.  */
272 enum
273   {
274     PRIVATE_KEY_UNKNOWN = 0,      /* Type of key is not known.  */
275     PRIVATE_KEY_CLEAR = 1,        /* The key is not protected.  */
276     PRIVATE_KEY_PROTECTED = 2,    /* The key is protected.  */
277     PRIVATE_KEY_SHADOWED = 3,     /* The key is a stub for a smartcard
278                                      based key.  */
279     PROTECTED_SHARED_SECRET = 4,  /* RFU.  */
280     PRIVATE_KEY_OPENPGP_NONE = 5  /* openpgp-native with protection "none". */
281   };
282
283
284 /* Values for the cache_mode arguments. */
285 typedef enum
286   {
287     CACHE_MODE_IGNORE = 0, /* Special mode to bypass the cache. */
288     CACHE_MODE_ANY,        /* Any mode except ignore matches. */
289     CACHE_MODE_NORMAL,     /* Normal cache (gpg-agent). */
290     CACHE_MODE_USER,       /* GET_PASSPHRASE related cache. */
291     CACHE_MODE_SSH,        /* SSH related cache. */
292     CACHE_MODE_NONCE       /* This is a non-predictable nonce.  */
293   }
294 cache_mode_t;
295
296 /* The TTL is seconds used for adding a new nonce mode cache item.  */
297 #define CACHE_TTL_NONCE 120
298
299 /* The TTL in seconds used by the --preset option of some commands.
300    This is the default value changeable by an OPTION command.  */
301 #define CACHE_TTL_OPT_PRESET 900
302
303
304 /* The type of a function to lookup a TTL by a keygrip.  */
305 typedef int (*lookup_ttl_t)(const char *hexgrip);
306
307
308 /* This is a special version of the usual _() gettext macro.  It
309    assumes a server connection control variable with the name "ctrl"
310    and uses that to translate a string according to the locale set for
311    the connection.  The macro LunderscoreIMPL is used by i18n to
312    actually define the inline function when needed.  */
313 #ifdef ENABLE_NLS
314 #define L_(a) agent_Lunderscore (ctrl, (a))
315 #define LunderscorePROTO                                            \
316   static inline const char *agent_Lunderscore (ctrl_t ctrl,         \
317                                                const char *string)  \
318     GNUPG_GCC_ATTR_FORMAT_ARG(2);
319 #define LunderscoreIMPL                                         \
320   static inline const char *                                    \
321   agent_Lunderscore (ctrl_t ctrl, const char *string)           \
322   {                                                             \
323     return ctrl? i18n_localegettext (ctrl->lc_messages, string) \
324       /*     */: gettext (string);                              \
325   }
326 #else
327 #define L_(a) (a)
328 #endif
329
330
331 /*-- gpg-agent.c --*/
332 void agent_exit (int rc)
333                 GPGRT_ATTR_NORETURN; /* Also implemented in other tools */
334 gpg_error_t agent_copy_startup_env (ctrl_t ctrl);
335 const char *get_agent_socket_name (void);
336 const char *get_agent_ssh_socket_name (void);
337 #ifdef HAVE_W32_SYSTEM
338 void *get_agent_scd_notify_event (void);
339 #endif
340 void agent_sighup_action (void);
341 int map_pk_openpgp_to_gcry (int openpgp_algo);
342
343 /*-- command.c --*/
344 gpg_error_t agent_inq_pinentry_launched (ctrl_t ctrl, unsigned long pid);
345 gpg_error_t agent_write_status (ctrl_t ctrl, const char *keyword, ...)
346      GPGRT_ATTR_SENTINEL(0);
347 gpg_error_t agent_print_status (ctrl_t ctrl, const char *keyword,
348                                 const char *format, ...)
349      GPGRT_ATTR_PRINTF(3,4);
350 void bump_key_eventcounter (void);
351 void bump_card_eventcounter (void);
352 void start_command_handler (ctrl_t, gnupg_fd_t, gnupg_fd_t);
353 gpg_error_t pinentry_loopback (ctrl_t, const char *keyword,
354                                unsigned char **buffer, size_t *size,
355                                size_t max_length);
356
357 #ifdef HAVE_W32_SYSTEM
358 int serve_mmapped_ssh_request (ctrl_t ctrl,
359                                unsigned char *request, size_t maxreqlen);
360 #endif /*HAVE_W32_SYSTEM*/
361
362 /*-- command-ssh.c --*/
363 ssh_control_file_t ssh_open_control_file (void);
364 void ssh_close_control_file (ssh_control_file_t cf);
365 gpg_error_t ssh_read_control_file (ssh_control_file_t cf,
366                                    char *r_hexgrip, int *r_disabled,
367                                    int *r_ttl, int *r_confirm);
368 gpg_error_t ssh_search_control_file (ssh_control_file_t cf,
369                                      const char *hexgrip,
370                                      int *r_disabled,
371                                      int *r_ttl, int *r_confirm);
372
373 void start_command_handler_ssh (ctrl_t, gnupg_fd_t);
374
375 /*-- findkey.c --*/
376 int agent_write_private_key (const unsigned char *grip,
377                              const void *buffer, size_t length, int force);
378 gpg_error_t agent_key_from_file (ctrl_t ctrl,
379                                  const char *cache_nonce,
380                                  const char *desc_text,
381                                  const unsigned char *grip,
382                                  unsigned char **shadow_info,
383                                  cache_mode_t cache_mode,
384                                  lookup_ttl_t lookup_ttl,
385                                  gcry_sexp_t *result,
386                                  char **r_passphrase);
387 gpg_error_t agent_raw_key_from_file (ctrl_t ctrl, const unsigned char *grip,
388                                      gcry_sexp_t *result);
389 gpg_error_t agent_public_key_from_file (ctrl_t ctrl,
390                                         const unsigned char *grip,
391                                         gcry_sexp_t *result);
392 int agent_is_dsa_key (gcry_sexp_t s_key);
393 int agent_is_eddsa_key (gcry_sexp_t s_key);
394 int agent_key_available (const unsigned char *grip);
395 gpg_error_t agent_key_info_from_file (ctrl_t ctrl, const unsigned char *grip,
396                                       int *r_keytype,
397                                       unsigned char **r_shadow_info);
398 gpg_error_t agent_delete_key (ctrl_t ctrl, const char *desc_text,
399                               const unsigned char *grip, int force);
400
401 /*-- call-pinentry.c --*/
402 void initialize_module_call_pinentry (void);
403 void agent_query_dump_state (void);
404 void agent_reset_query (ctrl_t ctrl);
405 int pinentry_active_p (ctrl_t ctrl, int waitseconds);
406 gpg_error_t agent_askpin (ctrl_t ctrl,
407                           const char *desc_text, const char *prompt_text,
408                           const char *inital_errtext,
409                           struct pin_entry_info_s *pininfo,
410                           const char *keyinfo, cache_mode_t cache_mode);
411 int agent_get_passphrase (ctrl_t ctrl, char **retpass,
412                           const char *desc, const char *prompt,
413                           const char *errtext, int with_qualitybar,
414                           const char *keyinfo, cache_mode_t cache_mode);
415 int agent_get_confirmation (ctrl_t ctrl, const char *desc, const char *ok,
416                             const char *notokay, int with_cancel);
417 int agent_show_message (ctrl_t ctrl, const char *desc, const char *ok_btn);
418 int agent_popup_message_start (ctrl_t ctrl,
419                                const char *desc, const char *ok_btn);
420 void agent_popup_message_stop (ctrl_t ctrl);
421 int agent_clear_passphrase (ctrl_t ctrl,
422                             const char *keyinfo, cache_mode_t cache_mode);
423
424 /*-- cache.c --*/
425 void initialize_module_cache (void);
426 void deinitialize_module_cache (void);
427 void agent_flush_cache (void);
428 int agent_put_cache (const char *key, cache_mode_t cache_mode,
429                      const char *data, int ttl);
430 char *agent_get_cache (const char *key, cache_mode_t cache_mode);
431 void agent_store_cache_hit (const char *key);
432
433
434 /*-- pksign.c --*/
435 int agent_pksign_do (ctrl_t ctrl, const char *cache_nonce,
436                      const char *desc_text,
437                      gcry_sexp_t *signature_sexp,
438                      cache_mode_t cache_mode, lookup_ttl_t lookup_ttl,
439                      const void *overridedata, size_t overridedatalen);
440 int agent_pksign (ctrl_t ctrl, const char *cache_nonce,
441                   const char *desc_text,
442                   membuf_t *outbuf, cache_mode_t cache_mode);
443
444 /*-- pkdecrypt.c --*/
445 int agent_pkdecrypt (ctrl_t ctrl, const char *desc_text,
446                      const unsigned char *ciphertext, size_t ciphertextlen,
447                      membuf_t *outbuf, int *r_padding);
448
449 /*-- genkey.c --*/
450 int check_passphrase_constraints (ctrl_t ctrl, const char *pw,
451                                   char **failed_constraint);
452 gpg_error_t agent_ask_new_passphrase (ctrl_t ctrl, const char *prompt,
453                                       char **r_passphrase);
454 int agent_genkey (ctrl_t ctrl, const char *cache_nonce,
455                   const char *keyparam, size_t keyparmlen,
456                   int no_protection, const char *override_passphrase,
457                   int preset, membuf_t *outbuf);
458 gpg_error_t agent_protect_and_store (ctrl_t ctrl, gcry_sexp_t s_skey,
459                                      char **passphrase_addr);
460
461 /*-- protect.c --*/
462 unsigned long get_standard_s2k_count (void);
463 unsigned char get_standard_s2k_count_rfc4880 (void);
464 int agent_protect (const unsigned char *plainkey, const char *passphrase,
465                    unsigned char **result, size_t *resultlen,
466                    unsigned long s2k_count);
467 int agent_unprotect (ctrl_t ctrl,
468                      const unsigned char *protectedkey, const char *passphrase,
469                      gnupg_isotime_t protected_at,
470                      unsigned char **result, size_t *resultlen);
471 int agent_private_key_type (const unsigned char *privatekey);
472 unsigned char *make_shadow_info (const char *serialno, const char *idstring);
473 int agent_shadow_key (const unsigned char *pubkey,
474                       const unsigned char *shadow_info,
475                       unsigned char **result);
476 int agent_get_shadow_info (const unsigned char *shadowkey,
477                            unsigned char const **shadow_info);
478 gpg_error_t parse_shadow_info (const unsigned char *shadow_info,
479                                char **r_hexsn, char **r_idstr, int *r_pinlen);
480 gpg_error_t s2k_hash_passphrase (const char *passphrase, int hashalgo,
481                                  int s2kmode,
482                                  const unsigned char *s2ksalt,
483                                  unsigned int s2kcount,
484                                  unsigned char *key, size_t keylen);
485
486
487 /*-- trustlist.c --*/
488 void initialize_module_trustlist (void);
489 gpg_error_t agent_istrusted (ctrl_t ctrl, const char *fpr, int *r_disabled);
490 gpg_error_t agent_listtrusted (void *assuan_context);
491 gpg_error_t agent_marktrusted (ctrl_t ctrl, const char *name,
492                                const char *fpr, int flag);
493 void agent_reload_trustlist (void);
494
495
496 /*-- divert-scd.c --*/
497 int divert_pksign (ctrl_t ctrl,
498                    const unsigned char *digest, size_t digestlen, int algo,
499                    const unsigned char *shadow_info, unsigned char **r_sig,
500                    size_t *r_siglen);
501 int divert_pkdecrypt (ctrl_t ctrl,
502                       const unsigned char *cipher,
503                       const unsigned char *shadow_info,
504                       char **r_buf, size_t *r_len, int *r_padding);
505 int divert_generic_cmd (ctrl_t ctrl,
506                         const char *cmdline, void *assuan_context);
507 int divert_writekey (ctrl_t ctrl, int force, const char *serialno,
508                      const char *id, const char *keydata, size_t keydatalen);
509
510
511 /*-- call-scd.c --*/
512 void initialize_module_call_scd (void);
513 void agent_scd_dump_state (void);
514 int agent_scd_check_running (void);
515 void agent_scd_check_aliveness (void);
516 int agent_reset_scd (ctrl_t ctrl);
517 int agent_card_learn (ctrl_t ctrl,
518                       void (*kpinfo_cb)(void*, const char *),
519                       void *kpinfo_cb_arg,
520                       void (*certinfo_cb)(void*, const char *),
521                       void *certinfo_cb_arg,
522                       void (*sinfo_cb)(void*, const char *,
523                                        size_t, const char *),
524                       void *sinfo_cb_arg);
525 int agent_card_serialno (ctrl_t ctrl, char **r_serialno);
526 int agent_card_pksign (ctrl_t ctrl,
527                        const char *keyid,
528                        int (*getpin_cb)(void *, const char *, char*, size_t),
529                        void *getpin_cb_arg,
530                        int mdalgo,
531                        const unsigned char *indata, size_t indatalen,
532                        unsigned char **r_buf, size_t *r_buflen);
533 int agent_card_pkdecrypt (ctrl_t ctrl,
534                           const char *keyid,
535                           int (*getpin_cb)(void *, const char *, char*,size_t),
536                           void *getpin_cb_arg,
537                           const unsigned char *indata, size_t indatalen,
538                           char **r_buf, size_t *r_buflen, int *r_padding);
539 int agent_card_readcert (ctrl_t ctrl,
540                          const char *id, char **r_buf, size_t *r_buflen);
541 int agent_card_readkey (ctrl_t ctrl, const char *id, unsigned char **r_buf);
542 int agent_card_writekey (ctrl_t ctrl, int force, const char *serialno,
543                          const char *id, const char *keydata,
544                          size_t keydatalen,
545                          int (*getpin_cb)(void *, const char *, char*, size_t),
546                          void *getpin_cb_arg);
547 gpg_error_t agent_card_getattr (ctrl_t ctrl, const char *name, char **result);
548 int agent_card_scd (ctrl_t ctrl, const char *cmdline,
549                     int (*getpin_cb)(void *, const char *, char*, size_t),
550                     void *getpin_cb_arg, void *assuan_context);
551
552
553 /*-- learncard.c --*/
554 int agent_handle_learn (ctrl_t ctrl, int send, void *assuan_context, int force);
555
556
557 /*-- cvt-openpgp.c --*/
558 gpg_error_t
559 extract_private_key (gcry_sexp_t s_key, int req_private_key_data,
560                      const char **r_algoname, int *r_npkey, int *r_nskey,
561                      const char **r_format,
562                      gcry_mpi_t *mpi_array, int arraysize,
563                      gcry_sexp_t *r_curve, gcry_sexp_t *r_flags);
564
565 #endif /*AGENT_H*/