From 4a8e2848556682541799118528fe3b56b901c5f7 Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Sat, 28 Jun 2003 18:02:47 +1000 Subject: [PATCH] - (djm) Bug #591: use PKCS#15 private key label as a comment in case of OpenSC. Report and patch from larsch@trustcenter.de --- ChangeLog | 6 +++++- scard-opensc.c | 26 ++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 4b4bcf2cd..085b2b5bc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +20030628 + - (djm) Bug #591: use PKCS#15 private key label as a comment in case + of OpenSC. Report and patch from larsch@trustcenter.de + 20030628 - (dtucker) OpenBSD CVS Sync - markus@cvs.openbsd.org 2003/06/23 09:02:44 @@ -603,4 +607,4 @@ - Fix sshd BindAddress and -b options for systems using fake-getaddrinfo. Report from murple@murple.net, diagnosis from dtucker@zip.com.au -$Id: ChangeLog,v 1.2829 2003/06/28 02:54:33 dtucker Exp $ +$Id: ChangeLog,v 1.2830 2003/06/28 08:02:47 djm Exp $ diff --git a/scard-opensc.c b/scard-opensc.c index 9766d46cc..e8e12dd85 100644 --- a/scard-opensc.c +++ b/scard-opensc.c @@ -474,4 +474,30 @@ sc_put_key(Key *prv, const char *id) return -1; } +char * +sc_get_key_label(Key *key) +{ + int r; + const struct sc_priv_data *priv; + struct sc_pkcs15_object *key_obj; + + priv = (const struct sc_priv_data *) RSA_get_app_data(key->rsa); + if (priv == NULL || p15card == NULL) { + logit("SmartCard key not loaded"); + /* internal error => return default label */ + return xstrdup("smartcard key"); + } + r = sc_pkcs15_find_prkey_by_id(p15card, &priv->cert_id, &key_obj); + if (r) { + logit("Unable to find private key from SmartCard: %s", + sc_strerror(r)); + return xstrdup("smartcard key"); + } + if (key_obj == NULL || key_obj->label == NULL) + /* the optional PKCS#15 label does not exists + * => return the default label */ + return xstrdup("smartcard key"); + return xstrdup(key_obj->label); +} + #endif /* SMARTCARD */