See ChangeLog: Sat Sep 18 12:16:08 CEST 1999 Werner Koch
[gnupg.git] / g10 / filter.h
index 8cbb26a..02e4e2e 100644 (file)
@@ -1,14 +1,14 @@
 /* filter.h
- *     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.
 #ifndef G10_FILTER_H
 #define G10_FILTER_H
 
-#include "cipher.h"
+#include <gcrypt.h>
+
+#include "types.h"
 
 typedef struct {
-    MD5HANDLE md5;     /* if !NULL create md5  */
-    RMDHANDLE rmd160;  /* if !NULL create rmd160  */
+    GCRY_MD_HD md;     /* catch all */
+    GCRY_MD_HD md2;    /* if we want to calculate an alternate hash */
     size_t maxbuf_size;
 } md_filter_context_t;
 
+typedef struct {
+    /* these fields may be initialized */
+    int what;              /* what kind of armor headers to write */
+    int only_keyblocks;     /* skip all headers but ".... key block" */
+    const char *hdrlines;   /* write these headerlines */
+
+    /* the following fields must be initialized to zero */
+    int inp_checked;       /* set if the input has been checked */
+    int inp_bypass;        /* set if the input is not armored */
+    int in_cleartext;      /* clear text message */
+    int not_dash_escaped;   /* clear text is not dash escaped */
+    int hashes;            /* detected hash algorithms */
+    int faked;             /* we are faking a literal data packet */
+    int truncated;         /* number of truncated lines */
+    int qp_detected;
+    int pgp2mode;
+
+    byte *buffer;          /* malloced buffer */
+    unsigned buffer_size;   /* and size of this buffer */
+    unsigned buffer_len;    /* used length of the buffer */
+    unsigned buffer_pos;    /* read position */
+
+    byte radbuf[4];
+    int idx, idx2;
+    u32 crc;
+
+    int status;            /* an internal state flag */
+    int any_data;          /* any valid armored data seen */
+    int pending_lf;        /* used together with faked */
+} armor_filter_context_t;
+
+
+typedef struct {
+    int status;
+    void *opaque;   /* (used for z_stream) */
+    byte *inbuf;
+    unsigned inbufsize;
+    byte *outbuf;
+    unsigned outbufsize;
+    int algo;   /* compress algo */
+    int algo1hack;
+} compress_filter_context_t;
+
+
+typedef struct {
+    DEK *dek;
+    u32 datalen;
+    GCRY_CIPHER_HD cipher_hd;
+    int header;
+    GCRY_MD_HD mdc_hash;
+} cipher_filter_context_t;
+
+
+
+typedef struct {
+    byte *buffer;          /* malloced buffer */
+    unsigned buffer_size;   /* and size of this buffer */
+    unsigned buffer_len;    /* used length of the buffer */
+    unsigned buffer_pos;    /* read position */
+    int truncated;         /* number of truncated lines */
+    int not_dash_escaped;
+    int escape_from;
+    GCRY_MD_HD md;
+    int pending_lf;
+    int pending_esc;
+} text_filter_context_t;
+
+
+/* encrypt_filter_context_t defined in main.h */
 
 /*-- mdfilter.c --*/
 int md_filter( void *opaque, int control, IOBUF a, byte *buf, size_t *ret_len);
+void free_md_filter_context( md_filter_context_t *mfx );
+
+/*-- armor.c --*/
+int use_armor_filter( IOBUF a );
+int armor_filter( void *opaque, int control,
+                 IOBUF chain, byte *buf, size_t *ret_len);
+
+/*-- compress.c --*/
+int compress_filter( void *opaque, int control,
+                    IOBUF chain, byte *buf, size_t *ret_len);
+
+/*-- cipher.c --*/
+int cipher_filter( void *opaque, int control,
+                  IOBUF chain, byte *buf, size_t *ret_len);
+
+/*-- textfilter.c --*/
+int text_filter( void *opaque, int control,
+                IOBUF chain, byte *buf, size_t *ret_len);
+int copy_clearsig_text( IOBUF out, IOBUF inp, GCRY_MD_HD md,
+                         int escape_dash, int escape_from, int pgp2mode );
+
+
 
 #endif /*G10_FILTER_H*/