• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
28 typedef 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 
37 typedef 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 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
51 void
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 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
63 void
64     Sha1Update
65     (
66         Sha1Context*        Context,
67         const 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 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
77 void
78     Sha1Finalise
79     (
80         Sha1Context*                Context,
81         SHA1_HASH*                  Digest
82     );
83 
84 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
85 #endif //_sha1_h_
86