aboutsummaryrefslogtreecommitdiffstats
path: root/scd/app-p15.c
diff options
context:
space:
mode:
Diffstat (limited to 'scd/app-p15.c')
-rw-r--r--scd/app-p15.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/scd/app-p15.c b/scd/app-p15.c
index 0782c25e8..57c37e09f 100644
--- a/scd/app-p15.c
+++ b/scd/app-p15.c
@@ -4895,11 +4895,19 @@ static char *
get_dispserialno (app_t app, prkdf_object_t prkdf)
{
char *serial;
+ size_t n;
/* We prefer the SerialNumber RDN from the Subject-DN but we don't
* use it if it features a percent sign (special character in pin
* prompts) or has any control character. */
- if (prkdf && prkdf->serial_number && *prkdf->serial_number
+ if (app->app_local->card_product == CARD_PRODUCT_RSCS)
+ {
+ /* We use only the rigght 8 hex digits. */
+ serial = app_get_serialno (app);
+ if (serial && (n=strlen (serial)) > 8)
+ memmove (serial, serial + n - 8, 9);
+ }
+ else if (prkdf && prkdf->serial_number && *prkdf->serial_number
&& !strchr (prkdf->serial_number, '%')
&& !any_control_or_space (prkdf->serial_number))
{