Cipher Fayadh
Block cipher Feistel 128-bit dengan fungsi putaran sigma-delta
Loading...
Searching...
No Matches
util.hpp File Reference

Fungsi utilitas pembantu untuk operasi byte, heksadesimal, I/O berkas, dan keacakan kriptografis. More...

#include <cstddef>
#include <cstdint>
#include <string>
#include <vector>

Go to the source code of this file.

Typedefs

using util::Bytes = std::vector<uint8_t>
 Alias untuk representasi urutan byte dalam memori.

Functions

void util::secure_random (uint8_t *out, size_t len)
 Mengisi buffer dengan byte acak kriptografis yang aman dari sistem operasi.
Bytes util::secure_random (size_t len)
 Menghasilkan vektor berisi byte acak kriptografis yang aman dari sistem operasi.
std::string util::to_hex (const uint8_t *data, size_t len)
 Mengonversi deretan byte menjadi representasi string heksadesimal huruf kecil (lowercase).
std::string util::to_hex (const Bytes &data)
 Helper overload untuk mengonversi objek Bytes menjadi string heksadesimal.
Bytes util::from_hex (const std::string &hex)
 Mengonversi string heksadesimal menjadi deretan byte (Bytes).
Bytes util::read_file (const std::string &path)
 Membaca seluruh isi berkas secara biner.
void util::write_file (const std::string &path, const Bytes &data)
 Menuliskan seluruh isi byte ke berkas secara atomik (atomic-ish).
void util::xor_block (const uint8_t *a, const uint8_t *b, uint8_t *out, size_t len)
 Melakukan operasi XOR bitwise antara dua blok byte: out[i] = a[i] ^ b[i].
bool util::constant_time_equal (const uint8_t *a, const uint8_t *b, size_t len)
 Membandingkan dua buffer byte dalam waktu konstan (constant time).
void util::secure_zero (void *p, size_t len)
 Membersihkan memori dengan mengisi byte nol (0) menggunakan volatile pointer.

Detailed Description

Fungsi utilitas pembantu untuk operasi byte, heksadesimal, I/O berkas, dan keacakan kriptografis.

Function Documentation

◆ constant_time_equal()

bool util::constant_time_equal ( const uint8_t * a,
const uint8_t * b,
size_t len )

Membandingkan dua buffer byte dalam waktu konstan (constant time).

Tidak melakukan short-circuit / early exit ketika perbedaan ditemukan, untuk memitigasi serangan timing attack pada verifikasi tag MAC / rahasia.

Parameters
[in]aPointer ke buffer data pertama.
[in]bPointer ke buffer data kedua.
[in]lenJumlah byte yang dibandingkan.
Returns
true jika kedua buffer bernilai identik sepanjang len byte, false jika berbeda.

◆ from_hex()

Bytes util::from_hex ( const std::string & hex)

Mengonversi string heksadesimal menjadi deretan byte (Bytes).

Mendukung karakter heksadesimal huruf besar maupun huruf kecil ('0'-'9', 'a'-'f', 'A'-'F').

Parameters
[in]hexString heksadesimal sumber.
Returns
Bytes Vektor hasil konversi byte.
Exceptions
std::invalid_argumentjika panjang string ganjil atau terdapat karakter non-heksadesimal.

◆ read_file()

Bytes util::read_file ( const std::string & path)

Membaca seluruh isi berkas secara biner.

Mendukung berkas berukuran 0 byte (mengembalikan vektor kosong) hingga berkas besar.

Parameters
[in]pathJalur/path berkas yang akan dibaca.
Returns
Bytes Vektor byte berisi seluruh konten berkas.
Exceptions
std::runtime_errorjika berkas tidak dapat dibuka, dibaca, atau tidak ditemukan (path disertakan dalam pesan).

◆ secure_random() [1/2]

Bytes util::secure_random ( size_t len)

Menghasilkan vektor berisi byte acak kriptografis yang aman dari sistem operasi.

Parameters
[in]lenPanjang vektor byte acak yang diinginkan.
Returns
Bytes Vektor berisi byte acak berukuran len.
Exceptions
std::runtime_errorjika pemanggilan entropy sistem operasi gagal.

◆ secure_random() [2/2]

void util::secure_random ( uint8_t * out,
size_t len )

Mengisi buffer dengan byte acak kriptografis yang aman dari sistem operasi.

Mengambil entropi langsung dari kernel OS (getentropy / /dev/urandom). Tidak menggunakan rand(), mt19937, atau generator pseudo-random berbasis waktu.

Parameters
[out]outPointer ke buffer tujuan.
[in]lenJumlah byte acak yang diminta.
Exceptions
std::invalid_argumentjika out bernilai nullptr dan len > 0.
std::runtime_errorjika pemanggilan entropy sistem operasi gagal.

◆ secure_zero()

void util::secure_zero ( void * p,
size_t len )

Membersihkan memori dengan mengisi byte nol (0) menggunakan volatile pointer.

Mencegah kompilator mengoptimasi (menghilangkan/dead-store elimination) operasi pembersihan buffer yang memuat materi kunci atau plaintext sensitif.

Parameters
[out]pPointer ke memori yang akan dibersihkan.
[in]lenPanjang memori dalam byte.

◆ to_hex() [1/2]

std::string util::to_hex ( const Bytes & data)

Helper overload untuk mengonversi objek Bytes menjadi string heksadesimal.

Parameters
[in]dataVektor byte sumber.
Returns
std::string Representasi string heksadesimal.

◆ to_hex() [2/2]

std::string util::to_hex ( const uint8_t * data,
size_t len )

Mengonversi deretan byte menjadi representasi string heksadesimal huruf kecil (lowercase).

Parameters
[in]dataPointer ke data byte sumber.
[in]lenJumlah byte yang akan dikonversi.
Returns
std::string Representasi string heksadesimal (2 karakter per byte).

◆ write_file()

void util::write_file ( const std::string & path,
const Bytes & data )

Menuliskan seluruh isi byte ke berkas secara atomik (atomic-ish).

Menulis data terlebih dahulu ke berkas sementara "<path>.tmp", kemudian me-rename ke jalur target. Jika terjadi kegagalan penulisan, berkas sementara akan dihapus dan exception dilempar sehingga tidak meninggalkan berkas corrupt/separuh tulis.

Parameters
[in]pathJalur/path berkas target.
[in]dataData byte yang akan ditulis.
Exceptions
std::runtime_errorjika berkas sementara gagal dibuat, ditulis, atau di-rename.

◆ xor_block()

void util::xor_block ( const uint8_t * a,
const uint8_t * b,
uint8_t * out,
size_t len )

Melakukan operasi XOR bitwise antara dua blok byte: out[i] = a[i] ^ b[i].

Aman digunakan secara in-place (misalnya out sama dengan a atau b).

Parameters
[in]aPointer ke blok data pertama.
[in]bPointer ke blok data kedua.
[out]outPointer ke buffer tujuan hasil XOR.
[in]lenPanjang byte yang di-XOR.
Exceptions
std::invalid_argumentjika a, b, atau out bernilai nullptr saat len > 0.