/ external / libecc / include / libecc / hash / bash512.h
bash512.h
 1  /*
 2   *  Copyright (C) 2022 - This file is part of libecc project
 3   *
 4   *  Authors:
 5   *      Ryad BENADJILA <ryadbenadjila@gmail.com>
 6   *      Arnaud EBALARD <arnaud.ebalard@ssi.gouv.fr>
 7   *
 8   *  This software is licensed under a dual BSD and GPL v2 license.
 9   *  See LICENSE file at the root folder of the project.
10   */
11  #include <libecc/lib_ecc_config.h>
12  #ifdef WITH_HASH_BASH512
13  
14  #ifndef __BASH512_H__
15  #define __BASH512_H__
16  
17  #include <libecc/words/words.h>
18  #include <libecc/utils/utils.h>
19  #include <libecc/hash/bash.h>
20  
21  #define BASH512_BLOCK_SIZE   64
22  #define BASH512_DIGEST_SIZE  64
23  #define BASH512_DIGEST_SIZE_BITS  512
24  
25  /* Compute max hash digest and block sizes */
26  #ifndef MAX_DIGEST_SIZE
27  #define MAX_DIGEST_SIZE	0
28  #endif
29  #if (MAX_DIGEST_SIZE < BASH512_DIGEST_SIZE)
30  #undef MAX_DIGEST_SIZE
31  #define MAX_DIGEST_SIZE BASH512_DIGEST_SIZE
32  #endif
33  
34  #ifndef MAX_DIGEST_SIZE_BITS
35  #define MAX_DIGEST_SIZE_BITS    0
36  #endif
37  #if (MAX_DIGEST_SIZE_BITS < BASH512_DIGEST_SIZE_BITS)
38  #undef MAX_DIGEST_SIZE_BITS
39  #define MAX_DIGEST_SIZE_BITS BASH512_DIGEST_SIZE_BITS
40  #endif
41  
42  #ifndef MAX_BLOCK_SIZE
43  #define MAX_BLOCK_SIZE  0
44  #endif
45  #if (MAX_BLOCK_SIZE < BASH512_BLOCK_SIZE)
46  #undef MAX_BLOCK_SIZE
47  #define MAX_BLOCK_SIZE BASH512_BLOCK_SIZE
48  #endif
49  
50  #define BASH512_HASH_MAGIC ((word_t)(0xcd12faec63111283ULL))
51  #define BASH512_HASH_CHECK_INITIALIZED(A, ret, err) \
52          MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == BASH512_HASH_MAGIC), ret, err)
53  
54  typedef bash_context bash512_context;
55  
56  ATTRIBUTE_WARN_UNUSED_RET int bash512_init(bash512_context *ctx);
57  ATTRIBUTE_WARN_UNUSED_RET int bash512_update(bash512_context *ctx, const u8 *input, u32 ilen);
58  ATTRIBUTE_WARN_UNUSED_RET int bash512_final(bash512_context *ctx, u8 output[BASH512_DIGEST_SIZE]);
59  ATTRIBUTE_WARN_UNUSED_RET int bash512_scattered(const u8 **inputs, const u32 *ilens,
60  		       u8 output[BASH512_DIGEST_SIZE]);
61  ATTRIBUTE_WARN_UNUSED_RET int bash512(const u8 *input, u32 ilen, u8 output[BASH512_DIGEST_SIZE]);
62  
63  #endif /* __BASH512_H__ */
64  #endif /* WITH_HASH_BASH512 */