Sunil Ravi | 44e0e58 | 2022-03-05 11:09:09 -0800 | [diff] [blame] | 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 |