Skip to content

Commit

Permalink
Merge pull request #20 from itzmeanjan/make-constexpr
Browse files Browse the repository at this point in the history
Make Everything `constexpr`
  • Loading branch information
itzmeanjan committed Aug 6, 2023
2 parents e529767 + ea83b16 commit 2228e43
Show file tree
Hide file tree
Showing 26 changed files with 962 additions and 489 deletions.
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ benchmarks/bench.out: benchmarks/main.cpp include/*.hpp include/benchmarks/*.hpp
$(CXX) $(CXX_FLAGS) $(WARN_FLAGS) $(OPT_FLAGS) $(I_FLAGS) $< -lbenchmark -lpthread -o $@

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

benchmarks/perf.out: benchmarks/main.cpp include/*.hpp include/benchmarks/*.hpp
# In case you've built google-benchmark with libPFM support.
Expand All @@ -52,4 +52,4 @@ benchmarks/perf.out: benchmarks/main.cpp include/*.hpp include/benchmarks/*.hpp
-DCYCLES_PER_BYTE -DINSTRUCTIONS_PER_CYCLE $< -lbenchmark -lpthread -lpfm -o $@

perf: benchmarks/perf.out
./$< --benchmark_counters_tabular=true --benchmark_perf_counters=CYCLES,INSTRUCTIONS
./$< --benchmark_counters_tabular=true --benchmark_min_warmup_time=.1 --benchmark_perf_counters=CYCLES,INSTRUCTIONS
246 changes: 155 additions & 91 deletions README.md

Large diffs are not rendered by default.

9 changes: 5 additions & 4 deletions example/sha3_224.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,14 @@ main()

std::vector<uint8_t> msg(ilen, 0);
std::vector<uint8_t> dig(olen, 0);
auto _dig = std::span<uint8_t, olen>(dig);

sha3_utils::random_data<uint8_t>(msg.data(), msg.size());
sha3_utils::random_data<uint8_t>(msg);

sha3_224::sha3_224 hasher;
hasher.absorb(msg.data(), msg.size());
sha3_224::sha3_224_t hasher;
hasher.absorb(msg);
hasher.finalize();
hasher.digest(dig.data());
hasher.digest(_dig);

std::cout << "SHA3-224" << std::endl << std::endl;
std::cout << "Input : " << sha3_utils::to_hex(msg.data(), ilen) << "\n";
Expand Down
9 changes: 5 additions & 4 deletions example/sha3_256.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,14 @@ main()

std::vector<uint8_t> msg(ilen, 0);
std::vector<uint8_t> dig(olen, 0);
auto _dig = std::span<uint8_t, olen>(dig);

sha3_utils::random_data<uint8_t>(msg.data(), msg.size());
sha3_utils::random_data<uint8_t>(msg);

sha3_256::sha3_256 hasher;
hasher.absorb(msg.data(), msg.size());
sha3_256::sha3_256_t hasher;
hasher.absorb(msg);
hasher.finalize();
hasher.digest(dig.data());
hasher.digest(_dig);

std::cout << "SHA3-256" << std::endl << std::endl;
std::cout << "Input : " << sha3_utils::to_hex(msg.data(), ilen) << "\n";
Expand Down
9 changes: 5 additions & 4 deletions example/sha3_384.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,14 @@ main()

std::vector<uint8_t> msg(ilen, 0);
std::vector<uint8_t> dig(olen, 0);
auto _dig = std::span<uint8_t, olen>(dig);

sha3_utils::random_data<uint8_t>(msg.data(), msg.size());
sha3_utils::random_data<uint8_t>(msg);

sha3_384::sha3_384 hasher;
hasher.absorb(msg.data(), msg.size());
sha3_384::sha3_384_t hasher;
hasher.absorb(msg);
hasher.finalize();
hasher.digest(dig.data());
hasher.digest(_dig);

std::cout << "SHA3-384" << std::endl << std::endl;
std::cout << "Input : " << sha3_utils::to_hex(msg.data(), ilen) << "\n";
Expand Down
9 changes: 5 additions & 4 deletions example/sha3_512.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,14 @@ main()

std::vector<uint8_t> msg(ilen, 0);
std::vector<uint8_t> dig(olen, 0);
auto _dig = std::span<uint8_t, olen>(dig);

sha3_utils::random_data<uint8_t>(msg.data(), msg.size());
sha3_utils::random_data<uint8_t>(msg);

sha3_512::sha3_512 hasher;
hasher.absorb(msg.data(), msg.size());
sha3_512::sha3_512_t hasher;
hasher.absorb(msg);
hasher.finalize();
hasher.digest(dig.data());
hasher.digest(_dig);

std::cout << "SHA3-512" << std::endl << std::endl;
std::cout << "Input : " << sha3_utils::to_hex(msg.data(), ilen) << "\n";
Expand Down
9 changes: 5 additions & 4 deletions example/shake128.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,22 +14,23 @@ main()

std::vector<uint8_t> msg(ilen, 0);
std::vector<uint8_t> dig(olen, 0);
auto _dig = std::span(dig);

sha3_utils::random_data<uint8_t>(msg.data(), msg.size());
sha3_utils::random_data<uint8_t>(msg);

// Create shake128 hasher
shake128::shake128 hasher;
shake128::shake128_t hasher;

// Absorb message bytes into sponge state
hasher.absorb(msg.data(), msg.size());
hasher.absorb(msg);
// Finalize sponge state
hasher.finalize();

// Squeeze total `olen` -bytes out of sponge, a single byte at a time.
// One can request arbitrary many bytes of output, by calling `squeeze`
// arbitrary many times.
for (size_t i = 0; i < olen; i++) {
hasher.squeeze(dig.data() + i, 1);
hasher.squeeze(_dig.subspan(i, 1));
}

std::cout << "SHAKE-128" << std::endl << std::endl;
Expand Down
9 changes: 5 additions & 4 deletions example/shake256.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,22 +14,23 @@ main()

std::vector<uint8_t> msg(ilen, 0);
std::vector<uint8_t> dig(olen, 0);
auto _dig = std::span(dig);

sha3_utils::random_data<uint8_t>(msg.data(), msg.size());
sha3_utils::random_data<uint8_t>(msg);

// Create shake256 hasher
shake256::shake256 hasher;
shake256::shake256_t hasher;

// Absorb message bytes into sponge state
hasher.absorb(msg.data(), msg.size());
hasher.absorb(msg);
// Finalize sponge state
hasher.finalize();

// Squeeze total `olen` -bytes out of sponge, a single byte at a time.
// One can request arbitrary many bytes of output, by calling `squeeze`
// arbitrary many times.
for (size_t i = 0; i < olen; i++) {
hasher.squeeze(dig.data() + i, 1);
hasher.squeeze(_dig.subspan(i, 1));
}

std::cout << "SHAKE-256" << std::endl << std::endl;
Expand Down
44 changes: 24 additions & 20 deletions include/benchmarks/bench_hashing.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,18 +17,19 @@ sha3_224(benchmark::State& state)

std::vector<uint8_t> msg(mlen);
std::vector<uint8_t> md(sha3_224::DIGEST_LEN);
auto _md = std::span<uint8_t, sha3_224::DIGEST_LEN>(md);

sha3_utils::random_data(msg.data(), msg.size());
sha3_utils::random_data<uint8_t>(msg);

for (auto _ : state) {
sha3_224::sha3_224 hasher;
hasher.absorb(msg.data(), msg.size());
sha3_224::sha3_224_t hasher;
hasher.absorb(msg);
hasher.finalize();
hasher.digest(md.data());
hasher.digest(_md);

benchmark::DoNotOptimize(hasher);
benchmark::DoNotOptimize(msg);
benchmark::DoNotOptimize(md);
benchmark::DoNotOptimize(_md);
benchmark::ClobberMemory();
}

Expand All @@ -53,18 +54,19 @@ sha3_256(benchmark::State& state)

std::vector<uint8_t> msg(mlen);
std::vector<uint8_t> md(sha3_256::DIGEST_LEN);
auto _md = std::span<uint8_t, sha3_256::DIGEST_LEN>(md);

sha3_utils::random_data(msg.data(), msg.size());
sha3_utils::random_data<uint8_t>(msg);

for (auto _ : state) {
sha3_256::sha3_256 hasher;
hasher.absorb(msg.data(), msg.size());
sha3_256::sha3_256_t hasher;
hasher.absorb(msg);
hasher.finalize();
hasher.digest(md.data());
hasher.digest(_md);

benchmark::DoNotOptimize(hasher);
benchmark::DoNotOptimize(msg);
benchmark::DoNotOptimize(md);
benchmark::DoNotOptimize(_md);
benchmark::ClobberMemory();
}

Expand All @@ -89,18 +91,19 @@ sha3_384(benchmark::State& state)

std::vector<uint8_t> msg(mlen);
std::vector<uint8_t> md(sha3_384::DIGEST_LEN);
auto _md = std::span<uint8_t, sha3_384::DIGEST_LEN>(md);

sha3_utils::random_data(msg.data(), msg.size());
sha3_utils::random_data<uint8_t>(msg);

for (auto _ : state) {
sha3_384::sha3_384 hasher;
hasher.absorb(msg.data(), msg.size());
sha3_384::sha3_384_t hasher;
hasher.absorb(msg);
hasher.finalize();
hasher.digest(md.data());
hasher.digest(_md);

benchmark::DoNotOptimize(hasher);
benchmark::DoNotOptimize(msg);
benchmark::DoNotOptimize(md);
benchmark::DoNotOptimize(_md);
benchmark::ClobberMemory();
}

Expand All @@ -125,18 +128,19 @@ sha3_512(benchmark::State& state)

std::vector<uint8_t> msg(mlen);
std::vector<uint8_t> md(sha3_512::DIGEST_LEN);
auto _md = std::span<uint8_t, sha3_512::DIGEST_LEN>(md);

sha3_utils::random_data(msg.data(), msg.size());
sha3_utils::random_data<uint8_t>(msg);

for (auto _ : state) {
sha3_512::sha3_512 hasher;
hasher.absorb(msg.data(), msg.size());
sha3_512::sha3_512_t hasher;
hasher.absorb(msg);
hasher.finalize();
hasher.digest(md.data());
hasher.digest(_md);

benchmark::DoNotOptimize(hasher);
benchmark::DoNotOptimize(msg);
benchmark::DoNotOptimize(md);
benchmark::DoNotOptimize(_md);
benchmark::ClobberMemory();
}

Expand Down
9 changes: 6 additions & 3 deletions include/benchmarks/bench_keccak.hpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#pragma once
#include "keccak.hpp"
#include "utils.hpp"
#include <array>
#include <benchmark/benchmark.h>

// Benchmarks SHA3 functions targeting CPU systems, using google-benchmark.
Expand All @@ -10,11 +11,13 @@ namespace bench_sha3 {
inline void
keccakf1600(benchmark::State& state)
{
uint64_t st[keccak::LANE_CNT];
sha3_utils::random_data(st, keccak::LANE_CNT);
std::array<uint64_t, keccak::LANE_CNT> init{};
sha3_utils::random_data<uint64_t>(init);

keccak::keccak_t st(init);

for (auto _ : state) {
keccak::permute(st);
st.permute();

benchmark::DoNotOptimize(st);
benchmark::ClobberMemory();
Expand Down
16 changes: 8 additions & 8 deletions include/benchmarks/bench_xof.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,13 @@ shake128(benchmark::State& state)
std::vector<uint8_t> msg(mlen);
std::vector<uint8_t> out(olen);

sha3_utils::random_data(msg.data(), msg.size());
sha3_utils::random_data<uint8_t>(msg);

for (auto _ : state) {
shake128::shake128 hasher;
hasher.absorb(msg.data(), msg.size());
shake128::shake128_t hasher;
hasher.absorb(msg);
hasher.finalize();
hasher.squeeze(out.data(), out.size());
hasher.squeeze(out);

benchmark::DoNotOptimize(hasher);
benchmark::DoNotOptimize(msg);
Expand Down Expand Up @@ -62,13 +62,13 @@ shake256(benchmark::State& state)
std::vector<uint8_t> msg(mlen);
std::vector<uint8_t> out(olen);

sha3_utils::random_data(msg.data(), msg.size());
sha3_utils::random_data<uint8_t>(msg);

for (auto _ : state) {
shake256::shake256 hasher;
hasher.absorb(msg.data(), msg.size());
shake256::shake256_t hasher;
hasher.absorb(msg);
hasher.finalize();
hasher.squeeze(out.data(), out.size());
hasher.squeeze(out);

benchmark::DoNotOptimize(hasher);
benchmark::DoNotOptimize(msg);
Expand Down
Loading

0 comments on commit 2228e43

Please sign in to comment.