Log In
Log In
Places
All Projects
Status Monitor
Collapse sidebar
eid
opensc
opensc-0.22.0-latvian-eid.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File opensc-0.22.0-latvian-eid.patch of Package opensc
From 343b3bb628da35bd2af7fe3b067a99c05db1d0a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberts=20Muktup=C4=81vels?= <alberts.muktupavels@gmail.com> Date: Thu, 7 Mar 2019 22:36:32 +0200 Subject: [PATCH] libopensc: recognize Latvian eID card https://github.com/OpenSC/OpenSC/issues/1275 --- src/libopensc/card-iasecc.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/libopensc/card-iasecc.c b/src/libopensc/card-iasecc.c index 8682e143..ad4f8356 100644 --- a/src/libopensc/card-iasecc.c +++ b/src/libopensc/card-iasecc.c @@ -83,6 +83,8 @@ static const struct sc_atr_table iasecc_known_atrs[] = { { "3B:DD:00:00:81:31:FE:45:80:F9:A0:00:00:00:77:01:08:00:07:90:00:00", "FF:FF:00:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:00", "IAS/ECC v1.0.1 Oberthur", SC_CARD_TYPE_IASECC_OBERTHUR, 0, NULL }, + { "3B:DD:18:00:81:31:FE:45:90:4C:41:54:56:49:41:2D:65:49:44:90:00:8C", NULL, + "IAS/ECC v1.0.1 Latvia eID", SC_CARD_TYPE_IASECC_OBERTHUR, 0, NULL }, { "3B:7D:13:00:00:4D:44:57:2D:49:41:53:2D:43:41:52:44:32", NULL, "IAS/ECC v1.0.1 Sagem MDW-IAS-CARD2", SC_CARD_TYPE_IASECC_SAGEM, 0, NULL }, { "3B:7F:18:00:00:00:31:B8:64:50:23:EC:C1:73:94:01:80:82:90:00", NULL, @@ -490,16 +492,24 @@ iasecc_oberthur_match(struct sc_card *card) { struct sc_context *ctx = card->ctx; unsigned char *hist = card->reader->atr_info.hist_bytes; + size_t hist_bytes_len = card->reader->atr_info.hist_bytes_len; LOG_FUNC_CALLED(ctx); - if (*hist != 0x80 || ((*(hist+1)&0xF0) != 0xF0)) - LOG_FUNC_RETURN(ctx, SC_ERROR_OBJECT_NOT_FOUND); + if (hist_bytes_len >= 2 && *hist == 0x80 && ((*(hist + 1) & 0xF0) == 0xF0)) { + size_t aid_len = *(hist + 1) & 0x0F; - sc_log_hex(ctx, "AID in historical_bytes", hist + 2, *(hist+1) & 0x0F); + sc_log_hex(ctx, "AID in historical_bytes", hist + 2, aid_len); - if (memcmp(hist + 2, OberthurIASECC_AID.value, *(hist+1) & 0x0F)) - LOG_FUNC_RETURN(ctx, SC_ERROR_RECORD_NOT_FOUND); + if (hist_bytes_len - 2 >= aid_len && memcmp(hist + 2, OberthurIASECC_AID.value, aid_len)) + LOG_FUNC_RETURN(ctx, SC_ERROR_RECORD_NOT_FOUND); + } + else if (hist_bytes_len >= 1 && *hist == 0x90) { + sc_log_hex(ctx, "Proprietary data in historical_bytes", hist + 1, hist_bytes_len - 1); + } + else { + LOG_FUNC_RETURN(ctx, SC_ERROR_OBJECT_NOT_FOUND); + } if (!card->ef_atr) card->ef_atr = calloc(1, sizeof(struct sc_ef_atr)); -- 2.34.1
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Contact
Support
@OBShq
The Open Build Service is an
openSUSE project
.
Log In
Places
Places
All Projects
Status Monitor