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