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