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 | ||
