Cipher Fayadh
Block cipher Feistel 128-bit dengan fungsi putaran sigma-delta
Loading...
Searching...
No Matches
container.hpp
Go to the documentation of this file.
1#ifndef CONTAINER_HPP
2#define CONTAINER_HPP
3
4#include "cipher.hpp"
5#include "mac.hpp"
6#include "util.hpp"
7#include <cstdint>
8#include <stdexcept>
9#include <string>
10
15
17enum class Mode : uint8_t {
18 ECB = 1,
19 CBC = 2,
20 CFB = 3,
21 OFB = 4,
22 CTR = 5
23};
24
26constexpr size_t CONTAINER_HEADER_SIZE = 22;
29
36Mode parse_mode(const std::string& str);
37
43std::string mode_name(Mode mode);
44
46class AuthenticationError : public std::runtime_error {
47 using std::runtime_error::runtime_error;
48};
49
51class FormatError : public std::runtime_error {
52 using std::runtime_error::runtime_error;
53};
54
59public:
64 explicit SecureEnvelope(const uint8_t master_key[KEY_SIZE]);
65
73 util::Bytes seal(const util::Bytes& plaintext, Mode mode, const uint8_t* custom_iv = nullptr) const;
74
82 util::Bytes open(const util::Bytes& blob) const;
83
84private:
85 explicit SecureEnvelope(DerivedKeys keys);
86
87 CustomCipher enc_cipher_;
88 CustomCipher mac_cipher_;
89};
90
91#endif // CONTAINER_HPP
Interface block cipher 128-bit dan implementasinya.
constexpr size_t KEY_SIZE
Ukuran master key dalam byte (128 bit, 16x8 bit).
Definition cipher.hpp:15
Exception saat verifikasi integritas tag MAC gagal.
Definition container.hpp:46
Block cipher Feistel 16 round dengan fungsi F berbasis sigma-delta.
Definition cipher.hpp:74
Exception saat struktur format kontainer tidak valid.
Definition container.hpp:51
util::Bytes open(const util::Bytes &blob) const
Memverifikasi integritas kontainer dan mendekripsi isinya.
Definition container.cpp:90
util::Bytes seal(const util::Bytes &plaintext, Mode mode, const uint8_t *custom_iv=nullptr) const
Mengenkripsi plaintext ke format kontainer v1 terautentikasi.
Definition container.cpp:64
SecureEnvelope(const uint8_t master_key[KEY_SIZE])
Inisialisasi envelope dan derivasi kunci enkripsi serta kunci MAC.
Definition container.cpp:55
Mode
Identifikasi mode operasi block cipher.
Definition container.hpp:17
std::string mode_name(Mode mode)
Mengembalikan nama mode dalam bentuk string huruf kecil ("ecb".."ctr").
Definition container.cpp:20
Mode parse_mode(const std::string &str)
Parsing string representasi mode menjadi enum Mode (case-insensitive).
Definition container.cpp:9
constexpr size_t CONTAINER_MIN_SIZE
Ukuran minimum kontainer v1 (Header 22B + MAC Tag 16B).
Definition container.hpp:28
constexpr size_t CONTAINER_HEADER_SIZE
Panjang header kontainer (Magic 4B + Version 1B + Mode 1B + IV 16B).
Definition container.hpp:26
Implementasi Cipher-based Message Authentication Code (CMAC / OMAC1, RFC 4493) dan derivasi pemisahan...
constexpr size_t MAC_TAG_SIZE
Ukuran tag MAC dalam byte (128 bit / 16 byte).
Definition mac.hpp:16
Struktur pasangan kunci hasil derivasi untuk enkripsi dan autentikasi.
Definition mac.hpp:104
Fungsi utilitas pembantu untuk operasi byte, heksadesimal, I/O berkas, dan keacakan kriptografis.
std::vector< uint8_t > Bytes
Alias untuk representasi urutan byte dalam memori.
Definition util.hpp:17