about summary refs log tree commit diff stats
path: root/gba/source/blake2.h
diff options
context:
space:
mode:
Diffstat (limited to 'gba/source/blake2.h')
-rw-r--r--gba/source/blake2.h74
1 files changed, 74 insertions, 0 deletions
diff --git a/gba/source/blake2.h b/gba/source/blake2.h new file mode 100644 index 0000000..ead399e --- /dev/null +++ b/gba/source/blake2.h
@@ -0,0 +1,74 @@
1/*
2 BLAKE2 reference source code package - reference C implementations
3
4 Copyright 2012, Samuel Neves <sneves@dei.uc.pt>. You may use this under the
5 terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at
6 your option. The terms of these licenses can be found at:
7
8 - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0
9 - OpenSSL license : https://www.openssl.org/source/license.html
10 - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0
11
12 More information about the BLAKE2 hash function can be found at
13 https://blake2.net.
14*/
15#ifndef BLAKE2_H
16#define BLAKE2_H
17
18#include <stddef.h>
19#include <stdint.h>
20
21#define BLAKE2_PACKED(x) x __attribute__((packed))
22
23 enum blake2s_constant
24 {
25 BLAKE2S_BLOCKBYTES = 64,
26 BLAKE2S_OUTBYTES = 32,
27 BLAKE2S_KEYBYTES = 32,
28 BLAKE2S_SALTBYTES = 8,
29 BLAKE2S_PERSONALBYTES = 8
30 };
31
32 typedef struct blake2s_state__
33 {
34 uint32_t h[8];
35 uint32_t t[2];
36 uint32_t f[2];
37 uint8_t buf[BLAKE2S_BLOCKBYTES];
38 size_t buflen;
39 size_t outlen;
40 uint8_t last_node;
41 } blake2s_state;
42
43 BLAKE2_PACKED(struct blake2s_param__
44 {
45 uint8_t digest_length; /* 1 */
46 uint8_t key_length; /* 2 */
47 uint8_t fanout; /* 3 */
48 uint8_t depth; /* 4 */
49 uint32_t leaf_length; /* 8 */
50 uint32_t node_offset; /* 12 */
51 uint16_t xof_length; /* 14 */
52 uint8_t node_depth; /* 15 */
53 uint8_t inner_length; /* 16 */
54 /* uint8_t reserved[0]; */
55 uint8_t salt[BLAKE2S_SALTBYTES]; /* 24 */
56 uint8_t personal[BLAKE2S_PERSONALBYTES]; /* 32 */
57 });
58
59 typedef struct blake2s_param__ blake2s_param;
60
61 /* Padded structs result in a compile-time error */
62 enum {
63 BLAKE2_DUMMY_1 = 1/(sizeof(blake2s_param) == BLAKE2S_OUTBYTES)
64 };
65
66 int blake2s_init( blake2s_state *S, size_t outlen );
67 int blake2s_init_key( blake2s_state *S, size_t outlen, const void *key, size_t keylen );
68 int blake2s_init_param( blake2s_state *S, const blake2s_param *P );
69 int blake2s_update( blake2s_state *S, const void *in, size_t inlen );
70 int blake2s_final( blake2s_state *S, void *out, size_t outlen );
71
72 int blake2s( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen );
73
74#endif \ No newline at end of file