mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-02 22:46:30 +02:00
scd:openpgp: Send a KEY-TIME status with READKEY
* scd/app-openpgp.c (retrieve_fprtime_from_card): New. (do_readkey): Send a KEY_TIME status. -- It might be easier to fold this into KEYPAIRINFO but for backward compatibility using a separate status line is safer. Signed-off-by: Werner Koch <wk@gnupg.org>
This commit is contained in:
parent
6bc7318ef5
commit
77ea916533
2 changed files with 39 additions and 1 deletions
|
@ -1291,6 +1291,36 @@ retrieve_fpr_from_card (app_t app, int keyno, char *fpr)
|
|||
}
|
||||
|
||||
|
||||
/* Retrieve the creation time of the fingerprint for key KEYNO from
|
||||
* the card inserted in the slot of APP and store it at R_FPRTIME.
|
||||
* Returns 0 on success or an error code. */
|
||||
static gpg_error_t
|
||||
retrieve_fprtime_from_card (app_t app, int keyno, u32 *r_fprtime)
|
||||
{
|
||||
gpg_error_t err = 0;
|
||||
void *relptr;
|
||||
unsigned char *value;
|
||||
size_t valuelen;
|
||||
u32 fprtime;
|
||||
|
||||
log_assert (keyno >=0 && keyno <= 2);
|
||||
|
||||
relptr = get_one_do (app, 0x00CD, &value, &valuelen, NULL);
|
||||
if (relptr && valuelen >= 4*(keyno+1))
|
||||
{
|
||||
fprtime = buf32_to_u32 (value + 4*keyno);
|
||||
if (!fprtime)
|
||||
err = gpg_error (GPG_ERR_NOT_FOUND);
|
||||
else
|
||||
*r_fprtime = fprtime;
|
||||
}
|
||||
else
|
||||
err = gpg_error (GPG_ERR_NOT_FOUND);
|
||||
xfree (relptr);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
/* Retrieve the public key material for the RSA key, whose fingerprint
|
||||
is FPR, from gpg output, which can be read through the stream FP.
|
||||
The RSA modulus will be stored at the address of M and MLEN, the
|
||||
|
@ -1938,6 +1968,7 @@ do_readkey (app_t app, ctrl_t ctrl, const char *keyid, unsigned int flags,
|
|||
gpg_error_t err;
|
||||
int keyno;
|
||||
unsigned char *buf;
|
||||
u32 fprtime;
|
||||
|
||||
if (strlen (keyid) == 40)
|
||||
{
|
||||
|
@ -1975,6 +2006,13 @@ do_readkey (app_t app, ctrl_t ctrl, const char *keyid, unsigned int flags,
|
|||
err = send_keypair_info (app, ctrl, keyno+1);
|
||||
if (err)
|
||||
return err;
|
||||
if (!retrieve_fprtime_from_card (app, keyno, &fprtime))
|
||||
{
|
||||
err = send_status_printf (ctrl, "KEY-TIME", "OPENPGP.%d %lu",
|
||||
keyno+1, (unsigned long)fprtime);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
}
|
||||
|
||||
if (pk && pklen)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue