]>
Commit | Line | Data |
---|---|---|
63d6aac5 RZ |
1 | #ifndef SHA256 |
2 | #define SHA256 | |
3 | ||
4 | #include "iw.h" | |
5 | #define SHA256_BLOCK_SIZE 64 | |
6 | ||
7 | #define LOAD32B(addr) \ | |
8 | ((__u32)((addr)[0] << 24) | ((addr)[1] << 16) | \ | |
9 | ((addr)[2] << 8) | (addr)[3]) | |
10 | ||
11 | #define STORE64B(addr, data) \ | |
12 | do { (addr)[0] = (__u8)((data) >> 56); (addr)[1] = (__u8)((data) >> 48); \ | |
13 | (addr)[2] = (__u8)((data) >> 40); (addr)[3] = (__u8)((data) >> 32); \ | |
14 | (addr)[4] = (__u8)((data) >> 24); (addr)[5] = (__u8)((data) >> 16); \ | |
15 | (addr)[6] = (__u8)((data) >> 8); (addr)[7] = (__u8)((data) & 0xff); \ | |
16 | } while (0) | |
17 | ||
18 | #define STORE32B(addr, data) \ | |
19 | do { (addr)[0] = (__u8)(((data) >> 24) & 0xff); \ | |
20 | (addr)[1] = (__u8)(((data) >> 16) & 0xff); \ | |
21 | (addr)[2] = (__u8)(((data) >> 8) & 0xff); \ | |
22 | (addr)[3] = (__u8)((data) & 0xff); } while (0) | |
23 | ||
24 | struct sha256_state { | |
25 | __u64 length; | |
26 | __u32 state[8], curlen; | |
27 | __u8 buf[SHA256_BLOCK_SIZE]; | |
28 | }; | |
29 | ||
30 | /** | |
31 | * SHA256 Hashing | |
32 | * @addr: pointers to the data area | |
33 | * @len: Lengths of the data block | |
34 | * @res: Buffer for the digest | |
35 | * Returns: 0 on success, -1 of failure | |
36 | */ | |
37 | int sha256(const unsigned char *addr, const size_t len, | |
38 | unsigned char *res); | |
39 | ||
40 | /* Initialize the hash state */ | |
41 | void sha256_init(struct sha256_state *md); | |
42 | ||
43 | /** | |
44 | * Process a block of memory though the hash | |
45 | * @param md The hash state | |
46 | * @param in The data to hash | |
47 | * @param inlen The length of the data (octets) | |
48 | * @return CRYPT_OK if successful | |
49 | */ | |
50 | int sha256_process(struct sha256_state *md, const unsigned char *in, | |
51 | unsigned long inlen); | |
52 | ||
53 | /** | |
54 | * Terminate the hash to get the digest | |
55 | * @param md The hash state | |
56 | * @param out [out] The destination of the hash (32 bytes) | |
57 | * @return CRYPT_OK if successful | |
58 | */ | |
59 | int sha256_done(struct sha256_state *md, unsigned char *out); | |
60 | ||
61 | #endif |