mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-02 22:46:30 +02:00
scd: support any curves defined by libgcrypt.
* g10/call-agent.h (struct agent_card_info_s): Add curve field. * g10/call-agent.c (learn_status_cb): Use curve name. * g10/card-util.c (card_status): Show pubkey name. * scd/app-openpgp.c (struct app_local_s): Record OID and flags. (store_fpr): Use ALGO instead of key type. (send_key_attr): Use curve name instead of OID. (get_public_key): Clean up by OID to curve name. (ecc_writekey): Support any curves in libgcrypt. (do_genkey, do_auth, ): Follow the change. (ecc_oid): New. (parse_algorithm_attribute): Show OID here.
This commit is contained in:
parent
4ee4b99837
commit
ef080d5c7f
4 changed files with 180 additions and 232 deletions
|
@ -645,14 +645,32 @@ learn_status_cb (void *opaque, const char *line)
|
|||
}
|
||||
else if (keywordlen == 8 && !memcmp (keyword, "KEY-ATTR", keywordlen))
|
||||
{
|
||||
int keyno, algo, nbits;
|
||||
int keyno = 0;
|
||||
int algo = PUBKEY_ALGO_RSA;
|
||||
int n = 0;
|
||||
|
||||
sscanf (line, "%d %d %d", &keyno, &algo, &nbits);
|
||||
sscanf (line, "%d %d %n", &keyno, &algo, &n);
|
||||
keyno--;
|
||||
if (keyno >= 0 && keyno < DIM (parm->key_attr))
|
||||
if (keyno < 0 || keyno >= DIM (parm->key_attr))
|
||||
return 0;
|
||||
|
||||
parm->key_attr[keyno].algo = algo;
|
||||
if (algo == PUBKEY_ALGO_RSA)
|
||||
parm->key_attr[keyno].nbits = strtoul (line+n+3, NULL, 10);
|
||||
else if (algo == PUBKEY_ALGO_ECDH || algo == PUBKEY_ALGO_ECDSA
|
||||
|| algo == PUBKEY_ALGO_EDDSA)
|
||||
{
|
||||
parm->key_attr[keyno].algo = algo;
|
||||
parm->key_attr[keyno].nbits = nbits;
|
||||
const char *curve;
|
||||
|
||||
i = 0;
|
||||
do
|
||||
{
|
||||
curve = openpgp_enum_curves (&i);
|
||||
if (!strcmp (curve, line+n))
|
||||
break;
|
||||
}
|
||||
while (curve != NULL);
|
||||
parm->key_attr[keyno].curve = curve;
|
||||
}
|
||||
}
|
||||
else if (keywordlen == 12 && !memcmp (keyword, "PRIVATE-DO-", 11)
|
||||
|
|
|
@ -55,7 +55,10 @@ struct agent_card_info_s
|
|||
int chvretry[3]; /* Allowed retries for the CHV; 0 = blocked. */
|
||||
struct { /* Array with key attributes. */
|
||||
int algo; /* Algorithm identifier. */
|
||||
unsigned int nbits; /* Supported keysize. */
|
||||
union {
|
||||
unsigned int nbits; /* Supported keysize. */
|
||||
const char *curve; /* Name of curve. */
|
||||
};
|
||||
} key_attr[3];
|
||||
struct {
|
||||
unsigned int ki:1; /* Key import available. */
|
||||
|
|
|
@ -471,9 +471,14 @@ card_status (estream_t fp, char *serialno, size_t serialnobuflen)
|
|||
|
||||
es_fprintf (fp, "forcepin:%d:::\n", !info.chv1_cached);
|
||||
for (i=0; i < DIM (info.key_attr); i++)
|
||||
if (info.key_attr[0].algo)
|
||||
if (info.key_attr[0].algo == PUBKEY_ALGO_RSA)
|
||||
es_fprintf (fp, "keyattr:%d:%d:%u:\n", i+1,
|
||||
info.key_attr[i].algo, info.key_attr[i].nbits);
|
||||
else if (info.key_attr[i].algo == PUBKEY_ALGO_ECDH
|
||||
|| info.key_attr[i].algo == PUBKEY_ALGO_ECDSA
|
||||
|| info.key_attr[i].algo == PUBKEY_ALGO_EDDSA)
|
||||
es_fprintf (fp, "keyattr:%d:%d:%s:\n", i+1,
|
||||
info.key_attr[i].algo, info.key_attr[i].curve);
|
||||
es_fprintf (fp, "maxpinlen:%d:%d:%d:\n",
|
||||
info.chvmaxlen[0], info.chvmaxlen[1], info.chvmaxlen[2]);
|
||||
es_fprintf (fp, "pinretry:%d:%d:%d:\n",
|
||||
|
@ -553,12 +558,12 @@ card_status (estream_t fp, char *serialno, size_t serialnobuflen)
|
|||
{
|
||||
tty_fprintf (fp, "Key attributes ...:");
|
||||
for (i=0; i < DIM (info.key_attr); i++)
|
||||
tty_fprintf (fp, " %u%c",
|
||||
info.key_attr[i].nbits,
|
||||
info.key_attr[i].algo == 1? 'R':
|
||||
info.key_attr[i].algo == 17? 'D':
|
||||
info.key_attr[i].algo == 18? 'e':
|
||||
info.key_attr[i].algo == 19? 'E': '?');
|
||||
if (info.key_attr[i].algo == PUBKEY_ALGO_RSA)
|
||||
tty_fprintf (fp, " rsa%u", info.key_attr[i].nbits);
|
||||
else if (info.key_attr[i].algo == PUBKEY_ALGO_ECDH
|
||||
|| info.key_attr[i].algo == PUBKEY_ALGO_ECDSA
|
||||
|| info.key_attr[i].algo == PUBKEY_ALGO_EDDSA)
|
||||
tty_fprintf (fp, " %s", info.key_attr[i].curve);
|
||||
tty_fprintf (fp, "\n");
|
||||
}
|
||||
tty_fprintf (fp, "Max. PIN lengths .: %d %d %d\n",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue