summaryrefslogtreecommitdiff
path: root/GnuPG/passphrases.cpp
blob: 1b93e95b3a9987b788307ecb5603cef49b1fbda7 (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
#include "gnupgplugin.h"

// passphrase typ
struct passphrase_s
{
	char keyuserid[keyuseridsize];
	char passphrase[passphrasesize];
};

// globale variablen
struct passphrase_s *passphrases;
int passphrasecount;

void initPassphrases(void)
{
	passphrasecount=0;
	passphrases=NULL;
}

void releasePassphrases(void)
{
	for (int i=0; i<passphrasecount; i++)
		ZeroMemory(passphrases[i].passphrase,sizeof(passphrases[i].passphrase));
	
	mir_free(passphrases);
}

void addPassphrase(const char *akeyuserid, const char *apassphrase)
{
	if (!akeyuserid || !apassphrase)
		return;
	
	if (getPassphrase(akeyuserid))
		return;

	passphrasecount++;

	passphrase_s *ps=(passphrase_s*)mir_alloc(sizeof(passphrase_s)*passphrasecount);
	if (!ps)
	{
		--passphrasecount;
		return;
	}
	
	if (passphrasecount>1)
	{
		int prevsiz=sizeof(passphrase_s)*(passphrasecount-1);
		memcpy(ps,passphrases,prevsiz);
		ZeroMemory(passphrases,prevsiz);
		mir_free(passphrases);
	}

	passphrases=ps;
	
	strncpy(passphrases[passphrasecount-1].keyuserid,akeyuserid,keyuseridsize);
	strncpy(passphrases[passphrasecount-1].passphrase,apassphrase,passphrasesize);
	passphrases[passphrasecount-1].keyuserid[keyuseridsize-1]='\0';
	passphrases[passphrasecount-1].passphrase[passphrasesize-1]='\0';
}

char *getPassphrase(const char *akeyuserid)
{
	char *result=NULL;

	for (int i=0; i<passphrasecount; i++)
	{
		if (strcmp(passphrases[i].keyuserid,akeyuserid)==0)
			result=passphrases[i].passphrase;
	}
	
	return result;
}