Commit | Line | Data |
---|---|---|
2592e6c0 | 1 | /* |
63af6f3a | 2 | * Exim - an Internet mail transport agent |
2592e6c0 JH |
3 | * |
4 | * Copyright (C) 2016 Exim maintainers | |
5 | * | |
6 | * Hash interface functions | |
7 | */ | |
8 | ||
63af6f3a | 9 | #include "exim.h" |
2592e6c0 | 10 | |
63af6f3a JH |
11 | #if !defined(HASH_H) /* entire file */ |
12 | #define HASH_H | |
2592e6c0 | 13 | |
63af6f3a | 14 | #include "sha_ver.h" |
2592e6c0 JH |
15 | #include "blob.h" |
16 | ||
63af6f3a JH |
17 | #ifdef SHA_OPENSSL |
18 | # include <openssl/sha.h> | |
19 | #elif defined SHA_GNUTLS | |
2592e6c0 JH |
20 | # include <gnutls/crypto.h> |
21 | #elif defined(SHA_GCRYPT) | |
22 | # include <gcrypt.h> | |
23 | #elif defined(SHA_POLARSSL) | |
63af6f3a JH |
24 | # include "pdkim/pdkim.h" /*XXX ugly */ |
25 | # include "pdkim/polarssl/sha1.h" | |
26 | # include "pdkim/polarssl/sha2.h" | |
2592e6c0 JH |
27 | #endif |
28 | ||
63af6f3a JH |
29 | |
30 | /* Hash context for the exim_sha_* routines */ | |
31 | ||
2592e6c0 JH |
32 | typedef struct { |
33 | int sha1; | |
34 | int hashlen; | |
35 | ||
36 | #ifdef SHA_OPENSSL | |
37 | union { | |
38 | SHA_CTX sha1; /* SHA1 block */ | |
39 | SHA256_CTX sha2; /* SHA256 block */ | |
40 | } u; | |
41 | ||
42 | #elif defined(SHA_GNUTLS) | |
43 | gnutls_hash_hd_t sha; /* Either SHA1 or SHA256 block */ | |
44 | ||
45 | #elif defined(SHA_GCRYPT) | |
46 | gcry_md_hd_t sha; /* Either SHA1 or SHA256 block */ | |
47 | ||
48 | #elif defined(SHA_POLARSSL) | |
49 | union { | |
50 | sha1_context sha1; /* SHA1 block */ | |
51 | sha2_context sha2; /* SHA256 block */ | |
52 | } u; | |
53 | #endif | |
54 | ||
55 | } hctx; | |
56 | ||
2592e6c0 | 57 | extern void exim_sha_init(hctx *, BOOL); |
e2e3255a | 58 | extern void exim_sha_update(hctx *, const uschar *a, int); |
2592e6c0 JH |
59 | extern void exim_sha_finish(hctx *, blob *); |
60 | extern int exim_sha_hashlen(hctx *); | |
61 | ||
63af6f3a | 62 | #endif |
2592e6c0 | 63 | /* End of File */ |