[seahorse] pgp: Add keytype numbers
- From: Adam Schreiber <sadam src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [seahorse] pgp: Add keytype numbers
- Date: Sun, 7 Feb 2010 21:07:01 +0000 (UTC)
commit c7671f25e6c752924c1957491b9fff16f79b4e2d
Author: nobled <nobled dreamwidth org>
Date: Wed Jan 20 23:10:18 2010 +0000
pgp: Add keytype numbers
Add the keytype selection numbers used by gpg from 1.2.0
to 2.0.14.
pgp/seahorse-gpgme.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++
pgp/seahorse-gpgme.h | 8 ++++++
2 files changed, 73 insertions(+), 0 deletions(-)
---
diff --git a/pgp/seahorse-gpgme.c b/pgp/seahorse-gpgme.c
index 6cd694d..46a0d46 100644
--- a/pgp/seahorse-gpgme.c
+++ b/pgp/seahorse-gpgme.c
@@ -174,3 +174,68 @@ seahorse_gpgme_convert_validity (gpgme_validity_t validity)
return SEAHORSE_VALIDITY_UNKNOWN;
}
}
+
+/*
+ * Based on the values in ask_algo() in gnupg's g10/keygen.c
+ * http://cvs.gnupg.org/cgi-bin/viewcvs.cgi/trunk/g10/keygen.c?rev=HEAD&root=GnuPG&view=log
+ */
+const struct _SeahorseKeyTypeTable KEYTYPES_2012 =
+ { .rsa_sign=4, .rsa_enc=6, .dsa_sign=3, .elgamal_enc=5 };
+const struct _SeahorseKeyTypeTable KEYTYPES_140 =
+ { .rsa_sign=5, .rsa_enc=6, .dsa_sign=2, .elgamal_enc=4 };
+const struct _SeahorseKeyTypeTable KEYTYPES_124 =
+ { .rsa_sign=4, .rsa_enc=5, .dsa_sign=2, .elgamal_enc=3 };
+const struct _SeahorseKeyTypeTable KEYTYPES_120 =
+ { .rsa_sign=5, .rsa_enc=6, .dsa_sign=2, .elgamal_enc=3 };
+
+const SeahorseVersion VER_2012 = ((SeahorseVersion)2 << 48)
+ + ((SeahorseVersion)12 << 16);
+const SeahorseVersion VER_190 = ((SeahorseVersion)1 << 48) + ((SeahorseVersion)9 << 32);
+const SeahorseVersion VER_1410 = ((SeahorseVersion)1 << 48) + ((SeahorseVersion)4 << 32)
+ + ((SeahorseVersion)10 << 16);
+const SeahorseVersion VER_140 = ((SeahorseVersion)1 << 48) + ((SeahorseVersion)4 << 32);
+const SeahorseVersion VER_124 = ((SeahorseVersion)1 << 48) + ((SeahorseVersion)2 << 32)
+ + ((SeahorseVersion)4 << 16);
+const SeahorseVersion VER_120 = ((SeahorseVersion)1 << 48) + ((SeahorseVersion)2 << 32);
+
+/**
+ * seahorse_gpgme_get_keytype_table:
+ *
+ * @table: The requested keytype table
+ *
+ * Based on the gpg version in use, sets @table
+ * to contain the numbers that gpg uses in its CLI
+ * for adding new subkeys. This tends to get broken
+ * at random by new versions of gpg, but there's no good
+ * API for this.
+ *
+ * Returns GPG_ERR_USER_2 if gpg is too old.
+ *
+ * Returns: gpgme_error_t
+ **/
+gpgme_error_t
+seahorse_gpgme_get_keytype_table (SeahorseKeyTypeTable *table)
+{
+ gpgme_error_t gerr;
+ gpgme_engine_info_t engine;
+ SeahorseVersion ver;
+
+ gerr = gpgme_get_engine_info (&engine);
+ g_return_val_if_fail (GPG_IS_OK (gerr), gerr);
+
+ ver = seahorse_util_parse_version (engine->version);
+
+ if (ver >= VER_2012 || (ver >= VER_1410 && ver < VER_190))
+ *table = &KEYTYPES_2012;
+ else if (ver >= VER_140 || ver >= VER_190)
+ *table = &KEYTYPES_140;
+ else if (ver >= VER_124)
+ *table = &KEYTYPES_124;
+ else if (ver >= VER_120)
+ *table = &KEYTYPES_120;
+ else // older versions not supported
+ gerr = GPG_E (GPG_ERR_USER_2);
+
+ return gerr;
+}
+
diff --git a/pgp/seahorse-gpgme.h b/pgp/seahorse-gpgme.h
index 855a0f7..45833a6 100644
--- a/pgp/seahorse-gpgme.h
+++ b/pgp/seahorse-gpgme.h
@@ -29,6 +29,12 @@
#include "seahorse-validity.h"
+typedef struct _SeahorseKeyTypeTable *SeahorseKeyTypeTable;
+
+struct _SeahorseKeyTypeTable {
+ int rsa_sign, rsa_enc, dsa_sign, elgamal_enc;
+};
+
/* TODO: I think these are extraneous and can be removed. In actuality OK == 0 */
#define GPG_IS_OK(e) (gpgme_err_code (e) == GPG_ERR_NO_ERROR)
#define GPG_OK (gpgme_error (GPG_ERR_NO_ERROR))
@@ -49,4 +55,6 @@ GType seahorse_gpgme_boxed_key_type (void);
SeahorseValidity seahorse_gpgme_convert_validity (gpgme_validity_t validity);
+gpgme_error_t seahorse_gpgme_get_keytype_table (SeahorseKeyTypeTable *table);
+
#endif /* SEAHORSEGPGME_H_ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]