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