diff options
Diffstat (limited to 'gba/source/blake2.h')
-rw-r--r-- | gba/source/blake2.h | 74 |
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 | ||