From 8c926455d06df7e5c79ad926865bdcb0a63a4732 Mon Sep 17 00:00:00 2001 From: nils Date: Sun, 12 Feb 2006 18:30:53 +0000 Subject: [PATCH] add support for two byte tags in sc_asn1_find_tag() + normalize return value git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@2840 c6295689-39f2-0310-b995-f0e70906c6a9 --- src/libopensc/card-mcrd.c | 2 +- src/pkcs15init/pkcs15-cardos.c | 15 ++++----------- 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/src/libopensc/card-mcrd.c b/src/libopensc/card-mcrd.c index 91263ca2..53327c13 100644 --- a/src/libopensc/card-mcrd.c +++ b/src/libopensc/card-mcrd.c @@ -476,7 +476,7 @@ static void process_arr(sc_card_t *card, sc_file_t *file, skip = 1; /* Skip over initial unknown SC DOs. */ for (;;) { buf = p; - if (sc_asn1_read_tag(&p, left, &cla, &tag, &taglen) != 1) + if (sc_asn1_read_tag(&p, left, &cla, &tag, &taglen) != SC_SUCCESS) break; left -= (p - buf); tag |= cla; diff --git a/src/pkcs15init/pkcs15-cardos.c b/src/pkcs15init/pkcs15-cardos.c index 466e46f9..a8b19dfd 100644 --- a/src/pkcs15init/pkcs15-cardos.c +++ b/src/pkcs15init/pkcs15-cardos.c @@ -662,22 +662,15 @@ static int parse_ext_pubkey_file(sc_card_t *card, const u8 *data, size_t len, sc_pkcs15_pubkey_t *pubkey) { const u8 *p; - size_t ilen = 0, tlen = 0, i; + size_t ilen = 0, tlen = 0; if (data == NULL || len < 32) return SC_ERROR_INVALID_ARGUMENTS; - if (*data++ != 0x7f || *data++ != 0x49) { + data = sc_asn1_find_tag(card->ctx, data, len, 0x7f49, &ilen); + if (data == NULL) { sc_error(card->ctx, "invalid public key data: missing tag"); - return SC_ERROR_INVALID_ARGUMENTS; + return SC_ERROR_INTERNAL; } - len -= 2; - tlen = *data++ & 0x7f; - if (tlen > 3) { - sc_error(card->ctx, "invalid public key data: invalid tag length"); - return SC_ERROR_INVALID_ARGUMENTS; - } - for (i = 0; i < tlen; i++) - ilen += (*data++) << (8 * (tlen - i - 1)); p = sc_asn1_find_tag(card->ctx, data, ilen, 0x81, &tlen); if (p == NULL) {