-
Notifications
You must be signed in to change notification settings - Fork 1
/
present.h
executable file
·60 lines (45 loc) · 1.27 KB
/
present.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#ifndef PRESENT_H
#define PRESENT_H
#include <stdint.h>
#define PRESENT80 0
typedef uint64_t u64;
typedef uint8_t u8;
extern int P[64];
extern int P_inv[64];
extern u64 S[16];
extern u64 S_inv[16];
extern u64 S_compact[8][256];
extern u64 S_inv_compact[8][256];
extern u64 P_compact[8][256];
extern u64 P_inv_compact[8][256];
struct key_state {
u64 left;
u64 right;
};
extern bool operator<(const key_state &, const key_state &);
u64 sub_layer(u64);
u64 inv_sub_layer(u64);
u64 perm_layer(u64);
u64 inv_perm_layer(u64);
void encrypt_one_round(u64 &, u64);
void decrypt_one_round(u64 &, u64);
void dirty_rc_bits(u64 &, u64 &);
void dirty_sbox_bits(u64 &);
u8 parity(u64);
int weight(u64);
// PRESENT-128
void rotate_keys_128(u64 &, u64 &);
void inv_rotate_keys_128(u64 &, u64 &);
void inv_keysched_round_128(u64 &, u64 &, u64);
void keysched_round_128(u64 &, u64 &, u64);
// PRESENT-80
void rotate_keys_80(u64 &, u64 &);
void inv_rotate_keys_80(u64 &, u64 &);
void inv_keysched_round_80(u64 &, u64 &, u64);
void keysched_round_80(u64 &, u64 &, u64);
// WRAPPERS
void rotate_keys(u64 &, u64 &);
void inv_rotate_keys(u64 &, u64 &);
void inv_keysched_round(u64 &, u64 &, u64);
void keysched_round(u64 &, u64 &, u64);
#endif