test release
[gnupg.git] / g10 / packet.h
index 98015a3..8b1e3c4 100644 (file)
@@ -1,14 +1,14 @@
 /* packet.h - packet read/write stuff
- *     Copyright (c) 1997 by Werner Koch (dd9jn)
+ *     Copyright (C) 1998 Free Software Foundation, Inc.
  *
- * This file is part of G10.
+ * This file is part of GNUPG.
  *
- * G10 is free software; you can redistribute it and/or modify
+ * GNUPG is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *
- * G10 is distributed in the hope that it will be useful,
+ * GNUPG is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
 #include "cipher.h"
 #include "filter.h"
 
+#ifndef HAVE_RSA_CIPHER
+/* although we don't have RSA we need these structures to handle keyrings */
+typedef struct { MPI e, n;            } RSA_public_key;
+typedef struct { MPI e, n, p, q, d, u; } RSA_secret_key;
+#endif
+
 typedef enum {
        PKT_NONE           =0,
        PKT_PUBKEY_ENC     =1, /* public key encrypted packet */
@@ -50,6 +56,7 @@ typedef struct packet_struct PACKET;
 
 typedef struct {
     u32     keyid[2];      /* 64 bit keyid */
+    byte    version;
     byte    pubkey_algo;    /* algorithm used for public key scheme */
     union {
       struct {
@@ -75,18 +82,22 @@ typedef struct {
     u32     keyid[2];      /* 64 bit keyid */
     ulong   local_id;      /* internal use, valid if > 0 */
     u32     timestamp;     /* signature made */
+    byte    version;
     byte    sig_class;     /* sig classification, append for MD calculation*/
     byte    pubkey_algo;    /* algorithm used for public key scheme */
                            /* (PUBKEY_ALGO_xxx) */
+    byte digest_algo;      /* algorithm used for digest (DIGEST_ALGO_xxxx) */
+    byte *hashed_data;     /* all subpackets with hashed  data (v4 only) */
+    byte *unhashed_data;    /* ditto for unhashed data */
+    byte digest_start[2];   /* first 2 bytes of the digest */
     union {
       struct {
-       byte digest_algo;     /* algorithm used for digest (DIGEST_ALGO_xxxx) */
-       byte digest_start[2]; /* first 2 byte of the digest */
        MPI  a, b;            /* integers with the digest */
       } elg;
       struct {
-       byte digest_algo;     /* algorithm used for digest (DIGEST_ALGO_xxxx) */
-       byte digest_start[2]; /* first 2 byte of the digest */
+       MPI  r, s;            /* integers with the digest */
+      } dsa;
+      struct {
        MPI  rsa_integer;     /* the encrypted digest */
       } rsa;
     } d;
@@ -99,18 +110,11 @@ typedef struct {
     byte    hdrbytes;      /* number of header bytes */
     byte    version;
     byte    pubkey_algo;    /* algorithm used for public key scheme */
-    md_filter_context_t mfx;
     ulong   local_id;      /* internal use, valid if > 0 */
     union {
-      struct {
-       MPI p;              /* prime */
-       MPI g;              /* group generator */
-       MPI y;              /* g^x mod p */
-      } elg;
-      struct {
-       MPI rsa_n;          /* public modulus */
-       MPI rsa_e;          /* public exponent */
-      } rsa;
+       ELG_public_key elg;
+       DSA_public_key dsa;
+       RSA_public_key rsa;
     } d;
 } PKT_public_cert;
 
@@ -120,44 +124,24 @@ typedef struct {
     byte    hdrbytes;      /* number of header bytes */
     byte    version;
     byte    pubkey_algo;    /* algorithm used for public key scheme */
+    byte is_protected; /* The secret infos are protected and must */
+                       /* be decrypteded before use, the protected */
+                       /* MPIs are simply (void*) pointers to memory */
+                       /* and should never be passed to a mpi_xxx() */
+    struct {
+       byte algo;  /* cipher used to protect the secret informations*/
+       byte s2k;
+       byte hash;
+       byte salt[8];
+       byte count;
+       byte iv[8]; /* initialization vector for CFB mode */
+    } protect;
     union {
-      struct {
-       MPI p;              /* prime */
-       MPI g;              /* group generator */
-       MPI y;              /* g^x mod p */
-       MPI x;              /* secret exponent */
-       u16 csum;           /* checksum */
-       byte is_protected;  /* The above infos are protected and must */
-                           /* be decrypteded before use */
-       byte protect_algo;  /* cipher used to protect the secret informations*/
-       union {             /* information for the protection */
-         struct {
-           byte iv[8];     /* initialization vector for CFB mode */
-                           /* when protected, the MPIs above are pointers
-                            * to plain storage */
-         } blowfish;
-       } protect;
-      } elg;
-      struct {
-       MPI rsa_n;          /* public modulus */
-       MPI rsa_e;          /* public exponent */
-       MPI rsa_d;          /* secret descryption exponent */
-       MPI rsa_p;          /* secret first prime number */
-       MPI rsa_q;          /* secret second prime number */
-       MPI rsa_u;          /* secret multiplicative inverse */
-       u16 csum;           /* checksum */
-       byte is_protected;  /* The above infos are protected and must */
-                           /* be decrypteded before use */
-       byte protect_algo;  /* cipher used to protect the secret informations*/
-       union {             /* information for the protection */
-         struct {
-           byte iv[8];     /* initialization vector for CFB mode */
-                           /* when protected, the MPIs above are pointers
-                            * to plain storage */
-         } blowfish;
-       } protect;
-      } rsa;
+       ELG_secret_key elg;
+       DSA_secret_key dsa;
+       RSA_secret_key rsa;
     } d;
+    u16 csum;          /* checksum */
 } PKT_secret_cert;
 
 
@@ -215,6 +199,8 @@ struct packet_struct {
 
 /*-- mainproc.c --*/
 int proc_packets( IOBUF a );
+int proc_signature_packets( IOBUF a, STRLIST signedfiles );
+int proc_encryption_packets( IOBUF a );
 int list_packets( IOBUF a );
 
 /*-- parse-packet.c --*/
@@ -260,7 +246,8 @@ int protect_secret_key( PKT_secret_cert *cert, DEK *dek );
 int get_session_key( PKT_pubkey_enc *k, DEK *dek );
 
 /*-- compress.c --*/
-int handle_compressed( PKT_compressed *zd );
+int handle_compressed( PKT_compressed *cd,
+                      int (*callback)(IOBUF, void *), void *passthru );
 
 /*-- encr-data.c --*/
 int decrypt_data( PKT_encrypted *ed, DEK *dek );