xref: /aosp_15_r20/external/iw/sha256.h (revision 92022041c981f431db0b590d0c3272306d0ea2a2)
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
62