diff options
| author | Vadim Dashevskiy <watcherhd@gmail.com> | 2012-10-12 09:56:01 +0000 | 
|---|---|---|
| committer | Vadim Dashevskiy <watcherhd@gmail.com> | 2012-10-12 09:56:01 +0000 | 
| commit | 69fe21d6e2262d6fb2b14278b7a20364468cbdcf (patch) | |
| tree | d7a5c3805ba838e98e1c5288fe06962a3201c694 /plugins/Dbx_tree/encryption/ARC4/src | |
| parent | bcc2cdbf65af07f2593577a4c59f93d25c2e3de9 (diff) | |
Dbx_tree: folders restructurization
git-svn-id: http://svn.miranda-ng.org/main/trunk@1883 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'plugins/Dbx_tree/encryption/ARC4/src')
| -rw-r--r-- | plugins/Dbx_tree/encryption/ARC4/src/ARC4.cpp | 129 | ||||
| -rw-r--r-- | plugins/Dbx_tree/encryption/ARC4/src/ARC4.h | 65 | 
2 files changed, 194 insertions, 0 deletions
diff --git a/plugins/Dbx_tree/encryption/ARC4/src/ARC4.cpp b/plugins/Dbx_tree/encryption/ARC4/src/ARC4.cpp new file mode 100644 index 0000000000..7f3780e6a2 --- /dev/null +++ b/plugins/Dbx_tree/encryption/ARC4/src/ARC4.cpp @@ -0,0 +1,129 @@ +/*
 +
 +dbx_tree: tree database driver for Miranda IM
 +
 +Copyright 2007-2008 Michael "Protogenes" Kunz,
 +
 +This program is free software; you can redistribute it and/or
 +modify it under the terms of the GNU General Public License
 +as published by the Free Software Foundation; either version 2
 +of the License, or (at your option) any later version.
 +
 +This program is distributed in the hope that it will be useful,
 +but WITHOUT ANY WARRANTY; without even the implied warranty of
 +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 +GNU General Public License for more details.
 +
 +You should have received a copy of the GNU General Public License
 +along with this program; if not, write to the Free Software
 +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 +
 +*/
 +
 +#include "ARC4.h"
 +#include <string.h>
 +
 +const wchar_t * ARC4::Name()
 +{
 +	return cName;
 +}
 +const wchar_t * ARC4::Description()
 +{
 +	return cDescription;
 +}
 +const uint32_t  ARC4::BlockSizeBytes()
 +{
 +	return cBlockSizeBytes;
 +}
 +const bool      ARC4::IsStreamCipher()
 +{
 +	return cIsStreamCipher;
 +}
 +
 +ARC4::ARC4()
 +{
 +
 +}
 +ARC4::~ARC4()
 +{
 +
 +}
 +
 +CCipher::TCipherInterface* ARC4::Create() 
 +{
 +	return (new ARC4())->m_Interface;
 +}
 +
 +void ARC4::SetKey(void* Key, uint32_t KeyLength)
 +{	
 +	uint8_t swapbyte;
 +	uint8_t index1;
 +	uint8_t index2;
 +	unsigned int i;
 +
 +	uint8_t * k = (uint8_t *) Key;
 +
 +	for (i = 0; i < 256; ++i)
 +		State[i] = i;
 +
 +	x = 0;
 +	y = 0;
 +	index1 = 0;
 +	index2 = 0;
 +	for (i = 0; i < 256; ++i)
 +	{
 +		index2 = (k[index1] + State[i] + index2) & 0xff;
 +		swapbyte = State[i];
 +		State[i] = State[index2];
 +		State[index2] = swapbyte;
 +		index1 = (index1 + 1) % KeyLength;
 +	}
 +
 +	for (i = 0; i < 3742; ++i)
 +		Stream();
 +
 +	Backx = x;
 +	Backy = y;
 +	memcpy(BackState, State, sizeof(State));
 +}
 +
 +inline uint8_t ARC4::Stream()
 +{
 +	uint8_t swapbyte;
 +
 +	x = (x + 1) & 0xff;
 +	y = (State[x] + y) & 0xff;
 +
 +	swapbyte = State[x];
 +	State[x] = State[y];
 +	State[y] = swapbyte;
 +
 +	return State[ (State[x] + State[y]) & 0xff ];
 +}
 +
 +void ARC4::Encrypt(void* Data, uint32_t Size, uint32_t Nonce, uint32_t StartByte)
 +{	
 +	uint8_t * dat = (uint8_t *) Data;
 +	x = Backx;
 +	y = Backy;
 +	memcpy(State, BackState, sizeof(State));
 +
 +	for (unsigned int i = (Nonce + (Nonce >> 8) + (Nonce >> 16) + (Nonce >> 24)) & 0x1ff; i > 0; --i)
 +		Stream();
 +
 +	while (Size > 0)
 +	{
 +		(*dat) = (*dat) ^ Stream();
 +		--Size;
 +		++dat;
 +	}
 +}
 +void ARC4::Decrypt(void* Data, uint32_t Size, uint32_t Nonce, uint32_t StartByte)
 +{
 +	Encrypt(Data, Size, Nonce, StartByte);
 +}
 +
 +extern "C" __declspec(dllexport) const TCipherInfo* CipherInfo(void * Reserved)
 +{
 +	return &ARC4::cCipherInfo;
 +}
 diff --git a/plugins/Dbx_tree/encryption/ARC4/src/ARC4.h b/plugins/Dbx_tree/encryption/ARC4/src/ARC4.h new file mode 100644 index 0000000000..48fdc35312 --- /dev/null +++ b/plugins/Dbx_tree/encryption/ARC4/src/ARC4.h @@ -0,0 +1,65 @@ +/*
 +
 +dbx_tree: tree database driver for Miranda IM
 +
 +Copyright 2007-2008 Michael "Protogenes" Kunz,
 +
 +This program is free software; you can redistribute it and/or
 +modify it under the terms of the GNU General Public License
 +as published by the Free Software Foundation; either version 2
 +of the License, or (at your option) any later version.
 +
 +This program is distributed in the hope that it will be useful,
 +but WITHOUT ANY WARRANTY; without even the implied warranty of
 +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 +GNU General Public License for more details.
 +
 +You should have received a copy of the GNU General Public License
 +along with this program; if not, write to the Free Software
 +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 +
 +*/
 +
 +#pragma once
 +
 +#include "Cipher.h"
 +
 +class ARC4 : public CCipher
 +{
 +private:	
 +	uint8_t x;
 +	uint8_t y;
 +	uint8_t State[256];
 +
 +	uint8_t Backx;
 +	uint8_t Backy;
 +	uint8_t BackState[256];
 +
 +	uint8_t Stream();
 +
 +  static const wchar_t* cName;
 +  static const wchar_t* cDescription;
 +	static const uint32_t cBlockSizeBytes = 1;
 +	static const bool     cIsStreamCipher = true;
 +
 +public:
 +	const wchar_t * __cdecl Name();
 +	const wchar_t * __cdecl Description();
 +	const uint32_t  __cdecl BlockSizeBytes();
 +	const bool      __cdecl IsStreamCipher();
 +
 +	static const TCipherInfo cCipherInfo;
 +
 +	ARC4();
 +	~ARC4();
 +	static CCipher::TCipherInterface* __cdecl Create();
 +
 +	void __cdecl SetKey(void* Key, uint32_t KeyLength);
 +	void __cdecl Encrypt(void* Data, uint32_t Size, uint32_t Nonce, uint32_t StartByte);
 +	void __cdecl Decrypt(void* Data, uint32_t Size, uint32_t Nonce, uint32_t StartByte);
 +
 +};
 +
 +const wchar_t* ARC4::cName          = L"ARC4";
 +const wchar_t* ARC4::cDescription   = L"Streamcipher - 8bit step, fast, Ron Rivest 1987";
 +const TCipherInfo ARC4::cCipherInfo = {sizeof(TCipherInfo), 'ARC4', cName, cDescription, &ARC4::Create};
  | 
