about summary refs log tree commit diff stats
path: root/gba/source/blake2.h
diff options
context:
space:
mode:
authorKelly Rauchenberger <fefferburbia@gmail.com>2017-09-26 16:52:33 -0400
committerKelly Rauchenberger <fefferburbia@gmail.com>2017-09-26 16:52:33 -0400
commit566d5fe1e012c0001396810bc56395597eb79c2c (patch)
tree464262d2772299b3c7b39d153395461983d17c83 /gba/source/blake2.h
parent8d9df7cc26ef86c7af1d4aa6fd4633667bb3a743 (diff)
downloadgen3uploader-566d5fe1e012c0001396810bc56395597eb79c2c.tar.gz
gen3uploader-566d5fe1e012c0001396810bc56395597eb79c2c.tar.bz2
gen3uploader-566d5fe1e012c0001396810bc56395597eb79c2c.zip
Replaced SHA-224 with BLAKE2s
Also changed the hash determiner format such that each IV, as well as
the Shedinja flag, has its own byte. This increases the size of the
determiner to 16 bytes, 33 bits of which are always unset. While this is
somewhat wasteful, it is useful for debugging purposes because it is
hard to predict the behavior of bitfields.

For testing purposes, the amount of time that the Wii waits for the GBA
to compute hashes has been increased. Given that BLAKE2s is a generally
faster algorithm than SHA-224, it will likely be safe to decrease this
delay in a future commit.

Because the hash algorithm has changed, all old hashes are now invalid.

refs #2
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