]> Pileus Git - ~andy/crypt/blob - sha2.c
Add some initial code
[~andy/crypt] / sha2.c
1 #include <stdint.h>
2
3 #include "util.h"
4 #include "sha2.h"
5
6 /* Hashes:
7  *   SHA-224
8  *   SHA-256
9  *   SHA-384
10  *   SHA-512
11  *   SHA-512/224
12  *   SHA-512/256
13  */
14
15 /* From Fitz */
16 typedef struct {
17         unsigned int state[8];
18         unsigned int count[2];
19         union {
20                 unsigned char u8[64];
21                 unsigned int u32[16];
22         } buffer;
23 } fz_sha256;
24
25 void fz_sha256_init(fz_sha256 *state);
26 void fz_sha256_update(fz_sha256 *state, const unsigned char *input, unsigned int inlen);
27 void fz_sha256_final(fz_sha256 *state, unsigned char digest[32]);
28
29 /* SHA-256 */
30 void sha256_hash(uint8_t out[32], const uint8_t *data, int len)
31 {
32         fz_sha256 state = {};
33
34         fz_sha256_init(&state);
35         fz_sha256_update(&state, data, len);
36         fz_sha256_final(&state, out);
37 }
38
39 /* Test */
40 void sha256_test(void)
41 {
42         uint8_t in[]    = "hello";
43         uint8_t out[32] = {};
44
45         sha256_hash(out, in, sizeof(in)-1);
46
47         hexdump("Input:",  "\t%04x: ", in,  sizeof(in)-1);
48         hexdump("Output:", "\t%04x: ", out, sizeof(out));
49 }