mirror of
https://github.com/SELinuxProject/selinux
synced 2025-01-17 10:50:43 +00:00
ed4813be61
Since cil doesn't store module name and module version in module itself, there's no simple way how to compare that installed module is the same version as the module which is supposed to be installed. Even though the version was not used by semodule itself, it was apparently used by some team. With `semodule -l --checksum` users get SHA256 hashes of modules and could compare them with their files which is faster than installing modules again and again. E.g. # time ( semodule -l --checksum | grep localmodule /usr/libexec/selinux/hll/pp localmodule.pp | sha256sum ) localmodule db002f64ddfa3983257b42b54da7b182c9b2e476f47880ae3494f9099e1a42bd db002f64ddfa3983257b42b54da7b182c9b2e476f47880ae3494f9099e1a42bd - real 0m0.876s user 0m0.849s sys 0m0.028s vs # time semodule -i localmodule.pp real 0m6.147s user 0m5.800s sys 0m0.231s Signed-off-by: Petr Lautrbach <plautrba@redhat.com> Acked-by: James Carter <jwcart2@gmail.com>
90 lines
3.6 KiB
C
90 lines
3.6 KiB
C
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// WjCryptLib_Sha256
|
|
//
|
|
// Implementation of SHA256 hash function.
|
|
// Original author: Tom St Denis, tomstdenis@gmail.com, http://libtom.org
|
|
// Modified by WaterJuice retaining Public Domain license.
|
|
//
|
|
// This is free and unencumbered software released into the public domain - June 2013 waterjuice.org
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#pragma once
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// IMPORTS
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include <stdint.h>
|
|
#include <stdio.h>
|
|
|
|
typedef struct
|
|
{
|
|
uint64_t length;
|
|
uint32_t state[8];
|
|
uint32_t curlen;
|
|
uint8_t buf[64];
|
|
} Sha256Context;
|
|
|
|
#define SHA256_HASH_SIZE ( 256 / 8 )
|
|
|
|
typedef struct
|
|
{
|
|
uint8_t bytes [SHA256_HASH_SIZE];
|
|
} SHA256_HASH;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// PUBLIC FUNCTIONS
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Sha256Initialise
|
|
//
|
|
// Initialises a SHA256 Context. Use this to initialise/reset a context.
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
void
|
|
Sha256Initialise
|
|
(
|
|
Sha256Context* Context // [out]
|
|
);
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Sha256Update
|
|
//
|
|
// Adds data to the SHA256 context. This will process the data and update the internal state of the context. Keep on
|
|
// calling this function until all the data has been added. Then call Sha256Finalise to calculate the hash.
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
void
|
|
Sha256Update
|
|
(
|
|
Sha256Context* Context, // [in out]
|
|
void const* Buffer, // [in]
|
|
uint32_t BufferSize // [in]
|
|
);
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Sha256Finalise
|
|
//
|
|
// Performs the final calculation of the hash and returns the digest (32 byte buffer containing 256bit hash). After
|
|
// calling this, Sha256Initialised must be used to reuse the context.
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
void
|
|
Sha256Finalise
|
|
(
|
|
Sha256Context* Context, // [in out]
|
|
SHA256_HASH* Digest // [out]
|
|
);
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Sha256Calculate
|
|
//
|
|
// Combines Sha256Initialise, Sha256Update, and Sha256Finalise into one function. Calculates the SHA256 hash of the
|
|
// buffer.
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
void
|
|
Sha256Calculate
|
|
(
|
|
void const* Buffer, // [in]
|
|
uint32_t BufferSize, // [in]
|
|
SHA256_HASH* Digest // [in]
|
|
);
|