hey, im very new to c++ and i keep getting errors when i try to run this code in visual c++ , im also unsure if it should be a win console application or a win desktop application? errors below are from running it in console app
#include <windows.h> // For memcpy
#include "CryptoGear.h"
// Overloaded costructor with no arguments.
// Must manually initialize keystream.
CCryptoGear::CCryptoGear()
{}
// Cipher Initialization.
// Generates keystream and set mode of operation.
void CCryptoGear::Initialize(unsigned char* pKey, unsigned int lenKey, unsigned char ModeOfOperation,unsigned char InitializationVector)
{
m_ModeOfOperation = ModeOfOperation;
unsigned int i;
for (i = 0; i < m_lenKeystream; i++)
{
m_KeyStream[i] = i + InitializationVector;
}
for (i = 0; i < m_lenKeystream; i++)
{
// xor initial keystream element value(0 - 255) with corresponding byte from key offset
m_KeyStream[i] ^= (lenKey + pKey[i % lenKey]) % 256;
}
}
void CCryptoGear::Encrypt(unsigned char pData[], unsigned long lenData)
{
unsigned long Offset;
unsigned char KeyStream[m_lenKeystream];
//Create a local copy of the original KeyStream.
memcpy(KeyStream, m_KeyStream, m_lenKeystream * sizeof(unsigned char));
// Calculate padding
unsigned char extra = lenData % 4;
// If plain-text data size is not a multiple of block size,
// then we must add a temporary padding (will be removed after finishing encrypting)
if (extra)
{
extra = 4 - extra;
lenData += extra;
pData = (unsigned char*)realloc(pData, lenData);
}
// keystream elements used in this block are shifted.
// This way on next key round the corresponding keystream byte will be different.
for (unsigned char i = 0; i < 4; i++)
{
KeyStream[(Offset + i) % m_lenKeystream] += pData[(Offset + i) % lenData] % 256;
}
}
}
void CCryptoGear::Decrypt(unsigned char pData[], unsigned long lenData)
{
unsigned char KeyStream[m_lenKeystream];
unsigned long Offset;
unsigned char a, b, c, d;
unsigned char e, f, g, h;
unsigned char i, j, k;
//Create a local copy of the original keystream.
memcpy(KeyStream, m_KeyStream, m_lenKeystream * sizeof(unsigned char));
// Calculate padding
unsigned char extra = lenData % 4;
// If data size is not a multiple of block size,
// then we must temporarely add padding (will be removed after finishing decryption)
if (extra)
{
extra = 4 - extra;
lenData += extra;
pData = (unsigned char*)realloc(pData, lenData);
}
//Decrypt the data.
for (Offset = 0; Offset < lenData; Offset = Offset + 4)
{
if (m_ModeOfOperation == MODE_CBC)
{
// Save original encrypted bytes, used for key shifting later
a = pData[Offset];
b = pData[(Offset + 1) % lenData];
c = pData[(Offset + 2) % lenData];
d = pData[(Offset + 3) % lenData];
// Do from second cycle
if (Offset > 0)
{
// xor block with previous block
pData[Offset] ^= e % 256;
pData[(Offset + 1) % lenData] ^= f % 256;
pData[(Offset + 2) % lenData] ^= g % 256;
pData[(Offset + 3) % lenData] ^= h % 256;
}
// Store encrypted bytes of this block for next cycle
e = a;
f = b;
g = c;
h = d;
}
// Save xored bytes (or original encrypted bytes if we are using ECB).
// With those we can shift back keystream operations and obtain clear-text.
i = pData[Offset];
j = pData[(Offset + 1) % lenData];
k = pData[(Offset + 2) % lenData];
if (m_ModeOfOperation == MODE_CBC)
{
// Values of KeyStream elements used in this block are modified.
// This way on each key round the corresponding key byte will be different.
KeyStream[Offset % m_lenKeystream] += a;
KeyStream[(Offset + 1) % m_lenKeystream] += b;
KeyStream[(Offset + 2) % m_lenKeystream] += c;
KeyStream[(Offset + 3) % m_lenKeystream] += d;
}
}
iv added the header to the project ect, these are the errors i get
1. E1696 cannot open source file "CryptoGear.h" ConsoleApplication3 c:\Users\username\source\repos\ConsoleApplication3\ConsoleApplication3\ConsoleApplication3.cpp 6
2.E0276 name followed by '::' must be a class or namespace name ConsoleApplication3 c:\Users\username\source\repos\ConsoleApplication3\ConsoleApplication3\ConsoleApplication3.cpp 10
3.E0020 identifier "Initialize" is undefined ConsoleApplication3 c:\Users\username\source\repos\ConsoleApplication3\ConsoleApplication3\ConsoleApplication3.cpp 12
4.E0276 name followed by '::' must be a class or namespace name ConsoleApplication3 c:\Users\username\source\repos\ConsoleApplication3\ConsoleApplication3\ConsoleApplication3.cpp 18
5. E0020 identifier "m_ModeOfOperation" is undefined ConsoleApplication3 c:\Users\username\source\repos\ConsoleApplication3\ConsoleApplication3\ConsoleApplication3.cpp 26
and about 20 more errors, if someone could get back to me with advise id appreciate it.
In general you want to wrap all code in [ code ] ... [ /code ] tags (no spaces between brackets).
In this case the problem is more about including the header. Guessing the header is not in same directory as the .cpp , or is not in a directory pulled in by included directories.