mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-16 22:02:58 -06:00
Added Initialization Vectors handling in encryption git-svn-id: svn://ultimatepp.org/upp/trunk@2739 f0d560ea-af0d-0410-9eb7-867de7ffcac7
47 lines
1.1 KiB
C++
47 lines
1.1 KiB
C++
#include "Protect.h"
|
|
|
|
#ifdef PLATFORM_POSIX
|
|
#include <sys/mman.h>
|
|
#include <unistd.h>
|
|
|
|
bool PROTECT_WRITE_ACCESS(byte *start, size_t size, bool access)
|
|
{
|
|
// round start and size to page size -- needed for mprotect
|
|
long pSize = sysconf(_SC_PAGESIZE );
|
|
long delta = (long)start % pSize;
|
|
if(delta)
|
|
{
|
|
start -= delta;
|
|
size += delta;
|
|
}
|
|
return mprotect(start, size, access ? PROT_READ | PROT_WRITE | PROT_EXEC : PROT_READ | PROT_EXEC) == 0;
|
|
}
|
|
#else
|
|
|
|
bool PROTECT_WRITE_ACCESS(byte *start, size_t size, bool access)
|
|
{
|
|
dword oldProt;
|
|
bool res = VirtualProtect(start, size, access ? PAGE_EXECUTE_READWRITE : PAGE_EXECUTE_READ, &oldProt);
|
|
|
|
return res;
|
|
}
|
|
#endif
|
|
|
|
void PROTECT_DECRYPT(byte *start, size_t size, String const &key, byte const *nonce, size_t nonceLen)
|
|
{
|
|
Snow2 snow2((byte const *)~key, key.GetCount(), nonce, nonceLen);
|
|
|
|
snow2(start, size);
|
|
}
|
|
|
|
void PROTECT_OBFUSCATE(byte *start, size_t len, byte *key, size_t keyLen)
|
|
{
|
|
String k;
|
|
for(unsigned i = 0; i < keyLen; i++)
|
|
k += *key++;
|
|
if(!PROTECT_WRITE_ACCESS(start, len, true))
|
|
return;
|
|
Snow2 snow2(k, "12345678");
|
|
snow2(start, len);
|
|
PROTECT_WRITE_ACCESS(start, len, false);
|
|
}
|