diff options
Diffstat (limited to 'GnuPG/passphrases.cpp')
-rw-r--r-- | GnuPG/passphrases.cpp | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/GnuPG/passphrases.cpp b/GnuPG/passphrases.cpp new file mode 100644 index 0000000..1b93e95 --- /dev/null +++ b/GnuPG/passphrases.cpp @@ -0,0 +1,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;
+}
|