|
Cipher Fayadh
Block cipher Feistel 128-bit dengan fungsi putaran sigma-delta
|
Implementasi mode operasi block cipher (ECB, CBC, CFB, OFB, CTR). More...
#include "cipher.hpp"#include "util.hpp"#include <cstddef>#include <cstdint>#include <stdexcept>Go to the source code of this file.
Functions | |
| void | modes::ctr_at (const uint8_t iv[BLOCK_SIZE], uint64_t i, uint8_t out[BLOCK_SIZE]) |
| Menghitung nilai counter 128-bit big-endian pada indeks blok ke-i langsung: (IV + i) mod 2^128. | |
| util::Bytes | modes::ecb_encrypt (const BlockCipher &cipher, const uint8_t *iv, const util::Bytes &in) |
| Enkripsi data menggunakan mode Electronic Codebook (ECB). | |
| util::Bytes | modes::ecb_decrypt (const BlockCipher &cipher, const uint8_t *iv, const util::Bytes &in) |
| Dekripsi data menggunakan mode Electronic Codebook (ECB). | |
| util::Bytes | modes::cbc_encrypt (const BlockCipher &cipher, const uint8_t *iv, const util::Bytes &in) |
| Enkripsi data menggunakan mode Cipher Block Chaining (CBC). | |
| util::Bytes | modes::cbc_decrypt (const BlockCipher &cipher, const uint8_t *iv, const util::Bytes &in) |
| Dekripsi data menggunakan mode Cipher Block Chaining (CBC). | |
| util::Bytes | modes::cfb_encrypt (const BlockCipher &cipher, const uint8_t *iv, const util::Bytes &in) |
| Enkripsi data menggunakan mode Cipher Feedback (CFB-128 full block). | |
| util::Bytes | modes::cfb_decrypt (const BlockCipher &cipher, const uint8_t *iv, const util::Bytes &in) |
| Dekripsi data menggunakan mode Cipher Feedback (CFB-128 full block). | |
| util::Bytes | modes::ofb_crypt (const BlockCipher &cipher, const uint8_t *iv, const util::Bytes &in) |
| Enkripsi/dekripsi data menggunakan mode Output Feedback (OFB). | |
| util::Bytes | modes::ofb_encrypt (const BlockCipher &cipher, const uint8_t *iv, const util::Bytes &in) |
| Alias enkripsi OFB, sama dengan modes::ofb_crypt. | |
| util::Bytes | modes::ofb_decrypt (const BlockCipher &cipher, const uint8_t *iv, const util::Bytes &in) |
| Alias dekripsi OFB, sama dengan modes::ofb_crypt (keystream yang sama di-XOR ulang). | |
| util::Bytes | modes::ctr_crypt (const BlockCipher &cipher, const uint8_t *iv, const util::Bytes &in) |
| Enkripsi/dekripsi data menggunakan mode Counter (CTR). | |
| util::Bytes | modes::ctr_encrypt (const BlockCipher &cipher, const uint8_t *iv, const util::Bytes &in) |
| Alias enkripsi CTR, sama dengan modes::ctr_crypt. | |
| util::Bytes | modes::ctr_decrypt (const BlockCipher &cipher, const uint8_t *iv, const util::Bytes &in) |
| Alias dekripsi CTR, sama dengan modes::ctr_crypt (keystream yang sama di-XOR ulang). | |
Variables | |
| constexpr size_t | modes::PARALLEL_THRESHOLD_BLOCKS = 1024 |
| Ambang batas minimum blok untuk mengaktifkan paralelisasi OpenMP (1024 blok = 16 KiB). | |
Implementasi mode operasi block cipher (ECB, CBC, CFB, OFB, CTR).
| util::Bytes modes::cbc_decrypt | ( | const BlockCipher & | cipher, |
| const uint8_t * | iv, | ||
| const util::Bytes & | in ) |
Dekripsi data menggunakan mode Cipher Block Chaining (CBC).
Formula: P_0 = D(C_0) ^ IV, P_i = D(C_i) ^ C_{i-1} untuk i >= 1. Mendukung akselerasi OpenMP multi-thread karena seluruh blok ciphertext sudah tersedia.
| [in] | cipher | Objek block cipher yang digunakan. |
| [in] | iv | Inisialisasi vektor (IV), panjang BLOCK_SIZE byte. |
| [in] | in | Data ciphertext (kelipatan BLOCK_SIZE). |
| std::invalid_argument | jika in bukan kelipatan BLOCK_SIZE atau iv bernilai nullptr saat in tidak kosong. |
| util::Bytes modes::cbc_encrypt | ( | const BlockCipher & | cipher, |
| const uint8_t * | iv, | ||
| const util::Bytes & | in ) |
Enkripsi data menggunakan mode Cipher Block Chaining (CBC).
Formula: C_0 = E(P_0 ^ IV), C_i = E(P_i ^ C_{i-1}) untuk i >= 1. Bersifat serial murni karena blok C_i bergantung pada output blok sebelumnya.
| [in] | cipher | Objek block cipher yang digunakan. |
| [in] | iv | Inisialisasi vektor (IV), panjang BLOCK_SIZE byte. |
| [in] | in | Data plaintext yang sudah dipad (kelipatan BLOCK_SIZE). |
| std::invalid_argument | jika in bukan kelipatan BLOCK_SIZE atau iv bernilai nullptr saat in tidak kosong. |
| util::Bytes modes::cfb_decrypt | ( | const BlockCipher & | cipher, |
| const uint8_t * | iv, | ||
| const util::Bytes & | in ) |
Dekripsi data menggunakan mode Cipher Feedback (CFB-128 full block).
Formula: P_i = C_i ^ E(FB_{i-1}), FB_0 = IV, FB_i = C_i. Mendukung akselerasi OpenMP multi-thread karena ciphertext sebelumnya sudah diketahui.
| [in] | cipher | Objek block cipher yang digunakan. |
| [in] | iv | Inisialisasi vektor (IV), panjang BLOCK_SIZE byte. |
| [in] | in | Data ciphertext sembarang. |
| std::invalid_argument | jika iv bernilai nullptr saat in tidak kosong. |
| util::Bytes modes::cfb_encrypt | ( | const BlockCipher & | cipher, |
| const uint8_t * | iv, | ||
| const util::Bytes & | in ) |
Enkripsi data menggunakan mode Cipher Feedback (CFB-128 full block).
Formula: C_i = P_i ^ E(FB_{i-1}), FB_0 = IV, FB_i = C_i. Bersifat serial murni saat enkripsi.
| [in] | cipher | Objek block cipher yang digunakan. |
| [in] | iv | Inisialisasi vektor (IV), panjang BLOCK_SIZE byte. |
| [in] | in | Data plaintext sembarang. |
| std::invalid_argument | jika iv bernilai nullptr saat in tidak kosong. |
| void modes::ctr_at | ( | const uint8_t | iv[BLOCK_SIZE], |
| uint64_t | i, | ||
| uint8_t | out[BLOCK_SIZE] ) |
Menghitung nilai counter 128-bit big-endian pada indeks blok ke-i langsung: (IV + i) mod 2^128.
Fungsi ini mendukung carry 128-bit penuh dan wrap-around dari 0xFF..FF ke 0x00..00. Digunakan baik pada eksekusi serial maupun paralelisasi multi-thread OpenMP agar setiap thread dapat menghitung counter blok tanpa iterasi dari awal.
| [in] | iv | Nilai IV / counter awal (16 byte). |
| [in] | i | Indeks blok (offset penambahan counter 64-bit). |
| [out] | out | Buffer keluaran hasil (16 byte). |
| std::invalid_argument | jika iv atau out bernilai nullptr. |
| util::Bytes modes::ctr_crypt | ( | const BlockCipher & | cipher, |
| const uint8_t * | iv, | ||
| const util::Bytes & | in ) |
Enkripsi/dekripsi data menggunakan mode Counter (CTR).
Formula: K_i = E(IV + i), C_i = P_i ^ K_i (dan sebaliknya). Mendukung akselerasi OpenMP multi-thread penuh jika ukuran data >= modes::PARALLEL_THRESHOLD_BLOCKS.
| [in] | cipher | Objek block cipher yang digunakan. |
| [in] | iv | Nilai counter awal 128-bit (IV), panjang BLOCK_SIZE byte. |
| [in] | in | Data masukan sembarang. |
| std::invalid_argument | jika iv bernilai nullptr saat in tidak kosong. |
|
inline |
Alias dekripsi CTR, sama dengan modes::ctr_crypt (keystream yang sama di-XOR ulang).
| [in] | cipher | Objek block cipher yang digunakan. |
| [in] | iv | Nilai counter awal 128-bit (IV), panjang BLOCK_SIZE byte. |
| [in] | in | Ciphertext sembarang. |
|
inline |
Alias enkripsi CTR, sama dengan modes::ctr_crypt.
| [in] | cipher | Objek block cipher yang digunakan. |
| [in] | iv | Nilai counter awal 128-bit (IV), panjang BLOCK_SIZE byte. |
| [in] | in | Plaintext sembarang. |
| util::Bytes modes::ecb_decrypt | ( | const BlockCipher & | cipher, |
| const uint8_t * | iv, | ||
| const util::Bytes & | in ) |
Dekripsi data menggunakan mode Electronic Codebook (ECB).
Setiap blok 16 byte didekripsi secara independen: P_i = D(C_i). Mendukung akselerasi OpenMP multi-thread jika ukuran data >= modes::PARALLEL_THRESHOLD_BLOCKS.
| [in] | cipher | Objek block cipher yang digunakan. |
| [in] | iv | Parameter IV (diabaikan pada mode ECB, boleh nullptr). |
| [in] | in | Data ciphertext (kelipatan BLOCK_SIZE). |
| std::invalid_argument | jika panjang masukan bukan kelipatan BLOCK_SIZE. |
| util::Bytes modes::ecb_encrypt | ( | const BlockCipher & | cipher, |
| const uint8_t * | iv, | ||
| const util::Bytes & | in ) |
Enkripsi data menggunakan mode Electronic Codebook (ECB).
Setiap blok 16 byte dienkripsi secara independen: C_i = E(P_i). Mendukung akselerasi OpenMP multi-thread jika ukuran data >= modes::PARALLEL_THRESHOLD_BLOCKS.
| [in] | cipher | Objek block cipher yang digunakan. |
| [in] | iv | Parameter IV (diabaikan pada mode ECB, boleh nullptr). |
| [in] | in | Data plaintext yang sudah dipad (kelipatan BLOCK_SIZE). |
| std::invalid_argument | jika panjang masukan bukan kelipatan BLOCK_SIZE. |
| util::Bytes modes::ofb_crypt | ( | const BlockCipher & | cipher, |
| const uint8_t * | iv, | ||
| const util::Bytes & | in ) |
Enkripsi/dekripsi data menggunakan mode Output Feedback (OFB).
Formula: O_0 = IV, O_i = E(O_{i-1}), C_i = P_i ^ O_i (dan sebaliknya). Bersifat serial murni karena setiap keystream bergantung pada keystream sebelumnya.
| [in] | cipher | Objek block cipher yang digunakan. |
| [in] | iv | Inisialisasi vektor (IV), panjang BLOCK_SIZE byte. |
| [in] | in | Data masukan sembarang. |
| std::invalid_argument | jika iv bernilai nullptr saat in tidak kosong. |
|
inline |
Alias dekripsi OFB, sama dengan modes::ofb_crypt (keystream yang sama di-XOR ulang).
| [in] | cipher | Objek block cipher yang digunakan. |
| [in] | iv | Inisialisasi vektor (IV), panjang BLOCK_SIZE byte. |
| [in] | in | Ciphertext sembarang. |
|
inline |
Alias enkripsi OFB, sama dengan modes::ofb_crypt.
| [in] | cipher | Objek block cipher yang digunakan. |
| [in] | iv | Inisialisasi vektor (IV), panjang BLOCK_SIZE byte. |
| [in] | in | Plaintext sembarang. |