Skip to content

Commit

Permalink
Merge pull request #18 from itzmeanjan/incremental-hashing
Browse files Browse the repository at this point in the history
Support Incremental Absorption and Squeezing
  • Loading branch information
itzmeanjan committed Jul 11, 2023
2 parents 63231e8 + 7ca43f9 commit a90d0af
Show file tree
Hide file tree
Showing 43 changed files with 26,211 additions and 1,522 deletions.
4 changes: 1 addition & 3 deletions .github/workflows/test_ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,14 @@ on:
jobs:
build:

runs-on: ubuntu-20.04
runs-on: ubuntu-22.04

steps:
- uses: actions/checkout@v3
- name: Setup Compiler
run: |
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 9
- name: Install Python Dependencies
run: python3 -m pip install -r wrapper/python/requirements.txt --user
- name: Execute Tests
run: make
- name: Cleanup
Expand Down
44 changes: 24 additions & 20 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,32 +1,36 @@
CXX = g++
CXXFLAGS = -std=c++20 -Wall -Wextra -pedantic
OPTFLAGS = -O3 -march=native -mtune=native
IFLAGS = -I ./include
CXX_FLAGS = -std=c++20
WARN_FLAGS = -Wall -Wextra -pedantic
OPT_FLAGS = -O3 -march=native -mtune=native
I_FLAGS = -I ./include

all: tests
all: test

