Advertisement
Guest User

Untitled

a guest
Oct 7th, 2020
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.10 KB | None | 0 0
  1. std::pair<std::uint32_t, std::uint32_t> gost::oneStepCrypto(std::pair<std::uint32_t, std::uint32_t> buf, size_t &round)
  2. {
  3.     std::uint32_t lower, high; //Блок входных данных, разбитых на две половины
  4.  
  5.     unsigned char* byteBuffer;//Указатель для побайтовой работы с таблицей
  6.  
  7.     lower = buf.first;
  8.     high = buf.second;
  9.  
  10.     if (this->mode == SIMPLECRYPT) //Режим шифрования
  11.         lower = (lower +  (round < 24 ? key[round % 8] : key[31 - round])) % 4294967296;
  12.     else if (this->mode == SIMPLEENCRYPT)//Режим дешифровки
  13.         lower = (lower +  (round < 8? key[round] : key[7 - (round - 8) % 8])) % 4294967296;
  14.  
  15.  
  16.  
  17.     byteBuffer = reinterpret_cast<unsigned char*>(&lower);
  18.  
  19.     for (size_t i = 0; i < 4; i++)
  20.         byteBuffer[i] = (((table[2 * i][byteBuffer[i] >> 4]) << 4) | (table[2 * i + 1][byteBuffer[i] & 0x0F]));
  21.  
  22.  
  23.     lower = rol(lower,11);
  24.     lower = high ^ lower;
  25.     round++;
  26.     return (round != 31 ? std::make_pair(lower, buf.first): std::make_pair(buf.first, lower));
  27. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement