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