-rw-r--r-- 726 cryptattacktester-20230614/bruteforce2_cost.cpp raw
#include <cassert>
#include "index_cost.h"
#include "bit_vector_cost.h"
#include "bruteforce2_cost.h"
using namespace std;
bigint bruteforce2_cost(const vector<bigint> ¶ms,const vector<bigint> &attackparams)
{
bigint n = params.at(0);
bigint k = params.at(1);
bigint w = params.at(2);
bigint iters = attackparams.at(0);
bigint cost = 0;
for (bigint v = 0;v <= w;++v) {
bigint binkv = binomial(k,v);
iters -= binkv;
for (bigint u = 1;u <= v;++u)
cost += binomial(k-v+u,u)*(n-k); // adding vectors
cost += binkv*bit_vector_hamming_weight_isnot_cost(n-k,w-v);
cost += binkv*(n+v+2*(n-k));
assert(iters >= 0);
if (iters == 0) break;
}
assert(iters == 0);
return cost;
}