-rw-r--r-- 684 cryptattacktester-20231020/permutation.h raw
#ifndef permutation_h #define permutation_h #include <vector> #include "bigint.h" std::vector<bigint> permutation_gen(bigint); class permutation { std::vector<bigint> pi; public: permutation(bigint n) : pi(permutation_gen(n)) { } permutation(bigint n,bigint plus) { plus %= n; if (plus < 0) plus += n; for (bigint i = 0; i < n; i++) pi.push_back((i + plus) % n); } template<class T> void permute(std::vector<T> &v,bigint offset=0) { std::vector<T> w = v; for (bigint i = 0; i < pi.size(); i++) w.at(i + offset) = v.at(pi.at(i) + offset); for (bigint i = 0; i < v.size(); i++) v.at(i) = w.at(i); } } ; #endif