Merge branch 'master' into 4.next
[exim.git] / src / src / pdkim / pdkim.h
index 97a03eabcb909147c0054ae00a2bba0d97756569..4de0a7ad60bd615a7dad7315dc8c5cef37ec0a0d 100644 (file)
  *  with this program; if not, write to the Free Software Foundation, Inc.,
  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
+#ifndef PDKIM_H
+#define PDKIM_H
+
+#include "blob.h"
+#include "hash.h"
 
 /* -------------------------------------------------------------------------- */
 /* Length of the preallocated buffer for the "answer" from the dns/txt
@@ -34,6 +39,8 @@
 #define PDKIM_ERR_RSA_SIGNING      -102
 #define PDKIM_ERR_LONG_LINE        -103
 #define PDKIM_ERR_BUFFER_TOO_SMALL -104
+#define PDKIM_SIGN_PRIVKEY_WRAP    -105
+#define PDKIM_SIGN_PRIVKEY_B64D    -106
 
 /* -------------------------------------------------------------------------- */
 /* Main/Extended verification status */
@@ -46,7 +53,8 @@
 #define PDKIM_VERIFY_FAIL_MESSAGE               2
 #define PDKIM_VERIFY_INVALID_PUBKEY_UNAVAILABLE 3
 #define PDKIM_VERIFY_INVALID_BUFFER_SIZE        4
-#define PDKIM_VERIFY_INVALID_PUBKEY_PARSING     5
+#define PDKIM_VERIFY_INVALID_PUBKEY_DNSRECORD   5
+#define PDKIM_VERIFY_INVALID_PUBKEY_IMPORT      6
 
 /* -------------------------------------------------------------------------- */
 /* Some parameter values */
@@ -95,8 +103,7 @@ typedef struct pdkim_pubkey {
   char *srvtype;                  /* s=  */
   char *notes;                    /* n=  */
 
-  char *key;                      /* p=  */
-  int   key_len;
+  blob  key;                      /* p=  */
 
   int   testing;                  /* t=y */
   int   no_subdomaining;          /* t=s */
@@ -148,18 +155,16 @@ typedef struct pdkim_signature {
 
   /* (h=) Colon-separated list of header names that are included in the
      signature */
-  char *headernames;
+  uschar *headernames;
 
   /* (z=) */
   char *copiedheaders;
 
   /* (b=) Raw signature data, along with its length in bytes */
-  char *sigdata;
-  int   sigdata_len;
+  blob sigdata;
 
   /* (bh=) Raw body hash data, along with its length in bytes */
-  char *bodyhash;
-  int   bodyhash_len;
+  blob bodyhash;
 
   /* Folded DKIM-Signature: header. Singing only, NULL for verifying.
      Ready for insertion into the message. Note: Folded using CRLFTB,
@@ -225,15 +230,8 @@ typedef struct pdkim_signature {
   /* Properties below this point are used internally only ------------- */
 
   /* Per-signature helper variables ----------------------------------- */
-#ifdef SHA_OPENSSL
-  SHA_CTX      sha1_body;  /* SHA1 block                                */
-  SHA256_CTX   sha2_body;  /* SHA256 block                              */
-#elif defined(SHA_GNUTLS)
-  gnutls_hash_hd_t sha_body; /* Either SHA1 or SHA256 block             */
-#elif defined(SHA_POLARSSL)
-  sha1_context *sha1_body; /* SHA1 block                                */
-  sha2_context *sha2_body; /* SHA256 block                              */
-#endif
+  hctx         body_hash;
+
   unsigned long signed_body_bytes; /* How many body bytes we hashed     */
   pdkim_stringlist *headers; /* Raw headers included in the sig         */
   /* Signing specific ------------------------------------------------- */
@@ -280,6 +278,8 @@ typedef struct pdkim_ctx {
 extern "C" {
 #endif
 
+void      pdkim_init         (void);
+
 DLLEXPORT
 pdkim_ctx *pdkim_init_sign    (char *, char *, char *, int);
 
@@ -303,3 +303,5 @@ void       pdkim_free_ctx     (pdkim_ctx *);
 #ifdef __cplusplus
 }
 #endif
+
+#endif