#include "selection.h" #include "aes128_enum_params.h" using namespace std; bool aes128_enum_params_valid(const vector ¶ms,const vector &attackparams) { bigint K = params.at(0); bigint C = params.at(1); bigint pos = 0; bigint ITERS = attackparams.at(pos++); bigint QX = attackparams.at(pos++); bigint QUEUE_SIZE = attackparams.at(pos++); bigint QF = attackparams.at(pos++); auto PERIOD = QF*QUEUE_SIZE; if (ITERS < 0) return 0; bigint searchspace = bigint(1)<= searchspace) return 0; if (QX < 0) return 0; if (QX > 1) return 0; if (QUEUE_SIZE < 1) return 0; if (PERIOD < 1) return 0; return 1; } void aes128_enum_params(const vector ¶ms,map &S,int (*callback)(const vector &)) { bigint K = params.at(0); bigint Imin = 0; bigint Imax = (bigint(1)< QXmax) continue; bigint QFmin = 1; bigint QFmax = 1024; selection_constrain(S,"QF",QFmin,QFmax); if (QFmin < 1) continue; for (bigint QF = QFmin;QF <= QFmax;QF *= 2) { if (QF < 1) break; bigint QUEUE_SIZEmin = 1; bigint QUEUE_SIZEmax = 8; selection_constrain(S,"QU",QUEUE_SIZEmin,QUEUE_SIZEmax); if (QUEUE_SIZEmin < 1) continue; for (bigint QUEUE_SIZE = QUEUE_SIZEmin;QUEUE_SIZE <= QUEUE_SIZEmax;QUEUE_SIZE *= 2) { if (QUEUE_SIZE < 1) break; vector Q{I,QX,QUEUE_SIZE,QF}; if (callback(Q) < 0) return; } } } } }