|
Cipher Fayadh
Block cipher Feistel 128-bit dengan fungsi putaran sigma-delta
|
Benchmark throughput mode operasi, serial (1 thread) vs paralel (OpenMP). More...
#include <algorithm>#include <chrono>#include <cstdio>#include <cstdlib>#include <cstring>#include <fstream>#include <string>#include <vector>#include "cipher.hpp"#include "modes.hpp"Classes | |
| struct | Op |
| Satu operasi yang dibenchmark. More... | |
Typedefs | |
| using | ModeFn = util::Bytes (*)(const BlockCipher &, const uint8_t *, const util::Bytes &) |
| Signature fungsi mode, sama dengan yang dipakai container. | |
Functions | |
| static uint64_t | next_rand () |
| PRNG deterministik (xorshift64). | |
| static void | fill_random (uint8_t *p, size_t n) |
Isi buffer dengan byte acak dari next_rand(). | |
| static void | set_threads (int n) |
| Atur jumlah thread OpenMP. Tidak berbuat apa-apa tanpa OpenMP. | |
| static double | time_median (ModeFn fn, const BlockCipher &c, const uint8_t *iv, const util::Bytes &in, int reps, util::Bytes &result) |
Jalankan fn sebanyak reps kali dan ambil waktu median. | |
| static std::string | cpu_name () |
| Ambil nama CPU dari /proc/cpuinfo (Linux). | |
| static void | usage (const char *prog) |
| Cetak cara pakai lalu keluar. | |
| int | main (int argc, char **argv) |
| Benchmark semua mode × ukuran, serial vs paralel. | |
Variables | |
| static const Op | OPS [] |
| Daftar operasi yang dibenchmark (mode × arah enkripsi/dekripsi). | |
| static uint64_t | rng_state = 0x123456789ABCDEF0ULL |
| State PRNG. Seed tetap supaya hasil uji bisa direproduksi. | |
Benchmark throughput mode operasi, serial (1 thread) vs paralel (OpenMP).
Yang diukur hanya fungsi mode di modes:: (tanpa I/O, CMAC, atau padding), berbeda dengan benchmark di tests/e2e.sh yang mengukur CLI end-to-end.
Untuk tiap operasi dan ukuran data, fungsi dijalankan beberapa kali dengan 1 thread lalu dengan semua thread, dan waktu median yang dipakai. Output serial dan paralel juga dibandingkan byte demi byte.
Data plaintext, kunci, dan IV deterministik (seed tetap), jadi hasilnya bisa direproduksi.
Jalankan dengan:
Opsi:
--csv output CSV (info mesin dikirim ke stderr)--reps N jumlah pengulangan per pengukuran (default 5)--sizes A,B,.. ukuran data dalam MiB (default 1,16,64)--threads N jumlah thread untuk run paralel (default semua thread)
|
static |
Ambil nama CPU dari /proc/cpuinfo (Linux).
|
static |
Isi buffer dengan byte acak dari next_rand().
| [out] | p | Buffer tujuan. |
| [in] | n | Jumlah byte yang diisi. |
| int main | ( | int | argc, |
| char ** | argv ) |
Benchmark semua mode × ukuran, serial vs paralel.
| [in] | argc | Jumlah argumen. |
| [in] | argv | Argumen (lihat opsi di deskripsi file). |
|
static |
PRNG deterministik (xorshift64).
|
static |
Atur jumlah thread OpenMP. Tidak berbuat apa-apa tanpa OpenMP.
| [in] | n | Jumlah thread. |
|
static |
Jalankan fn sebanyak reps kali dan ambil waktu median.
| [in] | fn | Fungsi mode yang diukur. |
| [in] | c | Cipher. |
| [in] | iv | IV / counter awal. |
| [in] | in | Data masukan. |
| [in] | reps | Jumlah pengulangan. |
| [out] | result | Output dari run terakhir (untuk dibandingkan). |
|
static |
Cetak cara pakai lalu keluar.
| [in] | prog | Nama program. |
|
static |
Daftar operasi yang dibenchmark (mode × arah enkripsi/dekripsi).