Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <vector>
- #include <cstring>
- #include <cstdio>
- #include <string>
- #include <iomanip>
- #include <stdint.h>
- using namespace std;
- uint32_t rotl(uint32_t n, size_t shift)
- {return (n << shift) | (n >> (32 - shift));}
- vector<uint32_t> tmp(4);
- uint8_t read(istream& s)
- {
- return s.get();
- }
- void quarterround(vector<uint32_t> &a){
- a[0]=a[0]+a[1];
- a[3]^=a[0];
- a[3]=rotl(a[3],16);
- a[2]=a[2]+a[3];
- a[1]^=a[2];
- a[1]=rotl(a[1],12);
- a[0]=a[0]+a[1];
- a[3]^=a[0];
- a[3]=rotl(a[3],8);
- a[2]=a[2]+a[3];
- a[1]^=a[2];
- a[1]=rotl(a[1],7);
- }
- void columnround(vector<uint32_t> &a){
- tmp[0]=a[0];tmp[1]=a[4];tmp[2]=a[8];tmp[3]=a[12];
- quarterround(tmp);
- a[0]=tmp[0];a[4]=tmp[1];a[8]=tmp[2];a[12]=tmp[3];
- tmp[0]=a[1];tmp[1]=a[5];tmp[2]=a[9];tmp[3]=a[13];
- quarterround(tmp);
- a[1]=tmp[0];a[5]=tmp[1];a[9]=tmp[2];a[13]=tmp[3];
- tmp[0]=a[2];tmp[1]=a[6];tmp[2]=a[10];tmp[3]=a[14];
- quarterround(tmp);
- a[2]=tmp[0];a[6]=tmp[1];a[10]=tmp[2];a[14]=tmp[3];
- tmp[0]=a[3];tmp[1]=a[7];tmp[2]=a[11];tmp[3]=a[15];
- quarterround(tmp);
- a[3]=tmp[0];a[7]=tmp[1];a[11]=tmp[2];a[15]=tmp[3];
- }
- void diagonalround(vector<uint32_t> &a){
- tmp[0]=a[0];tmp[1]=a[5];tmp[2]=a[10];tmp[3]=a[15];
- quarterround(tmp);
- a[0]=tmp[0];a[5]=tmp[1];a[10]=tmp[2];a[15]=tmp[3];
- tmp[0]=a[1];tmp[1]=a[6];tmp[2]=a[11];tmp[3]=a[12];
- quarterround(tmp);
- a[1]=tmp[0];a[6]=tmp[1];a[11]=tmp[2];a[12]=tmp[3];
- tmp[0]=a[2];tmp[1]=a[7];tmp[2]=a[8];tmp[3]=a[13];
- quarterround(tmp);
- a[2]=tmp[0];a[7]=tmp[1];a[8]=tmp[2];a[13]=tmp[3];
- tmp[0]=a[3];tmp[1]=a[4];tmp[2]=a[9];tmp[3]=a[14];
- quarterround(tmp);
- a[3]=tmp[0];a[4]=tmp[1];a[9]=tmp[2];a[14]=tmp[3];
- }
- void doubleround(vector<uint32_t> &a){
- columnround(a);
- diagonalround(a);
- }
- uint32_t u32(uint8_t b[4]){
- uint32_t u;
- u = b[0];
- u = (u << 8) + b[1];
- u = (u << 8) + b[2];
- u = (u << 8) + b[3];
- return u;
- }
- int main(){
- int i1;
- uint8_t b[4];
- vector<uint8_t> key(32);
- vector<uint8_t> nonce(12);
- vector<uint32_t> x(16);
- vector<uint32_t> y(16);
- vector<uint8_t> keystream(114);
- vector<uint8_t> input(114);
- vector<uint8_t> output(114);
- uint32_t k = 0x00000001;
- ifstream in("C:\\Users\\lesha\\key.bin",ios::binary|ios::in);
- if (in.is_open())
- {
- for (int i=0; i<32; i++){
- in.read((char*)&key[i],sizeof(key[i]));
- }
- }
- for (int i=0; i<32; i++){
- cout<<hex<<(int)key[i]<<endl;
- }
- in.close();
- ifstream in1("C:\\Users\\lesha\\nonce.bin",ios::binary|ios::in);
- if (in1.is_open())
- {
- for (int i=0; i<12; i++){
- in1.read((char*)&nonce[i],sizeof(nonce[i]));
- }
- }
- in1.close();
- x[0]=0x61707865; x[1]=0x3320646e; x[2]=0x79622d32; x[3]=0x6b206574; x[13]=0x09000000; x[14]=0x4a000000; x[15]=0x00000000;
- for (int i=0; i<8; i++){
- for (int j=0; j<4; j++){
- b[j]=key[4*i+3-j];
- }
- x[4+i]=u32(b);
- }
- for (int i=0; i<3; i++){
- for (int j=0; j<4; j++){
- b[j]=nonce[4*i+3-j];
- }
- x[13+i]=u32(b);
- }
- for (int i=0; i<16; i++){
- y[i]=x[i];
- }
- ifstream in2;
- in2.open("C:\\Users\\lesha\\input.bin",ios::binary|ios::in);
- if (in2.is_open()){
- for (int i=0; i<114; i++){
- in2.read((char*)&input[i],sizeof(input[i]));
- }
- }
- in2.close();
- ofstream out("C:\\Users\\lesha\\output.bin",ios::binary|ios::in);
- for (int i=0; i<114/64+1; i++){
- for (int j=0; j<16; j++){
- x[j]=y[j];
- }
- x[12]=k;
- for (int j=0; j<16; j++){
- y[j]=x[j];
- }
- for (int i=0; i<4; i++){
- for (int j=0; j<4; j++){
- cout<<hex<<(uint32_t)x[4*i+j]<<" ";
- }
- cout<<endl;
- }
- cout<<endl;
- for (int j=0; j<10; j++){
- doubleround(x);
- }
- for (int j=0; j<16; j++){
- x[j]+=y[j];
- }
- for (int i=0; i<4; i++){
- for (int j=0; j<4; j++){
- cout<<hex<<(uint32_t)x[4*i+j]<<" ";
- }
- cout<<endl;
- }
- cout<<endl;
- for (int j=0; j<64; j++){
- if(64*i+j<114){
- output[j+64*i] = input[j+64*i] ^ (uint8_t)(x[j/4]>>(j%4)*8);
- out.write((char*)&output[j+64*i], sizeof(output[j+64*i]));
- }
- }
- k++;
- }
- out.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement