* plaintext.c (handle_plaintext): Accept 'u' as a plaintext mode that
[gnupg.git] / g10 / packet.h
index c5556a6..558a603 100644 (file)
@@ -1,5 +1,6 @@
 /* packet.h - packet definitions
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003,
+ *               2004 Free Software Foundation, Inc.
  *
  * This file is part of GnuPG.
  *
@@ -49,7 +50,7 @@ typedef enum {
        PKT_OLD_COMMENT   =16, /* comment packet from an OpenPGP draft */
        PKT_ATTRIBUTE     =17, /* PGP's attribute packet */
        PKT_ENCRYPTED_MDC =18, /* integrity protected encrypted data */
-       PKT_MDC           =19, /* manipulaion detection code packet */
+       PKT_MDC           =19, /* manipulation detection code packet */
        PKT_COMMENT       =61, /* new comment packet (private) */
         PKT_GPG_CONTROL   =63  /* internal control packet */
 } pkttype_t;
@@ -121,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 */
@@ -140,6 +142,9 @@ typedef struct {
     byte    pubkey_algo;    /* algorithm used for public key scheme */
                            /* (PUBKEY_ALGO_xxx) */
     byte    digest_algo;    /* algorithm used for digest (DIGEST_ALGO_xxxx) */
+    byte    trust_depth;
+    byte    trust_value;
+    const byte *trust_regexp;
     struct revocation_key **revkey;
     int numrevkeys;
     subpktarea_t *hashed;    /* all subpackets with hashed  data (v4 only) */
@@ -164,14 +169,18 @@ typedef struct {
     int numattribs;
     byte *attrib_data;    /* if this is not NULL, the packet is an attribute */
     unsigned long attrib_len;
+    byte *namehash;
     int help_key_usage;
     u32 help_key_expire;
-    int is_primary;
+    int help_full_count;
+    int help_marginal_count;
+    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 */
     prefitem_t *prefs;    /* list of preferences (may be NULL)*/
     int mdc_feature;
+    int ks_modify;
     u32 created;          /* according to the self-signature */
     byte selfsigversion;
     char name[1];
@@ -188,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 */
@@ -196,21 +206,32 @@ 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 */
     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 */
-    byte    *namehash;     /* if != NULL: found by this name */
     PKT_user_id *user_id;   /* if != NULL: found by that uid */
     struct revocation_key *revkey;
     int     numrevkeys;
+    u32     trust_timestamp;
+    byte    trust_depth;
+    byte    trust_value;
+    const byte *trust_regexp;
     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 */
@@ -259,6 +280,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;
@@ -342,7 +364,7 @@ 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;
@@ -407,7 +429,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 );
@@ -444,8 +465,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 );
@@ -482,7 +503,8 @@ int make_keysig_packet( PKT_signature **ret_sig, PKT_public_key *pk,
 int update_keysig_packet( PKT_signature **ret_sig,
                       PKT_signature *orig_sig,
                       PKT_public_key *pk,
-                      PKT_user_id *uid, 
+                      PKT_user_id *uid,
+                      PKT_public_key *subpk,
                       PKT_secret_key *sk,
                       int (*mksubpkt)(PKT_signature *, void *),
                       void *opaque   );