From a6a10d0b3ee8bbbb4717ec74dc4713c06768e739 Mon Sep 17 00:00:00 2001 From: Frank Morgner Date: Mon, 4 Feb 2013 23:08:00 +0100 Subject: [PATCH] fixed special functions --- npa/src/npa-tool.c | 15 +++++---------- npa/src/npa.c | 4 ++++ npa/test_vicc_with_npa-tool.sh | 6 +++++- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/npa/src/npa-tool.c b/npa/src/npa-tool.c index fda6c1d..0537872 100644 --- a/npa/src/npa-tool.c +++ b/npa/src/npa-tool.c @@ -233,7 +233,7 @@ static int add_to_CVC_DISCRETIONARY_DATA_TEMPLATES( template = &(*templates)->template2; else { fprintf(stderr, - "Not enough space in auxiliary data for that many data templates"); + "Choose at most two nPA operations.\n"); r = SC_ERROR_INVALID_ARGUMENTS; goto err; } @@ -586,27 +586,21 @@ main (int argc, char **argv) r = add_to_CVC_DISCRETIONARY_DATA_TEMPLATES(&templates, NID_id_DateOfBirth, cmdline.older_than_arg, strlen(cmdline.older_than_arg)); - if (r < 0) { - fprintf(stderr, "Error formatting age verification data template.\n"); + if (r < 0) goto err; - } } if (cmdline.verify_validity_given) { r = add_to_CVC_DISCRETIONARY_DATA_TEMPLATES(&templates, NID_id_DateOfExpiry, NULL, 0); - if (r < 0) { - fprintf(stderr, "Error formatting validity verification data template.\n"); + if (r < 0) goto err; - } } if (cmdline.verify_community_given) { r = add_to_CVC_DISCRETIONARY_DATA_TEMPLATES(&templates, NID_id_CommunityID, cmdline.verify_community_arg, strlen(cmdline.verify_community_arg)); - if (r < 0) { - fprintf(stderr, "Error formatting community ID verification data template.\n"); + if (r < 0) goto err; - } } unsigned char *p = NULL; auxiliary_data_len = i2d_CVC_DISCRETIONARY_DATA_TEMPLATES( @@ -789,6 +783,7 @@ err: free(certs_chat); if (cvc_cert) CVC_CERT_free(cvc_cert); + free(privkey); free(dg); if (templates) CVC_DISCRETIONARY_DATA_TEMPLATES_free(templates); diff --git a/npa/src/npa.c b/npa/src/npa.c index 6ee4da9..5ffca83 100644 --- a/npa/src/npa.c +++ b/npa/src/npa.c @@ -1741,6 +1741,10 @@ int perform_terminal_authentication(sc_card_t *card, BUF_MEM_free(eacsmctx->auxiliary_data); eacsmctx->auxiliary_data = BUF_MEM_create_init(auxiliary_data, auxiliary_data_len); + /* FIXME this is a workaround for fixing 0x30 tag of + * CVC_DISCRETIONARY_DATA_TEMPLATES. */ + if (eacsmctx->auxiliary_data->data && eacsmctx->auxiliary_data->length) + eacsmctx->auxiliary_data->data[0] = 0x67; signature = TA_STEP5_sign(eacsmctx->ctx, eacsmctx->eph_pub_key, eacsmctx->id_icc, eacsmctx->auxiliary_data); if (!signature) { diff --git a/npa/test_vicc_with_npa-tool.sh b/npa/test_vicc_with_npa-tool.sh index e60496d..1fc5b8f 100755 --- a/npa/test_vicc_with_npa-tool.sh +++ b/npa/test_vicc_with_npa-tool.sh @@ -60,7 +60,11 @@ do sleep 1 $NPA_TOOL --pin=111111 --private-key=$DATA/$KA/$TERM_KEY \ - --cv-certificate=$DATA/$KA/$DVCA,$DATA/$KA/$TERMINAL --disable-checks + --cv-certificate=$DATA/$KA/$DVCA,$DATA/$KA/$TERMINAL \ + --older-than=19991231 --verify-validity \ + --read-dg1 --read-dg2 --read-dg3 --read-dg4 --read-dg5 --read-dg6 --read-dg7 --read-dg8 --read-dg9 --read-dg10 --read-dg11 --read-dg12 --read-dg13 --read-dg14 --read-dg15 --read-dg16 --read-dg17 --read-dg18 --read-dg19 --read-dg20 --read-dg21 \ + --write-dg17=0107 --write-dg18=0108 --write-dg19=0109 --write-dg20=0200 --write-dg21=0201 \ + --disable-checks NPA_RESULT=$? kill $VICC_PID 2>/dev/null