gpg: Fix using --decrypt along with --use-embedded-filename.
[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 <https://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
66   /* True if we handle sigusr2.  */
67   int sigusr2_enabled;
68
69   /* Environment settings gathered at program start or changed using the
70      Assuan command UPDATESTARTUPTTY. */
71   session_env_t startup_env;
72   char *startup_lc_ctype;
73   char *startup_lc_messages;
74
75   /* Enable pinentry debugging (--debug 1024 should also be used).  */
76   int debug_pinentry;
77
78   /* Filename of the program to start as pinentry.  */
79   const char *pinentry_program;
80
81   /* Filename of the program to handle smartcard tasks.  */
82   const char *scdaemon_program;
83
84   int disable_scdaemon;         /* Never use the SCdaemon. */
85
86   int no_grab;         /* Don't let the pinentry grab the keyboard */
87
88   /* The name of the file pinentry shall touch before exiting.  If
89      this is not set the file name of the standard socket is used. */
90   const char *pinentry_touch_file;
91
92   /* A string where the first character is used by the pinentry as a
93      custom invisible character.  */
94   char *pinentry_invisible_char;
95
96   /* The timeout value for the Pinentry in seconds.  This is passed to
97      the pinentry if it is not 0.  It is up to the pinentry to act
98      upon this timeout value.  */
99   unsigned long pinentry_timeout;
100
101   /* The default and maximum TTL of cache entries. */
102   unsigned long def_cache_ttl;     /* Default. */
103   unsigned long def_cache_ttl_ssh; /* for SSH. */
104   unsigned long max_cache_ttl;     /* Default. */
105   unsigned long max_cache_ttl_ssh; /* for SSH. */
106
107   /* Flag disallowing bypassing of the warning.  */
108   int enforce_passphrase_constraints;
109
110   /* The require minmum length of a passphrase. */
111   unsigned int min_passphrase_len;
112
113   /* The minimum number of non-alpha characters in a passphrase.  */
114   unsigned int min_passphrase_nonalpha;
115
116   /* File name with a patternfile or NULL if not enabled.  */
117   const char *check_passphrase_pattern;
118
119   /* If not 0 the user is asked to change his passphrase after these
120      number of days.  */
121   unsigned int max_passphrase_days;
122
123   /* If set, a passphrase history will be written and checked at each
124      passphrase change.  */
125   int enable_passphrase_history;
126
127   /* If set the extended key format is used for new keys.  Note that
128    * this may vave the value 2 in which case
129    * --disable-extended-key-format won't have any effect and thus
130    * effectivley locking it.  This is required to support existing
131    * profiles which lock the use of --enable-extended-key-format. */
132   int enable_extended_key_format;
133
134   int running_detached; /* We are running detached from the tty. */
135
136   /* If this global option is true, the passphrase cache is ignored
137      for signing operations.  */
138   int ignore_cache_for_signing;
139
140   /* If this global option is true, the user is allowed to
141      interactively mark certificate in trustlist.txt as trusted. */
142   int allow_mark_trusted;
143
144   /* If this global option is true, the Assuan command
145      PRESET_PASSPHRASE is allowed.  */
146   int allow_preset_passphrase;
147
148   /* If this global option is true, the Assuan option
149      pinentry-mode=loopback is allowed.  */
150   int allow_loopback_pinentry;
151
152   /* Allow the use of an external password cache.  If this option is
153      enabled (which is the default) we send an option to Pinentry
154      to allow it to enable such a cache.  */
155   int allow_external_cache;
156
157   /* If this global option is true, the Assuan option of Pinentry
158      allow-emacs-prompt is allowed.  */
159   int allow_emacs_pinentry;
160
161   int keep_tty;      /* Don't switch the TTY (for pinentry) on request */
162   int keep_display;  /* Don't switch the DISPLAY (for pinentry) on request */
163
164   /* This global option indicates the use of an extra socket. Note
165      that we use a hack for cleanup handling in gpg-agent.c: If the
166      value is less than 2 the name has not yet been malloced. */
167   int extra_socket;
168
169   /* This global option indicates the use of an extra socket for web
170      browsers. Note that we use a hack for cleanup handling in
171      gpg-agent.c: If the value is less than 2 the name has not yet
172      been malloced. */
173   int browser_socket;
174
175   /* The digest algorithm to use for ssh fingerprints when
176    * communicating with the user.  */
177   int ssh_fingerprint_digest;
178
179   /* The value of the option --s2k-count.  If this option is not given
180    * or 0 an auto-calibrated value is used.  */
181   unsigned long s2k_count;
182 } opt;
183
184
185 /* Bit values for the --debug option.  */
186 #define DBG_MPI_VALUE     2     /* debug mpi details */
187 #define DBG_CRYPTO_VALUE  4     /* debug low level crypto */
188 #define DBG_MEMORY_VALUE  32    /* debug memory allocation stuff */
189 #define DBG_CACHE_VALUE   64    /* debug the caching */
190 #define DBG_MEMSTAT_VALUE 128   /* show memory statistics */
191 #define DBG_HASHING_VALUE 512   /* debug hashing operations */
192 #define DBG_IPC_VALUE     1024  /* Enable Assuan debugging.  */
193
194 /* Test macros for the debug option.  */
195 #define DBG_CRYPTO  (opt.debug & DBG_CRYPTO_VALUE)
196 #define DBG_MEMORY  (opt.debug & DBG_MEMORY_VALUE)
197 #define DBG_CACHE   (opt.debug & DBG_CACHE_VALUE)
198 #define DBG_HASHING (opt.debug & DBG_HASHING_VALUE)
199 #define DBG_IPC     (opt.debug & DBG_IPC_VALUE)
200
201 /* Forward reference for local definitions in command.c.  */
202 struct server_local_s;
203
204 /* Declaration of objects from command-ssh.c.  */
205 struct ssh_control_file_s;
206 typedef struct ssh_control_file_s *ssh_control_file_t;
207
208 /* Forward reference for local definitions in call-scd.c.  */
209 struct scd_local_s;
210
211 /* Collection of data per session (aka connection). */
212 struct server_control_s
213 {
214   /* Private data used to fire up the connection thread.  We use this
215      structure do avoid an extra allocation for only a few bytes while
216      spawning a new connection thread.  */
217   struct {
218     gnupg_fd_t fd;
219   } thread_startup;
220
221   /* Flag indicating the connection is run in restricted mode.
222      A value of 1 if used for --extra-socket,
223      a value of 2 is used for --browser-socket.  */
224   int restricted;
225
226   /* Private data of the server (command.c). */
227   struct server_local_s *server_local;
228
229   /* Private data of the SCdaemon (call-scd.c). */
230   struct scd_local_s *scd_local;
231
232   /* Environment settings for the connection.  */
233   session_env_t session_env;
234   char *lc_ctype;
235   char *lc_messages;
236   unsigned long client_pid;
237   int client_uid;
238
239   /* The current pinentry mode.  */
240   pinentry_mode_t pinentry_mode;
241
242   /* The TTL used for the --preset option of certain commands.  */
243   int cache_ttl_opt_preset;
244
245   /* Information on the currently used digest (for signing commands).  */
246   struct {
247     int algo;
248     unsigned char value[MAX_DIGEST_LEN];
249     int valuelen;
250     int raw_value: 1;
251   } digest;
252   unsigned char keygrip[20];
253   int have_keygrip;
254
255   /* A flag to enable a hack to send the PKAUTH command instead of the
256      PKSIGN command to the scdaemon.  */
257   int use_auth_call;
258
259   /* A flag to inhibit enforced passphrase change during an explicit
260      passwd command.  */
261   int in_passwd;
262
263   /* The current S2K which might be different from the calibrated
264      count. */
265   unsigned long s2k_count;
266
267   /* If pinentry is active for this thread.  It can be more than 1,
268      when pinentry is called recursively.  */
269   int pinentry_active;
270 };
271
272
273 /* Status of pinentry.  */
274 enum
275   {
276     PINENTRY_STATUS_CLOSE_BUTTON = 1 << 0,
277     PINENTRY_STATUS_PIN_REPEATED = 1 << 8,
278     PINENTRY_STATUS_PASSWORD_FROM_CACHE = 1 << 9
279   };
280
281 /* Information pertaining to pinentry requests.  */
282 struct pin_entry_info_s
283 {
284   int min_digits; /* min. number of digits required or 0 for freeform entry */
285   int max_digits; /* max. number of allowed digits allowed*/
286   int max_tries;  /* max. number of allowed tries.  */
287   int failed_tries; /* Number of tries so far failed.  */
288   int with_qualitybar; /* Set if the quality bar should be displayed.  */
289   int with_repeat;  /* Request repetition of the passphrase.  */
290   int repeat_okay;  /* Repetition worked.  */
291   unsigned int status; /* Status.  */
292   gpg_error_t (*check_cb)(struct pin_entry_info_s *); /* CB used to check
293                                                          the PIN */
294   void *check_cb_arg;  /* optional argument which might be of use in the CB */
295   const char *cb_errtext; /* used by the cb to display a specific error */
296   size_t max_length;   /* Allocated length of the buffer PIN. */
297   char pin[1];         /* The buffer to hold the PIN or passphrase.
298                           It's actual allocated length is given by
299                           MAX_LENGTH (above).  */
300 };
301
302
303 /* Types of the private keys.  */
304 enum
305   {
306     PRIVATE_KEY_UNKNOWN = 0,      /* Type of key is not known.  */
307     PRIVATE_KEY_CLEAR = 1,        /* The key is not protected.  */
308     PRIVATE_KEY_PROTECTED = 2,    /* The key is protected.  */
309     PRIVATE_KEY_SHADOWED = 3,     /* The key is a stub for a smartcard
310                                      based key.  */
311     PROTECTED_SHARED_SECRET = 4,  /* RFU.  */
312     PRIVATE_KEY_OPENPGP_NONE = 5  /* openpgp-native with protection "none". */
313   };
314
315
316 /* Values for the cache_mode arguments. */
317 typedef enum
318   {
319     CACHE_MODE_IGNORE = 0, /* Special mode to bypass the cache. */
320     CACHE_MODE_ANY,        /* Any mode except ignore and data matches. */
321     CACHE_MODE_NORMAL,     /* Normal cache (gpg-agent). */
322     CACHE_MODE_USER,       /* GET_PASSPHRASE related cache. */
323     CACHE_MODE_SSH,        /* SSH related cache. */
324     CACHE_MODE_NONCE,      /* This is a non-predictable nonce.  */
325     CACHE_MODE_DATA        /* Arbitrary data.  */
326   }
327 cache_mode_t;
328
329 /* The TTL is seconds used for adding a new nonce mode cache item.  */
330 #define CACHE_TTL_NONCE 120
331
332 /* The TTL in seconds used by the --preset option of some commands.
333    This is the default value changeable by an OPTION command.  */
334 #define CACHE_TTL_OPT_PRESET 900
335
336
337 /* The type of a function to lookup a TTL by a keygrip.  */
338 typedef int (*lookup_ttl_t)(const char *hexgrip);
339
340
341 /* This is a special version of the usual _() gettext macro.  It
342    assumes a server connection control variable with the name "ctrl"
343    and uses that to translate a string according to the locale set for
344    the connection.  The macro LunderscoreIMPL is used by i18n to
345    actually define the inline function when needed.  */
346 #if defined (ENABLE_NLS) || defined (USE_SIMPLE_GETTEXT)
347 #define L_(a) agent_Lunderscore (ctrl, (a))
348 #define LunderscorePROTO                                            \
349   static inline const char *agent_Lunderscore (ctrl_t ctrl,         \
350                                                const char *string)  \
351     GNUPG_GCC_ATTR_FORMAT_ARG(2);
352 #define LunderscoreIMPL                                         \
353   static inline const char *                                    \
354   agent_Lunderscore (ctrl_t ctrl, const char *string)           \
355   {                                                             \
356     return ctrl? i18n_localegettext (ctrl->lc_messages, string) \
357       /*     */: gettext (string);                              \
358   }
359 #else
360 #define L_(a) (a)
361 #endif
362
363
364 /* Information from scdaemon for card keys.  */
365 struct card_key_info_s
366 {
367   struct card_key_info_s *next;
368   char keygrip[40];
369   char *serialno;
370   char *idstr;
371 };
372
373 /*-- gpg-agent.c --*/
374 void agent_exit (int rc)
375                 GPGRT_ATTR_NORETURN; /* Also implemented in other tools */
376 void agent_set_progress_cb (void (*cb)(ctrl_t ctrl, const char *what,
377                                        int printchar, int current, int total),
378                             ctrl_t ctrl);
379 gpg_error_t agent_copy_startup_env (ctrl_t ctrl);
380 const char *get_agent_socket_name (void);
381 const char *get_agent_ssh_socket_name (void);
382 int get_agent_active_connection_count (void);
383 #ifdef HAVE_W32_SYSTEM
384 void *get_agent_scd_notify_event (void);
385 #endif
386 void agent_sighup_action (void);
387 int map_pk_openpgp_to_gcry (int openpgp_algo);
388
389 /*-- command.c --*/
390 gpg_error_t agent_inq_pinentry_launched (ctrl_t ctrl, unsigned long pid,
391                                          const char *extra);
392 gpg_error_t agent_write_status (ctrl_t ctrl, const char *keyword, ...)
393      GPGRT_ATTR_SENTINEL(0);
394 gpg_error_t agent_print_status (ctrl_t ctrl, const char *keyword,
395                                 const char *format, ...)
396      GPGRT_ATTR_PRINTF(3,4);
397 void bump_key_eventcounter (void);
398 void bump_card_eventcounter (void);
399 void start_command_handler (ctrl_t, gnupg_fd_t, gnupg_fd_t);
400 gpg_error_t pinentry_loopback (ctrl_t, const char *keyword,
401                                unsigned char **buffer, size_t *size,
402                                size_t max_length);
403
404 #ifdef HAVE_W32_SYSTEM
405 int serve_mmapped_ssh_request (ctrl_t ctrl,
406                                unsigned char *request, size_t maxreqlen);
407 #endif /*HAVE_W32_SYSTEM*/
408
409 /*-- command-ssh.c --*/
410 ssh_control_file_t ssh_open_control_file (void);
411 void ssh_close_control_file (ssh_control_file_t cf);
412 gpg_error_t ssh_read_control_file (ssh_control_file_t cf,
413                                    char *r_hexgrip, int *r_disabled,
414                                    int *r_ttl, int *r_confirm);
415 gpg_error_t ssh_search_control_file (ssh_control_file_t cf,
416                                      const char *hexgrip,
417                                      int *r_disabled,
418                                      int *r_ttl, int *r_confirm);
419
420 void start_command_handler_ssh (ctrl_t, gnupg_fd_t);
421
422 /*-- findkey.c --*/
423 gpg_error_t agent_modify_description (const char *in, const char *comment,
424                                       const gcry_sexp_t key, char **result);
425 int agent_write_private_key (const unsigned char *grip,
426                              const void *buffer, size_t length, int force,
427                              const char *serialno, const char *keyref);
428 gpg_error_t agent_key_from_file (ctrl_t ctrl,
429                                  const char *cache_nonce,
430                                  const char *desc_text,
431                                  const unsigned char *grip,
432                                  unsigned char **shadow_info,
433                                  cache_mode_t cache_mode,
434                                  lookup_ttl_t lookup_ttl,
435                                  gcry_sexp_t *result,
436                                  char **r_passphrase);
437 gpg_error_t agent_raw_key_from_file (ctrl_t ctrl, const unsigned char *grip,
438                                      gcry_sexp_t *result);
439 gpg_error_t agent_public_key_from_file (ctrl_t ctrl,
440                                         const unsigned char *grip,
441                                         gcry_sexp_t *result);
442 int agent_is_dsa_key (gcry_sexp_t s_key);
443 int agent_is_eddsa_key (gcry_sexp_t s_key);
444 int agent_key_available (const unsigned char *grip);
445 gpg_error_t agent_key_info_from_file (ctrl_t ctrl, const unsigned char *grip,
446                                       int *r_keytype,
447                                       unsigned char **r_shadow_info);
448 gpg_error_t agent_delete_key (ctrl_t ctrl, const char *desc_text,
449                               const unsigned char *grip,
450                               int force, int only_stubs);
451
452 /*-- call-pinentry.c --*/
453 void initialize_module_call_pinentry (void);
454 void agent_query_dump_state (void);
455 void agent_reset_query (ctrl_t ctrl);
456 int pinentry_active_p (ctrl_t ctrl, int waitseconds);
457 gpg_error_t agent_askpin (ctrl_t ctrl,
458                           const char *desc_text, const char *prompt_text,
459                           const char *inital_errtext,
460                           struct pin_entry_info_s *pininfo,
461                           const char *keyinfo, cache_mode_t cache_mode);
462 int agent_get_passphrase (ctrl_t ctrl, char **retpass,
463                           const char *desc, const char *prompt,
464                           const char *errtext, int with_qualitybar,
465                           const char *keyinfo, cache_mode_t cache_mode);
466 int agent_get_confirmation (ctrl_t ctrl, const char *desc, const char *ok,
467                             const char *notokay, int with_cancel);
468 int agent_show_message (ctrl_t ctrl, const char *desc, const char *ok_btn);
469 int agent_popup_message_start (ctrl_t ctrl,
470                                const char *desc, const char *ok_btn);
471 void agent_popup_message_stop (ctrl_t ctrl);
472 int agent_clear_passphrase (ctrl_t ctrl,
473                             const char *keyinfo, cache_mode_t cache_mode);
474
475 /*-- cache.c --*/
476 void initialize_module_cache (void);
477 void deinitialize_module_cache (void);
478 void agent_cache_housekeeping (void);
479 void agent_flush_cache (void);
480 int agent_put_cache (ctrl_t ctrl, const char *key, cache_mode_t cache_mode,
481                      const char *data, int ttl);
482 char *agent_get_cache (ctrl_t ctrl, const char *key, cache_mode_t cache_mode);
483 void agent_store_cache_hit (const char *key);
484
485
486 /*-- pksign.c --*/
487 gpg_error_t agent_pksign_do (ctrl_t ctrl, const char *cache_nonce,
488                              const char *desc_text,
489                              gcry_sexp_t *signature_sexp,
490                              cache_mode_t cache_mode, lookup_ttl_t lookup_ttl,
491                              const void *overridedata, size_t overridedatalen);
492 gpg_error_t agent_pksign (ctrl_t ctrl, const char *cache_nonce,
493                           const char *desc_text,
494                           membuf_t *outbuf, cache_mode_t cache_mode);
495
496 /*-- pkdecrypt.c --*/
497 int agent_pkdecrypt (ctrl_t ctrl, const char *desc_text,
498                      const unsigned char *ciphertext, size_t ciphertextlen,
499                      membuf_t *outbuf, int *r_padding);
500
501 /*-- genkey.c --*/
502 int check_passphrase_constraints (ctrl_t ctrl, const char *pw,
503                                   char **failed_constraint);
504 gpg_error_t agent_ask_new_passphrase (ctrl_t ctrl, const char *prompt,
505                                       char **r_passphrase);
506 int agent_genkey (ctrl_t ctrl, const char *cache_nonce,
507                   const char *keyparam, size_t keyparmlen,
508                   int no_protection, const char *override_passphrase,
509                   int preset, membuf_t *outbuf);
510 gpg_error_t agent_protect_and_store (ctrl_t ctrl, gcry_sexp_t s_skey,
511                                      char **passphrase_addr);
512
513 /*-- protect.c --*/
514 void set_s2k_calibration_time (unsigned int milliseconds);
515 unsigned long get_calibrated_s2k_count (void);
516 unsigned long get_standard_s2k_count (void);
517 unsigned char get_standard_s2k_count_rfc4880 (void);
518 unsigned long get_standard_s2k_time (void);
519 int agent_protect (const unsigned char *plainkey, const char *passphrase,
520                    unsigned char **result, size_t *resultlen,
521                    unsigned long s2k_count, int use_ocb);
522 gpg_error_t agent_unprotect (ctrl_t ctrl,
523                      const unsigned char *protectedkey, const char *passphrase,
524                      gnupg_isotime_t protected_at,
525                      unsigned char **result, size_t *resultlen);
526 int agent_private_key_type (const unsigned char *privatekey);
527 unsigned char *make_shadow_info (const char *serialno, const char *idstring);
528 int agent_shadow_key (const unsigned char *pubkey,
529                       const unsigned char *shadow_info,
530                       unsigned char **result);
531 gpg_error_t agent_get_shadow_info (const unsigned char *shadowkey,
532                                    unsigned char const **shadow_info);
533 gpg_error_t parse_shadow_info (const unsigned char *shadow_info,
534                                char **r_hexsn, char **r_idstr, int *r_pinlen);
535 gpg_error_t s2k_hash_passphrase (const char *passphrase, int hashalgo,
536                                  int s2kmode,
537                                  const unsigned char *s2ksalt,
538                                  unsigned int s2kcount,
539                                  unsigned char *key, size_t keylen);
540 gpg_error_t agent_write_shadow_key (const unsigned char *grip,
541                                     const char *serialno, const char *keyid,
542                                     const unsigned char *pkbuf, int force);
543
544
545 /*-- trustlist.c --*/
546 void initialize_module_trustlist (void);
547 gpg_error_t agent_istrusted (ctrl_t ctrl, const char *fpr, int *r_disabled);
548 gpg_error_t agent_listtrusted (void *assuan_context);
549 gpg_error_t agent_marktrusted (ctrl_t ctrl, const char *name,
550                                const char *fpr, int flag);
551 void agent_reload_trustlist (void);
552
553
554 /*-- divert-scd.c --*/
555 int divert_pksign (ctrl_t ctrl, const char *desc_text,
556                    const unsigned char *grip,
557                    const unsigned char *digest, size_t digestlen, int algo,
558                    const unsigned char *shadow_info, unsigned char **r_sig,
559                    size_t *r_siglen);
560 int divert_pkdecrypt (ctrl_t ctrl, const char *desc_text,
561                       const unsigned char *grip,
562                       const unsigned char *cipher,
563                       const unsigned char *shadow_info,
564                       char **r_buf, size_t *r_len, int *r_padding);
565 int divert_generic_cmd (ctrl_t ctrl,
566                         const char *cmdline, void *assuan_context);
567 gpg_error_t divert_writekey (ctrl_t ctrl, int force, const char *serialno,
568                              const char *keyref,
569                              const char *keydata, size_t keydatalen);
570
571
572 /*-- call-scd.c --*/
573 void initialize_module_call_scd (void);
574 void agent_scd_dump_state (void);
575 int agent_scd_check_running (void);
576 int agent_reset_scd (ctrl_t ctrl);
577 int agent_card_learn (ctrl_t ctrl,
578                       void (*kpinfo_cb)(void*, const char *),
579                       void *kpinfo_cb_arg,
580                       void (*certinfo_cb)(void*, const char *),
581                       void *certinfo_cb_arg,
582                       void (*sinfo_cb)(void*, const char *,
583                                        size_t, const char *),
584                       void *sinfo_cb_arg);
585 int agent_card_serialno (ctrl_t ctrl, char **r_serialno, const char *demand);
586 int agent_card_pksign (ctrl_t ctrl,
587                        const char *keyid,
588                        int (*getpin_cb)(void *, const char *,
589                                         const char *, char*, size_t),
590                        void *getpin_cb_arg,
591                        const char *desc_text,
592                        int mdalgo,
593                        const unsigned char *indata, size_t indatalen,
594                        unsigned char **r_buf, size_t *r_buflen);
595 int agent_card_pkdecrypt (ctrl_t ctrl,
596                           const char *keyid,
597                           int (*getpin_cb)(void *, const char *,
598                                            const char *, char*,size_t),
599                           void *getpin_cb_arg,
600                           const char *desc_text,
601                           const unsigned char *indata, size_t indatalen,
602                           char **r_buf, size_t *r_buflen, int *r_padding);
603 int agent_card_readcert (ctrl_t ctrl,
604                          const char *id, char **r_buf, size_t *r_buflen);
605 int agent_card_readkey (ctrl_t ctrl, const char *id, unsigned char **r_buf);
606 gpg_error_t agent_card_writekey (ctrl_t ctrl, int force, const char *serialno,
607                                  const char *keyref,
608                                  const char *keydata, size_t keydatalen,
609                                  int (*getpin_cb)(void *, const char *,
610                                                   const char *, char*, size_t),
611                                  void *getpin_cb_arg);
612 gpg_error_t agent_card_getattr (ctrl_t ctrl, const char *name, char **result);
613 gpg_error_t agent_card_cardlist (ctrl_t ctrl, strlist_t *result);
614 int agent_card_scd (ctrl_t ctrl, const char *cmdline,
615                     int (*getpin_cb)(void *, const char *,
616                                      const char *, char*, size_t),
617                     void *getpin_cb_arg, void *assuan_context);
618 void agent_card_free_keyinfo (struct card_key_info_s *l);
619 gpg_error_t agent_card_keyinfo (ctrl_t ctrl, const char *keygrip,
620                                 struct card_key_info_s **result);
621
622
623 /*-- learncard.c --*/
624 int agent_handle_learn (ctrl_t ctrl, int send, void *assuan_context, int force);
625
626
627 /*-- cvt-openpgp.c --*/
628 gpg_error_t
629 extract_private_key (gcry_sexp_t s_key, int req_private_key_data,
630                      const char **r_algoname, int *r_npkey, int *r_nskey,
631                      const char **r_format,
632                      gcry_mpi_t *mpi_array, int arraysize,
633                      gcry_sexp_t *r_curve, gcry_sexp_t *r_flags);
634
635 #endif /*AGENT_H*/