diff options
Diffstat (limited to 'scd/app-openpgp.c')
-rw-r--r-- | scd/app-openpgp.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/scd/app-openpgp.c b/scd/app-openpgp.c index 8085fa812..b75ee6457 100644 --- a/scd/app-openpgp.c +++ b/scd/app-openpgp.c @@ -1383,6 +1383,39 @@ get_disp_name (app_t app) } +/* + * Yubikey has its own serial number at app->serialno. When Yubikey + * is used for OpenPGP card app, we get the serial number for OpenPGP + * card from its AID data object. + */ +char * +yubikey_get_serialno (app_t app) +{ + void *relptr; + unsigned char *buffer; + size_t buflen; + char *serial; + + relptr = get_one_do (app, 0x004F, &buffer, &buflen, NULL); + if (!relptr) + return NULL; + if (buflen != 16) + { + xfree (relptr); + return NULL; + } + + serial = xtrymalloc (32 + 1); + if (!serial) + return NULL; + + serial[32] = 0; + bin2hex (buffer, buflen, serial); + xfree (relptr); + return serial; +} + + /* Return the pretty formatted serialnumber. On error NULL is * returned. */ static char * |