/ external / libecc / include / libecc / hash / bash256.h
bash256.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_BASH256
13  
14  #ifndef __BASH256_H__
15  #define __BASH256_H__
16  
17  #include <libecc/words/words.h>
18  #include <libecc/utils/utils.h>
19  #include <libecc/hash/bash.h>
20  
21  #define BASH256_BLOCK_SIZE   128
22  #define BASH256_DIGEST_SIZE  32
23  #define BASH256_DIGEST_SIZE_BITS  256
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 < BASH256_DIGEST_SIZE)
30  #undef MAX_DIGEST_SIZE
31  #define MAX_DIGEST_SIZE BASH256_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 < BASH256_DIGEST_SIZE_BITS)
38  #undef MAX_DIGEST_SIZE_BITS
39  #define MAX_DIGEST_SIZE_BITS BASH256_DIGEST_SIZE_BITS
40  #endif
41  
42  #ifndef MAX_BLOCK_SIZE
43  #define MAX_BLOCK_SIZE  0
44  #endif
45  #if (MAX_BLOCK_SIZE < BASH256_BLOCK_SIZE)
46  #undef MAX_BLOCK_SIZE
47  #define MAX_BLOCK_SIZE BASH256_BLOCK_SIZE
48  #endif
49  
50  #define BASH256_HASH_MAGIC ((word_t)(0x72839273873434aaULL))
51  #define BASH256_HASH_CHECK_INITIALIZED(A, ret, err) \
52          MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == BASH256_HASH_MAGIC), ret, err)
53  
54  typedef bash_context bash256_context;
55  
56  ATTRIBUTE_WARN_UNUSED_RET int bash256_init(bash256_context *ctx);
57  ATTRIBUTE_WARN_UNUSED_RET int bash256_update(bash256_context *ctx, const u8 *input, u32 ilen);
58  ATTRIBUTE_WARN_UNUSED_RET int bash256_final(bash256_context *ctx, u8 output[BASH256_DIGEST_SIZE]);
59  ATTRIBUTE_WARN_UNUSED_RET int bash256_scattered(const u8 **inputs, const u32 *ilens,
60  		       u8 output[BASH256_DIGEST_SIZE]);
61  ATTRIBUTE_WARN_UNUSED_RET int bash256(const u8 *input, u32 ilen, u8 output[BASH256_DIGEST_SIZE]);
62  
63  #endif /* __BASH256_H__ */
64  #endif /* WITH_HASH_BASH256 */