YAARX: Yet Another ARX Toolkit  0.1
 All Data Structures Files Functions Variables Macros Pages
simon-xor-ddt-search.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2012-2013 Luxembourg University,
3  * Laboratory of Algorithmics, Cryptology and Security (LACS).
4  *
5  * This file is part of the YAARX toolkit. YAARX stands for
6  * Yet Another ARX toolkit for analysis of ARX cryptographic algorithms.
7  *
8  * YAARX is free software: you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation, either version 3 of the License, or
11  * (at your option) any later version.
12  *
13  * YAARX is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with YAARX. If not, see <http://www.gnu.org/licenses/>.
20  */
27 #ifndef SIMON_XOR_DDT_SEARCH_H
28 #define SIMON_XOR_DDT_SEARCH_H
29 
30 double** simon_ddt_alloc();
31 void simon_ddt_free(double** T);
36 bool simon_comp_differentials_diffs(differential_t a, differential_t b);
37 void simon_ddt_sort(differential_t* SDDT);
40 void simon_ddt_to_list(double** DDT, differential_t* SDDT);
41 void simon_ddt_to_diff_struct(double** DDT, differential_t** SDDT);
42 void simon_rot_and_ddt(double** D, const uint32_t s, const uint32_t t, const double p_thres);
43 void simon_xor_ddt_search(const int n, const int nrounds,
44  double B[NROUNDS], double* Bn,
45  const differential_t diff_in[NROUNDS], differential_t trail[NROUNDS],
46  const uint32_t dyy_init,
47  uint32_t lrot_const_s, uint32_t lrot_const_t, uint32_t lrot_const_u,
48  differential_t* SDDT, // sorted DDT
49  differential_t** RSDDT, // row-sorted DDT
50  double p_thres);
51 uint32_t simon_xor_ddt_trail_search(uint32_t key[SIMON_MAX_NROUNDS], double B[NROUNDS], differential_t trail[NROUNDS], uint32_t num_rounds);
52 
53 // Next: max HW = 5
54 uint32_t gen_word_hw(const uint32_t n, const uint32_t hw,
55  std::vector<uint32_t>* X);
56 uint32_t gen_word_hw_all(const uint32_t word_size, const uint32_t hw);
57 void simon_diff_update_max(const differential_t input_diff, const differential_t output_diff, differential_t* max_diff);
58 void simon_compute_full_ddt(std::unordered_map<uint32_t, std::vector<differential_t>>* T);
59 void simon32_ddt_file_write(const char* filename,
60  std::unordered_map<uint32_t, std::vector<differential_t>>* T);
61 void simon32_ddt_file_read(const char* filename,
62  std::unordered_map<uint32_t, std::vector<differential_t>>* T);
63 void simon_diff_search(const uint32_t nrounds,
64  const uint32_t dx_in,
65  const uint32_t dy_in,
66  const uint32_t hw_max,
67  std::unordered_map<uint32_t, std::vector<differential_t>>* T,
68  std::unordered_map<uint32_t, differential_t>* D, // all output diffs after D_round
69  const uint32_t D_round,
70  const char* logfile);
71 void simon_compute_partial_ddt(std::unordered_map<uint32_t, std::vector<differential_t>>* T,
72  std::vector<uint32_t> DX, const uint32_t hw_max);
73 
74 
75 #endif // #ifndef SIMON_XOR_THRESHOLD_SEARCH_H
void simon_compute_partial_ddt(std::unordered_map< uint32_t, std::vector< differential_t >> *T, std::vector< uint32_t > DX, const uint32_t hw_max)
Definition: simon-xor-ddt-search.cc:679
void simon_compute_full_ddt(std::unordered_map< uint32_t, std::vector< differential_t >> *T)
Definition: simon-xor-ddt-search.cc:700
#define NROUNDS
Definition: common.hh:122
Definition: common.hh:272
uint32_t gen_word_hw_all(const uint32_t word_size, const uint32_t hw)
Definition: simon-xor-ddt-search.cc:618
differential_t * simon_sddt_alloc()
Definition: simon-xor-ddt-search.cc:142
double ** simon_ddt_alloc()
Definition: simon-xor-ddt-search.cc:75
void simon_ddt_free(double **T)
Definition: simon-xor-ddt-search.cc:88
void simon_rsddt_free(differential_t **T)
Definition: simon-xor-ddt-search.cc:112
void simon_ddt_sort_rows(differential_t **T)
Definition: simon-xor-ddt-search.cc:123
void simon_ddt_to_diff_struct(double **DDT, differential_t **SDDT)
Definition: simon-xor-ddt-search.cc:177
void simon_sddt_free(differential_t *ST)
Definition: simon-xor-ddt-search.cc:152
bool simon_comp_differentials_npairs(differential_t a, differential_t b)
Definition: simon-xor-ddt-search.cc:52
void simon32_ddt_file_write(const char *filename, std::unordered_map< uint32_t, std::vector< differential_t >> *T)
Definition: simon-xor-ddt-search.cc:1267
uint32_t gen_word_hw(const uint32_t n, const uint32_t hw, std::vector< uint32_t > *X)
Definition: simon-xor-ddt-search.cc:601
differential_t ** simon_rsddt_alloc()
Definition: simon-xor-ddt-search.cc:99
void simon_ddt_to_list(double **DDT, differential_t *SDDT)
Definition: simon-xor-ddt-search.cc:161
void simon_ddt_sort(differential_t *SDDT)
Definition: simon-xor-ddt-search.cc:134
void simon32_ddt_file_read(const char *filename, std::unordered_map< uint32_t, std::vector< differential_t >> *T)
Definition: simon-xor-ddt-search.cc:1315