#include #include #include #include "bignum.h" #include #include #include #include #include "cards.h" std::vector factorials; std::string alphabet_str = " .,-\"/abcdefghijklmnopqrstuvwxyz"; std::vector alphabet = std::vector(alphabet_str.begin(), alphabet_str.end()); Num getFactorial(Num n){ if(factorials.size() == 0){ for(Num i=0; i<1000; i+=1){ if(i==0) factorials.push_back(Num(1)); else factorials.push_back(factorials.back() * i); } } return factorials[n.to_double()]; } std::vector decimalToFactoradic(Num decimal){ std::vector result; int divisor = 1; while(decimal > 0){ result.insert(result.begin(), (decimal % divisor)); decimal /= divisor; divisor++; } return result; } Num factoradicToDecimal(std::vector factoradic){ Num result(0); for(int i=0; i decimalToPermutation(Num decimal, Num permutationSize){ std::vector factoradic = decimalToFactoradic(decimal); while(factoradic.size() available; for(Num i(0); i permutation; for(int i=0; i permutation){ std::vector factoradic; std::vector numbers; for(Num i = 0; i textToBitset(std::string text){ std::bitset<225> data = 0; for(int i=0; i data){ std::vector words(4,0); for(int i=0; i<225; i++){ int index = i / 64; int bit = i % 64; if(data[i]){ words[index] |= uint64_t(1)< binaryToPackOfCards(std::bitset<225> data){ std::vector words(4,0); for(int i=0; i<225; i++){ int index = i / 64; int bit = i % 64; if(data[i]){ words[index] |= uint64_t(1)< permutation = decimalToPermutation(num, 52); std::array cards; for(int i=0; i<52; i++){ cards[i]=permutation[i].to_double(); } std::cout << "permsize: "< textToPackOfCards(std::string text){ std::bitset<225> data = textToBitset(text); return binaryToPackOfCards(data); } std::array textToPackOfCardsEncrypted(std::string text, std::string key){ std::bitset<225> data = textToBitset(text); std::bitset<225> keyData = textToBitset(key); data ^= keyData; return binaryToPackOfCards(data); } std::string packOfCardsToText(std::array cards){ std::string result = ""; std::vector permutation; for(int i=0; i<52; i++){ permutation.push_back(Num(cards[i])); } std::cout << "permsize: "< cards, std::string key){ std::string text = packOfCardsToText(cards); std::bitset<225> data = textToBitset(text); std::bitset<225> keyData = textToBitset(key); data ^= keyData; return bitsetToText(data); }