-rw-r--r-- 1155 cryptattacktester-20231020/predictedcp.cpp raw
#include <iostream>
#include "problem.h"
#include "attack.h"
#include "collision_prob.h"
using namespace std;
int attack_handle(const problem &E,const vector<bigint> &P,const attack &A,const vector<bigint> &Q)
{
bigint cost = A.cost(P,Q);
bigfloat prob = A.prob(P,Q);
bigfloat lgcost = log2(bigfloat(cost));
bigfloat lgprob = log2(prob);
bigfloat numinputs = E.numinputs(P);
bigfloat numoutputs = E.numoutputs(P);
bigfloat prob2 = collision_lastmatch_prob(prob*numinputs,numinputs,numoutputs);
bigfloat lgprob2 = log2(prob2);
cout << "predictedcp";
cout << " problem=" << E.name;
for (bigint j = 0;j < P.size();++j)
cout << (j ? ',' : ' ') << E.paramnames.at(j) << "=" << P.at(j);
cout << " attack=" << A.name;
for (bigint j = 0;j < Q.size();++j)
cout << (j ? ',' : ' ') << A.paramnames.at(j) << "=" << Q.at(j);
cout << " lgratio " << lgcost-lgprob;
cout << " lgratio2 " << lgcost-lgprob2;
cout << " cost " << cost;
cout << " lgcost " << lgcost;
cout << " prob " << prob;
cout << " lgprob " << lgprob;
cout << " prob2 " << prob2;
cout << " lgprob2 " << lgprob2;
cout << '\n' << flush;
return 1;
}