1/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 2// LibSha1 3// 4// Implementation of SHA1 hash function. 5// Original author: Steve Reid <sreid@sea-to-sky.net> 6// Contributions by: James H. Brown <jbrown@burgoyne.com>, Saul Kravitz <Saul.Kravitz@celera.com>, 7// and Ralph Giles <giles@ghostscript.com> 8// Modified by WaterJuice retaining Public Domain license. 9// 10// This is free and unencumbered software released into the public domain - June 2013 waterjuice.org 11/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 12 13#ifndef _sha1_h_ 14#define _sha1_h_ 15 16/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 17// IMPORTS 18/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 19 20#include <stdint.h> 21#include <stdio.h> 22 23/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 24// TYPES 25/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 26 27// Sha1Context - This must be initialised using Sha1Initialised. Do not modify the contents of this structure directly. 28typedef struct 29{ 30 uint32_t State[5]; 31 uint32_t Count[2]; 32 uint8_t Buffer[64]; 33} Sha1Context; 34 35#define SHA1_HASH_SIZE ( 160 / 8 ) 36 37typedef struct 38{ 39 uint8_t bytes [SHA1_HASH_SIZE]; 40} SHA1_HASH; 41 42/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 43// PUBLIC FUNCTIONS 44/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 45 46/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 47// Sha1Initialise 48// 49// Initialises an SHA1 Context. Use this to initialise/reset a context. 50/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 51void 52 Sha1Initialise 53 ( 54 Sha1Context* Context 55 ); 56 57/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 58// Sha1Update 59// 60// Adds data to the SHA1 context. This will process the data and update the internal state of the context. Keep on 61// calling this function until all the data has been added. Then call Sha1Finalise to calculate the hash. 62/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 63void 64 Sha1Update 65 ( 66 Sha1Context* Context, 67 void* Buffer, 68 uint32_t BufferSize 69 ); 70 71/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 72// Sha1Finalise 73// 74// Performs the final calculation of the hash and returns the digest (20 byte buffer containing 160bit hash). After 75// calling this, Sha1Initialised must be used to reuse the context. 76/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 77void 78 Sha1Finalise 79 ( 80 Sha1Context* Context, 81 SHA1_HASH* Digest 82 ); 83 84/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 85#endif //_sha1_h_ 86