/* Hash context for the exim_sha_* routines */
+typedef enum hashmethod {
+ HASH_BADTYPE,
+ HASH_SHA1,
+ HASH_SHA256,
+ HASH_SHA3_224,
+ HASH_SHA3_256,
+ HASH_SHA3_384,
+ HASH_SHA3_512,
+} hashmethod;
+
typedef struct {
- int sha1;
- int hashlen;
+ hashmethod method;
+ int hashlen;
#ifdef SHA_OPENSSL
union {
sha1_context sha1; /* SHA1 block */
sha2_context sha2; /* SHA256 block */
} u;
+
+#elif defined(SHA_NATIVE)
+ sha1 sha1;
#endif
} hctx;
-extern void exim_sha_init(hctx *, BOOL);
+extern BOOL exim_sha_init(hctx *, hashmethod);
extern void exim_sha_update(hctx *, const uschar *a, int);
extern void exim_sha_finish(hctx *, blob *);
extern int exim_sha_hashlen(hctx *);