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

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).

Detailed Description

Implementasi mode operasi block cipher (ECB, CBC, CFB, OFB, CTR).

Function Documentation

◆ cbc_decrypt()

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.

Parameters
[in]cipherObjek block cipher yang digunakan.
[in]ivInisialisasi vektor (IV), panjang BLOCK_SIZE byte.
[in]inData ciphertext (kelipatan BLOCK_SIZE).
Returns
util::Bytes Data plaintext hasil dekripsi (masih berpadding).
Exceptions
std::invalid_argumentjika in bukan kelipatan BLOCK_SIZE atau iv bernilai nullptr saat in tidak kosong.

◆ cbc_encrypt()

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.

Parameters
[in]cipherObjek block cipher yang digunakan.
[in]ivInisialisasi vektor (IV), panjang BLOCK_SIZE byte.
[in]inData plaintext yang sudah dipad (kelipatan BLOCK_SIZE).
Returns
util::Bytes Data ciphertext hasil enkripsi.
Exceptions
std::invalid_argumentjika in bukan kelipatan BLOCK_SIZE atau iv bernilai nullptr saat in tidak kosong.

◆ cfb_decrypt()

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.

Parameters
[in]cipherObjek block cipher yang digunakan.
[in]ivInisialisasi vektor (IV), panjang BLOCK_SIZE byte.
[in]inData ciphertext sembarang.
Returns
util::Bytes Data plaintext (panjang sama persis dengan ciphertext).
Exceptions
std::invalid_argumentjika iv bernilai nullptr saat in tidak kosong.

◆ cfb_encrypt()

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.

Parameters
[in]cipherObjek block cipher yang digunakan.
[in]ivInisialisasi vektor (IV), panjang BLOCK_SIZE byte.
[in]inData plaintext sembarang.
Returns
util::Bytes Data ciphertext (panjang sama persis dengan plaintext).
Exceptions
std::invalid_argumentjika iv bernilai nullptr saat in tidak kosong.

◆ ctr_at()

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.

Parameters
[in]ivNilai IV / counter awal (16 byte).
[in]iIndeks blok (offset penambahan counter 64-bit).
[out]outBuffer keluaran hasil (16 byte).
Exceptions
std::invalid_argumentjika iv atau out bernilai nullptr.

◆ ctr_crypt()

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.

Parameters
[in]cipherObjek block cipher yang digunakan.
[in]ivNilai counter awal 128-bit (IV), panjang BLOCK_SIZE byte.
[in]inData masukan sembarang.
Returns
util::Bytes Data keluaran (panjang sama persis dengan masukan).
Exceptions
std::invalid_argumentjika iv bernilai nullptr saat in tidak kosong.

◆ ctr_decrypt()

util::Bytes modes::ctr_decrypt ( const BlockCipher & cipher,
const uint8_t * iv,
const util::Bytes & in )
inline

Alias dekripsi CTR, sama dengan modes::ctr_crypt (keystream yang sama di-XOR ulang).

Parameters
[in]cipherObjek block cipher yang digunakan.
[in]ivNilai counter awal 128-bit (IV), panjang BLOCK_SIZE byte.
[in]inCiphertext sembarang.
Returns
util::Bytes Plaintext (panjang sama dengan ciphertext).

◆ ctr_encrypt()

util::Bytes modes::ctr_encrypt ( const BlockCipher & cipher,
const uint8_t * iv,
const util::Bytes & in )
inline

Alias enkripsi CTR, sama dengan modes::ctr_crypt.

Parameters
[in]cipherObjek block cipher yang digunakan.
[in]ivNilai counter awal 128-bit (IV), panjang BLOCK_SIZE byte.
[in]inPlaintext sembarang.
Returns
util::Bytes Ciphertext (panjang sama dengan plaintext).

◆ ecb_decrypt()

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.

Parameters
[in]cipherObjek block cipher yang digunakan.
[in]ivParameter IV (diabaikan pada mode ECB, boleh nullptr).
[in]inData ciphertext (kelipatan BLOCK_SIZE).
Returns
util::Bytes Data plaintext hasil dekripsi (masih berpadding).
Exceptions
std::invalid_argumentjika panjang masukan bukan kelipatan BLOCK_SIZE.

◆ ecb_encrypt()

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.

Parameters
[in]cipherObjek block cipher yang digunakan.
[in]ivParameter IV (diabaikan pada mode ECB, boleh nullptr).
[in]inData plaintext yang sudah dipad (kelipatan BLOCK_SIZE).
Returns
util::Bytes Data ciphertext hasil enkripsi.
Exceptions
std::invalid_argumentjika panjang masukan bukan kelipatan BLOCK_SIZE.

◆ ofb_crypt()

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.

Parameters
[in]cipherObjek block cipher yang digunakan.
[in]ivInisialisasi vektor (IV), panjang BLOCK_SIZE byte.
[in]inData masukan sembarang.
Returns
util::Bytes Data keluaran (panjang sama persis dengan masukan).
Exceptions
std::invalid_argumentjika iv bernilai nullptr saat in tidak kosong.

◆ ofb_decrypt()

util::Bytes modes::ofb_decrypt ( const BlockCipher & cipher,
const uint8_t * iv,
const util::Bytes & in )
inline

Alias dekripsi OFB, sama dengan modes::ofb_crypt (keystream yang sama di-XOR ulang).

Parameters
[in]cipherObjek block cipher yang digunakan.
[in]ivInisialisasi vektor (IV), panjang BLOCK_SIZE byte.
[in]inCiphertext sembarang.
Returns
util::Bytes Plaintext (panjang sama dengan ciphertext).

◆ ofb_encrypt()

util::Bytes modes::ofb_encrypt ( const BlockCipher & cipher,
const uint8_t * iv,
const util::Bytes & in )
inline

Alias enkripsi OFB, sama dengan modes::ofb_crypt.

Parameters
[in]cipherObjek block cipher yang digunakan.
[in]ivInisialisasi vektor (IV), panjang BLOCK_SIZE byte.
[in]inPlaintext sembarang.
Returns
util::Bytes Ciphertext (panjang sama dengan plaintext).