-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfun.h
70 lines (48 loc) · 3.68 KB
/
fun.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
61
62
63
64
65
66
67
68
69
70
#ifndef MODULE3_H
#define MODULE3_H
struct pair_text
{
string x; //генерируется
string x_; //х_=x XOR А
string y; // зашифрованный х
string y_; // зашифрованный y_
string C; // y xor y_
};
map <int, int> generate_pbox(int n, int m);//Cоздает таблицу замены размер n*m - 2. Используем во время xor с ключом. Таблица еще не перемешана, мешаем в swap
vector <string> generate_key(int n, int j);//Cоздает ключ размера n*m*j. Ключ еще не разбит на K(i)
map <string, string> generate_sbox(int m); //Создает таблицу размера (2^m - 2). В ней как по таблице истинность упорядочены 000, 001... (смотри дальше Random_sbox)
vector <string> divide_str(string str, int n); //Разбивает текст на кучу блоков для дальнейшей замены (покачто хрен знает сколько блоков, размера m, ибо генерируем текст n*m - переполнения не будет)
vector <string> use_s_box (vector <string> hs, map <string,string> sbox);//Заменяем sblok
string use_p_box (vector <string> hs,map<int,int>p_box);//перестановка строки согласно p_box
//XOR, согласно p_box
string help_xor (string a,string b);//создано, чтобы делать XOR двух строк и не заморачиваться, используется в create_dif_tabl, из-за свойства xor (a xor b = c --> a xor c = b)
string Int_to_BitStr(int n, int bit);
string crypto (int n, int j,vector <string> key, map <string, string> s_box, map <int, int> p_box,string text);
vector <pair_text> create_pair( int count, int n, int m, int j,vector <string> key, map <string, string> s_box, map <int, int> p_box, string delta_A);//создает count штук пар открытых - закрытых текстов. Count задает пользователь
string Random_Bits_no_multi(int n, map <string, int> temp);
string Use1_sbox(map <string, string> sbox, string s1);
map <string, map<string, int> > Analyse_Tabl_generate(map <string, string> sbox, int m);
struct polynom
{
vector <int> lenta; // случайная последовательность сгенерированная rand()%
int N; // Количество битов в последовательности
vector <int> numbers; // Вектор с позициями битов, которые надо XOR'ить в result_polynom
};
struct Result_random
{
polynom liniya_svyazi; // Первый полином
polynom liniya_svyazi2; // Второй полином
int bit; // Случайный бит
vector <int> bits; // Случайные биты
};
polynom generate_polynom(int x1, int x2, int x3 = 0, int x4 = 0, int x5 = 0); // Генерация полинома
polynom result_polynom(polynom liniya_svyazi); // Результат работы полинома (xor битов и сдвиг)
Result_random Random_Bits(polynom liniya_svyazi, polynom liniya_svyazi2, int n); // Генерирование псевдослучайной последовательности длины n
Result_random random_bit(polynom liniya_svyazi, polynom liniya_svyazi2); // Генерирование псевдослучайного бита
vector <int> sdvig(vector <int> &text_sdvg); // Функция сдвига вправо на 1 позицию
int iRand();
string IntVec_to_Str(vector <int> vec);
long long int Int_login(string str);
bool check_delta(string str, int m, int n);
bool check_login(string str);
#endif