diff options
Diffstat (limited to 'GnuPG/keys.cpp')
-rw-r--r-- | GnuPG/keys.cpp | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/GnuPG/keys.cpp b/GnuPG/keys.cpp new file mode 100644 index 0000000..d944927 --- /dev/null +++ b/GnuPG/keys.cpp @@ -0,0 +1,62 @@ +#include "gnupgplugin.h"
+
+typedef char tkeyuserid[keyuseridsize];
+
+tkeyuserid *keyuserids[2];
+int keyuseridcount[2];
+
+void initKeyUserIDs(const int atype)
+{
+ keyuseridcount[atype]=0;
+ keyuserids[atype]=NULL;
+}
+
+void updateKeyUserIDs(const int atype)
+{
+ char *pos;
+ gpgResult gpgresult;
+ char keyuserid[keyuseridsize];
+ char *buffer=NULL;
+
+ releaseKeyUserIDs(atype);
+ initKeyUserIDs(atype);
+
+ gpgresult=(atype==publickeyuserid)
+ ?gpgListPublicKeys(&buffer)
+ :gpgListSecretKeys(&buffer);
+
+ if (gpgresult!=gpgSuccess)
+ {
+ ErrorMessage(txterror,
+ (atype==publickeyuserid
+ ?txtlistpublickeysfailed
+ :txtlistsecretkeysfailed),
+ txtverifyoptions);
+ return;
+ }
+
+ for (pos=buffer; (pos=getNextPart(keyuserid,pos,txtcrlf)); )
+ {
+ keyuseridcount[atype]++;
+ keyuserids[atype]=(char(*)[512])
+ mir_realloc(keyuserids[atype],sizeof(tkeyuserid)*keyuseridcount[atype]);
+ strcpy(keyuserids[atype][keyuseridcount[atype]-1],keyuserid);
+ }
+
+ fnFALSE(&buffer);
+}
+
+void releaseKeyUserIDs(const int atype)
+{
+ mir_free(keyuserids[atype]);
+}
+
+char *getKeyUserID(const int atype, const int aindex)
+{
+ return keyuserids[atype][aindex];
+}
+
+int getKeyUserIDCount(const int atype)
+{
+ return keyuseridcount[atype];
+}
|