#include <iostream>
#include <vector>
#include <sstream> //this is where istringstream is defined
#include <cstdint>
using namespace std;
using ValueVector = vector<uint32_t>;
int x(ValueVector& tab, uint32_t numBit)
{
return ((tab[numBit / 32] >> (numBit % 32))&1);
}
void set(ValueVector& tab, uint32_t numBit, uint32_t v)
{
uint32_t t = v << (numBit % 32);
uint32_t m = 1 << (numBit % 32);
uint32_t o= tab[numBit / 32];
o &= ~m;
tab[numBit / 32] = o | t;
}
class Formule
{
ValueVector formuleL;
ValueVector formuleR;
public:
void add(uint32_t a, uint32_t b)
{
formuleL.push_back(a);
formuleR.push_back(b);
}
};
int main()
{
int size;
cout<<"funWithFormule"<<endl;
string is="256\n 320a18d5 b61b13f6 1aaaa61c 0afe2a41 1a4ff107 84cc2efc 956ff31d fa595299 33749a7f 6cc9659d dc503569 ef4d0ef5 73b746c5 b8fb36d3 7616e9d6 b21251c4\n";
std::istringstream sin(is);
sin >> size;
ValueVector a(size / 16); // <- input tab to encrypt
ValueVector b(size / 16); // <- output tab
vector<Formule> formule(size * size);
cout<<"funWithFormule begin read"<<endl;
for (auto&& val : a)
sin >> hex >> val;
for (int i = 0; i < size; i++)
for (int j = 0; j < size; j++)
formule[i+j].add(i,j+size);
cout<<"funWithFormule apply formulaes"<<endl;
for(int i=0;i<size*2;i++)
{
cout<<i<<endl;
unsigned int xo=0;
set(b, i, xo);
}
for(auto val : b)
cout << hex << val << " ";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3N0cmVhbT4gLy90aGlzIGlzIHdoZXJlIGlzdHJpbmdzdHJlYW0gaXMgZGVmaW5lZAojaW5jbHVkZSA8Y3N0ZGludD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp1c2luZyBWYWx1ZVZlY3RvciA9IHZlY3Rvcjx1aW50MzJfdD47CgppbnQgeChWYWx1ZVZlY3RvciYgdGFiLCB1aW50MzJfdCBudW1CaXQpCnsKICAgIHJldHVybiAoKHRhYltudW1CaXQgLyAzMl0gPj4gKG51bUJpdCAlIDMyKSkmMSk7Cn0KCnZvaWQgc2V0KFZhbHVlVmVjdG9yJiB0YWIsIHVpbnQzMl90IG51bUJpdCwgdWludDMyX3QgdikKewogICAgdWludDMyX3QgdCA9IHYgPDwgKG51bUJpdCAlIDMyKTsKICAgIHVpbnQzMl90IG0gPSAxIDw8IChudW1CaXQgJSAzMik7CiAgICAKICAgIHVpbnQzMl90IG89IHRhYltudW1CaXQgLyAzMl07CiAgICBvICY9IH5tOwogICAgdGFiW251bUJpdCAvIDMyXSA9IG8gfCB0Owp9CgpjbGFzcyBGb3JtdWxlCnsKICAgIFZhbHVlVmVjdG9yIGZvcm11bGVMOwogICAgVmFsdWVWZWN0b3IgZm9ybXVsZVI7CiAgICAgCnB1YmxpYzoKICAgIHZvaWQgYWRkKHVpbnQzMl90IGEsIHVpbnQzMl90IGIpCiAgICB7CiAgICAgICBmb3JtdWxlTC5wdXNoX2JhY2soYSk7CiAgICAgICBmb3JtdWxlUi5wdXNoX2JhY2soYik7CiAgICB9Cn07CgppbnQgbWFpbigpCnsKICAgCWludCBzaXplOwogIAogICAJY291dDw8ImZ1bldpdGhGb3JtdWxlIjw8ZW5kbDsKICAgCXN0cmluZyBpcz0iMjU2XG4gMzIwYTE4ZDUgYjYxYjEzZjYgMWFhYWE2MWMgMGFmZTJhNDEgMWE0ZmYxMDcgODRjYzJlZmMgOTU2ZmYzMWQgZmE1OTUyOTkgMzM3NDlhN2YgNmNjOTY1OWQgZGM1MDM1NjkgZWY0ZDBlZjUgNzNiNzQ2YzUgYjhmYjM2ZDMgNzYxNmU5ZDYgYjIxMjUxYzRcbiI7CiAgIAlzdGQ6OmlzdHJpbmdzdHJlYW0gc2luKGlzKTsKICAgCXNpbiA+PiBzaXplOwogCiAgIAlWYWx1ZVZlY3RvciBhKHNpemUgLyAxNik7IC8vIDwtIGlucHV0IHRhYiB0byBlbmNyeXB0CiAgIAlWYWx1ZVZlY3RvciBiKHNpemUgLyAxNik7IC8vIDwtIG91dHB1dCB0YWIKICAgCXZlY3RvcjxGb3JtdWxlPiBmb3JtdWxlKHNpemUgKiBzaXplKTsKCiAgIAljb3V0PDwiZnVuV2l0aEZvcm11bGUgYmVnaW4gcmVhZCI8PGVuZGw7CiAgIAogICAgZm9yIChhdXRvJiYgdmFsIDogYSkKICAgIAlzaW4gPj4gaGV4ID4+IHZhbDsKICAgCiAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKICAgIAlmb3IgKGludCBqID0gMDsgaiA8IHNpemU7IGorKykKICAgICAgICAJZm9ybXVsZVtpK2pdLmFkZChpLGorc2l6ZSk7CiAgICAgICAgCiAgCWNvdXQ8PCJmdW5XaXRoRm9ybXVsZSBhcHBseSBmb3JtdWxhZXMiPDxlbmRsOwogCiAgICBmb3IoaW50IGk9MDtpPHNpemUqMjtpKyspCiAgICB7CiAgICAgICAgY291dDw8aTw8ZW5kbDsKICAgICAgICB1bnNpZ25lZCBpbnQgeG89MDsKIAogICAgICAgIHNldChiLCBpLCB4byk7CiAgICB9CgogICAgZm9yKGF1dG8gdmFsIDogYikKICAgICAgCWNvdXQgPDwgaGV4IDw8IHZhbCA8PCAiICI7CgoJcmV0dXJuIDA7Cn0=