DKIM: fix $dkim_key_length in verify
[exim.git] / src / src / pdkim / signing.h
CommitLineData
2592e6c0
JH
1/*
2 * PDKIM - a RFC4871 (DKIM) implementation
3 *
f9ba5e22 4 * Copyright (C) 1995 - 2018 Exim maintainers
2592e6c0
JH
5 *
6 * RSA signing/verification interface
7 */
8
9#include "../exim.h"
10
11#ifndef DISABLE_DKIM /* entire file */
12
13#include "crypt_ver.h"
14
d73e45df 15#ifdef SIGN_OPENSSL
2592e6c0
JH
16# include <openssl/rsa.h>
17# include <openssl/ssl.h>
18# include <openssl/err.h>
d73e45df 19#elif defined(SIGN_GNUTLS)
2592e6c0
JH
20# include <gnutls/gnutls.h>
21# include <gnutls/x509.h>
286b9d5f 22# include <gnutls/abstract.h>
d73e45df 23#elif defined(SIGN_GCRYPT)
286b9d5f
JH
24# include <gcrypt.h>
25# include <libtasn1.h>
2592e6c0
JH
26#endif
27
63af6f3a 28#include "../blob.h"
2592e6c0 29
286b9d5f
JH
30typedef enum {
31 KEYTYPE_RSA,
32 KEYTYPE_ED25519
33} keytype;
34
35typedef enum {
36 KEYFMT_DER, /* an asn.1 structure */
37 KEYFMT_ED25519_BARE /* just the key */
38} keyformat;
39
2592e6c0 40
d73e45df 41#ifdef SIGN_OPENSSL
2592e6c0
JH
42
43typedef struct {
286b9d5f
JH
44 keytype keytype;
45 EVP_PKEY * key;
2592e6c0
JH
46} es_ctx;
47
48typedef struct {
286b9d5f
JH
49 keytype keytype;
50 EVP_PKEY * key;
2592e6c0
JH
51} ev_ctx;
52
d73e45df 53#elif defined(SIGN_GNUTLS)
2592e6c0
JH
54
55typedef struct {
286b9d5f
JH
56 keytype keytype;
57 gnutls_privkey_t key;
2592e6c0
JH
58} es_ctx;
59
60typedef struct {
286b9d5f 61 keytype keytype;
d73e45df 62 gnutls_pubkey_t key;
2592e6c0
JH
63} ev_ctx;
64
d73e45df 65#elif defined(SIGN_GCRYPT)
2592e6c0
JH
66
67typedef struct {
286b9d5f 68 keytype keytype;
2592e6c0
JH
69 gcry_mpi_t n;
70 gcry_mpi_t e;
71 gcry_mpi_t d;
72 gcry_mpi_t p;
73 gcry_mpi_t q;
74 gcry_mpi_t dp;
75 gcry_mpi_t dq;
76 gcry_mpi_t qp;
77} es_ctx;
78
79typedef struct {
286b9d5f 80 keytype keytype;
2592e6c0
JH
81 gcry_mpi_t n;
82 gcry_mpi_t e;
83} ev_ctx;
84
85#endif
86
87
9b2583c4 88extern void exim_dkim_init(void);
acec9514 89extern gstring * exim_dkim_data_append(gstring *, uschar *);
2592e6c0 90
617d3932 91extern const uschar * exim_dkim_signing_init(const uschar *, es_ctx *);
89dd53df 92extern const uschar * exim_dkim_sign(es_ctx *, hashmethod, blob *, blob *);
a841a6ec 93extern const uschar * exim_dkim_verify_init(blob *, keyformat, ev_ctx *, unsigned *);
da83217f 94extern const uschar * exim_dkim_verify(ev_ctx *, hashmethod, blob *, blob *);
2592e6c0
JH
95
96#endif /*DISABLE_DKIM*/
97/* End of File */