blob: c4d2c46338d9d480201b36e36fd1e9504f3c4937 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
#include "commonheaders.h"
// get context data on context id
pCNTX get_context_on_id(HANDLE context) {
if ( context ) {
pCNTX cntx = (pCNTX) context;
if ( cntx->header == HEADER && cntx->footer == FOOTER )
return cntx;
#if defined(_DEBUG) || defined(NETLIB_LOG)
Sent_NetLog("get_context_on_id: corrupted context %08X", cntx);
#endif
}
return NULL;
}
// create context, return context id
HANDLE __cdecl cpp_create_context(int mode) {
pCNTX cntx = (pCNTX) malloc(sizeof(CNTX));
memset(cntx,0,sizeof(CNTX)); // î÷èùàåì âûäåëåííûé áëîê
cntx->header = HEADER;
cntx->footer = FOOTER;
cntx->mode = mode;
return (HANDLE)cntx;
}
// delete context
void __cdecl cpp_delete_context(HANDLE context) {
pCNTX tmp = get_context_on_id(context);
if (tmp) { // ïîìå÷àåì íà óäàëåíèå
cpp_free_keys(tmp);
free(tmp);
}
}
// reset context
void __cdecl cpp_reset_context(HANDLE context) {
pCNTX tmp = get_context_on_id(context);
if (tmp) cpp_free_keys(tmp);
}
// allocate pdata
PBYTE cpp_alloc_pdata(pCNTX ptr) {
if ( !ptr->pdata ) {
if ( ptr->mode & MODE_PGP ) {
ptr->pdata = (PBYTE) malloc(sizeof(PGPDATA));
memset(ptr->pdata,0,sizeof(PGPDATA));
}
else
if ( ptr->mode & MODE_GPG ) {
ptr->pdata = (PBYTE) malloc(sizeof(GPGDATA));
memset(ptr->pdata,0,sizeof(GPGDATA));
}
else
if ( ptr->mode & MODE_RSA ) {
rsa_alloc(ptr);
}
else {
ptr->pdata = (PBYTE) malloc(sizeof(SIMDATA));
memset(ptr->pdata,0,sizeof(SIMDATA));
}
}
return ptr->pdata;
}
// free memory from keys
void cpp_free_keys(pCNTX ptr) {
SAFE_FREE(ptr->tmp);
cpp_alloc_pdata(ptr);
if ( ptr->mode & MODE_PGP ) {
pPGPDATA p = (pPGPDATA) ptr->pdata;
SAFE_FREE(p->pgpKeyID);
SAFE_FREE(p->pgpKey);
SAFE_FREE(ptr->pdata);
}
else
if ( ptr->mode & MODE_GPG ) {
pGPGDATA p = (pGPGDATA) ptr->pdata;
SAFE_FREE(p->gpgKeyID);
SAFE_FREE(ptr->pdata);
}
else
if ( ptr->mode & MODE_RSA ) {
rsa_free(ptr);
SAFE_DELETE(ptr->pdata);
}
else {
pSIMDATA p = (pSIMDATA) ptr->pdata;
SAFE_FREE(p->PubA);
SAFE_FREE(p->KeyA);
SAFE_FREE(p->KeyB);
SAFE_FREE(p->KeyX);
SAFE_FREE(p->KeyP);
SAFE_DELETE(p->dh);
SAFE_FREE(ptr->pdata);
}
}
// EOF
|