-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;
}