826963e4000f4191b396663b4f3b81e1915706b6
[gnupg.git] / g10 / packet.h
1 /* packet.h - OpenPGP packet definitions
2  * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
3  *               2007 Free Software Foundation, Inc.
4  * Copyright (C) 2015 g10 Code GmbH
5  *
6  * This file is part of GnuPG.
7  *
8  * GnuPG is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 3 of the License, or
11  * (at your option) any later version.
12  *
13  * GnuPG is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, see <http://www.gnu.org/licenses/>.
20  */
21
22 #ifndef G10_PACKET_H
23 #define G10_PACKET_H
24
25 #include "types.h"
26 #include "../common/iobuf.h"
27 #include "../common/strlist.h"
28 #include "dek.h"
29 #include "filter.h"
30 #include "../common/openpgpdefs.h"
31 #include "../common/userids.h"
32
33 #define DEBUG_PARSE_PACKET 1
34
35
36 /* Constants to allocate static MPI arrays. */
37 #define PUBKEY_MAX_NPKEY  5
38 #define PUBKEY_MAX_NSKEY  7
39 #define PUBKEY_MAX_NSIG   2
40 #define PUBKEY_MAX_NENC   2
41
42 /* Usage flags */
43 #define PUBKEY_USAGE_SIG     GCRY_PK_USAGE_SIGN  /* Good for signatures. */
44 #define PUBKEY_USAGE_ENC     GCRY_PK_USAGE_ENCR  /* Good for encryption. */
45 #define PUBKEY_USAGE_CERT    GCRY_PK_USAGE_CERT  /* Also good to certify keys.*/
46 #define PUBKEY_USAGE_AUTH    GCRY_PK_USAGE_AUTH  /* Good for authentication. */
47 #define PUBKEY_USAGE_UNKNOWN GCRY_PK_USAGE_UNKN  /* Unknown usage flag. */
48 #define PUBKEY_USAGE_NONE    256                 /* No usage given. */
49 #if  (GCRY_PK_USAGE_SIGN | GCRY_PK_USAGE_ENCR | GCRY_PK_USAGE_CERT \
50       | GCRY_PK_USAGE_AUTH | GCRY_PK_USAGE_UNKN) >= 256
51 # error Please choose another value for PUBKEY_USAGE_NONE
52 #endif
53
54 /* Helper macros.  */
55 #define is_RSA(a)     ((a)==PUBKEY_ALGO_RSA || (a)==PUBKEY_ALGO_RSA_E \
56                        || (a)==PUBKEY_ALGO_RSA_S )
57 #define is_ELGAMAL(a) ((a)==PUBKEY_ALGO_ELGAMAL_E)
58 #define is_DSA(a)     ((a)==PUBKEY_ALGO_DSA)
59
60 /* A pointer to the packet object.  */
61 typedef struct packet_struct PACKET;
62
63 /* PKT_GPG_CONTROL types */
64 typedef enum {
65     CTRLPKT_CLEARSIGN_START = 1,
66     CTRLPKT_PIPEMODE = 2,
67     CTRLPKT_PLAINTEXT_MARK =3
68 } ctrlpkttype_t;
69
70 typedef enum {
71     PREFTYPE_NONE = 0,
72     PREFTYPE_SYM = 1,
73     PREFTYPE_HASH = 2,
74     PREFTYPE_ZIP = 3
75 } preftype_t;
76
77 typedef struct {
78     byte type;
79     byte value;
80 } prefitem_t;
81
82 typedef struct
83 {
84   int  mode;      /* Must be an integer due to the GNU modes 1001 et al.  */
85   byte hash_algo;
86   byte salt[8];
87   u32  count;
88 } STRING2KEY;
89
90 typedef struct {
91     byte version;
92     byte cipher_algo;    /* cipher algorithm used */
93     STRING2KEY s2k;
94     byte seskeylen;   /* keylength in byte or 0 for no seskey */
95     byte seskey[1];
96 } PKT_symkey_enc;
97
98 typedef struct {
99     u32     keyid[2];       /* 64 bit keyid */
100     byte    version;
101     byte    pubkey_algo;    /* algorithm used for public key scheme */
102     byte    throw_keyid;
103     gcry_mpi_t     data[PUBKEY_MAX_NENC];
104 } PKT_pubkey_enc;
105
106
107 typedef struct {
108     u32     keyid[2];       /* 64 bit keyid */
109     byte    sig_class;      /* sig classification */
110     byte    digest_algo;    /* algorithm used for digest */
111     byte    pubkey_algo;    /* algorithm used for public key scheme */
112     byte    last;           /* a stupid flag */
113 } PKT_onepass_sig;
114
115
116 typedef struct {
117     size_t size;  /* allocated */
118     size_t len;   /* used */
119     byte data[1];
120 } subpktarea_t;
121
122 struct revocation_key {
123   byte class;
124   byte algid;
125   byte fpr[MAX_FINGERPRINT_LEN];
126 };
127
128
129 /* Object to keep information about a PKA DNS record. */
130 typedef struct
131 {
132   int valid;    /* An actual PKA record exists for EMAIL. */
133   int checked;  /* Set to true if the FPR has been checked against the
134                    actual key. */
135   char *uri;    /* Malloced string with the URI. NULL if the URI is
136                    not available.*/
137   unsigned char fpr[20]; /* The fingerprint as stored in the PKA RR. */
138   char email[1];/* The email address from the notation data. */
139 } pka_info_t;
140
141
142 /* Object to keep information pertaining to a signature. */
143 typedef struct
144 {
145   struct
146   {
147     unsigned checked:1;         /* Signature has been checked. */
148     unsigned valid:1;           /* Signature is good (if checked is set). */
149     unsigned chosen_selfsig:1;  /* A selfsig that is the chosen one. */
150     unsigned unknown_critical:1;
151     unsigned exportable:1;
152     unsigned revocable:1;
153     unsigned policy_url:1;  /* At least one policy URL is present */
154     unsigned notation:1;    /* At least one notation is present */
155     unsigned pref_ks:1;     /* At least one preferred keyserver is present */
156     unsigned expired:1;
157     unsigned pka_tried:1;   /* Set if we tried to retrieve the PKA record. */
158   } flags;
159   u32     keyid[2];       /* 64 bit keyid */
160   u32     timestamp;      /* Signature made (seconds since Epoch). */
161   u32     expiredate;     /* Expires at this date or 0 if not at all. */
162   byte    version;
163   byte    sig_class;      /* Sig classification, append for MD calculation. */
164   byte    pubkey_algo;    /* Algorithm used for public key scheme */
165                           /* (PUBKEY_ALGO_xxx) */
166   byte    digest_algo;    /* Algorithm used for digest (DIGEST_ALGO_xxxx). */
167   byte    trust_depth;
168   byte    trust_value;
169   const byte *trust_regexp;
170   struct revocation_key *revkey;
171   int numrevkeys;
172   pka_info_t *pka_info;      /* Malloced PKA data or NULL if not
173                                 available.  See also flags.pka_tried. */
174   subpktarea_t *hashed;      /* All subpackets with hashed data (v4 only). */
175   subpktarea_t *unhashed;    /* Ditto for unhashed data. */
176   byte digest_start[2];      /* First 2 bytes of the digest. */
177   gcry_mpi_t  data[PUBKEY_MAX_NSIG];
178 } PKT_signature;
179
180 #define ATTRIB_IMAGE 1
181
182 /* This is the cooked form of attributes.  */
183 struct user_attribute {
184   byte type;
185   const byte *data;
186   u32 len;
187 };
188
189
190 /* (See also keybox-search-desc.h) */
191 struct gpg_pkt_user_id_s
192 {
193   int ref;              /* reference counter */
194   int len;              /* length of the name */
195   struct user_attribute *attribs;
196   int numattribs;
197   byte *attrib_data;    /* if this is not NULL, the packet is an attribute */
198   unsigned long attrib_len;
199   byte *namehash;
200   int help_key_usage;
201   u32 help_key_expire;
202   int help_full_count;
203   int help_marginal_count;
204   int is_primary;       /* 2 if set via the primary flag, 1 if calculated */
205   int is_revoked;
206   int is_expired;
207   u32 expiredate;       /* expires at this date or 0 if not at all */
208   prefitem_t *prefs;    /* list of preferences (may be NULL)*/
209   u32 created;          /* according to the self-signature */
210   byte selfsigversion;
211   struct
212   {
213     /* TODO: Move more flags here */
214     unsigned int mdc:1;
215     unsigned int ks_modify:1;
216     unsigned int compacted:1;
217   } flags;
218   char name[1];
219 };
220 typedef struct gpg_pkt_user_id_s PKT_user_id;
221
222
223
224 struct revoke_info
225 {
226   /* revoked at this date */
227   u32 date;
228   /* the keyid of the revoking key (selfsig or designated revoker) */
229   u32 keyid[2];
230   /* the algo of the revoking key */
231   byte algo;
232 };
233
234
235 /* Information pertaining to secret keys. */
236 struct seckey_info
237 {
238   int is_protected:1;   /* The secret info is protected and must */
239                         /* be decrypted before use, the protected */
240                         /* MPIs are simply (void*) pointers to memory */
241                         /* and should never be passed to a mpi_xxx() */
242   int sha1chk:1;        /* SHA1 is used instead of a 16 bit checksum */
243   u16 csum;             /* Checksum for old protection modes.  */
244   byte algo;            /* Cipher used to protect the secret information. */
245   STRING2KEY s2k;       /* S2K parameter.  */
246   byte ivlen;           /* Used length of the IV.  */
247   byte iv[16];          /* Initialization vector for CFB mode.  */
248 };
249
250
251 /****************
252  * We assume that secret keys have the same number of parameters as
253  * the public key and that the public parameters are the first items
254  * in the PKEY array.  Thus NPKEY is always less than NSKEY and it is
255  * possible to compare the secret and public keys by comparing the
256  * first NPKEY elements of the PKEY array.  Note that since GnuPG 2.1
257  * we don't use secret keys anymore directly because they are managed
258  * by gpg-agent.  However for parsing OpenPGP key files we need a way
259  * to temporary store those secret keys.  We do this by putting them
260  * into the public key structure and extending the PKEY field to NSKEY
261  * elements; the extra secret key information are stored in the
262  * SECKEY_INFO field.
263  */
264 typedef struct
265 {
266   u32     timestamp;        /* key made */
267   u32     expiredate;     /* expires at this date or 0 if not at all */
268   u32     max_expiredate; /* must not expire past this date */
269   struct revoke_info revoked;
270   byte    hdrbytes;         /* number of header bytes */
271   byte    version;
272   byte    selfsigversion; /* highest version of all of the self-sigs */
273   byte    pubkey_algo;    /* algorithm used for public key scheme */
274   byte    pubkey_usage;   /* for now only used to pass it to getkey() */
275   byte    req_usage;      /* hack to pass a request to getkey() */
276   byte    req_algo;       /* Ditto */
277   u32     has_expired;    /* set to the expiration date if expired */
278   u32     main_keyid[2];  /* keyid of the primary key */
279   u32     keyid[2];         /* calculated by keyid_from_pk() */
280   prefitem_t *prefs;      /* list of preferences (may be NULL) */
281   struct
282   {
283     unsigned int mdc:1;           /* MDC feature set.  */
284     unsigned int disabled_valid:1;/* The next flag is valid.  */
285     unsigned int disabled:1;      /* The key has been disabled.  */
286     unsigned int primary:1;       /* This is a primary key.  */
287     unsigned int revoked:2;       /* Key has been revoked.
288                                      1 = revoked by the owner
289                                      2 = revoked by designated revoker.  */
290     unsigned int maybe_revoked:1; /* A designated revocation is
291                                      present, but without the key to
292                                      check it.  */
293     unsigned int valid:1;         /* Key (especially subkey) is valid.  */
294     unsigned int dont_cache:1;    /* Do not cache this key.  */
295     unsigned int backsig:2;       /* 0=none, 1=bad, 2=good.  */
296     unsigned int serialno_valid:1;/* SERIALNO below is valid.  */
297   } flags;
298   PKT_user_id *user_id;   /* If != NULL: found by that uid. */
299   struct revocation_key *revkey;
300   int     numrevkeys;
301   u32     trust_timestamp;
302   byte    trust_depth;
303   byte    trust_value;
304   const byte *trust_regexp;
305   char    *serialno;      /* Malloced hex string or NULL if it is
306                              likely not on a card.  See also
307                              flags.serialno_valid.  */
308   struct seckey_info *seckey_info;  /* If not NULL this malloced
309                                        structure describes a secret
310                                        key.  */
311   gcry_mpi_t  pkey[PUBKEY_MAX_NSKEY]; /* Right, NSKEY elements.  */
312 } PKT_public_key;
313
314 /* Evaluates as true if the pk is disabled, and false if it isn't.  If
315    there is no disable value cached, fill one in. */
316 #define pk_is_disabled(a)                                       \
317   (((a)->flags.disabled_valid)?                                 \
318    ((a)->flags.disabled):(cache_disabled_value((a))))
319
320
321 typedef struct {
322     int  len;             /* length of data */
323     char data[1];
324 } PKT_comment;
325
326 typedef struct {
327     u32  len;             /* reserved */
328     byte  new_ctb;
329     byte  algorithm;
330     iobuf_t buf;          /* IOBUF reference */
331 } PKT_compressed;
332
333 typedef struct {
334     u32  len;             /* Remaining length of encrypted data. */
335     int  extralen;        /* This is (blocksize+2).  Used by build_packet. */
336     byte new_ctb;         /* uses a new CTB */
337     byte is_partial;      /* partial length encoded */
338     byte mdc_method;      /* > 0: integrity protected encrypted data packet */
339     iobuf_t buf;          /* IOBUF reference */
340 } PKT_encrypted;
341
342 typedef struct {
343     byte hash[20];
344 } PKT_mdc;
345
346 typedef struct {
347     unsigned int trustval;
348     unsigned int sigcache;
349 } PKT_ring_trust;
350
351 typedef struct {
352     u32  len;             /* length of encrypted data */
353     iobuf_t buf;          /* IOBUF reference */
354     byte new_ctb;
355     byte is_partial;      /* partial length encoded */
356     int mode;
357     u32 timestamp;
358     int  namelen;
359     char name[1];
360 } PKT_plaintext;
361
362 typedef struct {
363     int  control;
364     size_t datalen;
365     char data[1];
366 } PKT_gpg_control;
367
368 /* combine all packets into a union */
369 struct packet_struct {
370     pkttype_t pkttype;
371     union {
372         void *generic;
373         PKT_symkey_enc  *symkey_enc;    /* PKT_SYMKEY_ENC */
374         PKT_pubkey_enc  *pubkey_enc;    /* PKT_PUBKEY_ENC */
375         PKT_onepass_sig *onepass_sig;   /* PKT_ONEPASS_SIG */
376         PKT_signature   *signature;     /* PKT_SIGNATURE */
377         PKT_public_key  *public_key;    /* PKT_PUBLIC_[SUB]KEY */
378         PKT_public_key  *secret_key;    /* PKT_SECRET_[SUB]KEY */
379         PKT_comment     *comment;       /* PKT_COMMENT */
380         PKT_user_id     *user_id;       /* PKT_USER_ID */
381         PKT_compressed  *compressed;    /* PKT_COMPRESSED */
382         PKT_encrypted   *encrypted;     /* PKT_ENCRYPTED[_MDC] */
383         PKT_mdc         *mdc;           /* PKT_MDC */
384         PKT_ring_trust  *ring_trust;    /* PKT_RING_TRUST */
385         PKT_plaintext   *plaintext;     /* PKT_PLAINTEXT */
386         PKT_gpg_control *gpg_control;   /* PKT_GPG_CONTROL */
387     } pkt;
388 };
389
390 #define init_packet(a) do { (a)->pkttype = 0;           \
391                             (a)->pkt.generic = NULL;    \
392                        } while(0)
393
394
395 struct notation
396 {
397   char *name;
398   char *value;
399   char *altvalue;
400   unsigned char *bdat;
401   size_t blen;
402   struct
403   {
404     unsigned int critical:1;
405     unsigned int ignore:1;
406   } flags;
407   struct notation *next;
408 };
409
410 /*-- mainproc.c --*/
411 void reset_literals_seen(void);
412 int proc_packets (ctrl_t ctrl, void *ctx, iobuf_t a );
413 int proc_signature_packets (ctrl_t ctrl, void *ctx, iobuf_t a,
414                             strlist_t signedfiles, const char *sigfile );
415 int proc_signature_packets_by_fd (ctrl_t ctrl,
416                                   void *anchor, IOBUF a, int signed_data_fd );
417 int proc_encryption_packets (ctrl_t ctrl, void *ctx, iobuf_t a);
418 int list_packets( iobuf_t a );
419
420 /*-- parse-packet.c --*/
421
422 /* Sets the packet list mode to MODE (i.e., whether we are dumping a
423    packet or not).  Returns the current mode.  This allows for
424    temporarily suspending dumping by doing the following:
425
426      int saved_mode = set_packet_list_mode (0);
427      ...
428      set_packet_list_mode (saved_mode);
429 */
430 int set_packet_list_mode( int mode );
431
432 #if DEBUG_PARSE_PACKET
433 /* There are debug functions and should not be used directly.  */
434 int dbg_search_packet( iobuf_t inp, PACKET *pkt, off_t *retpos, int with_uid,
435                        const char* file, int lineno  );
436 int dbg_parse_packet( iobuf_t inp, PACKET *ret_pkt,
437                       const char* file, int lineno );
438 int dbg_copy_all_packets( iobuf_t inp, iobuf_t out,
439                           const char* file, int lineno  );
440 int dbg_copy_some_packets( iobuf_t inp, iobuf_t out, off_t stopoff,
441                            const char* file, int lineno  );
442 int dbg_skip_some_packets( iobuf_t inp, unsigned n,
443                            const char* file, int lineno );
444 #define search_packet( a,b,c,d )   \
445              dbg_search_packet( (a), (b), (c), (d), __FILE__, __LINE__ )
446 #define parse_packet( a, b )  \
447              dbg_parse_packet( (a), (b), __FILE__, __LINE__ )
448 #define copy_all_packets( a,b )  \
449              dbg_copy_all_packets((a),(b), __FILE__, __LINE__ )
450 #define copy_some_packets( a,b,c ) \
451              dbg_copy_some_packets((a),(b),(c), __FILE__, __LINE__ )
452 #define skip_some_packets( a,b ) \
453              dbg_skip_some_packets((a),(b), __FILE__, __LINE__ )
454 #else
455 /* Return the next valid OpenPGP packet in *PKT.  (This function will
456    skip any packets whose type is 0.)
457
458    Returns 0 on success, -1 if EOF is reached, and an error code
459    otherwise.  In the case of an error, the packet in *PKT may be
460    partially constructed.  As such, even if there is an error, it is
461    necessary to free *PKT to avoid a resource leak.  To detect what
462    has been allocated, clear *PKT before calling this function.  */
463 int parse_packet( iobuf_t inp, PACKET *pkt);
464
465 /* Return the first OpenPGP packet in *PKT that contains a key (either
466    a public subkey, a public key, a secret subkey or a secret key) or,
467    if WITH_UID is set, a user id.
468
469    Saves the position in the pipeline of the start of the returned
470    packet (according to iobuf_tell) in RETPOS, if it is not NULL.
471
472    The return semantics are the same as parse_packet.  */
473 int search_packet( iobuf_t inp, PACKET *pkt, off_t *retpos, int with_uid );
474
475 /* Copy all packets (except invalid packets, i.e., those with a type
476    of 0) from INP to OUT until either an error occurs or EOF is
477    reached.
478
479    Returns -1 when end of file is reached or an error code, if an
480    error occured.  (Note: this function never returns 0, because it
481    effectively keeps going until it gets an EOF.)  */
482 int copy_all_packets( iobuf_t inp, iobuf_t out );
483
484 /* Like copy_all_packets, but stops at the first packet that starts at
485    or after STOPOFF (as indicated by iobuf_tell).
486
487    Example: if STOPOFF is 100, the first packet in INP goes from 0 to
488    110 and the next packet starts at offset 111, then the packet
489    starting at offset 0 will be completely processed (even though it
490    extends beyond STOPOFF) and the packet starting at offset 111 will
491    not be processed at all.  */
492 int copy_some_packets( iobuf_t inp, iobuf_t out, off_t stopoff );
493
494 /* Skips the next N packets from INP.
495
496    If parsing a packet returns an error code, then the function stops
497    immediately and returns the error code.  Note: in the case of an
498    error, this function does not indicate how many packets were
499    successfully processed.  */
500 int skip_some_packets( iobuf_t inp, unsigned n );
501 #endif
502
503 /* Parse a signature packet and store it in *SIG.
504
505    The signature packet is read from INP.  The OpenPGP header (the tag
506    and the packet's length) have already been read; the next byte read
507    from INP should be the first byte of the packet's contents.  The
508    packet's type (as extract from the tag) must be passed as PKTTYPE
509    and the packet's length must be passed as PKTLEN.  This is used as
510    the upper bound on the amount of data read from INP.  If the packet
511    is shorter than PKTLEN, the data at the end will be silently
512    skipped.  If an error occurs, an error code will be returned.  -1
513    means the EOF was encountered.  0 means parsing was successful.  */
514 int parse_signature( iobuf_t inp, int pkttype, unsigned long pktlen,
515                      PKT_signature *sig );
516
517 /* Given a subpacket area (typically either PKT_signature.hashed or
518    PKT_signature.unhashed), either:
519
520      - test whether there are any subpackets with the critical bit set
521        that we don't understand,
522
523      - list the subpackets, or,
524
525      - find a subpacket with a specific type.
526
527    REQTYPE indicates the type of operation.
528
529    If REQTYPE is SIGSUBPKT_TEST_CRITICAL, then this function checks
530    whether there are any subpackets that have the critical bit and
531    which GnuPG cannot handle.  If GnuPG understands all subpackets
532    whose critical bit is set, then this function returns simply
533    returns SUBPKTS.  If there is a subpacket whose critical bit is set
534    and which GnuPG does not understand, then this function returns
535    NULL and, if START is not NULL, sets *START to the 1-based index of
536    the subpacket that violates the constraint.
537
538    If REQTYPE is SIGSUBPKT_LIST_HASHED or SIGSUBPKT_LIST_UNHASHED, the
539    packets are dumped.  Note: if REQTYPE is SIGSUBPKT_LIST_HASHED,
540    this function does not check whether the hash is correct; this is
541    merely an indication of the section that the subpackets came from.
542
543    If REQTYPE is anything else, then this function interprets the
544    values as a subpacket type and looks for the first subpacket with
545    that type.  If such a packet is found, *CRITICAL (if not NULL) is
546    set if the critical bit was set, *RET_N is set to the offset of the
547    subpacket's content within the SUBPKTS buffer, *START is set to the
548    1-based index of the subpacket within the buffer, and returns
549    &SUBPKTS[*RET_N].
550
551    *START is the number of initial subpackets to not consider.  Thus,
552    if *START is 2, then the first 2 subpackets are ignored.  */
553 const byte *enum_sig_subpkt ( const subpktarea_t *subpkts,
554                               sigsubpkttype_t reqtype,
555                               size_t *ret_n, int *start, int *critical );
556
557 /* Shorthand for:
558
559      enum_sig_subpkt (buffer, reqtype, ret_n, NULL, NULL); */
560 const byte *parse_sig_subpkt ( const subpktarea_t *buffer,
561                                sigsubpkttype_t reqtype,
562                                size_t *ret_n );
563
564 /* This calls parse_sig_subpkt first on the hashed signature area in
565    SIG and then, if that returns NULL, calls parse_sig_subpkt on the
566    unhashed subpacket area in SIG.  */
567 const byte *parse_sig_subpkt2 ( PKT_signature *sig,
568                                 sigsubpkttype_t reqtype);
569
570 /* Returns whether the N byte large buffer BUFFER is sufficient to
571    hold a subpacket of type TYPE.  Note: the buffer refers to the
572    contents of the subpacket (not the header) and it must already be
573    initialized: for some subpackets, it checks some internal
574    constraints.
575
576    Returns 0 if the size is acceptable.  Returns -2 if the buffer is
577    definately too short.  To check for an error, check whether the
578    return value is less than 0.  */
579 int parse_one_sig_subpkt( const byte *buffer, size_t n, int type );
580
581 /* Looks for revocation key subpackets (see RFC 4880 5.2.3.15) in the
582    hashed area of the signature packet.  Any that are found are added
583    to SIG->REVKEY and SIG->NUMREVKEYS is updated appropriately.  */
584 void parse_revkeys(PKT_signature *sig);
585
586 /* Extract the attributes from the buffer at UID->ATTRIB_DATA and
587    update UID->ATTRIBS and UID->NUMATTRIBS accordingly.  */
588 int parse_attribute_subpkts(PKT_user_id *uid);
589
590 /* Set the UID->NAME field according to the attributes.  MAX_NAMELEN
591    must be at least 71.  */
592 void make_attribute_uidname(PKT_user_id *uid, size_t max_namelen);
593
594 /* Allocate and initialize a new GPG control packet.  DATA is the data
595    to save in the packet.  */
596 PACKET *create_gpg_control ( ctrlpkttype_t type,
597                              const byte *data,
598                              size_t datalen );
599
600 /*-- build-packet.c --*/
601 int build_packet( iobuf_t inp, PACKET *pkt );
602 gpg_error_t gpg_mpi_write (iobuf_t out, gcry_mpi_t a);
603 gpg_error_t gpg_mpi_write_nohdr (iobuf_t out, gcry_mpi_t a);
604 u32 calc_packet_length( PACKET *pkt );
605 void build_sig_subpkt( PKT_signature *sig, sigsubpkttype_t type,
606                         const byte *buffer, size_t buflen );
607 void build_sig_subpkt_from_sig( PKT_signature *sig );
608 int  delete_sig_subpkt(subpktarea_t *buffer, sigsubpkttype_t type );
609 void build_attribute_subpkt(PKT_user_id *uid,byte type,
610                             const void *buf,u32 buflen,
611                             const void *header,u32 headerlen);
612 struct notation *string_to_notation(const char *string,int is_utf8);
613 struct notation *sig_to_notation(PKT_signature *sig);
614 void free_notation(struct notation *notation);
615
616 /*-- free-packet.c --*/
617 void free_symkey_enc( PKT_symkey_enc *enc );
618 void free_pubkey_enc( PKT_pubkey_enc *enc );
619 void free_seckey_enc( PKT_signature *enc );
620 int  digest_algo_from_sig( PKT_signature *sig );
621 void release_public_key_parts( PKT_public_key *pk );
622 void free_public_key( PKT_public_key *key );
623 void free_attributes(PKT_user_id *uid);
624 void free_user_id( PKT_user_id *uid );
625 void free_comment( PKT_comment *rem );
626 void free_packet( PACKET *pkt );
627 prefitem_t *copy_prefs (const prefitem_t *prefs);
628 PKT_public_key *copy_public_key( PKT_public_key *d, PKT_public_key *s );
629 PKT_signature *copy_signature( PKT_signature *d, PKT_signature *s );
630 PKT_user_id *scopy_user_id (PKT_user_id *sd );
631 int cmp_public_keys( PKT_public_key *a, PKT_public_key *b );
632 int cmp_signatures( PKT_signature *a, PKT_signature *b );
633 int cmp_user_ids( PKT_user_id *a, PKT_user_id *b );
634
635
636 /*-- sig-check.c --*/
637 int signature_check( PKT_signature *sig, gcry_md_hd_t digest );
638 int signature_check2( PKT_signature *sig, gcry_md_hd_t digest, u32 *r_expiredate,
639                       int *r_expired, int *r_revoked, PKT_public_key *ret_pk );
640
641
642 /*-- pubkey-enc.c --*/
643 gpg_error_t get_session_key (PKT_pubkey_enc *k, DEK *dek);
644 gpg_error_t get_override_session_key (DEK *dek, const char *string);
645
646 /*-- compress.c --*/
647 int handle_compressed (ctrl_t ctrl, void *ctx, PKT_compressed *cd,
648                        int (*callback)(iobuf_t, void *), void *passthru );
649
650 /*-- encr-data.c --*/
651 int decrypt_data (ctrl_t ctrl, void *ctx, PKT_encrypted *ed, DEK *dek );
652
653 /*-- plaintext.c --*/
654 int handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx,
655                                         int nooutput, int clearsig );
656 int ask_for_detached_datafile( gcry_md_hd_t md, gcry_md_hd_t md2,
657                                const char *inname, int textmode );
658
659 /*-- sign.c --*/
660 int make_keysig_packet( PKT_signature **ret_sig, PKT_public_key *pk,
661                         PKT_user_id *uid, PKT_public_key *subpk,
662                         PKT_public_key *pksk, int sigclass, int digest_algo,
663                         u32 timestamp, u32 duration,
664                         int (*mksubpkt)(PKT_signature *, void *),
665                         void *opaque,
666                         const char *cache_nonce);
667 int update_keysig_packet( PKT_signature **ret_sig,
668                       PKT_signature *orig_sig,
669                       PKT_public_key *pk,
670                       PKT_user_id *uid,
671                       PKT_public_key *subpk,
672                       PKT_public_key *pksk,
673                       int (*mksubpkt)(PKT_signature *, void *),
674                       void *opaque   );
675
676 /*-- keygen.c --*/
677 PKT_user_id *generate_user_id (kbnode_t keyblock, const char *uidstr);
678
679 #endif /*G10_PACKET_H*/