Commit | Line | Data |
---|---|---|
2592e6c0 | 1 | /* |
63af6f3a | 2 | * Exim - an Internet mail transport agent |
2592e6c0 | 3 | * |
9242a7e8 | 4 | * Copyright (C) 2017 Exim maintainers |
2592e6c0 JH |
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 | 15 | |
63af6f3a JH |
16 | #ifdef SHA_OPENSSL |
17 | # include <openssl/sha.h> | |
18 | #elif defined SHA_GNUTLS | |
2592e6c0 JH |
19 | # include <gnutls/crypto.h> |
20 | #elif defined(SHA_GCRYPT) | |
21 | # include <gcrypt.h> | |
22 | #elif defined(SHA_POLARSSL) | |
63af6f3a JH |
23 | # include "pdkim/pdkim.h" /*XXX ugly */ |
24 | # include "pdkim/polarssl/sha1.h" | |
25 | # include "pdkim/polarssl/sha2.h" | |
2592e6c0 JH |
26 | #endif |
27 | ||
63af6f3a JH |
28 | |
29 | /* Hash context for the exim_sha_* routines */ | |
30 | ||
1ed59855 | 31 | typedef enum hashmethod { |
6e773413 | 32 | HASH_BADTYPE, |
1ed59855 | 33 | HASH_SHA1, |
d73e45df JH |
34 | |
35 | HASH_SHA2_256, | |
36 | HASH_SHA2_384, | |
37 | HASH_SHA2_512, | |
38 | ||
6e773413 JH |
39 | HASH_SHA3_224, |
40 | HASH_SHA3_256, | |
41 | HASH_SHA3_384, | |
42 | HASH_SHA3_512, | |
1ed59855 JH |
43 | } hashmethod; |
44 | ||
2592e6c0 | 45 | typedef struct { |
1ed59855 JH |
46 | hashmethod method; |
47 | int hashlen; | |
2592e6c0 JH |
48 | |
49 | #ifdef SHA_OPENSSL | |
50 | union { | |
51 | SHA_CTX sha1; /* SHA1 block */ | |
d73e45df JH |
52 | SHA256_CTX sha2_256; /* SHA256 or 224 block */ |
53 | SHA512_CTX sha2_512; /* SHA512 or 384 block */ | |
9c29c48f JH |
54 | #ifdef EXIM_HAVE_SHA3 |
55 | EVP_MD_CTX * mctx; /* SHA3 block */ | |
56 | #endif | |
2592e6c0 JH |
57 | } u; |
58 | ||
59 | #elif defined(SHA_GNUTLS) | |
60 | gnutls_hash_hd_t sha; /* Either SHA1 or SHA256 block */ | |
61 | ||
62 | #elif defined(SHA_GCRYPT) | |
63 | gcry_md_hd_t sha; /* Either SHA1 or SHA256 block */ | |
64 | ||
65 | #elif defined(SHA_POLARSSL) | |
66 | union { | |
67 | sha1_context sha1; /* SHA1 block */ | |
68 | sha2_context sha2; /* SHA256 block */ | |
69 | } u; | |
5fb822fc JH |
70 | |
71 | #elif defined(SHA_NATIVE) | |
72 | sha1 sha1; | |
2592e6c0 JH |
73 | #endif |
74 | ||
75 | } hctx; | |
76 | ||
7b83389d | 77 | extern BOOL exim_sha_init(hctx *, hashmethod); |
e2e3255a | 78 | extern void exim_sha_update(hctx *, const uschar *a, int); |
2592e6c0 | 79 | extern void exim_sha_finish(hctx *, blob *); |
2592e6c0 | 80 | |
63af6f3a | 81 | #endif |
2592e6c0 | 82 | /* End of File */ |