code cleanups and CI updates.
This commit is contained in:
parent
146ccc71f3
commit
fcf4bcd7b7
|
@ -9,14 +9,14 @@ jobs:
|
|||
# Specify the execution environment. You can specify an image from Docker Hub or use one of our convenience images from CircleCI's Developer Hub.
|
||||
# See: https://circleci.com/docs/configuration-reference/#executor-job
|
||||
docker:
|
||||
- image: kisom/sc-dev:1.0.0
|
||||
- image: git.wntrmute.dev/sc/dev:alpine
|
||||
# Add steps to the job
|
||||
# See: https://circleci.com/docs/configuration-reference/#steps
|
||||
steps:
|
||||
- checkout
|
||||
- run:
|
||||
name: Setup cmake build
|
||||
command: ./scripts/setup-cmake.sh
|
||||
command: setup-cmake.sh
|
||||
|
||||
# Orchestrate jobs using workflows
|
||||
# See: https://circleci.com/docs/configuration-reference/#workflows
|
||||
|
|
18
.travis.yml
18
.travis.yml
|
@ -1,18 +0,0 @@
|
|||
language: cpp
|
||||
compiler:
|
||||
- clang
|
||||
- gcc
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
packages:
|
||||
- gcc-4.8
|
||||
- g++-4.8
|
||||
- clang
|
||||
- python-sphinx
|
||||
- python-sphinx-rtd-theme
|
||||
- pkg-config
|
||||
install:
|
||||
- if [ "$CXX" = "g++" ]; then export CXX="g++-4.8" CC="gcc-4.8"; fi
|
||||
script: "./autobuild && ./do-release"
|
18
Dockerfile
18
Dockerfile
|
@ -1,18 +0,0 @@
|
|||
FROM ubuntu:jammy
|
||||
LABEL authors="kyle"
|
||||
|
||||
ARG DEBIAN_FRONTEND=noninteractive
|
||||
ARG AUTOMATED_MODE=yes
|
||||
WORKDIR /tmp
|
||||
ENV TZ=America/Los_Angeles
|
||||
RUN apt-get update -y && apt-get install -y gpg sudo ca-certificates apt-transport-https ssh tar gzip
|
||||
|
||||
RUN mkdir scripts
|
||||
WORKDIR scripts
|
||||
ADD scripts .
|
||||
WORKDIR /tmp
|
||||
RUN bash ./scripts/install-depdendencies.sh && rm -r *
|
||||
RUN apt-get autoclean && \
|
||||
apt-get autoremove && \
|
||||
apt-get clean && \
|
||||
rm -rf /var/lib/apt/lists/*
|
207
sha256.cc
207
sha256.cc
|
@ -147,9 +147,9 @@ SHA256::reset()
|
|||
uint32_t
|
||||
SHA256::chunkToUint32(uint32_t offset)
|
||||
{
|
||||
uint32_t chunk = 0;
|
||||
uint32_t chunk = 0U;
|
||||
|
||||
for (uint32_t i = offset; i < offset+4; i++) {
|
||||
for (uint32_t i = offset; i < offset+4U; i++) {
|
||||
chunk <<= 8;
|
||||
chunk += static_cast<uint32_t>(this->mb[i]);
|
||||
}
|
||||
|
@ -161,9 +161,9 @@ SHA256::chunkToUint32(uint32_t offset)
|
|||
uint32_t
|
||||
SHA256::uint32ToChunk(uint32_t offset)
|
||||
{
|
||||
uint32_t chunk = 0;
|
||||
uint32_t chunk = 0U;
|
||||
|
||||
for (uint32_t i = offset; i < offset+4; i++) {
|
||||
for (uint32_t i = offset; i < offset+4U; i++) {
|
||||
chunk <<= 8;
|
||||
chunk += static_cast<uint32_t>(this->mb[i]);
|
||||
}
|
||||
|
@ -176,10 +176,10 @@ SHA256::uint32ToChunk(uint32_t offset)
|
|||
static void
|
||||
uint32ToChunkInPlace(uint32_t x, uint8_t *chunk)
|
||||
{
|
||||
chunk[0] = (x & 0xff000000) >> 24;
|
||||
chunk[1] = (x & 0x00ff0000) >> 16;
|
||||
chunk[2] = (x & 0x0000ff00) >> 8;
|
||||
chunk[3] = (x & 0x000000ff);
|
||||
chunk[0] = static_cast<uint8_t>((x & 0xff000000u) >> 24);
|
||||
chunk[1] = static_cast<uint8_t>((x & 0x00ff0000u) >> 16);
|
||||
chunk[2] = static_cast<uint8_t>((x & 0x0000ff00U) >> 8);
|
||||
chunk[3] = static_cast<uint8_t>(x & 0x000000ffU);
|
||||
}
|
||||
|
||||
|
||||
|
@ -188,26 +188,26 @@ void
|
|||
SHA256::updateMessageBlock()
|
||||
{
|
||||
uint32_t w[64];
|
||||
uint32_t i = 0;
|
||||
uint32_t chunk = 0;
|
||||
uint32_t a = 0;
|
||||
uint32_t b = 0;
|
||||
uint32_t c = 0;
|
||||
uint32_t d = 0;
|
||||
uint32_t e = 0;
|
||||
uint32_t f = 0;
|
||||
uint32_t g = 0;
|
||||
uint32_t h = 0;
|
||||
uint32_t i = 0U;
|
||||
uint32_t chunk = 0U;
|
||||
uint32_t a = 0U;
|
||||
uint32_t b = 0U;
|
||||
uint32_t c = 0U;
|
||||
uint32_t d = 0U;
|
||||
uint32_t e = 0U;
|
||||
uint32_t f = 0U;
|
||||
uint32_t g = 0U;
|
||||
uint32_t h = 0U;
|
||||
|
||||
while (i < 16) {
|
||||
while (i < 16U) {
|
||||
w[i++] = this->chunkToUint32(chunk);
|
||||
chunk += 4;
|
||||
chunk += 4U;
|
||||
}
|
||||
this->mbi = 0;
|
||||
this->mbi = 0U;
|
||||
|
||||
for (i = 16; i < 64; i++) {
|
||||
w[i] = sha_sigma1(w[i - 2]) + w[i - 7] +
|
||||
sha_sigma0(w[i - 15]) + w[i - 16];
|
||||
for (i = 16U; i < 64U; i++) {
|
||||
w[i] = sha_sigma1(w[i - 2U]) + w[i - 7U] +
|
||||
sha_sigma0(w[i - 15U]) + w[i - 16U];
|
||||
}
|
||||
|
||||
a = this->i_hash[0];
|
||||
|
@ -219,9 +219,9 @@ SHA256::updateMessageBlock()
|
|||
g = this->i_hash[6];
|
||||
h = this->i_hash[7];
|
||||
|
||||
for (i = 0; i < 64; i++) {
|
||||
uint32_t t1 = 0;
|
||||
uint32_t t2 = 0;
|
||||
for (i = 0U; i < 64U; i++) {
|
||||
uint32_t t1 = 0U;
|
||||
uint32_t t2 = 0U;
|
||||
t1 = h + sha_Sigma1(e) + sha_ch(e, f, g) + sha256K[i] + w[i];
|
||||
t2 = sha_Sigma0(a) + sha_maj(a, b, c);
|
||||
h = g;
|
||||
|
@ -248,38 +248,44 @@ SHA256::updateMessageBlock()
|
|||
EMSHAResult
|
||||
SHA256::Update(const std::uint8_t *message, std::uint32_t messageLength)
|
||||
{
|
||||
EMSHAResult res;
|
||||
|
||||
// Checking invariants:
|
||||
// If the message length is zero, there's nothing to be done.
|
||||
if (0 == messageLength) { return EMSHAResult::OK; }
|
||||
if (messageLength == 0U) { res = EMSHAResult::OK; }
|
||||
|
||||
// The message passed in cannot be the null pointer if the
|
||||
// message length is greater than 0.
|
||||
if (message == nullptr) { return EMSHAResult::NullPointer; }
|
||||
else if (message == nullptr) { res = EMSHAResult::NullPointer; }
|
||||
|
||||
// If the SHA256 object is in a bad state, don't proceed.
|
||||
if (this->hStatus != EMSHAResult::OK) { return this->hStatus; }
|
||||
else if (this->hStatus != EMSHAResult::OK) { res = this->hStatus; }
|
||||
|
||||
// If the hash has been finalised, don't proceed.
|
||||
if (this->hComplete != static_cast<uint8_t>(0)) { return EMSHAResult::InvalidState; }
|
||||
else if (this->hComplete != 0U) { res = EMSHAResult::InvalidState; }
|
||||
|
||||
// Invariants satisfied by here.
|
||||
else {
|
||||
for (uint32_t i = 0U; i < messageLength; i++) {
|
||||
this->mb[this->mbi] = *(message + i);
|
||||
mbi++;
|
||||
|
||||
for (uint32_t i = 0; i < messageLength; i++) {
|
||||
this->mb[this->mbi] = *(message + i);
|
||||
mbi++;
|
||||
if (EMSHAResult::OK == this->addLength(8U)) {
|
||||
if (SHA256_MB_SIZE == this->mbi) {
|
||||
this->updateMessageBlock();
|
||||
|
||||
if (EMSHAResult::OK == this->addLength(8)) {
|
||||
if (SHA256_MB_SIZE == this->mbi) {
|
||||
this->updateMessageBlock();
|
||||
|
||||
// Assumption: following the message block
|
||||
// write, the context should still be in a good
|
||||
// state.
|
||||
assert(EMSHAResult::OK == this->hStatus);
|
||||
// Assumption: following the message block
|
||||
// write, the context should still be in a good
|
||||
// state.
|
||||
assert(EMSHAResult::OK == this->hStatus);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
res = this->hStatus;
|
||||
}
|
||||
|
||||
return this->hStatus;
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
|
@ -289,18 +295,18 @@ SHA256::padMessage(uint8_t pc)
|
|||
// Assumption: the context is not in a corrupted state.
|
||||
assert(EMSHAResult::OK == this->hStatus);
|
||||
|
||||
if (this->mbi < (SHA256_MB_SIZE - 8)) {
|
||||
if (this->mbi < (SHA256_MB_SIZE - 8U)) {
|
||||
this->mb[this->mbi++] = pc;
|
||||
} else {
|
||||
bool pc_add = false;
|
||||
|
||||
if (this->mbi < SHA256_MB_SIZE - 1) {
|
||||
if (this->mbi < SHA256_MB_SIZE - 1U) {
|
||||
this->mb[this->mbi++] = pc;
|
||||
pc_add = true;
|
||||
}
|
||||
|
||||
while (this->mbi < SHA256_MB_SIZE) {
|
||||
this->mb[this->mbi++] = 0;
|
||||
this->mb[this->mbi++] = 0U;
|
||||
}
|
||||
|
||||
this->updateMessageBlock();
|
||||
|
@ -313,28 +319,28 @@ SHA256::padMessage(uint8_t pc)
|
|||
assert(EMSHAResult::OK == this->hStatus);
|
||||
}
|
||||
|
||||
while (this->mbi < (SHA256_MB_SIZE - 8)) {
|
||||
this->mb[this->mbi++] = 0;
|
||||
while (this->mbi < (SHA256_MB_SIZE - 8U)) {
|
||||
this->mb[this->mbi++] = 0U;
|
||||
}
|
||||
|
||||
// lstart marks the starting point for the length packing.
|
||||
uint32_t const lstart = SHA256_MB_SIZE - 8;
|
||||
uint32_t const lstart = SHA256_MB_SIZE - 8U;
|
||||
|
||||
this->mb[lstart] = static_cast<uint8_t>(this->mlen >> 56);
|
||||
this->mb[lstart + 1] =
|
||||
static_cast<uint8_t>((this->mlen & 0x00ff000000000000L) >> 48);
|
||||
this->mb[lstart + 2] =
|
||||
static_cast<uint8_t>((this->mlen & 0x0000ff0000000000L) >> 40);
|
||||
this->mb[lstart + 3] =
|
||||
static_cast<uint8_t>((this->mlen & 0x000000ff00000000L) >> 32);
|
||||
this->mb[lstart + 4] =
|
||||
static_cast<uint8_t>((this->mlen & 0x00000000ff000000L) >> 24);
|
||||
this->mb[lstart + 5] =
|
||||
static_cast<uint8_t>((this->mlen & 0x0000000000ff0000L) >> 16);
|
||||
this->mb[lstart + 6] =
|
||||
static_cast<uint8_t>((this->mlen & 0x000000000000ff00L) >> 8);
|
||||
this->mb[lstart + 7] =
|
||||
static_cast<uint8_t>(this->mlen & 0x00000000000000ffL);
|
||||
this->mb[lstart + 1U] =
|
||||
static_cast<uint8_t>((this->mlen & 0x00ff000000000000U) >> 48);
|
||||
this->mb[lstart + 2U] =
|
||||
static_cast<uint8_t>((this->mlen & 0x0000ff0000000000U) >> 40);
|
||||
this->mb[lstart + 3U] =
|
||||
static_cast<uint8_t>((this->mlen & 0x000000ff00000000U) >> 32);
|
||||
this->mb[lstart + 4U] =
|
||||
static_cast<uint8_t>((this->mlen & 0x00000000ff000000U) >> 24);
|
||||
this->mb[lstart + 5U] =
|
||||
static_cast<uint8_t>((this->mlen & 0x0000000000ff0000U) >> 16);
|
||||
this->mb[lstart + 6U] =
|
||||
static_cast<uint8_t>((this->mlen & 0x000000000000ff00U) >> 8);
|
||||
this->mb[lstart + 7U] =
|
||||
static_cast<uint8_t>(this->mlen & 0x00000000000000ffUL);
|
||||
|
||||
this->updateMessageBlock();
|
||||
|
||||
|
@ -347,69 +353,78 @@ SHA256::padMessage(uint8_t pc)
|
|||
EMSHAResult
|
||||
SHA256::Finalise(std::uint8_t *digest)
|
||||
{
|
||||
EMSHAResult res;
|
||||
|
||||
// Check invariants.
|
||||
// The digest cannot be a null pointer; this library allocates
|
||||
// no memory of its own.
|
||||
if (nullptr == digest) { return EMSHAResult::NullPointer; }
|
||||
if (digest == nullptr) { res = EMSHAResult::NullPointer; }
|
||||
|
||||
// If the SHA256 object is in a bad state, don't proceed.
|
||||
if (EMSHAResult::OK != this->hStatus) { return this->hStatus; }
|
||||
else if (this->hStatus != EMSHAResult::OK) { res = this->hStatus; }
|
||||
|
||||
// If the hash has been finalised, don't proceed.
|
||||
if (0 != this->hComplete) { return EMSHAResult::InvalidState; }
|
||||
else if (this->hComplete != 0U) { res = EMSHAResult::InvalidState; }
|
||||
|
||||
// Invariants satisfied by here.
|
||||
else {
|
||||
this->padMessage(0x80U);
|
||||
|
||||
this->padMessage(0x80);
|
||||
// Assumption: padding the message block has not left the context in a
|
||||
// corrupted state.
|
||||
assert(EMSHAResult::OK == this->hStatus);
|
||||
std::fill(this->mb.begin(), this->mb.end(), 0);
|
||||
|
||||
// Assumption: padding the message block has not left the context in a
|
||||
// corrupted state.
|
||||
assert(EMSHAResult::OK == this->hStatus);
|
||||
std::fill(this->mb.begin(), this->mb.end(), 0);
|
||||
this->hComplete = 1U;
|
||||
this->mlen = 0U;
|
||||
|
||||
this->hComplete = 1;
|
||||
this->mlen = 0;
|
||||
uint32ToChunkInPlace(this->i_hash[0], digest);
|
||||
uint32ToChunkInPlace(this->i_hash[1], digest + 4);
|
||||
uint32ToChunkInPlace(this->i_hash[2], digest + 8);
|
||||
uint32ToChunkInPlace(this->i_hash[3], digest + 12);
|
||||
uint32ToChunkInPlace(this->i_hash[4], digest + 16);
|
||||
uint32ToChunkInPlace(this->i_hash[5], digest + 20);
|
||||
uint32ToChunkInPlace(this->i_hash[6], digest + 24);
|
||||
uint32ToChunkInPlace(this->i_hash[7], digest + 28);
|
||||
|
||||
uint32ToChunkInPlace(this->i_hash[0], digest);
|
||||
uint32ToChunkInPlace(this->i_hash[1], digest + 4);
|
||||
uint32ToChunkInPlace(this->i_hash[2], digest + 8);
|
||||
uint32ToChunkInPlace(this->i_hash[3], digest + 12);
|
||||
uint32ToChunkInPlace(this->i_hash[4], digest + 16);
|
||||
uint32ToChunkInPlace(this->i_hash[5], digest + 20);
|
||||
uint32ToChunkInPlace(this->i_hash[6], digest + 24);
|
||||
uint32ToChunkInPlace(this->i_hash[7], digest + 28);
|
||||
res = EMSHAResult::OK;
|
||||
}
|
||||
|
||||
return EMSHAResult::OK;
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
EMSHAResult
|
||||
SHA256::Result(std::uint8_t *digest)
|
||||
{
|
||||
EMSHAResult res;
|
||||
// Check invariants.
|
||||
|
||||
// The digest cannot be a null pointer; this library allocates
|
||||
// no memory of its own.
|
||||
if (nullptr == digest) { return EMSHAResult::NullPointer; }
|
||||
if (nullptr == digest) { res = EMSHAResult::NullPointer; }
|
||||
|
||||
// If the SHA256 object is in a bad state, don't proceed.
|
||||
if (EMSHAResult::OK != this->hStatus) { return this->hStatus; }
|
||||
else if (EMSHAResult::OK != this->hStatus) { res = this->hStatus; }
|
||||
|
||||
// Invariants satisfied by here.
|
||||
|
||||
if (this->hComplete == 0U) {
|
||||
return this->Finalise(digest);
|
||||
else if (this->hComplete == 0U) {
|
||||
res = this->Finalise(digest);
|
||||
}
|
||||
|
||||
uint32ToChunkInPlace(this->i_hash[0], digest);
|
||||
uint32ToChunkInPlace(this->i_hash[1], digest + 4);
|
||||
uint32ToChunkInPlace(this->i_hash[2], digest + 8);
|
||||
uint32ToChunkInPlace(this->i_hash[3], digest + 12);
|
||||
uint32ToChunkInPlace(this->i_hash[4], digest + 16);
|
||||
uint32ToChunkInPlace(this->i_hash[5], digest + 20);
|
||||
uint32ToChunkInPlace(this->i_hash[6], digest + 24);
|
||||
uint32ToChunkInPlace(this->i_hash[7], digest + 28);
|
||||
else {
|
||||
uint32ToChunkInPlace(this->i_hash[0], digest);
|
||||
uint32ToChunkInPlace(this->i_hash[1], digest + 4);
|
||||
uint32ToChunkInPlace(this->i_hash[2], digest + 8);
|
||||
uint32ToChunkInPlace(this->i_hash[3], digest + 12);
|
||||
uint32ToChunkInPlace(this->i_hash[4], digest + 16);
|
||||
uint32ToChunkInPlace(this->i_hash[5], digest + 20);
|
||||
uint32ToChunkInPlace(this->i_hash[6], digest + 24);
|
||||
uint32ToChunkInPlace(this->i_hash[7], digest + 28);
|
||||
res = EMSHAResult::OK;
|
||||
}
|
||||
|
||||
return EMSHAResult::OK;
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue