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