From 268d637031d98cd88ef29dbac4a7c862f678cfc0 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Wed, 13 Nov 2013 12:47:58 +0000 Subject: initial version of stdcrypt, without encryption git-svn-id: http://svn.miranda-ng.org/main/trunk@6888 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- src/core/stdcrypt/commonheaders.h | 3 + src/core/stdcrypt/encrypt.cpp | 83 +++++++++++++++++++++++++++ src/core/stdcrypt/stdcrypt.h | 50 ++++++++++++++++ src/core/stdcrypt/stdcrypt_10.vcxproj | 1 + src/core/stdcrypt/stdcrypt_10.vcxproj.filters | 3 + src/core/stdcrypt/stdcrypt_11.vcxproj | 1 + src/core/stdcrypt/stdcrypt_11.vcxproj.filters | 3 + src/core/stdcrypt/stdcrypt_12.vcxproj | 1 + src/core/stdcrypt/stdcrypt_12.vcxproj.filters | 3 + 9 files changed, 148 insertions(+) create mode 100644 src/core/stdcrypt/stdcrypt.h (limited to 'src/core') diff --git a/src/core/stdcrypt/commonheaders.h b/src/core/stdcrypt/commonheaders.h index a16eb54b8e..f89df739dd 100644 --- a/src/core/stdcrypt/commonheaders.h +++ b/src/core/stdcrypt/commonheaders.h @@ -65,6 +65,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include #include +#include #include #include "version.h" @@ -72,4 +73,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "../../resource.h" #include "../stdplug.h" +#include "stdcrypt.h" + extern HINSTANCE hInst; diff --git a/src/core/stdcrypt/encrypt.cpp b/src/core/stdcrypt/encrypt.cpp index fc72e74abc..40e33c9266 100644 --- a/src/core/stdcrypt/encrypt.cpp +++ b/src/core/stdcrypt/encrypt.cpp @@ -23,11 +23,94 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "commonheaders.h" +CStdCrypt::CStdCrypt() : + m_password("Miranda") +{} + +void CStdCrypt::destroy() +{ + delete this; +} + +size_t CStdCrypt::getKeyLength() +{ + return KEYLENGTH; +} + +bool CStdCrypt::getKey(BYTE *pKey, size_t cbKeyLen) +{ + if (cbKeyLen < KEYLENGTH) + return false; + + memcpy(pKey, m_key, sizeof(m_key)); + if (cbKeyLen > KEYLENGTH) + memset(pKey + KEYLENGTH, 0, cbKeyLen - KEYLENGTH); + return true; +} + +int CStdCrypt::setKey(const BYTE *pKey, size_t cbKeyLen) +{ + if (cbKeyLen > KEYLENGTH) + return false; + + memcpy(m_key, pKey, cbKeyLen); + if (cbKeyLen < KEYLENGTH) + memset(m_key + cbKeyLen, 0, KEYLENGTH - cbKeyLen); + return 0; +} + +void CStdCrypt::generateKey(void) +{ + LARGE_INTEGER counter; + QueryPerformanceCounter(&counter); + srand((UINT)counter.QuadPart); + for (int i = 0; i < sizeof(m_key); i++) + m_key[i] = (BYTE)rand(); +} + +void CStdCrypt::purgeKey(void) +{ + memset(m_key, 0, sizeof(m_key)); +} + +// sets the master password (in utf-8) +void CStdCrypt::setPassword(const char *pszPassword) +{ + m_password = pszPassword; +} + +// result must be freed using mir_free or assigned to mir_ptr +BYTE* CStdCrypt::encodeString(const char *src, size_t *cbResultLen) +{ + return 0; +} + +BYTE* CStdCrypt::encodeStringW(const WCHAR* src, size_t *cbResultLen) +{ + return 0; +} + +char* CStdCrypt::decodeString(const BYTE *pBuf, size_t bufLen, size_t *cbResultLen) +{ + return 0; +} + +WCHAR* CStdCrypt::decodeStringW(const BYTE *pBuf, size_t bufLen, size_t *cbResultLen) +{ + return 0; +} + +static MICryptoEngine* __cdecl builder() +{ + return new CStdCrypt(); +} + int LoadEncryptionModule(void) { CRYPTO_PROVIDER cp = { sizeof(cp) }; cp.pszName = "AES (Rjindale)"; cp.pszDescr = LPGEN("Standard crypto provider"); + cp.pFactory = builder; Crypto_RegisterEngine(&cp); return 0; } diff --git a/src/core/stdcrypt/stdcrypt.h b/src/core/stdcrypt/stdcrypt.h new file mode 100644 index 0000000000..4d5b0710ca --- /dev/null +++ b/src/core/stdcrypt/stdcrypt.h @@ -0,0 +1,50 @@ +/* + +Standard encryption plugin for Myranda NG +Copyright (C) 2012-13 George Hazan + +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., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#define KEYLENGTH (256/8) + +struct CStdCrypt : public MICryptoEngine, public MZeroedObject +{ + CStdCrypt(); + + BYTE m_key[KEYLENGTH]; + CMStringA m_password; + + STDMETHODIMP_(void) destroy(); + + // get/set the instance key + STDMETHODIMP_(size_t) getKeyLength(void); + STDMETHODIMP_(bool) getKey(BYTE *pKey, size_t cbKeyLen); + STDMETHODIMP_(int) setKey(const BYTE *pKey, size_t cbKeyLen); + + STDMETHODIMP_(void) generateKey(void); // creates a new key inside + STDMETHODIMP_(void) purgeKey(void); // purges a key from memory + + // sets the master password (in utf-8) + STDMETHODIMP_(void) setPassword(const char *pszPassword); + + // result must be freed using mir_free or assigned to mir_ptr + STDMETHODIMP_(BYTE*) encodeString(const char *src, size_t *cbResultLen); + STDMETHODIMP_(BYTE*) encodeStringW(const WCHAR* src, size_t *cbResultLen); + + // result must be freed using mir_free or assigned to ptrA/ptrT + STDMETHODIMP_(char*) decodeString(const BYTE *pBuf, size_t bufLen, size_t *cbResultLen); + STDMETHODIMP_(WCHAR*) decodeStringW(const BYTE *pBuf, size_t bufLen, size_t *cbResultLen); +}; diff --git a/src/core/stdcrypt/stdcrypt_10.vcxproj b/src/core/stdcrypt/stdcrypt_10.vcxproj index a8fb8b5b1a..d48b79c832 100644 --- a/src/core/stdcrypt/stdcrypt_10.vcxproj +++ b/src/core/stdcrypt/stdcrypt_10.vcxproj @@ -212,6 +212,7 @@ + diff --git a/src/core/stdcrypt/stdcrypt_10.vcxproj.filters b/src/core/stdcrypt/stdcrypt_10.vcxproj.filters index f4466c28bd..3130117a02 100644 --- a/src/core/stdcrypt/stdcrypt_10.vcxproj.filters +++ b/src/core/stdcrypt/stdcrypt_10.vcxproj.filters @@ -35,6 +35,9 @@ Header Files + + Header Files + diff --git a/src/core/stdcrypt/stdcrypt_11.vcxproj b/src/core/stdcrypt/stdcrypt_11.vcxproj index 890a10e365..16d8244f14 100644 --- a/src/core/stdcrypt/stdcrypt_11.vcxproj +++ b/src/core/stdcrypt/stdcrypt_11.vcxproj @@ -215,6 +215,7 @@ + diff --git a/src/core/stdcrypt/stdcrypt_11.vcxproj.filters b/src/core/stdcrypt/stdcrypt_11.vcxproj.filters index f4466c28bd..3130117a02 100644 --- a/src/core/stdcrypt/stdcrypt_11.vcxproj.filters +++ b/src/core/stdcrypt/stdcrypt_11.vcxproj.filters @@ -35,6 +35,9 @@ Header Files + + Header Files + diff --git a/src/core/stdcrypt/stdcrypt_12.vcxproj b/src/core/stdcrypt/stdcrypt_12.vcxproj index 2d7f5c5881..efedd20ed0 100644 --- a/src/core/stdcrypt/stdcrypt_12.vcxproj +++ b/src/core/stdcrypt/stdcrypt_12.vcxproj @@ -215,6 +215,7 @@ + diff --git a/src/core/stdcrypt/stdcrypt_12.vcxproj.filters b/src/core/stdcrypt/stdcrypt_12.vcxproj.filters index f4466c28bd..3130117a02 100644 --- a/src/core/stdcrypt/stdcrypt_12.vcxproj.filters +++ b/src/core/stdcrypt/stdcrypt_12.vcxproj.filters @@ -35,6 +35,9 @@ Header Files + + Header Files + -- cgit v1.2.3