Advertisement
DBDEBICH

Untitled

Nov 24th, 2023
516
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.67 KB | Source Code | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <sstream>
  4. #include "tools.h"
  5.  
  6. class Processor {
  7.     private:
  8.     public:
  9.         std::string encode(std::string msg, std::string key);
  10. };
  11.  
  12. std::string Processor::encode(std::string msg, std::string key) {
  13.     std::bitset<64> N;
  14.     for (int i = 0; i < 8; i++) {
  15.         N <<= 8;
  16.         N |= msg[i];
  17.     }
  18.  
  19.     std::vector<std::bitset<16> > sub_blocks = Tools::subbgen(N);
  20.    
  21.     std::bitset<128> key128;
  22.     for (int i = 0; i < 16; i++) {
  23.         key128 <<= 8;
  24.         key128 |= key[i];
  25.     }
  26.  
  27.     std::vector<std::bitset<16> > K_array = Tools::keygen(key128);
  28.     std::bitset<16> KS0, KS1, KS2, KS3, KF0, KF1, KF2, KF3;
  29.     KS0 = K_array[4]; KS1 = K_array[5]; KS2 = K_array[6]; KS3 = K_array[7];
  30.     KF0 = K_array[3]; KF1 = K_array[2]; KF2 = K_array[1]; KF3 = K_array[0];
  31.  
  32.     std::bitset<16> A,B,C,D;
  33.     A = (sub_blocks[0] ^ KS0);
  34.     B = (sub_blocks[1] ^ KS1);
  35.     C = (sub_blocks[2] ^ KS2);
  36.     D = (sub_blocks[3] ^ KS3);
  37.  
  38.     // 9 Раундов по 4 итерации каждый
  39.     for (int i = 0; i < 9; i++) {
  40.         for (int k = 0; k < 4; k++){
  41.             std::bitset<16> KR = K_array[i];
  42.             std::bitset<16> c = Table_C[i][k];
  43.             std::bitset<16> KRC = Tools::bitsetAdd(KR, c);
  44.             std::vector<std::bitset<16> > Y;
  45.             switch (k) {
  46.                 case 0:
  47.                     Y = Tools::iteration(A,B,C,D,KRC,i,k);
  48.                     A = Y[0]; B = Y[1]; C = Y[2]; D = Y[3];
  49.                     break;
  50.                 case 1:
  51.                     Y = Tools::iteration(B,C,D,A,KRC,i,k);
  52.                     A = Y[0]; B = Y[1]; C = Y[2]; D = Y[3];
  53.                     break;
  54.                 case 2:
  55.                     Y = Tools::iteration(C,D,A,B,KRC,i,k);
  56.                     A = Y[0]; B = Y[1]; C = Y[2]; D = Y[3];
  57.                     break;
  58.                 case 3:
  59.                     Y = Tools::iteration(D,A,B,C,KRC,i,k);
  60.                     A = Y[0]; B = Y[1]; C = Y[2]; D = Y[3];
  61.                     break;
  62.             }
  63.         }
  64.     }
  65.  
  66.     A ^= KF0; B ^= KF1; C ^= KF2; D ^= KF3;
  67.  
  68.     std::vector<std::bitset<8> > bit_result = Tools::resultcompiler(A,B,C,D);
  69.  
  70.     std::string total_result = "";
  71.  
  72.     for (int i = 0; i < bit_result.size(); i++) {
  73.         std::stringstream ss;
  74.         ss << std::hex << bit_result[i].to_ulong();
  75.         total_result += ss.str() + " ";
  76.     }
  77.  
  78.     return total_result;
  79. }
  80.  
  81.  
  82. int main(int argc, char const *argv[]) {
  83.     Processor NUSH;
  84.     std::string msg, key, result;
  85.     msg = "valorant";
  86.     key = "superdupersecret";
  87.     result = NUSH.encode(msg, key);
  88.     std::cout << result << std::endl;
  89.     return 0;
  90. }
Tags: C++ cpp
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement