aboutsummaryrefslogtreecommitdiffstats
path: root/scd/app-openpgp.c
diff options
context:
space:
mode:
Diffstat (limited to 'scd/app-openpgp.c')
-rw-r--r--scd/app-openpgp.c33
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 *