xref: /aosp_15_r20/external/selinux/libsemanage/src/sha256.h (revision 2d543d20722ada2425b5bdab9d0d1d29470e7bba)
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