wrapper/libsha3.so: wrapper/sha3.cpp include/*.hpp
$(CXX) $(CXXFLAGS) $(OPTFLAGS) $(IFLAGS) -fPIC --shared $< -o $@
tests/a.out: tests/main.cpp include/*.hpp include/tests/*.hpp
$(CXX) $(CXX_FLAGS) $(WARN_FLAGS) $(OPT_FLAGS) $(I_FLAGS) $< -o $@

lib: wrapper/libsha3.so

test/a.out: test/main.cpp include/*.hpp include/test/*.hpp
$(CXX) $(CXXFLAGS) $(OPTFLAGS) $(IFLAGS) $< -o $@

tests: lib test/a.out
cd wrapper/python; python3 -m pytest -v; cd ..
./test/a.out
test: tests/a.out
./$<

clean:
find . -name '*.out' -o -name '*.o' -o -name '*.so' -o -name '*.gch' | xargs rm -rf

format:
find . -name '*.cpp' -o -name '*.hpp' | xargs clang-format -i --style="Mozilla" && python3 -m black wrapper/python/*.py
find . -name '*.cpp' -o -name '*.hpp' | xargs clang-format -i --style="Mozilla"

bench/a.out: bench/main.cpp include/*.hpp include/bench/*.hpp
# make sure you've google-benchmark globally installed;
# see https://github.com/google/benchmark/tree/60b16f1#installation
$(CXX) $(CXXFLAGS) $(OPTFLAGS) $(IFLAGS) $< -lbenchmark -o $@
benchmarks/bench.out: benchmarks/main.cpp include/*.hpp include/benchmarks/*.hpp
# In case you haven't built google-benchmark with libPFM support.
# More @ https://gist.github.com/itzmeanjan/05dc3e946f635d00c5e0b21aae6203a7
$(CXX) $(CXX_FLAGS) $(WARN_FLAGS) $(OPT_FLAGS) $(I_FLAGS) $< -lbenchmark -lpthread -o $@

benchmark: bench/a.out
benchmark: benchmarks/bench.out
./$< --benchmark_counters_tabular=true

benchmarks/perf.out: benchmarks/main.cpp include/*.hpp include/benchmarks/*.hpp
# In case you've built google-benchmark with libPFM support.
# More @ https://gist.github.com/itzmeanjan/05dc3e946f635d00c5e0b21aae6203a7
$(CXX) $(CXX_FLAGS) $(WARN_FLAGS) $(OPT_FLAGS) $(I_FLAGS) \
-DCYCLES_PER_BYTE -DINSTRUCTIONS_PER_CYCLE $< -lbenchmark -lpthread -lpfm -o $@

perf: benchmarks/perf.out
./$< --benchmark_counters_tabular=true --benchmark_perf_counters=CYCLES,INSTRUCTIONS
418 changes: 138 additions & 280 deletions README.md

Large diffs are not rendered by default.

68 changes: 0 additions & 68 deletions bench/main.cpp

This file was deleted.

21 changes: 21 additions & 0 deletions benchmarks/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#include "benchmarks/bench_hashing.hpp"
#include "benchmarks/bench_keccak.hpp"
#include "benchmarks/bench_xof.hpp"

// register keccak-p[1600, 24] permutation for benchmark
BENCHMARK(bench_sha3::keccakf1600);

// register sha3-{224, 256, 384, 512} hash function for benchmark
BENCHMARK(bench_sha3::sha3_224)->RangeMultiplier(2)->Range(32, 4096);
BENCHMARK(bench_sha3::sha3_256)->RangeMultiplier(2)->Range(32, 4096);
BENCHMARK(bench_sha3::sha3_384)->RangeMultiplier(2)->Range(32, 4096);
BENCHMARK(bench_sha3::sha3_512)->RangeMultiplier(2)->Range(32, 4096);

// register shake-{128, 256} extendable output function for benchmark
BENCHMARK(bench_sha3::shake128)
->ArgsProduct({ benchmark::CreateRange(32, 4096, 2), { 32, 64 } });
BENCHMARK(bench_sha3::shake256)
->ArgsProduct({ benchmark::CreateRange(32, 4096, 2), { 32, 64 } });

// benchmark runner main routine
BENCHMARK_MAIN();
50 changes: 0 additions & 50 deletions example/incremental_shake128.cpp

This file was deleted.

50 changes: 0 additions & 50 deletions example/incremental_shake256.cpp

This file was deleted.

22 changes: 11 additions & 11 deletions example/sha3_224.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#include "sha3_224.hpp"
#include "utils.hpp"
#include <iostream>
#include <vector>

// Compile it using
//
Expand All @@ -9,22 +10,21 @@ int
main()
{
constexpr size_t ilen = 32;
constexpr size_t olen = 28;
constexpr size_t olen = sha3_224::DIGEST_LEN;

uint8_t* msg = static_cast<uint8_t*>(std::malloc(ilen));
uint8_t* dig = static_cast<uint8_t*>(std::malloc(olen));
std::vector<uint8_t> msg(ilen, 0);
std::vector<uint8_t> dig(olen, 0);

sha3_utils::random_data<uint8_t>(msg, ilen);
std::memset(dig, 0, olen);
sha3_utils::random_data<uint8_t>(msg.data(), msg.size());

sha3_224::hash(msg, ilen, dig);
sha3_224::sha3_224 hasher;
hasher.absorb(msg.data(), msg.size());
hasher.finalize();
hasher.digest(dig.data());

std::cout << "SHA3-224" << std::endl << std::endl;
std::cout << "Input : " << sha3_utils::to_hex(msg, ilen) << std::endl;
std::cout << "Output : " << sha3_utils::to_hex(dig, olen) << std::endl;

std::free(msg);
std::free(dig);
std::cout << "Input : " << sha3_utils::to_hex(msg.data(), ilen) << "\n";
std::cout << "Output : " << sha3_utils::to_hex(dig.data(), olen) << "\n";

return EXIT_SUCCESS;
}
22 changes: 11 additions & 11 deletions example/sha3_256.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#include "sha3_256.hpp"
#include "utils.hpp"
#include <iostream>
#include <vector>

// Compile it using
//
Expand All @@ -9,22 +10,21 @@ int
main()
{
constexpr size_t ilen = 32;
constexpr size_t olen = 32;
constexpr size_t olen = sha3_256::DIGEST_LEN;

uint8_t* msg = static_cast<uint8_t*>(std::malloc(ilen));
uint8_t* dig = static_cast<uint8_t*>(std::malloc(olen));
std::vector<uint8_t> msg(ilen, 0);
std::vector<uint8_t> dig(olen, 0);

sha3_utils::random_data<uint8_t>(msg, ilen);
std::memset(dig, 0, olen);
sha3_utils::random_data<uint8_t>(msg.data(), msg.size());

sha3_256::hash(msg, ilen, dig);
sha3_256::sha3_256 hasher;
hasher.absorb(msg.data(), msg.size());
hasher.finalize();
hasher.digest(dig.data());

std::cout << "SHA3-256" << std::endl << std::endl;
std::cout << "Input : " << sha3_utils::to_hex(msg, ilen) << std::endl;
std::cout << "Output : " << sha3_utils::to_hex(dig, olen) << std::endl;

std::free(msg);
std::free(dig);
std::cout << "Input : " << sha3_utils::to_hex(msg.data(), ilen) << "\n";
std::cout << "Output : " << sha3_utils::to_hex(dig.data(), olen) << "\n";

return EXIT_SUCCESS;
}
22 changes: 11 additions & 11 deletions example/sha3_384.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#include "sha3_384.hpp"
#include "utils.hpp"
#include <iostream>
#include <vector>

// Compile it using
//
Expand All @@ -9,22 +10,21 @@ int
main()
{
constexpr size_t ilen = 32;
constexpr size_t olen = 48;
constexpr size_t olen = sha3_384::DIGEST_LEN;

uint8_t* msg = static_cast<uint8_t*>(std::malloc(ilen));
uint8_t* dig = static_cast<uint8_t*>(std::malloc(olen));
std::vector<uint8_t> msg(ilen, 0);
std::vector<uint8_t> dig(olen, 0);

sha3_utils::random_data<uint8_t>(msg, ilen);
std::memset(dig, 0, olen);
sha3_utils::random_data<uint8_t>(msg.data(), msg.size());

sha3_384::hash(msg, ilen, dig);
sha3_384::sha3_384 hasher;
hasher.absorb(msg.data(), msg.size());
hasher.finalize();
hasher.digest(dig.data());

std::cout << "SHA3-384" << std::endl << std::endl;
std::cout << "Input : " << sha3_utils::to_hex(msg, ilen) << std::endl;
std::cout << "Output : " << sha3_utils::to_hex(dig, olen) << std::endl;

std::free(msg);
std::free(dig);
std::cout << "Input : " << sha3_utils::to_hex(msg.data(), ilen) << "\n";
std::cout << "Output : " << sha3_utils::to_hex(dig.data(), olen) << "\n";

return EXIT_SUCCESS;
}
Loading

0 comments on commit a90d0af

Please sign in to comment.