25 using Key = std::array<uint8_t, 8>;
27 using Key16 = std::array<uint8_t, 16>;
28 using Key24 = std::array<uint8_t, 24>;
34 enum class Mode : uint8_t {
70 inline uint32_t
encrypt(uint8_t* out,
const uint8_t* in,
const uint32_t in_len,
const Key& key)
72 return encrypt_3key(out, in, in_len, key, key, key);
85 inline uint32_t
encrypt(uint8_t* out,
const uint8_t* in,
const uint32_t in_len,
const Key& key1,
const Key& key2)
87 return encrypt_3key(out, in, in_len, key1, key2, key1);
99 uint32_t
encrypt(uint8_t* out,
const uint8_t* in,
const uint32_t in_len,
const Key16& key);
112 inline uint32_t
encrypt(uint8_t* out,
const uint8_t* in,
const uint32_t in_len,
const Key& key1,
const Key& key2,
115 return encrypt_3key(out, in, in_len, key1, key2, key3);
127 uint32_t
encrypt(uint8_t* out,
const uint8_t* in,
const uint32_t in_len,
const Key24& key);
132 inline uint32_t decrypt(uint8_t* out,
const uint8_t* in,
const uint32_t in_len,
const Key& key)
134 return decrypt_3key(out, in, in_len, key, key, key);
137 inline uint32_t decrypt(uint8_t* out,
const uint8_t* in,
const uint32_t in_len,
const Key& key1,
const Key& key2)
139 return decrypt_3key(out, in, in_len, key1, key2, key1);
142 inline uint32_t decrypt(uint8_t* out,
const uint8_t* in,
const uint32_t in_len,
const Key& key1,
const Key& key2,
145 return decrypt_3key(out, in, in_len, key1, key2, key3);
148 uint32_t decrypt(uint8_t* out,
const uint8_t* in,
const uint32_t in_len,
const Key16& key);
149 uint32_t decrypt(uint8_t* out,
const uint8_t* in,
const uint32_t in_len,
const Key24& key);
152 static void encrypt_block(uint8_t out[8],
const uint8_t in[8],
const Key& key);
153 static void decrypt_block(uint8_t out[8],
const uint8_t in[8],
const Key& key);
156 static void key_schedule(uint64_t subkeys[16],
const Key& key);
157 static uint32_t feistel(
const uint32_t r,
const uint64_t subkey);
158 static uint64_t permute_bits(
const uint64_t in,
const uint8_t* table,
const uint32_t table_len,
159 const uint32_t in_bits);
160 static void process_block(uint8_t out[8],
const uint8_t in[8],
const Key& key,
bool encrypt);
162 static void encrypt_block_3key(uint8_t out[8],
const uint8_t in[8],
const Key8& k1,
const Key8& k2,
const Key8& k3);
163 uint32_t encrypt_3key(uint8_t* out,
const uint8_t* in, uint32_t in_len,
const Key& k1,
const Key& k2,
165 static void decrypt_block_3key(uint8_t out[8],
const uint8_t in[8],
const Key8& k1,
const Key8& k2,
const Key8& k3);
166 uint32_t decrypt_3key(uint8_t* out,
const uint8_t* in, uint32_t in_len,
const Key& k1,
const Key& k2,
uint32_t encrypt(uint8_t *out, const uint8_t *in, const uint32_t in_len, const Key &key1, const Key &key2, const Key &key3)
Encrypto 3-key 3DES.
Definition des.hpp:112