* g10.c (main): Alias --charset as --display-charset to help avoid the
[gnupg.git] / g10 / packet.h
index d357cfd..0449c7d 100644 (file)
@@ -1,6 +1,6 @@
 /* packet.h - packet definitions
- * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003
- *                                             Free Software Foundation, Inc.
+ * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003,
+ *               2004 Free Software Foundation, Inc.
  *
  * This file is part of GnuPG.
  *
@@ -122,15 +122,16 @@ struct revocation_key {
 };
 
 typedef struct {
-    ulong   local_id;      /* internal use, valid if > 0 */
     struct {
        unsigned checked:1; /* signature has been checked */
        unsigned valid:1;   /* signature is good (if checked is set) */
+        unsigned chosen_selfsig:1; /* a selfsig that is the chosen one */
        unsigned unknown_critical:1;
         unsigned exportable:1;
         unsigned revocable:1;
-        unsigned policy_url:1; /* Policy URL is present */
+        unsigned policy_url:1; /* At least one policy URL is present */
         unsigned notation:1; /* At least one notation is present */
+        unsigned pref_ks:1;  /* At least one preferred keyserver is present */
         unsigned expired:1;
     } flags;
     u32     keyid[2];      /* 64 bit keyid */
@@ -173,7 +174,7 @@ typedef struct {
     u32 help_key_expire;
     int help_full_count;
     int help_marginal_count;
-    int is_primary;
+    int is_primary;       /* 2 if set via the primary flag, 1 if calculated */
     int is_revoked;
     int is_expired;
     u32 expiredate;       /* expires at this date or 0 if not at all */
@@ -196,6 +197,7 @@ typedef struct {
     u32     timestamp;     /* key made */
     u32     expiredate;     /* expires at this date or 0 if not at all */
     u32     max_expiredate; /* must not expire past this date */
+    u32     revokedate;     /* revoked at this date */
     byte    hdrbytes;      /* number of header bytes */
     byte    version;
     byte    selfsigversion; /* highest version of all of the self-sigs */
@@ -204,13 +206,17 @@ typedef struct {
     byte    req_usage;      /* hack to pass a request to getkey() */
     byte    req_algo;       /* Ditto */
     u32     has_expired;    /* set to the expiration date if expired */ 
-    int     is_revoked;     /* key has been revoked */
+    int     is_revoked;     /* key has been revoked, 1 if by the
+                              owner, 2 if by a designated revoker */
+    int     maybe_revoked;  /* a designated revocation is present, but
+                              without the key to check it */
     int     is_valid;       /* key (especially subkey) is valid */
     int     dont_cache;     /* do not cache this */
-    ulong   local_id;      /* internal use, valid if > 0 */
+    byte    backsig;        /* 0=none, 1=bad, 2=good */
     u32     main_keyid[2];  /* keyid of the primary key */
     u32     keyid[2];      /* calculated by keyid_from_pk() */
     byte    is_primary;
+    byte    is_disabled;    /* 0 for unset, 1 for enabled, 2 for disabled. */
     prefitem_t *prefs;      /* list of preferences (may be NULL) */
     int     mdc_feature;    /* mdc feature set */
     PKT_user_id *user_id;   /* if != NULL: found by that uid */
@@ -223,6 +229,10 @@ typedef struct {
     MPI     pkey[PUBKEY_MAX_NPKEY];
 } PKT_public_key;
 
+/* Evaluates as true if the pk is disabled, and false if it isn't.  If
+   there is no disable value cached, fill one in. */
+#define pk_is_disabled(a) (((a)->is_disabled)?((a)->is_disabled==2):(cache_disabled_value((a))))
+
 typedef struct {
     u32     timestamp;     /* key made */
     u32     expiredate;     /* expires at this date or 0 if not at all */
@@ -271,6 +281,7 @@ typedef struct {
     u32  len;            /* length of encrypted data */
     int  extralen;        /* this is (blocksize+2) */
     byte new_ctb;        /* uses a new CTB */
+    byte is_partial;      /* partial length encoded */
     byte mdc_method;     /* > 0: integrity protected encrypted data packet */
     IOBUF buf;           /* IOBUF reference */
 } PKT_encrypted;
@@ -354,7 +365,8 @@ typedef enum {
     SIGSUBPKT_SIGNERS_UID  =28, /* signer's user id */
     SIGSUBPKT_REVOC_REASON =29, /* reason for revocation */
     SIGSUBPKT_FEATURES     =30, /* feature flags */
-    SIGSUBPKT_PRIV_VERIFY_CACHE =101, /* cache verification result (obsolete)*/
+
+    SIGSUBPKT_SIGNATURE    =32, /* embedded signature */
 
     SIGSUBPKT_FLAG_CRITICAL=128
 } sigsubpkttype_t;
@@ -399,6 +411,8 @@ int copy_some_packets( IOBUF inp, IOBUF out, off_t stopoff );
 int skip_some_packets( IOBUF inp, unsigned n );
 #endif
 
+int parse_signature( IOBUF inp, int pkttype, unsigned long pktlen,
+                    PKT_signature *sig );
 const byte *enum_sig_subpkt ( const subpktarea_t *subpkts,
                               sigsubpkttype_t reqtype,
                               size_t *ret_n, int *start, int *critical );
@@ -419,7 +433,6 @@ PACKET *create_gpg_control ( ctrlpkttype_t type,
 /*-- build-packet.c --*/
 int build_packet( IOBUF inp, PACKET *pkt );
 u32 calc_packet_length( PACKET *pkt );
-void hash_public_key( MD_HANDLE md, PKT_public_key *pk );
 void build_sig_subpkt( PKT_signature *sig, sigsubpkttype_t type,
                        const byte *buffer, size_t buflen );
 void build_sig_subpkt_from_sig( PKT_signature *sig );
@@ -456,8 +469,8 @@ int cmp_user_ids( PKT_user_id *a, PKT_user_id *b );
 
 /*-- sig-check.c --*/
 int signature_check( PKT_signature *sig, MD_HANDLE digest );
-int signature_check2( PKT_signature *sig, MD_HANDLE digest,
-                     u32 *r_expiredate, int *r_expired );
+int signature_check2( PKT_signature *sig, MD_HANDLE digest, u32 *r_expiredate,
+                     int *r_expired, int *r_revoked, PKT_public_key *ret_pk );
 
 /*-- seckey-cert.c --*/
 int is_secret_key_protected( PKT_secret_key *sk );