Skip to content

Commit 6afc34a

Browse files
authored
Merge pull request OpenSC#2257 from frankmorgner/fix_read_dg
Allow reading data group from eMRTD with npa-tool
2 parents db0450f + 8466d82 commit 6afc34a

File tree

6 files changed

+466
-269
lines changed

6 files changed

+466
-269
lines changed

doc/tools/npa-tool.1.xml

Lines changed: 49 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
<refnamediv>
1212
<refname>npa-tool</refname>
13-
<refpurpose>displays information on the German eID card (neuer Personalausweis, <abbrev>nPA</abbrev>).
13+
<refpurpose>displays information of an ID card or ePassport.
1414
</refpurpose>
1515
</refnamediv>
1616

@@ -25,13 +25,15 @@
2525
<title>Description</title>
2626
<para>
2727
The <command>npa-tool</command> utility is used to display information
28-
stored on the German eID card (neuer Personalausweis, <abbrev>nPA</abbrev>),
29-
and to perform some write and verification operations.
28+
stored on an ID card or on a passport and to perform some write and
29+
verification operations.
3030
</para>
3131
<para>
3232
Extended Access Control version 2 is performed according to ICAO Doc
33-
9303 or BSI TR-03110 so that other identity cards and machine
34-
readable travel documents (MRTDs) may be read as well.
33+
9303 or BSI TR-03110 so that an ICAO compliant machine readable
34+
travel document (<abbrev>MRTD</abbrev>) as well as EAC compliant ID
35+
cards, for example the German ID card (neuer Personalausweis,
36+
<abbrev>nPA</abbrev>), may be read.
3537
</para>
3638
</refsect1>
3739

@@ -250,60 +252,79 @@
250252
</variablelist>
251253
</refsect2>
252254

