1*2d543d20SAndroid Build Coastguard Worker //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 2*2d543d20SAndroid Build Coastguard Worker // WjCryptLib_Sha256 3*2d543d20SAndroid Build Coastguard Worker // 4*2d543d20SAndroid Build Coastguard Worker // Implementation of SHA256 hash function. 5*2d543d20SAndroid Build Coastguard Worker // Original author: Tom St Denis, [email protected], http://libtom.org 6*2d543d20SAndroid Build Coastguard Worker // Modified by WaterJuice retaining Public Domain license. 7*2d543d20SAndroid Build Coastguard Worker // 8*2d543d20SAndroid Build Coastguard Worker // This is free and unencumbered software released into the public domain - June 2013 waterjuice.org 9*2d543d20SAndroid Build Coastguard Worker //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 10*2d543d20SAndroid Build Coastguard Worker 11*2d543d20SAndroid Build Coastguard Worker #pragma once 12*2d543d20SAndroid Build Coastguard Worker 13*2d543d20SAndroid Build Coastguard Worker //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 14*2d543d20SAndroid Build Coastguard Worker // IMPORTS 15*2d543d20SAndroid Build Coastguard Worker //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 16*2d543d20SAndroid Build Coastguard Worker 17*2d543d20SAndroid Build Coastguard Worker #include <stdint.h> 18*2d543d20SAndroid Build Coastguard Worker #include <stdio.h> 19*2d543d20SAndroid Build Coastguard Worker 20*2d543d20SAndroid Build Coastguard Worker typedef struct 21*2d543d20SAndroid Build Coastguard Worker { 22*2d543d20SAndroid Build Coastguard Worker uint64_t length; 23*2d543d20SAndroid Build Coastguard Worker uint32_t state[8]; 24*2d543d20SAndroid Build Coastguard Worker uint32_t curlen; 25*2d543d20SAndroid Build Coastguard Worker uint8_t buf[64]; 26*2d543d20SAndroid Build Coastguard Worker } Sha256Context; 27*2d543d20SAndroid Build Coastguard Worker 28*2d543d20SAndroid Build Coastguard Worker #define SHA256_HASH_SIZE ( 256 / 8 ) 29*2d543d20SAndroid Build Coastguard Worker 30*2d543d20SAndroid Build Coastguard Worker typedef struct 31*2d543d20SAndroid Build Coastguard Worker { 32*2d543d20SAndroid Build Coastguard Worker uint8_t bytes [SHA256_HASH_SIZE]; 33*2d543d20SAndroid Build Coastguard Worker } SHA256_HASH; 34*2d543d20SAndroid Build Coastguard Worker 35*2d543d20SAndroid Build Coastguard Worker //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 36*2d543d20SAndroid Build Coastguard Worker // PUBLIC FUNCTIONS 37*2d543d20SAndroid Build Coastguard Worker //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 38*2d543d20SAndroid Build Coastguard Worker 39*2d543d20SAndroid Build Coastguard Worker //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 40*2d543d20SAndroid Build Coastguard Worker // Sha256Initialise 41*2d543d20SAndroid Build Coastguard Worker // 42*2d543d20SAndroid Build Coastguard Worker // Initialises a SHA256 Context. Use this to initialise/reset a context. 43*2d543d20SAndroid Build Coastguard Worker //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 44*2d543d20SAndroid Build Coastguard Worker void 45*2d543d20SAndroid Build Coastguard Worker Sha256Initialise 46*2d543d20SAndroid Build Coastguard Worker ( 47*2d543d20SAndroid Build Coastguard Worker Sha256Context* Context // [out] 48*2d543d20SAndroid Build Coastguard Worker ); 49*2d543d20SAndroid Build Coastguard Worker 50*2d543d20SAndroid Build Coastguard Worker //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 51*2d543d20SAndroid Build Coastguard Worker // Sha256Update 52*2d543d20SAndroid Build Coastguard Worker // 53*2d543d20SAndroid Build Coastguard Worker // Adds data to the SHA256 context. This will process the data and update the internal state of the context. Keep on 54*2d543d20SAndroid Build Coastguard Worker // calling this function until all the data has been added. Then call Sha256Finalise to calculate the hash. 55*2d543d20SAndroid Build Coastguard Worker //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 56*2d543d20SAndroid Build Coastguard Worker void 57*2d543d20SAndroid Build Coastguard Worker Sha256Update 58*2d543d20SAndroid Build Coastguard Worker ( 59*2d543d20SAndroid Build Coastguard Worker Sha256Context* Context, // [in out] 60*2d543d20SAndroid Build Coastguard Worker void const* Buffer, // [in] 61*2d543d20SAndroid Build Coastguard Worker uint32_t BufferSize // [in] 62*2d543d20SAndroid Build Coastguard Worker ); 63*2d543d20SAndroid Build Coastguard Worker 64*2d543d20SAndroid Build Coastguard Worker //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 65*2d543d20SAndroid Build Coastguard Worker // Sha256Finalise 66*2d543d20SAndroid Build Coastguard Worker // 67*2d543d20SAndroid Build Coastguard Worker // Performs the final calculation of the hash and returns the digest (32 byte buffer containing 256bit hash). After 68*2d543d20SAndroid Build Coastguard Worker // calling this, Sha256Initialised must be used to reuse the context. 69*2d543d20SAndroid Build Coastguard Worker //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 70*2d543d20SAndroid Build Coastguard Worker void 71*2d543d20SAndroid Build Coastguard Worker Sha256Finalise 72*2d543d20SAndroid Build Coastguard Worker ( 73*2d543d20SAndroid Build Coastguard Worker Sha256Context* Context, // [in out] 74*2d543d20SAndroid Build Coastguard Worker SHA256_HASH* Digest // [out] 75*2d543d20SAndroid Build Coastguard Worker ); 76*2d543d20SAndroid Build Coastguard Worker 77*2d543d20SAndroid Build Coastguard Worker //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 78*2d543d20SAndroid Build Coastguard Worker // Sha256Calculate 79*2d543d20SAndroid Build Coastguard Worker // 80*2d543d20SAndroid Build Coastguard Worker // Combines Sha256Initialise, Sha256Update, and Sha256Finalise into one function. Calculates the SHA256 hash of the 81*2d543d20SAndroid Build Coastguard Worker // buffer. 82*2d543d20SAndroid Build Coastguard Worker //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 83*2d543d20SAndroid Build Coastguard Worker void 84*2d543d20SAndroid Build Coastguard Worker Sha256Calculate 85*2d543d20SAndroid Build Coastguard Worker ( 86*2d543d20SAndroid Build Coastguard Worker void const* Buffer, // [in] 87*2d543d20SAndroid Build Coastguard Worker uint32_t BufferSize, // [in] 88*2d543d20SAndroid Build Coastguard Worker SHA256_HASH* Digest // [in] 89*2d543d20SAndroid Build Coastguard Worker ); 90