From 72eb97b648861bcd03744a027eb09d0410acdf1e Mon Sep 17 00:00:00 2001
From: George Hazan <george.hazan@gmail.com>
Date: Tue, 12 Nov 2013 19:51:48 +0000
Subject: first MS_CRYPTO_REGISTER_ENGINE implementation

git-svn-id: http://svn.miranda-ng.org/main/trunk@6879 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
---
 src/core/stdcrypt/commonheaders.h |  1 +
 src/core/stdcrypt/encrypt.cpp     |  4 ++++
 src/modules/crypt/encrypt.cpp     | 40 +++++++++++++++++++++++++++++++++++++++
 src/modules/utils/utils.cpp       | 20 +++++++++++++-------
 4 files changed, 58 insertions(+), 7 deletions(-)

diff --git a/src/core/stdcrypt/commonheaders.h b/src/core/stdcrypt/commonheaders.h
index 4edcc6e358..a16eb54b8e 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 <m_icolib.h>
 #include <m_modernopt.h>
 #include <m_timezones.h>
+#include <m_crypto.h>
 
 #include "version.h"
 
diff --git a/src/core/stdcrypt/encrypt.cpp b/src/core/stdcrypt/encrypt.cpp
index e86e34437d..fc72e74abc 100644
--- a/src/core/stdcrypt/encrypt.cpp
+++ b/src/core/stdcrypt/encrypt.cpp
@@ -25,5 +25,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 int LoadEncryptionModule(void)
 {
+	CRYPTO_PROVIDER cp = { sizeof(cp) };
+	cp.pszName = "AES (Rjindale)";
+	cp.pszDescr = LPGEN("Standard crypto provider");
+	Crypto_RegisterEngine(&cp);
 	return 0;
 }
diff --git a/src/modules/crypt/encrypt.cpp b/src/modules/crypt/encrypt.cpp
index 659e75cc53..ab73ac5671 100644
--- a/src/modules/crypt/encrypt.cpp
+++ b/src/modules/crypt/encrypt.cpp
@@ -49,9 +49,49 @@ static INT_PTR DecodeString(WPARAM wParam, LPARAM lParam)
 	return 0;
 }
 
+/////////////////////////////////////////////////////////////////////////////////////////
+
+static int CompareFunc(const CRYPTO_PROVIDER *p1, const CRYPTO_PROVIDER *p2)
+{
+	return strcmp(p1->pszName, p2->pszName);
+}
+
+static LIST<CRYPTO_PROVIDER> arProviders(5, CompareFunc);
+
+static INT_PTR srvRegister(WPARAM wParam, LPARAM lParam)
+{
+	CRYPTO_PROVIDER *p = (CRYPTO_PROVIDER*)lParam;
+	if (p == NULL || p->dwSize != sizeof(CRYPTO_PROVIDER))
+		return 1;
+
+	CRYPTO_PROVIDER *pNew = new CRYPTO_PROVIDER(*p);
+	pNew->pszName = mir_strdup(p->pszName);
+	if (pNew->dwFlags & CPF_UNICODE)
+		pNew->ptszDescr = mir_u2t(TranslateW_LP(p->pwszDescr, wParam));
+	else
+		pNew->ptszDescr = mir_a2t(TranslateA_LP(p->pszDescr, wParam));
+	arProviders.insert(pNew);
+	return 0;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
 int InitCrypt(void)
 {
 	CreateServiceFunction(MS_DB_CRYPT_ENCODESTRING, EncodeString);
 	CreateServiceFunction(MS_DB_CRYPT_DECODESTRING, DecodeString);
+
+	CreateServiceFunction(MS_CRYPTO_REGISTER_ENGINE, srvRegister);
 	return 0;
 }
+
+void UninitCrypt(void)
+{
+	for (int i = 0; i < arProviders.getCount(); i++) {
+		CRYPTO_PROVIDER *p = arProviders[i];
+		mir_free(p->pszName);
+		mir_free(p->pszDescr);
+		delete p;
+	}
+	arDbPlugins.destroy();
+}
diff --git a/src/modules/utils/utils.cpp b/src/modules/utils/utils.cpp
index 62322a9ec6..8a62eed3f3 100644
--- a/src/modules/utils/utils.cpp
+++ b/src/modules/utils/utils.cpp
@@ -26,17 +26,22 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #define MS_SYSTEM_GET_MD5I	"Miranda/System/GetMD5I"
 
 INT_PTR ResizeDialog(WPARAM wParam, LPARAM lParam);
-int InitOpenUrl(void);
-int InitWindowList(void);
-int InitPathUtils(void);
+
 void FreeWindowList(void);
-int InitHyperlink(void);
-int InitColourPicker(void);
-int InitBitmapFilter(void);
+
+int  InitOpenUrl(void);
+int  InitWindowList(void);
+int  InitPathUtils(void);
+int  InitHyperlink(void);
+int  InitColourPicker(void);
+int  InitBitmapFilter(void);
 void InitXmlApi(void);
+
 void InitTimeZones(void);
 void UninitTimeZones(void);
-int InitCrypt(void);
+
+int  InitCrypt(void);
+void UninitCrypt(void);
 
 static BOOL bModuleInitialized = FALSE;
 
@@ -484,6 +489,7 @@ void UnloadUtilsModule(void)
 	if ( !bModuleInitialized)
 		return;
 
+	UninitCrypt();
 	FreeWindowList();
 	UninitTimeZones();
 }
-- 
cgit v1.2.3