Canonical Key Format for ECC?

NIIBE Yutaka gniibe at fsij.org
Wed Jul 8 08:02:54 CEST 2015


Hello,

Here is the change to use Libgcrypt's curve name than OID string.
It includes a bit of clean up for API of openpgp_oid_to_curve.

I'm going to commit this.

diff --git a/common/openpgp-oid.c b/common/openpgp-oid.c
index 7a75801..676079c 100644
--- a/common/openpgp-oid.c
+++ b/common/openpgp-oid.c
@@ -332,7 +332,7 @@ openpgp_curve_to_oid (const char *name, unsigned int *r_nbits)
 }


-/* Map an OpenPGP OID to the Libgcrypt curve NAME.  Returns "?" for
+/* Map an OpenPGP OID to the Libgcrypt curve NAME.  Returns NULL for
    unknown curve names.  We prefer an alias name here which is more
    suitable for printing.  */
 const char *
@@ -341,13 +341,13 @@ openpgp_oid_to_curve (const char *oidstr)
   int i;

   if (!oidstr)
-    return "";
+    return NULL;

   for (i=0; oidtable[i].name; i++)
     if (!strcmp (oidtable[i].oidstr, oidstr))
       return oidtable[i].alias? oidtable[i].alias : oidtable[i].name;

-  return "?";
+  return NULL;
 }


diff --git a/g10/import.c b/g10/import.c
index de22520..0a2ebcd 100644
--- a/g10/import.c
+++ b/g10/import.c
@@ -1414,7 +1414,9 @@ transfer_secret_keys (ctrl_t ctrl, struct stats_s *stats, kbnode_t sec_keyblock,
             err = gpg_error_from_syserror ();
           else
             {
-              err = gcry_sexp_build (&curve, NULL, "(curve %s)", curvestr);
+              const char *curvename = openpgp_oid_to_curve (curvestr);
+              err = gcry_sexp_build (&curve, NULL, "(curve %s)",
+                                     curvename?curvename:curvestr);
               xfree (curvestr);
               if (!err)
                 {
diff --git a/g10/keyid.c b/g10/keyid.c
index 90d982e..6b6f670 100644
--- a/g10/keyid.c
+++ b/g10/keyid.c
@@ -121,7 +121,7 @@ pubkey_string (PKT_public_key *pk, char *buffer, size_t bufsize)
       char *curve = openpgp_oid_to_str (pk->pkey[0]);
       const char *name = openpgp_oid_to_curve (curve);

-      if (*name && *name != '?')
+      if (name)
         snprintf (buffer, bufsize, "%s", name);
       else if (curve)
         snprintf (buffer, bufsize, "E_%s", curve);
diff --git a/g10/keylist.c b/g10/keylist.c
index d4e572e..d81e7dd 100644
--- a/g10/keylist.c
+++ b/g10/keylist.c
@@ -1092,7 +1092,7 @@ list_keyblock_print (KBNODE keyblock, int secret, int fpr,
             {
               char *curve = openpgp_oid_to_str (pk2->pkey[0]);
               const char *name = openpgp_oid_to_curve (curve);
-              if (!*name || *name == '?')
+              if (!name)
                 name = curve;
               es_fprintf (es_stdout, " %s", name);
               xfree (curve);
@@ -1359,7 +1359,7 @@ list_keyblock_colon (KBNODE keyblock, int secret, int has_secret, int fpr)
     {
       char *curve = openpgp_oid_to_str (pk->pkey[0]);
       const char *name = openpgp_oid_to_curve (curve);
-      if (!*name || *name == '?')
+      if (!name)
         name = curve;
       es_fputs (name, es_stdout);
       xfree (curve);
@@ -1488,7 +1488,7 @@ list_keyblock_colon (KBNODE keyblock, int secret, int has_secret, int fpr)
             {
               char *curve = openpgp_oid_to_str (pk->pkey[0]);
               const char *name = openpgp_oid_to_curve (curve);
-              if (!*name || *name == '?')
+              if (!name)
                 name = curve;
               es_fputs (name, es_stdout);
               xfree (curve);
diff --git a/g10/parse-packet.c b/g10/parse-packet.c
index 5116404..6131d32 100644
--- a/g10/parse-packet.c
+++ b/g10/parse-packet.c
@@ -2086,8 +2086,8 @@ parse_key (IOBUF inp, int pkttype, unsigned long pktlen,
                    || algorithm == PUBKEY_ALGO_ECDH) && i==0)
                 {
                   char *curve = openpgp_oid_to_str (pk->pkey[0]);
-                  es_fprintf (listfp, " %s (%s)",
-                              openpgp_oid_to_curve (curve), curve);
+                  const char *name = openpgp_oid_to_curve (curve);
+                  es_fprintf (listfp, " %s (%s)", name?name:"", curve);
                   xfree (curve);
                 }
               es_putc ('\n', listfp);
--



More information about the Gnupg-devel mailing list