#include "commonheaders.h" HMODULE hgpg; HRSRC hRS_gpg; PBYTE pRS_gpg; int __cdecl _gpg_init(void); int __cdecl _gpg_done(void); int __cdecl _gpg_open_keyrings(LPSTR,LPSTR); int __cdecl _gpg_close_keyrings(void); void __cdecl _gpg_set_log(LPCSTR); void __cdecl _gpg_set_tmp(LPCSTR); LPSTR __cdecl _gpg_get_error(void); int __cdecl _gpg_size_keyid(void); int __cdecl _gpg_select_keyid(HWND,LPSTR); LPSTR __cdecl _gpg_encrypt(LPCSTR,LPCSTR); LPSTR __cdecl _gpg_decrypt(LPCSTR); LPSTR __cdecl _gpg_get_passphrases(); void __cdecl _gpg_set_passphrases(LPCSTR); int __cdecl gpg_init() { hgpg = g_hInst; return _gpg_init(); } int __cdecl gpg_done() { int r = 0; if (hgpg) { r = _gpg_done(); hgpg = 0; } return r; } int __cdecl gpg_open_keyrings(LPSTR ExecPath, LPSTR HomePath) { return _gpg_open_keyrings(ExecPath, HomePath); } int __cdecl gpg_close_keyrings() { return _gpg_close_keyrings(); } void __cdecl gpg_set_log(LPCSTR LogPath) { _gpg_set_log(LogPath); } void __cdecl gpg_set_tmp(LPCSTR TmpPath) { _gpg_set_tmp(TmpPath); } LPSTR __cdecl gpg_get_error() { return _gpg_get_error(); } LPSTR __cdecl gpg_encrypt(pCNTX ptr, LPCSTR szPlainMsg) { ptr->error = ERROR_NONE; pGPGDATA p = (pGPGDATA) ptr->pdata; SAFE_FREE(ptr->tmp); LPSTR szEncMsg; szEncMsg = _gpg_encrypt(szPlainMsg,(LPCSTR)p->gpgKeyID); if (!szEncMsg) return 0; ptr->tmp = (LPSTR)_strdup(szEncMsg); LocalFree((LPVOID)szEncMsg); return ptr->tmp; } LPSTR __cdecl gpg_decrypt(pCNTX ptr, LPCSTR szEncMsg) { ptr->error = ERROR_NONE; SAFE_FREE(ptr->tmp); LPSTR szPlainMsg = _gpg_decrypt(szEncMsg); /* if (!szPlainMsg) { ptr = get_context_on_id(hPGPPRIV); // find private pgp keys if (ptr && ptr->pgpKey) szPlainMsg = _gpg_decrypt_key(szEncMsg,(LPCSTR)ptr->pgpKey); if (!szPlainMsg) return NULL; }*/ ptr->tmp = (LPSTR)_strdup(szPlainMsg); LocalFree((LPVOID)szPlainMsg); return ptr->tmp; } LPSTR __cdecl gpg_encode(HANDLE context, LPCSTR szPlainMsg) { pCNTX ptr = get_context_on_id(context); if (!ptr) return NULL; pGPGDATA p = (pGPGDATA) cpp_alloc_pdata(ptr); if (!p->gpgKeyID) { ptr->error = ERROR_NO_GPG_KEY; return NULL; } // utf8 message: encrypt. LPSTR szUtfMsg; if ( ptr->mode & MODE_GPG_ANSI ) { LPWSTR wszMsg = utf8decode(szPlainMsg); int wlen = (int)wcslen(wszMsg)+1; szUtfMsg = (LPSTR) alloca(wlen); WideCharToMultiByte(CP_ACP, 0, wszMsg, -1, szUtfMsg, wlen, 0, 0); } else { szUtfMsg = (LPSTR)szPlainMsg; } return gpg_encrypt(ptr, szUtfMsg); } LPSTR __cdecl gpg_decode(HANDLE context, LPCSTR szEncMsg) { pCNTX ptr = get_context_on_id(context); if (!ptr) return NULL; LPSTR szNewMsg = NULL; LPSTR szOldMsg = gpg_decrypt(ptr, szEncMsg); if (szOldMsg) { if ( !is_7bit_string(szOldMsg) && !is_utf8_string(szOldMsg) ) { int slen = (int)strlen(szOldMsg)+1; LPWSTR wszMsg = (LPWSTR) alloca(slen*sizeof(WCHAR)); MultiByteToWideChar(CP_ACP, 0, szOldMsg, -1, wszMsg, slen*sizeof(WCHAR)); szNewMsg = _strdup(utf8encode(wszMsg)); } else { szNewMsg = _strdup(szOldMsg); } } SAFE_FREE(ptr->tmp); ptr->tmp = szNewMsg; return szNewMsg; } int __cdecl gpg_set_key(HANDLE context, LPCSTR RemoteKey) { /* pCNTX ptr = get_context_on_id(context); if (!ptr) return 0; ptr->error = ERROR_NONE; // if (!_gpg_check_key(RemoteKey)) return 0; SAFE_FREE(ptr->pgpKey); ptr->pgpKey = (BYTE *) malloc(strlen(RemoteKey)+1); strcpy((LPSTR)ptr->pgpKey,RemoteKey); return 1; */ return 0; } int __cdecl gpg_set_keyid(HANDLE context, LPCSTR RemoteKeyID) { pCNTX ptr = get_context_on_id(context); if (!ptr) return 0; pGPGDATA p = (pGPGDATA) cpp_alloc_pdata(ptr); ptr->error = ERROR_NONE; SAFE_FREE(p->gpgKeyID); p->gpgKeyID = (PBYTE)_strdup(RemoteKeyID); return 1; } int __cdecl gpg_size_keyid() { return _gpg_size_keyid(); } int __cdecl gpg_select_keyid(HWND hDlg,LPSTR szKeyID) { return _gpg_select_keyid(hDlg,szKeyID); } LPSTR __cdecl gpg_get_passphrases() { return _gpg_get_passphrases(); } void __cdecl gpg_set_passphrases(LPCSTR buffer) { _gpg_set_passphrases(buffer); } // EOF