255+
<refsect2>
256+
<title>Card application</title>
257+
<variablelist>
258+
<varlistentry>
259+
<term><option>--application</option> <replaceable>app</replaceable></term>
260+
<listitem><para>
261+
What application to select on the card, use <literal>eID</literal> for the
262+
electronic identification application and <literal>eMRTD</literal> for the
263+
ePassport application. (default=<literal>eID</literal>)
264+
</para></listitem>
265+
</varlistentry>
266+
</variablelist>
267+
</refsect2>
268+
269+
253270
<refsect2>
254271
<title>Read and write data groups</title>
255272
<variablelist>
273+
<varlistentry>
274+
<term><option>--read-all-dgs</option></term>
275+
<listitem><para>Read all available data groups.</para></listitem>
276+
</varlistentry>
256277
<varlistentry>
257278
<term><option>--read-dg1</option></term>
258-
<listitem><para>Read data group 1: Document Type.</para></listitem>
279+
<listitem><para>Read data group 1.</para></listitem>
259280
</varlistentry>
260281
<varlistentry>
261282
<term><option>--read-dg2</option></term>
262-
<listitem><para>Read data group 2: Issuing State.</para></listitem>
283+
<listitem><para>Read data group 2.</para></listitem>
263284
</varlistentry>
264285
<varlistentry>
265286
<term><option>--read-dg3</option></term>
266-
<listitem><para>Read data group 3: Date of Expiry.</para></listitem>
287+
<listitem><para>Read data group 3.</para></listitem>
267288
</varlistentry>
268289
<varlistentry>
269290
<term><option>--read-dg4</option></term>
270-
<listitem><para>Read data group 4: Given Name(s).</para></listitem>
291+
<listitem><para>Read data group 4.</para></listitem>
271292
</varlistentry>
272293
<varlistentry>
273294
<term><option>--read-dg5</option></term>
274-
<listitem><para>Read data group 5: Family Name.</para></listitem>
295+
<listitem><para>Read data group 5.</para></listitem>
275296
</varlistentry>
276297
<varlistentry>
277298
<term><option>--read-dg6</option></term>
278-
<listitem><para>Read data group 6: Religious/Artistic Name.</para></listitem>
299+
<listitem><para>Read data group 6.</para></listitem>
279300
</varlistentry>
280301
<varlistentry>
281302
<term><option>--read-dg7</option></term>
282-
<listitem><para>Read data group 7: Academic Title.</para></listitem>
303+
<listitem><para>Read data group 7.</para></listitem>
283304
</varlistentry>
284305
<varlistentry>
285306
<term><option>--read-dg8</option></term>
286-
<listitem><para>Read data group 8: Date of Birth.</para></listitem>
307+
<listitem><para>Read data group 8.</para></listitem>
287308
</varlistentry>
288309
<varlistentry>
289310
<term><option>--read-dg9</option></term>
290-
<listitem><para>Read data group 9: Place of Birth.</para></listitem>
311+
<listitem><para>Read data group 9.</para></listitem>
291312
</varlistentry>
292313
<varlistentry>
293314
<term><option>--read-dg10</option></term>
294-
<listitem><para>Read data group 10: Nationality.</para></listitem>
315+
<listitem><para>Read data group 10.</para></listitem>
295316
</varlistentry>
296317
<varlistentry>
297318
<term><option>--read-dg11</option></term>
298-
<listitem><para>Read data group 11: Sex.</para></listitem>
319+
<listitem><para>Read data group 11.</para></listitem>
299320
</varlistentry>
300321
<varlistentry>
301322
<term><option>--read-dg12</option></term>
302-
<listitem><para>Read data group 12: Optional Data.</para></listitem>
323+
<listitem><para>Read data group 12.</para></listitem>
303324
</varlistentry>
304325
<varlistentry>
305326
<term><option>--read-dg13</option></term>
306-
<listitem><para>Read data group 13: Birth Name.</para></listitem>
327+
<listitem><para>Read data group 13.</para></listitem>
307328
</varlistentry>
308329
<varlistentry>
309330
<term><option>--read-dg14</option></term>
@@ -319,47 +340,47 @@
319340
</varlistentry>
320341
<varlistentry>
321342
<term><option>--read-dg17</option></term>
322-
<listitem><para>Read data group 17: Normal Place of Residence.</para></listitem>
343+
<listitem><para>Read data group 17.</para></listitem>
323344
</varlistentry>
324345
<varlistentry>
325346
<term><option>--read-dg18</option></term>
326-
<listitem><para>Read data group 18: Community ID.</para></listitem>
347+
<listitem><para>Read data group 18.</para></listitem>
327348
</varlistentry>
328349
<varlistentry>
329350
<term><option>--read-dg19</option></term>
330-
<listitem><para>Read data group 19: Residence Permit I.</para></listitem>
351+
<listitem><para>Read data group 19.</para></listitem>
331352
</varlistentry>
332353
<varlistentry>
333354
<term><option>--read-dg20</option></term>
334-
<listitem><para>Read data group 20: Residence Permit II.</para></listitem>
355+
<listitem><para>Read data group 20.</para></listitem>
335356
</varlistentry>
336357
<varlistentry>
337358
<term><option>--read-dg21</option></term>
338-
<listitem><para>Read data group 21: Optional Data.</para></listitem>
359+
<listitem><para>Read data group 21.</para></listitem>
339360
</varlistentry>
340361
<varlistentry>
341362
<term>
342363
<option>--write-dg17</option> <replaceable>HEX_STRING</replaceable></term>
343-
<listitem><para>Write data group 17: Normal Place of Residence.</para></listitem>
364+
<listitem><para>Write data group 17.</para></listitem>
344365
</varlistentry>
345366
<varlistentry>
346367
<term>
347368
<option>--write-dg18</option> <replaceable>HEX_STRING</replaceable></term>
348-
<listitem><para>Write data group 18: Community ID.</para></listitem>
369+
<listitem><para>Write data group 18.</para></listitem>
349370
</varlistentry>
350371
<varlistentry>
351372
<term>
352373
<option>--write-dg19</option> <replaceable>HEX_STRING</replaceable></term>
353-
<listitem><para>Write data group 19: Residence Permit I.</para></listitem>
374+
<listitem><para>Write data group 19.</para></listitem>
354375
</varlistentry>
355376
<varlistentry>
356377
<term>
357378
<option>--write-dg20</option> <replaceable>HEX_STRING</replaceable></term>
358-
<listitem><para>Write data group 20: Residence Permit II.</para></listitem>
379+
<listitem><para>Write data group 20.</para></listitem>
359380
</varlistentry>
360381
<varlistentry>
361382
<term><option>--write-dg21</option> <replaceable>HEX_STRING</replaceable></term>
362-
<listitem><para>Write data group 21: Optional Data.</para></listitem>
383+
<listitem><para>Write data group 21.</para></listitem>
363384
</varlistentry>
364385
</variablelist>
365386
</refsect2>

src/libopensc/iso7816.c

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ iso7816_read_binary(struct sc_card *card, unsigned int idx, u8 *buf, size_t coun
157157
LOG_TEST_RET(ctx, r, "APDU transmit failed");
158158

159159
r = sc_check_sw(card, apdu.sw1, apdu.sw2);
160-
if (r == SC_ERROR_FILE_END_REACHED)
160+
if (r == SC_ERROR_FILE_END_REACHED || r == SC_ERROR_INCORRECT_PARAMETERS)
161161
LOG_FUNC_RETURN(ctx, (int)apdu.resplen);
162162
LOG_TEST_RET(ctx, r, "Check SW error");
163163

@@ -1533,11 +1533,7 @@ int iso7816_read_binary_sfid(sc_card_t *card, unsigned char sfid,
15331533
/* emulate the behaviour of iso7816_read_binary */
15341534
r = (int)apdu.resplen;
15351535

1536-
while(1) {
1537-
if (r >= 0 && ((size_t) r) != read) {
1538-
*ef_len += r;
1539-
break;
1540-
}
1536+
while (1) {
15411537
if (r <= 0) {
15421538
if (*ef_len > 0)
15431539
break;

0 commit comments

Comments
 (0)