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.
|
|
using | util::Bytes = std::vector<uint8_t> |
| | Alias untuk representasi urutan byte dalam memori.
|
|
| 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.
|
Fungsi utilitas pembantu untuk operasi byte, heksadesimal, I/O berkas, dan keacakan kriptografis.
◆ 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] | a | Pointer ke buffer data pertama. |
| [in] | b | Pointer ke buffer data kedua. |
| [in] | len | Jumlah 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] | hex | String heksadesimal sumber. |
- Returns
- Bytes Vektor hasil konversi byte.
- Exceptions
-
| std::invalid_argument | jika 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] | path | Jalur/path berkas yang akan dibaca. |
- Returns
- Bytes Vektor byte berisi seluruh konten berkas.
- Exceptions
-
| std::runtime_error | jika 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] | len | Panjang vektor byte acak yang diinginkan. |
- Returns
- Bytes Vektor berisi byte acak berukuran len.
- Exceptions
-
| std::runtime_error | jika 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] | out | Pointer ke buffer tujuan. |
| [in] | len | Jumlah byte acak yang diminta. |
- Exceptions
-
| std::invalid_argument | jika out bernilai nullptr dan len > 0. |
| std::runtime_error | jika 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] | p | Pointer ke memori yang akan dibersihkan. |
| [in] | len | Panjang 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] | data | Vektor 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] | data | Pointer ke data byte sumber. |
| [in] | len | Jumlah 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] | path | Jalur/path berkas target. |
| [in] | data | Data byte yang akan ditulis. |
- Exceptions
-
| std::runtime_error | jika 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] | a | Pointer ke blok data pertama. |
| [in] | b | Pointer ke blok data kedua. |
| [out] | out | Pointer ke buffer tujuan hasil XOR. |
| [in] | len | Panjang byte yang di-XOR. |
- Exceptions
-
| std::invalid_argument | jika a, b, atau out bernilai nullptr saat len > 0. |