opensc: update source, refresh patches
authorDaniel Golle <daniel@makrotopia.org>
Wed, 13 May 2015 10:58:16 +0000 (12:58 +0200)
committerDaniel Golle <daniel@makrotopia.org>
Wed, 13 May 2015 11:23:21 +0000 (13:23 +0200)
Also import two new GnuK-related patches.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
29 files changed:
utils/opensc/Makefile
utils/opensc/patches/0001-OpenPGP-Detect-and-support-Gnuk-Token.patch
utils/opensc/patches/0002-OpenPGP-Add-Gnuk-in-pkcs15-emulation-layer.patch
utils/opensc/patches/0003-OpenPGP-Include-private-DO-to-filesystem-at-driver-i.patch
utils/opensc/patches/0004-PKCS15-OpenPGP-Declare-DATA-objects.patch
utils/opensc/patches/0005-OpenPGP-Support-erasing-reset-card.patch
utils/opensc/patches/0006-openpgp-tool-Support-deleting-key-in-Gnuk.patch
utils/opensc/patches/0007-OpenPGP-Correct-building-Extended-Header-List-when-i.patch
utils/opensc/patches/0008-OpenPGP-Read-some-empty-DOs-from-Gnuk.patch
utils/opensc/patches/0009-PKCS15-OpenPGP-Do-not-show-empty-DO-in-pkcs15-emu_in.patch
utils/opensc/patches/0010-PKCS15-OpenPGP-Allow-to-store-data-to-pkcs15-data-ob.patch
utils/opensc/patches/0011-OpenPGP-Provide-enough-buffer-to-read-pubkey-from-Gn.patch
utils/opensc/patches/0012-OpenPGP-Support-write-certificate-for-Gnuk.patch
utils/opensc/patches/0013-pkcs15-openpgp-Change-to-sc_put_data-instead-of-sc_u.patch
utils/opensc/patches/0014-OpenPGP-Overcome-the-restriction-of-even-data-length.patch
utils/opensc/patches/0015-OpenPGP-Delete-key-as-file-for-Gnuk.patch
utils/opensc/patches/0016-OpenPGP-Correct-parameter-checking.patch
utils/opensc/patches/0017-OpenPGP-Make-code-neater.patch
utils/opensc/patches/0018-Move-declaration-to-top-of-block.patch
utils/opensc/patches/0019-OpenPGP-Make-indentation-consistent-space-tab.patch
utils/opensc/patches/0020-OpenPGP-Don-t-use-sc_log-in-openpgp-tool.patch
utils/opensc/patches/0021-OpenPGP-Don-t-reimplement-gnuk_delete_key-in-openpgp.patch
utils/opensc/patches/0022-OpenPGP-Use-directly-binary-array-of-APDUs-for-ERASE.patch
utils/opensc/patches/0023-OpenPGP-Rename-private-blob-type-to-avoid-confusing-.patch
utils/opensc/patches/0024-OpenPGP-Fix-crash-after-accessing-inexistent-file.patch
utils/opensc/patches/0025-Replace-hardcode.patch
utils/opensc/patches/0026-hardcode-defines-for-DO-s.patch
utils/opensc/patches/0027-OpenPGP-Remove-unused-variables-and-fix-type-cast.patch [new file with mode: 0644]
utils/opensc/patches/0028-openpgp-tool-Fix-wrong-operator.patch [new file with mode: 0644]

index a7b8301490fe90bdbc2d07a3da5c2d99c01c7f59..adb249f821215c0d1d419f6c0795e7e12fee9b2d 100644 (file)
@@ -8,7 +8,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=opensc
-PKG_VERSION:=20141126
+PKG_VERSION:=20150513
 PKG_RELEASE:=1
 PKG_LICENSE:=LGPL-2.1+
 PKG_LICENSE_FILES:=COPYING
@@ -19,7 +19,7 @@ PKG_RELEASE=$(PKG_SOURCE_VERSION)
 PKG_SOURCE_PROTO:=git
 PKG_SOURCE_URL:=https://github.com/OpenSC/OpenSC.git
 PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=8aadbbd678730dbafb819382da553439887499fd
+PKG_SOURCE_VERSION:=a09ca246a797230c14bc33a34f2dddc4a4dbff40
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_BUILD_DEPENDS:=+libpcsclite
 PKG_FIXUP:=libtool
index 08b2a8324a386474345b1d0cd1c66804b524f83f..3bd03a6f258433444fc5e8bfb7f005e48daa6abf 100644 (file)
@@ -11,11 +11,11 @@ http://www.fsij.org/gnuk/
  src/tools/openpgp-tool.c     |  7 ++++-
  3 files changed, 55 insertions(+), 14 deletions(-)
 
-diff --git a/src/libopensc/card-openpgp.c b/src/libopensc/card-openpgp.c
-index 6774fe1..c785a55 100644
---- a/src/libopensc/card-openpgp.c
-+++ b/src/libopensc/card-openpgp.c
-@@ -43,6 +43,7 @@
+Index: opensc-20150513/src/libopensc/card-openpgp.c
+===================================================================
+--- opensc-20150513.orig/src/libopensc/card-openpgp.c
++++ opensc-20150513/src/libopensc/card-openpgp.c
+@@ -45,6 +45,7 @@
  static struct sc_atr_table pgp_atrs[] = {
        { "3b:fa:13:00:ff:81:31:80:45:00:31:c1:73:c0:01:00:00:90:00:b1", NULL, "OpenPGP card v1.0/1.1", SC_CARD_TYPE_OPENPGP_V1, 0, NULL },
        { "3b:da:18:ff:81:b1:fe:75:1f:03:00:31:c5:73:c0:01:40:00:90:00:0c", NULL, "CryptoStick v1.2 (OpenPGP v2.0)", SC_CARD_TYPE_OPENPGP_V2, 0, NULL },
@@ -23,16 +23,16 @@ index 6774fe1..c785a55 100644
        { NULL, NULL, NULL, 0, 0, NULL }
  };
  
-@@ -307,6 +308,8 @@ pgp_init(sc_card_t *card)
+@@ -309,6 +310,8 @@ pgp_init(sc_card_t *card)
        int             r;
-       struct blob     *child = NULL;
+       struct blob     *child = NULL;
  
 +      LOG_FUNC_CALLED(card->ctx);
 +
        priv = calloc (1, sizeof *priv);
        if (!priv)
                return SC_ERROR_OUT_OF_MEMORY;
-@@ -315,11 +318,11 @@ pgp_init(sc_card_t *card)
+@@ -317,11 +320,11 @@ pgp_init(sc_card_t *card)
        card->cla = 0x00;
  
        /* set pointer to correct list of card objects */
@@ -46,7 +46,7 @@ index 6774fe1..c785a55 100644
                                ? OPENPGP_CARD_2_0 : OPENPGP_CARD_1_1;
  
        /* select application "OpenPGP" */
-@@ -428,7 +431,8 @@ pgp_get_card_features(sc_card_t *card)
+@@ -436,7 +439,8 @@ pgp_get_card_features(sc_card_t *card)
                if ((pgp_get_blob(card, blob73, 0x00c0, &blob) >= 0) &&
                    (blob->data != NULL) && (blob->len > 0)) {
                        /* in v2.0 bit 0x04 in first byte means "algorithm attributes changeable */
@@ -56,7 +56,7 @@ index 6774fe1..c785a55 100644
                                priv->ext_caps |= EXT_CAP_ALG_ATTR_CHANGEABLE;
                        /* bit 0x08 in first byte means "support for private use DOs" */
                        if (blob->data[0] & 0x08)
-@@ -445,7 +449,8 @@ pgp_get_card_features(sc_card_t *card)
+@@ -453,7 +457,8 @@ pgp_get_card_features(sc_card_t *card)
                                priv->ext_caps |= EXT_CAP_GET_CHALLENGE;
                        }
                        /* in v2.0 bit 0x80 in first byte means "support Secure Messaging" */
@@ -66,7 +66,7 @@ index 6774fe1..c785a55 100644
                                priv->ext_caps |= EXT_CAP_SM;
  
                        if ((priv->bcd_version >= OPENPGP_CARD_2_0) && (blob->len >= 10)) {
-@@ -1057,12 +1062,18 @@ static int
+@@ -1065,12 +1070,18 @@ static int
  pgp_get_pubkey(sc_card_t *card, unsigned int tag, u8 *buf, size_t buf_len)
  {
        sc_apdu_t       apdu;
@@ -86,7 +86,7 @@ index 6774fe1..c785a55 100644
        apdu.lc = 2;
        apdu.data = ushort2bebytes(idbuf, tag);
        apdu.datalen = 2;
-@@ -1154,6 +1165,7 @@ pgp_put_data(sc_card_t *card, unsigned int tag, const u8 *buf, size_t buf_len)
+@@ -1162,6 +1173,7 @@ pgp_put_data(sc_card_t *card, unsigned i
        u8 ins = 0xDA;
        u8 p1 = tag >> 8;
        u8 p2 = tag & 0xFF;
@@ -94,7 +94,7 @@ index 6774fe1..c785a55 100644
        int r;
  
        LOG_FUNC_CALLED(card->ctx);
-@@ -1195,13 +1207,17 @@ pgp_put_data(sc_card_t *card, unsigned int tag, const u8 *buf, size_t buf_len)
+@@ -1203,13 +1215,17 @@ pgp_put_data(sc_card_t *card, unsigned i
  
        /* Build APDU */
        if (buf != NULL && buf_len > 0) {
@@ -114,7 +114,7 @@ index 6774fe1..c785a55 100644
                apdu.datalen = buf_len;
                apdu.lc = buf_len;
        }
-@@ -1328,6 +1344,7 @@ pgp_compute_signature(sc_card_t *card, const u8 *data,
+@@ -1336,6 +1352,7 @@ pgp_compute_signature(sc_card_t *card, c
        struct pgp_priv_data    *priv = DRVDATA(card);
        sc_security_env_t       *env = &priv->sec_env;
        sc_apdu_t               apdu;
@@ -122,7 +122,7 @@ index 6774fe1..c785a55 100644
        int                     r;
  
        LOG_FUNC_CALLED(card->ctx);
-@@ -1336,14 +1353,19 @@ pgp_compute_signature(sc_card_t *card, const u8 *data,
+@@ -1344,14 +1361,19 @@ pgp_compute_signature(sc_card_t *card, c
                LOG_TEST_RET(card->ctx, SC_ERROR_INVALID_ARGUMENTS,
                                "invalid operation");
  
@@ -144,7 +144,7 @@ index 6774fe1..c785a55 100644
                break;
        case 0x01:
        default:
-@@ -1352,7 +1374,7 @@ pgp_compute_signature(sc_card_t *card, const u8 *data,
+@@ -1360,7 +1382,7 @@ pgp_compute_signature(sc_card_t *card, c
        }
  
        apdu.lc = data_len;
@@ -153,7 +153,7 @@ index 6774fe1..c785a55 100644
        apdu.datalen = data_len;
        apdu.le = ((outlen >= 256) && !(card->caps & SC_CARD_CAP_APDU_EXT)) ? 256 : outlen;
        apdu.resp    = out;
-@@ -1376,6 +1398,7 @@ pgp_decipher(sc_card_t *card, const u8 *in, size_t inlen,
+@@ -1384,6 +1406,7 @@ pgp_decipher(sc_card_t *card, const u8 *
        struct pgp_priv_data    *priv = DRVDATA(card);
        sc_security_env_t       *env = &priv->sec_env;
        sc_apdu_t       apdu;
@@ -161,7 +161,7 @@ index 6774fe1..c785a55 100644
        u8              *temp = NULL;
        int             r;
  
-@@ -1400,7 +1423,7 @@ pgp_decipher(sc_card_t *card, const u8 *in, size_t inlen,
+@@ -1408,7 +1431,7 @@ pgp_decipher(sc_card_t *card, const u8 *
        case 0x01: /* Decryption key */
        case 0x02: /* authentication key */
                /* PSO DECIPHER */
@@ -170,7 +170,7 @@ index 6774fe1..c785a55 100644
                break;
        case 0x00: /* signature key */
        default:
-@@ -1409,8 +1432,13 @@ pgp_decipher(sc_card_t *card, const u8 *in, size_t inlen,
+@@ -1417,8 +1440,13 @@ pgp_decipher(sc_card_t *card, const u8 *
                                "invalid key reference");
        }
  
@@ -185,7 +185,7 @@ index 6774fe1..c785a55 100644
        apdu.datalen = inlen;
        apdu.le = ((outlen >= 256) && !(card->caps & SC_CARD_CAP_APDU_EXT)) ? 256 : outlen;
        apdu.resp = out;
-@@ -1794,6 +1822,11 @@ static int pgp_gen_key(sc_card_t *card, sc_cardctl_openpgp_keygen_info_t *key_in
+@@ -1802,6 +1830,11 @@ static int pgp_gen_key(sc_card_t *card,
                LOG_FUNC_RETURN(card->ctx, SC_ERROR_INVALID_ARGUMENTS);
        }
  
@@ -197,7 +197,7 @@ index 6774fe1..c785a55 100644
        /* Set attributes for new-generated key */
        r = pgp_update_new_algo_attr(card, key_info);
        LOG_TEST_RET(card->ctx, r, "Cannot set attributes for new-generated key");
-@@ -1801,7 +1834,9 @@ static int pgp_gen_key(sc_card_t *card, sc_cardctl_openpgp_keygen_info_t *key_in
+@@ -1809,7 +1842,9 @@ static int pgp_gen_key(sc_card_t *card,
        /* Test whether we will need extended APDU. 1900 is an
         * arbitrary modulus length which for sure fits into a short APDU.
         * This idea is borrowed from GnuPG code.  */
@@ -208,10 +208,10 @@ index 6774fe1..c785a55 100644
                /* We won't store to apdu variable yet, because it will be reset in
                 * sc_format_apdu() */
                apdu_le = card->max_recv_size;
-diff --git a/src/libopensc/cards.h b/src/libopensc/cards.h
-index 7be6667..a3f3634 100644
---- a/src/libopensc/cards.h
-+++ b/src/libopensc/cards.h
+Index: opensc-20150513/src/libopensc/cards.h
+===================================================================
+--- opensc-20150513.orig/src/libopensc/cards.h
++++ opensc-20150513/src/libopensc/cards.h
 @@ -105,6 +105,7 @@ enum {
        SC_CARD_TYPE_OPENPGP_BASE = 9000,
        SC_CARD_TYPE_OPENPGP_V1,
@@ -220,10 +220,10 @@ index 7be6667..a3f3634 100644
  
        /* jcop driver */
        SC_CARD_TYPE_JCOP_BASE = 10000,
-diff --git a/src/tools/openpgp-tool.c b/src/tools/openpgp-tool.c
-index f42e6d6..a24a395 100644
---- a/src/tools/openpgp-tool.c
-+++ b/src/tools/openpgp-tool.c
+Index: opensc-20150513/src/tools/openpgp-tool.c
+===================================================================
+--- opensc-20150513.orig/src/tools/openpgp-tool.c
++++ opensc-20150513/src/tools/openpgp-tool.c
 @@ -33,6 +33,7 @@
  #include "libopensc/cards.h"
  #include "libopensc/cardctl.h"
@@ -232,7 +232,7 @@ index f42e6d6..a24a395 100644
  #include "util.h"
  #include "libopensc/log.h"
  
-@@ -396,6 +397,8 @@ int do_genkey(sc_card_t *card, u8 key_id, unsigned int key_len)
+@@ -396,6 +397,8 @@ int do_genkey(sc_card_t *card, u8 key_id
        sc_path_t path;
        sc_file_t *file;
  
@@ -253,6 +253,3 @@ index f42e6d6..a24a395 100644
                exit_status = EXIT_FAILURE;
                goto out;
        }
--- 
-2.1.3
-
index c08a6e0a35b3b30a8cd0005f491621171abb2245..2514c16df10454d6e9e9b27e07bee35772a5522a 100644 (file)
@@ -9,11 +9,11 @@ Subject: [PATCH 02/26] OpenPGP: Add Gnuk in pkcs15 emulation layer.
  src/libopensc/pkcs15-syn.c     | 1 +
  2 files changed, 5 insertions(+), 2 deletions(-)
 
-diff --git a/src/libopensc/pkcs15-openpgp.c b/src/libopensc/pkcs15-openpgp.c
-index 4daaa98..fdf720a 100644
---- a/src/libopensc/pkcs15-openpgp.c
-+++ b/src/libopensc/pkcs15-openpgp.c
-@@ -151,7 +151,8 @@ sc_pkcs15emu_openpgp_init(sc_pkcs15_card_t *p15card)
+Index: opensc-20150513/src/libopensc/pkcs15-openpgp.c
+===================================================================
+--- opensc-20150513.orig/src/libopensc/pkcs15-openpgp.c
++++ opensc-20150513/src/libopensc/pkcs15-openpgp.c
+@@ -153,7 +153,8 @@ sc_pkcs15emu_openpgp_init(sc_pkcs15_card
        u8              c4data[10];
        u8              c5data[70];
        int             r, i;
@@ -23,7 +23,7 @@ index 4daaa98..fdf720a 100644
        sc_path_t path;
        sc_file_t *file;
  
-@@ -363,7 +364,8 @@ failed:    sc_debug(card->ctx, SC_LOG_DEBUG_NORMAL, "Failed to initialize OpenPGP e
+@@ -365,7 +366,8 @@ failed:    sc_debug(card->ctx, SC_LOG_DEBUG
  
  static int openpgp_detect_card(sc_pkcs15_card_t *p15card)
  {
@@ -33,11 +33,11 @@ index 4daaa98..fdf720a 100644
                return SC_SUCCESS;
        else
                return SC_ERROR_WRONG_CARD;
-diff --git a/src/libopensc/pkcs15-syn.c b/src/libopensc/pkcs15-syn.c
-index ffbf642..d2c086c 100644
---- a/src/libopensc/pkcs15-syn.c
-+++ b/src/libopensc/pkcs15-syn.c
-@@ -115,6 +115,7 @@ int sc_pkcs15_is_emulation_only(sc_card_t *card)
+Index: opensc-20150513/src/libopensc/pkcs15-syn.c
+===================================================================
+--- opensc-20150513.orig/src/libopensc/pkcs15-syn.c
++++ opensc-20150513/src/libopensc/pkcs15-syn.c
+@@ -117,6 +117,7 @@ int sc_pkcs15_is_emulation_only(sc_card_
                case SC_CARD_TYPE_GEMSAFEV1_PTEID:
                case SC_CARD_TYPE_OPENPGP_V1:
                case SC_CARD_TYPE_OPENPGP_V2:
@@ -45,6 +45,3 @@ index ffbf642..d2c086c 100644
                case SC_CARD_TYPE_SC_HSM:
                case SC_CARD_TYPE_DNIE_BASE:
                case SC_CARD_TYPE_DNIE_BLANK:
--- 
-2.1.3
-
index 9e96cfef62534e2bb0d9a595f2cbf4da7f038dfd..49fce825bf491fe983c42ad2277e8f02958824b8 100644 (file)
@@ -12,11 +12,11 @@ leading to that we cannot read their data later, even if we verified PIN.
  src/libopensc/card-openpgp.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
-diff --git a/src/libopensc/card-openpgp.c b/src/libopensc/card-openpgp.c
-index c785a55..1cc3923 100644
---- a/src/libopensc/card-openpgp.c
-+++ b/src/libopensc/card-openpgp.c
-@@ -357,7 +357,7 @@ pgp_init(sc_card_t *card)
+Index: opensc-20150513/src/libopensc/card-openpgp.c
+===================================================================
+--- opensc-20150513.orig/src/libopensc/card-openpgp.c
++++ opensc-20150513/src/libopensc/card-openpgp.c
+@@ -365,7 +365,7 @@ pgp_init(sc_card_t *card)
  
        /* Populate MF - add matching blobs listed in the pgp_objects table. */
        for (info = priv->pgp_objects; (info != NULL) && (info->id > 0); info++) {
@@ -25,6 +25,3 @@ index c785a55..1cc3923 100644
                    (info->get_fn != NULL)) {
                        child = pgp_new_blob(card, priv->mf, info->id, sc_file_new());
  
--- 
-2.1.3
-
index b6408de7f69aeb71e0a7b84e915b64f659102c80..619ea8cc431a6eec7fb32bc2179df1b392e8e387 100644 (file)
@@ -10,11 +10,11 @@ This object is used by TrueCrypt.
  src/libopensc/pkcs15-openpgp.c | 35 +++++++++++++++++++++++++++++++++++
  1 file changed, 35 insertions(+)
 
-diff --git a/src/libopensc/pkcs15-openpgp.c b/src/libopensc/pkcs15-openpgp.c
-index fdf720a..fea2805 100644
---- a/src/libopensc/pkcs15-openpgp.c
-+++ b/src/libopensc/pkcs15-openpgp.c
-@@ -32,6 +32,7 @@
+Index: opensc-20150513/src/libopensc/pkcs15-openpgp.c
+===================================================================
+--- opensc-20150513.orig/src/libopensc/pkcs15-openpgp.c
++++ opensc-20150513/src/libopensc/pkcs15-openpgp.c
+@@ -34,6 +34,7 @@
  #include "log.h"
  
  int sc_pkcs15emu_openpgp_init_ex(sc_pkcs15_card_t *, sc_pkcs15emu_opt_t *);
@@ -22,7 +22,7 @@ index fdf720a..fea2805 100644
  
  
  #define       PGP_USER_PIN_FLAGS      (SC_PKCS15_PIN_FLAG_CASE_SENSITIVE \
-@@ -41,6 +42,8 @@ int sc_pkcs15emu_openpgp_init_ex(sc_pkcs15_card_t *, sc_pkcs15emu_opt_t *);
+@@ -43,6 +44,8 @@ int sc_pkcs15emu_openpgp_init_ex(sc_pkcs
                                | SC_PKCS15_PIN_FLAG_UNBLOCK_DISABLED \
                                | SC_PKCS15_PIN_FLAG_SO_PIN)
  
@@ -31,7 +31,7 @@ index fdf720a..fea2805 100644
  typedef struct _pgp_pin_cfg {
        const char      *label;
        int             reference;
-@@ -355,6 +358,9 @@ sc_pkcs15emu_openpgp_init(sc_pkcs15_card_t *p15card)
+@@ -357,6 +360,9 @@ sc_pkcs15emu_openpgp_init(sc_pkcs15_card
                        goto failed;
        }
  
@@ -41,7 +41,7 @@ index fdf720a..fea2805 100644
        return 0;
  
  failed:       sc_debug(card->ctx, SC_LOG_DEBUG_NORMAL, "Failed to initialize OpenPGP emulation: %s\n",
-@@ -362,6 +368,35 @@ failed:   sc_debug(card->ctx, SC_LOG_DEBUG_NORMAL, "Failed to initialize OpenPGP e
+@@ -364,6 +370,35 @@ failed:   sc_debug(card->ctx, SC_LOG_DEBUG
        return r;
  }
  
@@ -77,6 +77,3 @@ index fdf720a..fea2805 100644
  static int openpgp_detect_card(sc_pkcs15_card_t *p15card)
  {
        if (p15card->card->type == SC_CARD_TYPE_OPENPGP_V1 || p15card->card->type == SC_CARD_TYPE_OPENPGP_V2
--- 
-2.1.3
-
index 0dc4954629cafa421143c7166729cf7d707a784a..aa3c9d38b2b841d326fc08dec4023083ed62b502 100644 (file)
@@ -10,11 +10,11 @@ Command: openpgp-tool --erase
  src/tools/openpgp-tool.c     | 22 ++++++++++++++-
  2 files changed, 85 insertions(+), 1 deletion(-)
 
-diff --git a/src/libopensc/card-openpgp.c b/src/libopensc/card-openpgp.c
-index 1cc3923..7349876 100644
---- a/src/libopensc/card-openpgp.c
-+++ b/src/libopensc/card-openpgp.c
-@@ -2195,6 +2195,66 @@ out:
+Index: opensc-20150513/src/libopensc/card-openpgp.c
+===================================================================
+--- opensc-20150513.orig/src/libopensc/card-openpgp.c
++++ opensc-20150513/src/libopensc/card-openpgp.c
+@@ -2206,6 +2206,66 @@ out:
  
  #endif /* ENABLE_OPENSSL */
  
@@ -81,7 +81,7 @@ index 1cc3923..7349876 100644
  /* ABI: card ctl: perform special card-specific operations */
  static int pgp_card_ctl(sc_card_t *card, unsigned long cmd, void *ptr)
  {
-@@ -2219,6 +2279,10 @@ static int pgp_card_ctl(sc_card_t *card, unsigned long cmd, void *ptr)
+@@ -2232,6 +2292,10 @@ static int pgp_card_ctl(sc_card_t *card,
                LOG_FUNC_RETURN(card->ctx, r);
                break;
  #endif /* ENABLE_OPENSSL */
@@ -92,12 +92,12 @@ index 1cc3923..7349876 100644
        }
  
        LOG_FUNC_RETURN(card->ctx, SC_ERROR_NOT_SUPPORTED);
-diff --git a/src/tools/openpgp-tool.c b/src/tools/openpgp-tool.c
-index a24a395..de1c9d4 100644
---- a/src/tools/openpgp-tool.c
-+++ b/src/tools/openpgp-tool.c
+Index: opensc-20150513/src/tools/openpgp-tool.c
+===================================================================
+--- opensc-20150513.orig/src/tools/openpgp-tool.c
++++ opensc-20150513/src/tools/openpgp-tool.c
 @@ -78,6 +78,7 @@ static int opt_pin = 0;
- static char *pin = NULL;
+ static const char *pin = NULL;
  static int opt_dump_do = 0;
  static u8 do_dump_idx;
 +static int opt_erase = 0;
@@ -120,7 +120,7 @@ index a24a395..de1c9d4 100644
        "Verify PIN (CHV1, CHV2, CHV3...)",
        "PIN string",
  /* d */ "Dump private data object number <arg> (i.e. PRIVATE-DO-<arg>)"
-@@ -232,7 +235,7 @@ static int decode_options(int argc, char **argv)
+@@ -232,7 +235,7 @@ static int decode_options(int argc, char
  {
        int c;
  
@@ -129,7 +129,7 @@ index a24a395..de1c9d4 100644
                switch (c) {
                case 'r':
                        opt_reader = optarg;
-@@ -296,6 +299,8 @@ static int decode_options(int argc, char **argv)
+@@ -294,6 +297,8 @@ static int decode_options(int argc, char
                        do_dump_idx = optarg[0] - '0';
                        opt_dump_do++;
                        actions++;
@@ -138,7 +138,7 @@ index a24a395..de1c9d4 100644
                        break;
                default:
                        util_print_usage_and_die(app_name, options, option_help, NULL);
-@@ -452,6 +457,18 @@ int do_verify(sc_card_t *card, char *type, char *pin)
+@@ -452,6 +457,18 @@ int do_verify(sc_card_t *card, char *typ
        return r;
  }
  
@@ -167,6 +167,3 @@ index a24a395..de1c9d4 100644
  out:
        sc_unlock(card);
        sc_disconnect_card(card);
--- 
-2.1.3
-
index 915f6842c0c42833a0ca8fa2f6430b9e03bc9dbc..4286e4604f0d12a165846195255396a9ac693eed 100644 (file)
@@ -8,10 +8,10 @@ Subject: [PATCH 06/26] openpgp-tool: Support deleting key in Gnuk.
  src/tools/openpgp-tool.c | 142 +++++++++++++++++++++++++++++++++++++++++++++++
  1 file changed, 142 insertions(+)
 
-diff --git a/src/tools/openpgp-tool.c b/src/tools/openpgp-tool.c
-index de1c9d4..374819a 100644
---- a/src/tools/openpgp-tool.c
-+++ b/src/tools/openpgp-tool.c
+Index: opensc-20150513/src/tools/openpgp-tool.c
+===================================================================
+--- opensc-20150513.orig/src/tools/openpgp-tool.c
++++ opensc-20150513/src/tools/openpgp-tool.c
 @@ -41,6 +41,7 @@
  #define       OPT_PRETTY      257
  #define       OPT_VERIFY      258
@@ -20,7 +20,7 @@ index de1c9d4..374819a 100644
  
  /* define structures */
  struct ef_name_map {
-@@ -79,6 +80,7 @@ static char *pin = NULL;
+@@ -79,6 +80,7 @@ static const char *pin = NULL;
  static int opt_dump_do = 0;
  static u8 do_dump_idx;
  static int opt_erase = 0;
@@ -44,7 +44,7 @@ index de1c9d4..374819a 100644
  /* d */ "Dump private data object number <arg> (i.e. PRIVATE-DO-<arg>)"
  };
  
-@@ -302,6 +306,14 @@ static int decode_options(int argc, char **argv)
+@@ -300,6 +304,14 @@ static int decode_options(int argc, char
                case 'E':
                        opt_erase++;
                        break;
@@ -59,7 +59,7 @@ index de1c9d4..374819a 100644
                default:
                        util_print_usage_and_die(app_name, options, option_help, NULL);
                }
-@@ -457,6 +469,133 @@ int do_verify(sc_card_t *card, char *type, char *pin)
+@@ -457,6 +469,133 @@ int do_verify(sc_card_t *card, char *typ
        return r;
  }
  
@@ -203,6 +203,3 @@ index de1c9d4..374819a 100644
        if (opt_erase)
                exit_status != do_erase(card);
  
--- 
-2.1.3
-
index 7d8045679b931a22407d190016400377ab907115..f5b2cc0453fbf9afe88d110f55c6991d313daa61 100644 (file)
@@ -9,11 +9,11 @@ Subject: [PATCH 07/26] OpenPGP: Correct building Extended Header List when
  src/libopensc/card-openpgp.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
-diff --git a/src/libopensc/card-openpgp.c b/src/libopensc/card-openpgp.c
-index 7349876..91c311b 100644
---- a/src/libopensc/card-openpgp.c
-+++ b/src/libopensc/card-openpgp.c
-@@ -1977,7 +1977,7 @@ pgp_build_extended_header_list(sc_card_t *card, sc_cardctl_openpgp_keystore_info
+Index: opensc-20150513/src/libopensc/card-openpgp.c
+===================================================================
+--- opensc-20150513.orig/src/libopensc/card-openpgp.c
++++ opensc-20150513/src/libopensc/card-openpgp.c
+@@ -1988,7 +1988,7 @@ pgp_build_extended_header_list(sc_card_t
        u8 *p = NULL;
        u8 *components[] = {key_info->e, key_info->p, key_info->q, key_info->n};
        size_t componentlens[] = {key_info->e_len, key_info->p_len, key_info->q_len, key_info->n_len};
@@ -22,6 +22,3 @@ index 7349876..91c311b 100644
        char *componentnames[] = {
                "public exponent",
                "prime p",
--- 
-2.1.3
-
index 17aaf92ca9edc1cdb9730c0c4f8c2ecf6aaeb66a..9d942d0f5a08e22b6f8d3d50c6eaa28bfcc3a211 100644 (file)
@@ -10,11 +10,11 @@ So, we will consider them exist in driver.
  src/libopensc/card-openpgp.c | 25 +++++++++++++++++++++++++
  1 file changed, 25 insertions(+)
 
-diff --git a/src/libopensc/card-openpgp.c b/src/libopensc/card-openpgp.c
-index 91c311b..e7b25c0 100644
---- a/src/libopensc/card-openpgp.c
-+++ b/src/libopensc/card-openpgp.c
-@@ -815,6 +815,23 @@ pgp_get_blob(sc_card_t *card, struct blob *blob, unsigned int id,
+Index: opensc-20150513/src/libopensc/card-openpgp.c
+===================================================================
+--- opensc-20150513.orig/src/libopensc/card-openpgp.c
++++ opensc-20150513/src/libopensc/card-openpgp.c
+@@ -823,6 +823,23 @@ pgp_get_blob(sc_card_t *card, struct blo
                }
        }
  
@@ -38,7 +38,7 @@ index 91c311b..e7b25c0 100644
        return SC_ERROR_FILE_NOT_FOUND;
  }
  
-@@ -1149,6 +1166,14 @@ pgp_get_data(sc_card_t *card, unsigned int tag, u8 *buf, size_t buf_len)
+@@ -1157,6 +1174,14 @@ pgp_get_data(sc_card_t *card, unsigned i
        LOG_TEST_RET(card->ctx, r, "APDU transmit failed");
  
        r = sc_check_sw(card, apdu.sw1, apdu.sw2);
@@ -53,6 +53,3 @@ index 91c311b..e7b25c0 100644
        LOG_TEST_RET(card->ctx, r, "Card returned error");
  
        LOG_FUNC_RETURN(card->ctx, apdu.resplen);
--- 
-2.1.3
-
index a75a2c2ce6ab6dc90d2c804828cfde38d9452dfc..16431a4d91c790e1c22b2eddbe8cfe533d70c30c 100644 (file)
@@ -9,11 +9,11 @@ Subject: [PATCH 09/26] PKCS15-OpenPGP: Do not show empty DO in pkcs15
  src/libopensc/pkcs15-openpgp.c | 18 ++++++++++++++++++
  1 file changed, 18 insertions(+)
 
-diff --git a/src/libopensc/pkcs15-openpgp.c b/src/libopensc/pkcs15-openpgp.c
-index fea2805..51a2032 100644
---- a/src/libopensc/pkcs15-openpgp.c
-+++ b/src/libopensc/pkcs15-openpgp.c
-@@ -381,16 +381,34 @@ sc_pkcs15emu_openpgp_add_data(sc_pkcs15_card_t *p15card)
+Index: opensc-20150513/src/libopensc/pkcs15-openpgp.c
+===================================================================
+--- opensc-20150513.orig/src/libopensc/pkcs15-openpgp.c
++++ opensc-20150513/src/libopensc/pkcs15-openpgp.c
+@@ -383,16 +383,34 @@ sc_pkcs15emu_openpgp_add_data(sc_pkcs15_
                sc_pkcs15_object_t dat_obj;
                char name[8];
                char path[9];
@@ -48,6 +48,3 @@ index fea2805..51a2032 100644
                sc_log(ctx, "Add %s data object", name);
                r = sc_pkcs15emu_add_data_object(p15card, &dat_obj, &dat_info);
        }
--- 
-2.1.3
-
index 7b0f493ccbd663f12729ff6f6e54945341e6b06f..afcf9d598d58519695d11b4dbcee018922799220 100644 (file)
@@ -11,11 +11,11 @@ Only one DO is supported now.
  src/pkcs15init/pkcs15-openpgp.c | 38 +++++++++++++++++++++++++++++++++++++-
  2 files changed, 38 insertions(+), 2 deletions(-)
 
-diff --git a/src/libopensc/pkcs15-openpgp.c b/src/libopensc/pkcs15-openpgp.c
-index 51a2032..4cc1c39 100644
---- a/src/libopensc/pkcs15-openpgp.c
-+++ b/src/libopensc/pkcs15-openpgp.c
-@@ -393,7 +393,7 @@ sc_pkcs15emu_openpgp_add_data(sc_pkcs15_card_t *p15card)
+Index: opensc-20150513/src/libopensc/pkcs15-openpgp.c
+===================================================================
+--- opensc-20150513.orig/src/libopensc/pkcs15-openpgp.c
++++ opensc-20150513/src/libopensc/pkcs15-openpgp.c
+@@ -395,7 +395,7 @@ sc_pkcs15emu_openpgp_add_data(sc_pkcs15_
                 */
                r = read_file(p15card->card, path, content, sizeof(content));
                if (r <= 0 ) {
@@ -24,11 +24,11 @@ index 51a2032..4cc1c39 100644
                        /* Skip */
                        continue;
                }
-diff --git a/src/pkcs15init/pkcs15-openpgp.c b/src/pkcs15init/pkcs15-openpgp.c
-index f3a4962..1455580 100755
---- a/src/pkcs15init/pkcs15-openpgp.c
-+++ b/src/pkcs15init/pkcs15-openpgp.c
-@@ -236,13 +236,16 @@ static int openpgp_emu_update_tokeninfo(sc_profile_t *profile, sc_pkcs15_card_t
+Index: opensc-20150513/src/pkcs15init/pkcs15-openpgp.c
+===================================================================
+--- opensc-20150513.orig/src/pkcs15init/pkcs15-openpgp.c
++++ opensc-20150513/src/pkcs15init/pkcs15-openpgp.c
+@@ -236,13 +236,16 @@ static int openpgp_emu_update_tokeninfo(
  }
  
  static int openpgp_store_data(struct sc_pkcs15_card *p15card, struct sc_profile *profile,
@@ -46,7 +46,7 @@ index f3a4962..1455580 100755
        int r;
  
        LOG_FUNC_CALLED(card->ctx);
-@@ -282,6 +285,39 @@ static int openpgp_store_data(struct sc_pkcs15_card *p15card, struct sc_profile
+@@ -282,6 +285,39 @@ static int openpgp_store_data(struct sc_
                                             content->len, 0);
                break;
  
@@ -86,6 +86,3 @@ index f3a4962..1455580 100755
        default:
                r = SC_ERROR_NOT_IMPLEMENTED;
        }
--- 
-2.1.3
-
index d133e805955ab8b419b60ad64c830e93242d9384..a4c52621a47c8858d6be8c407d3ecfe1effc7b7e 100644 (file)
@@ -9,11 +9,11 @@ Subject: [PATCH 11/26] OpenPGP: Provide enough buffer to read pubkey from
  src/libopensc/card-openpgp.c | 28 +++++++++++++++++++++++-----
  1 file changed, 23 insertions(+), 5 deletions(-)
 
-diff --git a/src/libopensc/card-openpgp.c b/src/libopensc/card-openpgp.c
-index e7b25c0..1913eca 100644
---- a/src/libopensc/card-openpgp.c
-+++ b/src/libopensc/card-openpgp.c
-@@ -263,7 +263,12 @@ static struct do_info             pgp2_objects[] = {      /* OpenPGP card spec 2.0 */
+Index: opensc-20150513/src/libopensc/card-openpgp.c
+===================================================================
+--- opensc-20150513.orig/src/libopensc/card-openpgp.c
++++ opensc-20150513/src/libopensc/card-openpgp.c
+@@ -265,7 +265,12 @@ static struct do_info             pgp2_objects[] =
  
  /* The DO holding X.509 certificate is constructed but does not contain child DO.
   * We should notice this when building fake file system later. */
@@ -27,7 +27,7 @@ index e7b25c0..1913eca 100644
  
  #define DRVDATA(card)        ((struct pgp_priv_data *) ((card)->drv_data))
  struct pgp_priv_data {
-@@ -731,6 +736,14 @@ pgp_read_blob(sc_card_t *card, struct blob *blob)
+@@ -739,6 +744,14 @@ pgp_read_blob(sc_card_t *card, struct bl
                u8      buffer[2048];
                size_t  buf_len = (card->caps & SC_CARD_CAP_APDU_EXT)
                                  ? sizeof(buffer) : 256;
@@ -42,7 +42,7 @@ index e7b25c0..1913eca 100644
                int     r = blob->info->get_fn(card, blob->id, buffer, buf_len);
  
                if (r < 0) {    /* an error occurred */
-@@ -1828,6 +1841,7 @@ static int pgp_gen_key(sc_card_t *card, sc_cardctl_openpgp_keygen_info_t *key_in
+@@ -1836,6 +1849,7 @@ static int pgp_gen_key(sc_card_t *card,
        u8 apdu_case;
        u8 *apdu_data;
        size_t apdu_le;
@@ -50,7 +50,7 @@ index e7b25c0..1913eca 100644
        int r = SC_SUCCESS;
  
        LOG_FUNC_CALLED(card->ctx);
-@@ -1868,23 +1882,27 @@ static int pgp_gen_key(sc_card_t *card, sc_cardctl_openpgp_keygen_info_t *key_in
+@@ -1876,23 +1890,27 @@ static int pgp_gen_key(sc_card_t *card,
                apdu_case = SC_APDU_CASE_4_EXT;
        }
        else {
@@ -82,6 +82,3 @@ index e7b25c0..1913eca 100644
  
        /* Send */
        sc_log(card->ctx, "Waiting for the card to generate key...");
--- 
-2.1.3
-
index 3a2526f4e87c7d63116ea12327f87042678f4cd7..40c0c8541dcdd5e6b05a801d1672131665072622 100644 (file)
@@ -8,11 +8,11 @@ Subject: [PATCH 12/26] OpenPGP: Support write certificate for Gnuk.
  src/libopensc/card-openpgp.c | 158 +++++++++++++++++++++++++++++++++----------
  1 file changed, 123 insertions(+), 35 deletions(-)
 
-diff --git a/src/libopensc/card-openpgp.c b/src/libopensc/card-openpgp.c
-index 1913eca..7cea84f 100644
---- a/src/libopensc/card-openpgp.c
-+++ b/src/libopensc/card-openpgp.c
-@@ -727,6 +727,8 @@ pgp_iterate_blobs(struct blob *blob, int level, void (*func)())
+Index: opensc-20150513/src/libopensc/card-openpgp.c
+===================================================================
+--- opensc-20150513.orig/src/libopensc/card-openpgp.c
++++ opensc-20150513/src/libopensc/card-openpgp.c
+@@ -735,6 +735,8 @@ pgp_iterate_blobs(struct blob *blob, int
  static int
  pgp_read_blob(sc_card_t *card, struct blob *blob)
  {
@@ -21,7 +21,7 @@ index 1913eca..7cea84f 100644
        if (blob->data != NULL)
                return SC_SUCCESS;
        if (blob->info == NULL)
-@@ -737,6 +739,11 @@ pgp_read_blob(sc_card_t *card, struct blob *blob)
+@@ -745,6 +747,11 @@ pgp_read_blob(sc_card_t *card, struct bl
                size_t  buf_len = (card->caps & SC_CARD_CAP_APDU_EXT)
                                  ? sizeof(buffer) : 256;
  
@@ -33,7 +33,7 @@ index 1913eca..7cea84f 100644
                /* Buffer length for Gnuk pubkey */
                if (card->type == SC_CARD_TYPE_OPENPGP_GNUK &&
                    (blob->id == 0xa400 || blob->id == 0xb600 || blob->id == 0xb800
-@@ -1192,49 +1199,75 @@ pgp_get_data(sc_card_t *card, unsigned int tag, u8 *buf, size_t buf_len)
+@@ -1200,49 +1207,75 @@ pgp_get_data(sc_card_t *card, unsigned i
        LOG_FUNC_RETURN(card->ctx, apdu.resplen);
  }
  
@@ -143,7 +143,7 @@ index 1913eca..7cea84f 100644
  
        /* Extended Header list (004D DO) needs a variant of PUT DATA command */
        if (tag == 0x004D) {
-@@ -1260,15 +1293,70 @@ pgp_put_data(sc_card_t *card, unsigned int tag, const u8 *buf, size_t buf_len)
+@@ -1268,15 +1301,70 @@ pgp_put_data(sc_card_t *card, unsigned i
                apdu.lc = buf_len;
        }
        else {
@@ -215,6 +215,3 @@ index 1913eca..7cea84f 100644
        /* Instruct more in case of error */
        if (r == SC_ERROR_SECURITY_STATUS_NOT_SATISFIED) {
                sc_debug(card->ctx, SC_LOG_DEBUG_VERBOSE, "Please verify PIN first.");
--- 
-2.1.3
-
index 48afb37390fb8c58ae33d2dd81d0ffa08ca006c2..c785a0dd5c88b5d72111b07a15afeeb289065930 100644 (file)
@@ -9,11 +9,11 @@ Subject: [PATCH 13/26] pkcs15-openpgp: Change to sc_put_data instead of
  src/pkcs15init/pkcs15-openpgp.c | 5 ++---
  1 file changed, 2 insertions(+), 3 deletions(-)
 
-diff --git a/src/pkcs15init/pkcs15-openpgp.c b/src/pkcs15init/pkcs15-openpgp.c
-index 1455580..be1291e 100755
---- a/src/pkcs15init/pkcs15-openpgp.c
-+++ b/src/pkcs15init/pkcs15-openpgp.c
-@@ -279,10 +279,9 @@ static int openpgp_store_data(struct sc_pkcs15_card *p15card, struct sc_profile
+Index: opensc-20150513/src/pkcs15init/pkcs15-openpgp.c
+===================================================================
+--- opensc-20150513.orig/src/pkcs15init/pkcs15-openpgp.c
++++ opensc-20150513/src/pkcs15init/pkcs15-openpgp.c
+@@ -279,10 +279,9 @@ static int openpgp_store_data(struct sc_
                r = sc_select_file(card, path, &file);
                LOG_TEST_RET(card->ctx, r, "Cannot select cert file");
                r = sc_pkcs15init_authenticate(profile, p15card, file, SC_AC_OP_UPDATE);
@@ -26,6 +26,3 @@ index 1455580..be1291e 100755
                break;
  
        case SC_PKCS15_TYPE_DATA_OBJECT:
--- 
-2.1.3
-
index 0fa8f2c3d3ae879b824a1186044428fe6c881c00..884e4fa7d9d10e9c6006b862037a338705b21295 100644 (file)
@@ -10,11 +10,11 @@ When write certificate with odd length to Gnuk, we add zero padding to make it e
  src/libopensc/card-openpgp.c | 20 ++++++++++++++++++--
  1 file changed, 18 insertions(+), 2 deletions(-)
 
-diff --git a/src/libopensc/card-openpgp.c b/src/libopensc/card-openpgp.c
-index 7cea84f..7a77a71 100644
---- a/src/libopensc/card-openpgp.c
-+++ b/src/libopensc/card-openpgp.c
-@@ -1208,6 +1208,10 @@ static int gnuk_write_certificate(sc_card_t *card, const u8 *buf, size_t length)
+Index: opensc-20150513/src/libopensc/card-openpgp.c
+===================================================================
+--- opensc-20150513.orig/src/libopensc/card-openpgp.c
++++ opensc-20150513/src/libopensc/card-openpgp.c
+@@ -1216,6 +1216,10 @@ static int gnuk_write_certificate(sc_car
        sc_apdu_t apdu;
        u8 *part;
        size_t plen;
@@ -25,7 +25,7 @@ index 7cea84f..7a77a71 100644
        int r = SC_SUCCESS;
  
        LOG_FUNC_CALLED(ctx);
-@@ -1238,8 +1242,20 @@ static int gnuk_write_certificate(sc_card_t *card, const u8 *buf, size_t length)
+@@ -1246,8 +1250,20 @@ static int gnuk_write_certificate(sc_car
                        sc_format_apdu(card, &apdu, SC_APDU_CASE_3_SHORT, 0xD6, i, 0);
                }
                apdu.flags |= SC_APDU_FLAGS_CHAINING;
@@ -48,6 +48,3 @@ index 7cea84f..7a77a71 100644
  
                r = sc_transmit_apdu(card, &apdu);
                LOG_TEST_RET(card->ctx, r, "APDU transmit failed");
--- 
-2.1.3
-
index 2389cd10992bfa4bafadd01f8cce7bf9dbb8fd88..e9ac9d343d574fd786455cbdfb0806ad8ce49b8d 100644 (file)
@@ -8,11 +8,11 @@ Subject: [PATCH 15/26] OpenPGP: Delete key as file, for Gnuk.
  src/libopensc/card-openpgp.c | 51 +++++++++++++++++++++++++++++++++++++++++++-
  1 file changed, 50 insertions(+), 1 deletion(-)
 
-diff --git a/src/libopensc/card-openpgp.c b/src/libopensc/card-openpgp.c
-index 7a77a71..4d0500d 100644
---- a/src/libopensc/card-openpgp.c
-+++ b/src/libopensc/card-openpgp.c
-@@ -2435,6 +2435,44 @@ static int pgp_card_ctl(sc_card_t *card, unsigned long cmd, void *ptr)
+Index: opensc-20150513/src/libopensc/card-openpgp.c
+===================================================================
+--- opensc-20150513.orig/src/libopensc/card-openpgp.c
++++ opensc-20150513/src/libopensc/card-openpgp.c
+@@ -2448,6 +2448,44 @@ static int pgp_card_ctl(sc_card_t *card,
        LOG_FUNC_RETURN(card->ctx, SC_ERROR_NOT_SUPPORTED);
  }
  
@@ -57,7 +57,7 @@ index 7a77a71..4d0500d 100644
  /* ABI: DELETE FILE */
  static int
  pgp_delete_file(sc_card_t *card, const sc_path_t *path)
-@@ -2442,6 +2480,7 @@ pgp_delete_file(sc_card_t *card, const sc_path_t *path)
+@@ -2455,6 +2493,7 @@ pgp_delete_file(sc_card_t *card, const s
        struct pgp_priv_data *priv = DRVDATA(card);
        struct blob *blob;
        sc_file_t *file;
@@ -65,7 +65,7 @@ index 7a77a71..4d0500d 100644
        int r;
  
        LOG_FUNC_CALLED(card->ctx);
-@@ -2457,10 +2496,20 @@ pgp_delete_file(sc_card_t *card, const sc_path_t *path)
+@@ -2470,10 +2509,20 @@ pgp_delete_file(sc_card_t *card, const s
        if (blob == priv->mf)
                LOG_FUNC_RETURN(card->ctx, SC_ERROR_NOT_SUPPORTED);
  
@@ -87,6 +87,3 @@ index 7a77a71..4d0500d 100644
        else {
                /* call pgp_put_data() with zero-sized NULL-buffer to zap the DO contents */
                r = pgp_put_data(card, file->id, NULL, 0);
--- 
-2.1.3
-
index 76c8624e3091fef3a5c31292ecf80ab7d0217f33..3f80a0602783fdc95e6a4d409d87cc2d728ccc58 100644 (file)
@@ -8,11 +8,11 @@ Subject: [PATCH 16/26] OpenPGP: Correct parameter checking.
  src/libopensc/card-openpgp.c | 9 +++++++--
  1 file changed, 7 insertions(+), 2 deletions(-)
 
-diff --git a/src/libopensc/card-openpgp.c b/src/libopensc/card-openpgp.c
-index 4d0500d..beeee83 100644
---- a/src/libopensc/card-openpgp.c
-+++ b/src/libopensc/card-openpgp.c
-@@ -1223,6 +1223,8 @@ static int gnuk_write_certificate(sc_card_t *card, const u8 *buf, size_t length)
+Index: opensc-20150513/src/libopensc/card-openpgp.c
+===================================================================
+--- opensc-20150513.orig/src/libopensc/card-openpgp.c
++++ opensc-20150513/src/libopensc/card-openpgp.c
+@@ -1231,6 +1231,8 @@ static int gnuk_write_certificate(sc_car
                LOG_TEST_RET(card->ctx, r, "APDU transmit failed");
                /* Check response */
                r = sc_check_sw(card, apdu.sw1, apdu.sw2);
@@ -21,7 +21,7 @@ index 4d0500d..beeee83 100644
                LOG_FUNC_RETURN(card->ctx, length);
        }
  
-@@ -2446,6 +2448,11 @@ gnuk_delete_key(sc_card_t *card, u8 key_id)
+@@ -2459,6 +2461,11 @@ gnuk_delete_key(sc_card_t *card, u8 key_
  
        LOG_FUNC_CALLED(ctx);
  
@@ -33,7 +33,7 @@ index 4d0500d..beeee83 100644
        /* Delete fingerprint */
        sc_log(ctx, "Delete fingerprints");
        r = pgp_put_data(card, 0xC6 + key_id, NULL, 0);
-@@ -2464,8 +2471,6 @@ gnuk_delete_key(sc_card_t *card, u8 key_id)
+@@ -2477,8 +2484,6 @@ gnuk_delete_key(sc_card_t *card, u8 key_
                data = "\x4D\x02\xB8";
        else if (key_id == 3)
                data = "\x4D\x02\xA4";
@@ -42,6 +42,3 @@ index 4d0500d..beeee83 100644
  
        r = pgp_put_data(card, 0x4D, data, strlen(data) + 1);
  
--- 
-2.1.3
-
index 2bb6fccafb3a97570f1afd27c4170737e15d585c..25a23e2355758217797dd82973dbc0c274c24136 100644 (file)
@@ -8,11 +8,11 @@ Subject: [PATCH 17/26] OpenPGP: Make code neater
  src/libopensc/card-openpgp.c | 8 ++------
  1 file changed, 2 insertions(+), 6 deletions(-)
 
-diff --git a/src/libopensc/card-openpgp.c b/src/libopensc/card-openpgp.c
-index beeee83..ca0d01b 100644
---- a/src/libopensc/card-openpgp.c
-+++ b/src/libopensc/card-openpgp.c
-@@ -1222,10 +1222,7 @@ static int gnuk_write_certificate(sc_card_t *card, const u8 *buf, size_t length)
+Index: opensc-20150513/src/libopensc/card-openpgp.c
+===================================================================
+--- opensc-20150513.orig/src/libopensc/card-openpgp.c
++++ opensc-20150513/src/libopensc/card-openpgp.c
+@@ -1230,10 +1230,7 @@ static int gnuk_write_certificate(sc_car
                r = sc_transmit_apdu(card, &apdu);
                LOG_TEST_RET(card->ctx, r, "APDU transmit failed");
                /* Check response */
@@ -24,7 +24,7 @@ index beeee83..ca0d01b 100644
        }
  
        /* Ref: gnuk_put_binary_libusb.py and gnuk_token.py in Gnuk source tree */
-@@ -1262,8 +1259,7 @@ static int gnuk_write_certificate(sc_card_t *card, const u8 *buf, size_t length)
+@@ -1270,8 +1267,7 @@ static int gnuk_write_certificate(sc_car
                r = sc_transmit_apdu(card, &apdu);
                LOG_TEST_RET(card->ctx, r, "APDU transmit failed");
                /* Check response */
@@ -34,6 +34,3 @@ index beeee83..ca0d01b 100644
  
                /* To next part */
                i++;
--- 
-2.1.3
-
index 774ed58a11fe985da614b1729e33f79460ea2844..2d617b597f8c8881b4737cfa11543ebc96363da7 100644 (file)
@@ -8,11 +8,11 @@ Subject: [PATCH 18/26] Move declaration to top of block.
  src/libopensc/card-openpgp.c | 3 ++-
  1 file changed, 2 insertions(+), 1 deletion(-)
 
-diff --git a/src/libopensc/card-openpgp.c b/src/libopensc/card-openpgp.c
-index ca0d01b..037ef73 100644
---- a/src/libopensc/card-openpgp.c
-+++ b/src/libopensc/card-openpgp.c
-@@ -738,6 +738,7 @@ pgp_read_blob(sc_card_t *card, struct blob *blob)
+Index: opensc-20150513/src/libopensc/card-openpgp.c
+===================================================================
+--- opensc-20150513.orig/src/libopensc/card-openpgp.c
++++ opensc-20150513/src/libopensc/card-openpgp.c
+@@ -746,6 +746,7 @@ pgp_read_blob(sc_card_t *card, struct bl
                u8      buffer[2048];
                size_t  buf_len = (card->caps & SC_CARD_CAP_APDU_EXT)
                                  ? sizeof(buffer) : 256;
@@ -20,7 +20,7 @@ index ca0d01b..037ef73 100644
  
                /* Buffer length for certificate */
                if (blob->id == DO_CERT && priv->max_cert_size > 0) {
-@@ -751,7 +752,7 @@ pgp_read_blob(sc_card_t *card, struct blob *blob)
+@@ -759,7 +760,7 @@ pgp_read_blob(sc_card_t *card, struct bl
                        buf_len = MAXLEN_RESP_PUBKEY_GNUK;
                }
  
@@ -29,6 +29,3 @@ index ca0d01b..037ef73 100644
  
                if (r < 0) {    /* an error occurred */
                        blob->status = r;
--- 
-2.1.3
-
index 3702d61bedf31408db2106a16865ef211bc3e491..6130fa451f0ed0928da079b1c0b2ed90dde6da8c 100644 (file)
@@ -9,11 +9,11 @@ Subject: [PATCH 19/26] OpenPGP: Make indentation consistent (space -> tab).
  src/tools/openpgp-tool.c     | 56 ++++++++++++++++++++++----------------------
  2 files changed, 39 insertions(+), 39 deletions(-)
 
-diff --git a/src/libopensc/card-openpgp.c b/src/libopensc/card-openpgp.c
-index 037ef73..ae40940 100644
---- a/src/libopensc/card-openpgp.c
-+++ b/src/libopensc/card-openpgp.c
-@@ -192,12 +192,12 @@ static struct do_info            pgp1_objects[] = {      /* OpenPGP card spec 1.1 */
+Index: opensc-20150513/src/libopensc/card-openpgp.c
+===================================================================
+--- opensc-20150513.orig/src/libopensc/card-openpgp.c
++++ opensc-20150513/src/libopensc/card-openpgp.c
+@@ -194,12 +194,12 @@ static struct do_info            pgp1_objects[] =
        { 0x5f35, SIMPLE,      READ_ALWAYS | WRITE_PIN3,  NULL,               sc_put_data },
        { 0x5f50, SIMPLE,      READ_ALWAYS | WRITE_PIN3,  sc_get_data,        sc_put_data },
        { 0x7f49, CONSTRUCTED, READ_ALWAYS | WRITE_NEVER, NULL,               NULL        },
@@ -32,7 +32,7 @@ index 037ef73..ae40940 100644
        { 0, 0, 0, NULL, NULL },
  };
  
-@@ -253,11 +253,11 @@ static struct do_info            pgp2_objects[] = {      /* OpenPGP card spec 2.0 */
+@@ -255,11 +255,11 @@ static struct do_info            pgp2_objects[] =
        /* The 0xA401, 0xB601, 0xB801 are just symbolic, it does not represent any real DO.
         * However, their R/W access condition may block the process of importing key in pkcs15init.
         * So we set their accesses condition as WRITE_PIN3 (writable). */
@@ -49,10 +49,10 @@ index 037ef73..ae40940 100644
        { 0, 0, 0, NULL, NULL },
  };
  
-diff --git a/src/tools/openpgp-tool.c b/src/tools/openpgp-tool.c
-index 374819a..a0334ca 100644
---- a/src/tools/openpgp-tool.c
-+++ b/src/tools/openpgp-tool.c
+Index: opensc-20150513/src/tools/openpgp-tool.c
+===================================================================
+--- opensc-20150513.orig/src/tools/openpgp-tool.c
++++ opensc-20150513/src/tools/openpgp-tool.c
 @@ -37,11 +37,11 @@
  #include "util.h"
  #include "libopensc/log.h"
@@ -70,7 +70,7 @@ index 374819a..a0334ca 100644
  
  /* define structures */
  struct ef_name_map {
-@@ -142,10 +142,10 @@ static const struct ef_name_map openpgp_data[] = {
+@@ -142,10 +142,10 @@ static const struct ef_name_map openpgp_
  static void show_version(void)
  {
        fprintf(stderr,
@@ -85,7 +85,7 @@ index 374819a..a0334ca 100644
  }
  
  
-@@ -176,16 +176,16 @@ static char *prettify_language(char *str)
+@@ -176,16 +176,16 @@ static char *prettify_language(char *str
  {
        if (str != NULL) {
                switch (strlen(str)) {
@@ -121,7 +121,7 @@ index 374819a..a0334ca 100644
                }
        }
        return NULL;
-@@ -218,7 +218,7 @@ static void display_data(const struct ef_name_map *mapping, char *value)
+@@ -218,7 +218,7 @@ static void display_data(const struct ef
                                char *envvar;
  
                                envvar = malloc(strlen(mapping->env_name) +
@@ -130,7 +130,7 @@ index 374819a..a0334ca 100644
                                if (envvar != NULL) {
                                        strcpy(envvar, mapping->env_name);
                                        strcat(envvar, "=");
-@@ -346,20 +346,20 @@ static int do_userinfo(sc_card_t *card)
+@@ -344,20 +344,20 @@ static int do_userinfo(sc_card_t *card)
                if (!count)
                        continue;
  
@@ -177,6 +177,3 @@ index 374819a..a0334ca 100644
                return EXIT_FAILURE;
        }
  
--- 
-2.1.3
-
index b73826fa29b4e307fdfd9717cc91b6cb620392ad..dbd7bc0dc7d98ea594f3711a0783b85bf852ea62 100644 (file)
@@ -8,11 +8,11 @@ Subject: [PATCH 20/26] OpenPGP: Don't use sc_log in openpgp-tool.
  src/tools/openpgp-tool.c | 21 +++++++++++----------
  1 file changed, 11 insertions(+), 10 deletions(-)
 
-diff --git a/src/tools/openpgp-tool.c b/src/tools/openpgp-tool.c
-index a0334ca..505abd9 100644
---- a/src/tools/openpgp-tool.c
-+++ b/src/tools/openpgp-tool.c
-@@ -414,8 +414,6 @@ int do_genkey(sc_card_t *card, u8 key_id, unsigned int key_len)
+Index: opensc-20150513/src/tools/openpgp-tool.c
+===================================================================
+--- opensc-20150513.orig/src/tools/openpgp-tool.c
++++ opensc-20150513/src/tools/openpgp-tool.c
+@@ -414,8 +414,6 @@ int do_genkey(sc_card_t *card, u8 key_id
        sc_path_t path;
        sc_file_t *file;
  
@@ -21,7 +21,7 @@ index a0334ca..505abd9 100644
        if (key_id < 1 || key_id > 3) {
                printf("Unknown key ID %d.\n", key_id);
                return 1;
-@@ -479,14 +477,14 @@ int delete_key_gnuk(sc_card_t *card, u8 key_id)
+@@ -479,14 +477,14 @@ int delete_key_gnuk(sc_card_t *card, u8
        u8 *data = NULL;
  
        /* Delete fingerprint */
@@ -39,7 +39,7 @@ index a0334ca..505abd9 100644
  
        if (key_id == 1)
                data = "\x4D\x02\xB6";
-@@ -534,15 +532,18 @@ int delete_key_openpgp(sc_card_t *card, u8 key_id)
+@@ -534,15 +532,18 @@ int delete_key_openpgp(sc_card_t *card,
                /* Build APDU from binary array */
                r = sc_bytes2apdu(card->ctx, buf, len0, &apdu);
                if (r) {
@@ -61,7 +61,7 @@ index a0334ca..505abd9 100644
        }
        /* TODO: Rewrite Extended Header List.
         * Not support by OpenGPG v2 yet */
-@@ -557,7 +558,7 @@ int delete_key(sc_card_t *card, u8 key_id)
+@@ -557,7 +558,7 @@ int delete_key(sc_card_t *card, u8 key_i
        LOG_FUNC_CALLED(ctx);
        /* Check key ID */
        if (key_id < 1 || key_id > 3) {
@@ -79,6 +79,3 @@ index a0334ca..505abd9 100644
                exit_status = EXIT_FAILURE;
                goto out;
        }
--- 
-2.1.3
-
index dc8fe84997a60c637024c58ad215e7ae8b8fb8cc..c84ef8e97dbe2b9b596b27c70c24572a19ed0c4b 100644 (file)
@@ -9,11 +9,11 @@ Subject: [PATCH 21/26] OpenPGP: Don't reimplement gnuk_delete_key in
  src/tools/openpgp-tool.c | 64 ++++++------------------------------------------
  1 file changed, 8 insertions(+), 56 deletions(-)
 
-diff --git a/src/tools/openpgp-tool.c b/src/tools/openpgp-tool.c
-index 505abd9..a7796e7 100644
---- a/src/tools/openpgp-tool.c
-+++ b/src/tools/openpgp-tool.c
-@@ -468,38 +468,6 @@ int do_verify(sc_card_t *card, char *type, char *pin)
+Index: opensc-20150513/src/tools/openpgp-tool.c
+===================================================================
+--- opensc-20150513.orig/src/tools/openpgp-tool.c
++++ opensc-20150513/src/tools/openpgp-tool.c
+@@ -468,38 +468,6 @@ int do_verify(sc_card_t *card, char *typ
  }
  
  /**
@@ -52,7 +52,7 @@ index 505abd9..a7796e7 100644
   * Delete key, for OpenPGP card.
   * This function is not complete and is reserved for future version (> 2) of OpenPGP card.
   **/
-@@ -547,32 +515,13 @@ int delete_key_openpgp(sc_card_t *card, u8 key_id)
+@@ -547,32 +515,13 @@ int delete_key_openpgp(sc_card_t *card,
        }
        /* TODO: Rewrite Extended Header List.
         * Not support by OpenGPG v2 yet */
@@ -87,7 +87,7 @@ index 505abd9..a7796e7 100644
        int r = SC_SUCCESS;
  
        /* Currently, only Gnuk supports deleting keys */
-@@ -586,13 +535,16 @@ int do_delete_key(sc_card_t *card, u8 key_id)
+@@ -586,13 +535,16 @@ int do_delete_key(sc_card_t *card, u8 ke
                return SC_ERROR_INVALID_ARGUMENTS;
        }
        if (key_id == 1 || key_id == 'a') {
@@ -107,6 +107,3 @@ index 505abd9..a7796e7 100644
        }
        return r;
  }
--- 
-2.1.3
-
index 6297783ecde75bb79952b205e5f0ccb3cb89b2e7..20c66effe8fbce61445cb4ac9be2b38ea9e6d36f 100644 (file)
@@ -10,11 +10,11 @@ I used a string presentation before and it needed an extra conversion step.
  src/libopensc/card-openpgp.c | 47 +++++++++++++++++++++++---------------------
  1 file changed, 25 insertions(+), 22 deletions(-)
 
-diff --git a/src/libopensc/card-openpgp.c b/src/libopensc/card-openpgp.c
-index ae40940..724fe73 100644
---- a/src/libopensc/card-openpgp.c
-+++ b/src/libopensc/card-openpgp.c
-@@ -2347,24 +2347,27 @@ out:
+Index: opensc-20150513/src/libopensc/card-openpgp.c
+===================================================================
+--- opensc-20150513.orig/src/libopensc/card-openpgp.c
++++ opensc-20150513/src/libopensc/card-openpgp.c
+@@ -2358,24 +2358,27 @@ out:
  static int pgp_erase_card(sc_card_t *card)
  {
        sc_context_t *ctx = card->ctx;
@@ -56,7 +56,7 @@ index ae40940..724fe73 100644
  
        LOG_FUNC_CALLED(ctx);
  
-@@ -2376,17 +2379,17 @@ static int pgp_erase_card(sc_card_t *card)
+@@ -2387,17 +2390,17 @@ static int pgp_erase_card(sc_card_t *car
        sc_log(ctx, "Card is OpenPGP v2. Erase card.");
  
        /* Iterate over 10 commands above */
@@ -82,6 +82,3 @@ index ae40940..724fe73 100644
                if (r) {
                        sc_log(ctx, "Failed to build APDU");
                        LOG_FUNC_RETURN(ctx, SC_ERROR_INTERNAL);
--- 
-2.1.3
-
index f859f7cf1ae6145475a8fadda293cdbb04f61bc8..1eedf5fd6cceda1cff8027e65d3b5b3412f5939e 100644 (file)
@@ -11,11 +11,11 @@ type.
  src/libopensc/card-openpgp.c | 96 ++++++++++++++++++++++----------------------
  1 file changed, 49 insertions(+), 47 deletions(-)
 
-diff --git a/src/libopensc/card-openpgp.c b/src/libopensc/card-openpgp.c
-index 724fe73..ca3173c 100644
---- a/src/libopensc/card-openpgp.c
-+++ b/src/libopensc/card-openpgp.c
-@@ -111,9 +111,9 @@ enum _card_state {
+Index: opensc-20150513/src/libopensc/card-openpgp.c
+===================================================================
+--- opensc-20150513.orig/src/libopensc/card-openpgp.c
++++ opensc-20150513/src/libopensc/card-openpgp.c
+@@ -113,9 +113,9 @@ enum _card_state {
        CARD_STATE_ACTIVATED      = 0x05
  };
  
@@ -28,7 +28,7 @@ index 724fe73..ca3173c 100644
        struct do_info *info;
  
        sc_file_t *     file;
-@@ -122,8 +122,8 @@ struct blob {
+@@ -124,8 +124,8 @@ struct blob {
  
        unsigned char * data;
        unsigned int    len;
@@ -39,7 +39,7 @@ index 724fe73..ca3173c 100644
  
  struct do_info {
        unsigned int    id;             /* ID of the DO in question */
-@@ -141,12 +141,12 @@ struct do_info {
+@@ -143,12 +143,12 @@ struct do_info {
  
  static int            pgp_get_card_features(sc_card_t *card);
  static int            pgp_finish(sc_card_t *card);
@@ -57,7 +57,7 @@ index 724fe73..ca3173c 100644
  static int            pgp_get_pubkey(sc_card_t *, unsigned int,
                                u8 *, size_t);
  static int            pgp_get_pubkey_pem(sc_card_t *, unsigned int,
-@@ -272,8 +272,8 @@ static struct do_info              pgp2_objects[] = {      /* OpenPGP card spec 2.0 */
+@@ -274,8 +274,8 @@ static struct do_info              pgp2_objects[] =
  
  #define DRVDATA(card)        ((struct pgp_priv_data *) ((card)->drv_data))
  struct pgp_priv_data {
@@ -68,16 +68,16 @@ index 724fe73..ca3173c 100644
  
        enum _version           bcd_version;
        struct do_info          *pgp_objects;
-@@ -311,7 +311,7 @@ pgp_init(sc_card_t *card)
+@@ -313,7 +313,7 @@ pgp_init(sc_card_t *card)
        sc_file_t       *file = NULL;
        struct do_info  *info;
        int             r;
--      struct blob     *child = NULL;
-+      pgp_blob_t      *child = NULL;
+-      struct blob     *child = NULL;
++      pgp_blob_t      *child = NULL;
  
        LOG_FUNC_CALLED(card->ctx);
  
-@@ -389,7 +389,7 @@ pgp_get_card_features(sc_card_t *card)
+@@ -397,7 +397,7 @@ pgp_get_card_features(sc_card_t *card)
        unsigned char *hist_bytes = card->atr.value;
        size_t atr_len = card->atr.len;
        size_t i = 0;
@@ -86,7 +86,7 @@ index 724fe73..ca3173c 100644
  
        /* parse card capabilities from historical bytes */
        while ((i < atr_len) && (hist_bytes[i] != 0x73))
-@@ -526,7 +526,7 @@ pgp_finish(sc_card_t *card)
+@@ -534,7 +534,7 @@ pgp_finish(sc_card_t *card)
  
  /* internal: fill a blob's data */
  static int
@@ -95,7 +95,7 @@ index 724fe73..ca3173c 100644
  {
        if (blob->data)
                free(blob->data);
-@@ -620,16 +620,16 @@ pgp_attach_acl(sc_card_t *card, sc_file_t *file, struct do_info *info)
+@@ -628,16 +628,16 @@ pgp_attach_acl(sc_card_t *card, sc_file_
  }
  
  /* internal: append a blob to the list of children of a given parent blob */
@@ -116,7 +116,7 @@ index 724fe73..ca3173c 100644
                struct pgp_priv_data *priv = DRVDATA (card);
                struct do_info *info;
  
-@@ -643,7 +643,7 @@ pgp_new_blob(sc_card_t *card, struct blob *parent, unsigned int file_id,
+@@ -651,7 +651,7 @@ pgp_new_blob(sc_card_t *card, struct blo
                blob->parent = parent;
  
                if (parent != NULL) {
@@ -125,7 +125,7 @@ index 724fe73..ca3173c 100644
  
                        /* set file's path = parent's path + file's id */
                        blob->file->path = parent->file->path;
-@@ -681,11 +681,11 @@ pgp_new_blob(sc_card_t *card, struct blob *parent, unsigned int file_id,
+@@ -689,11 +689,11 @@ pgp_new_blob(sc_card_t *card, struct blo
  
  /* internal: free a blob including its content */
  static void
@@ -139,7 +139,7 @@ index 724fe73..ca3173c 100644
  
                        /* remove blob from list of parent's children */
                        for (p = &blob->parent->files; *p != NULL && *p != blob; p = &(*p)->next)
-@@ -705,14 +705,14 @@ pgp_free_blob(struct blob *blob)
+@@ -713,14 +713,14 @@ pgp_free_blob(struct blob *blob)
  
  /* internal: iterate through the blob tree, calling a function for each blob */
  static void
@@ -157,7 +157,7 @@ index 724fe73..ca3173c 100644
  
                                pgp_iterate_blobs(child, level-1, func);
                                child = next;
-@@ -725,7 +725,7 @@ pgp_iterate_blobs(struct blob *blob, int level, void (*func)())
+@@ -733,7 +733,7 @@ pgp_iterate_blobs(struct blob *blob, int
  
  /* internal: read a blob's contents from card */
  static int
@@ -166,7 +166,7 @@ index 724fe73..ca3173c 100644
  {
        struct pgp_priv_data *priv = DRVDATA (card);
  
-@@ -772,7 +772,7 @@ pgp_read_blob(sc_card_t *card, struct blob *blob)
+@@ -780,7 +780,7 @@ pgp_read_blob(sc_card_t *card, struct bl
   * The OpenPGP card has a TLV encoding according ASN.1 BER-encoding rules.
   */
  static int
@@ -175,7 +175,7 @@ index 724fe73..ca3173c 100644
  {
        const u8        *in;
        int             r;
-@@ -789,7 +789,7 @@ pgp_enumerate_blob(sc_card_t *card, struct blob *blob)
+@@ -797,7 +797,7 @@ pgp_enumerate_blob(sc_card_t *card, stru
                unsigned int    cla, tag, tmptag;
                size_t          len;
                const u8        *data = in;
@@ -184,7 +184,7 @@ index 724fe73..ca3173c 100644
  
                r = sc_asn1_read_tag(&data, blob->len - (in - blob->data),
                                        &cla, &tag, &len);
-@@ -819,10 +819,10 @@ pgp_enumerate_blob(sc_card_t *card, struct blob *blob)
+@@ -827,10 +827,10 @@ pgp_enumerate_blob(sc_card_t *card, stru
  
  /* internal: find a blob by ID below a given parent, filling its contents when necessary */
  static int
@@ -198,7 +198,7 @@ index 724fe73..ca3173c 100644
        int                     r;
  
        if ((r = pgp_enumerate_blob(card, blob)) < 0)
-@@ -858,10 +858,10 @@ pgp_get_blob(sc_card_t *card, struct blob *blob, unsigned int id,
+@@ -866,10 +866,10 @@ pgp_get_blob(sc_card_t *card, struct blo
  
  /* Internal: search recursively for a blob by ID below a given root */
  static int
@@ -212,7 +212,7 @@ index 724fe73..ca3173c 100644
        int                     r;
  
        if ((r = pgp_get_blob(card, root, id, ret)) == 0)
-@@ -883,11 +883,11 @@ pgp_seek_blob(sc_card_t *card, struct blob *root, unsigned int id,
+@@ -891,11 +891,11 @@ pgp_seek_blob(sc_card_t *card, struct bl
  }
  
  /* internal: find a blob by tag - pgp_seek_blob with optimizations */
@@ -226,7 +226,7 @@ index 724fe73..ca3173c 100644
        int r;
  
        /* Check if current selected blob is which we want to test*/
-@@ -941,7 +941,7 @@ static int
+@@ -949,7 +949,7 @@ static int
  pgp_select_file(sc_card_t *card, const sc_path_t *path, sc_file_t **ret)
  {
        struct pgp_priv_data *priv = DRVDATA(card);
@@ -235,7 +235,7 @@ index 724fe73..ca3173c 100644
        unsigned int    path_start = 0;
        unsigned int    n;
        sc_path_t dummy_path;
-@@ -1022,7 +1022,7 @@ static int
+@@ -1030,7 +1030,7 @@ static int
  pgp_list_files(sc_card_t *card, u8 *buf, size_t buflen)
  {
        struct pgp_priv_data *priv = DRVDATA(card);
@@ -244,7 +244,7 @@ index 724fe73..ca3173c 100644
        unsigned int    k;
        int             r;
  
-@@ -1058,7 +1058,7 @@ pgp_read_binary(sc_card_t *card, unsigned int idx,
+@@ -1066,7 +1066,7 @@ pgp_read_binary(sc_card_t *card, unsigne
                u8 *buf, size_t count, unsigned long flags)
  {
        struct pgp_priv_data *priv = DRVDATA(card);
@@ -253,7 +253,7 @@ index 724fe73..ca3173c 100644
        int             r;
  
        LOG_FUNC_CALLED(card->ctx);
-@@ -1134,7 +1134,7 @@ static int
+@@ -1142,7 +1142,7 @@ static int
  pgp_get_pubkey_pem(sc_card_t *card, unsigned int tag, u8 *buf, size_t buf_len)
  {
        struct pgp_priv_data *priv = DRVDATA(card);
@@ -262,7 +262,7 @@ index 724fe73..ca3173c 100644
        sc_pkcs15_pubkey_t pubkey;
        u8              *data;
        size_t          len;
-@@ -1329,7 +1329,7 @@ static int
+@@ -1337,7 +1337,7 @@ static int
  pgp_put_data(sc_card_t *card, unsigned int tag, const u8 *buf, size_t buf_len)
  {
        struct pgp_priv_data *priv = DRVDATA(card);
@@ -271,7 +271,7 @@ index 724fe73..ca3173c 100644
        struct do_info *dinfo = NULL;
        int r;
  
-@@ -1603,7 +1603,7 @@ static int
+@@ -1611,7 +1611,7 @@ static int
  pgp_update_new_algo_attr(sc_card_t *card, sc_cardctl_openpgp_keygen_info_t *key_info)
  {
        struct pgp_priv_data *priv = DRVDATA(card);
@@ -280,7 +280,7 @@ index 724fe73..ca3173c 100644
        unsigned int old_modulus_len;     /* Measured in bit */
        unsigned int old_exponent_len;
        const unsigned int tag = 0x00C0 | key_info->keytype;
-@@ -1708,7 +1708,7 @@ pgp_calculate_and_store_fingerprint(sc_card_t *card, time_t ctime,
+@@ -1716,7 +1716,7 @@ pgp_calculate_and_store_fingerprint(sc_c
        u8 *p; /* Use this pointer to set fp_buffer content */
        size_t pk_packet_len;
        unsigned int tag;
@@ -289,7 +289,7 @@ index 724fe73..ca3173c 100644
        u8 *newdata;
        int r;
  
-@@ -1797,7 +1797,7 @@ pgp_update_pubkey_blob(sc_card_t *card, u8* modulus, size_t modulus_len,
+@@ -1805,7 +1805,7 @@ pgp_update_pubkey_blob(sc_card_t *card,
                         u8* exponent, size_t exponent_len, u8 key_id)
  {
        struct pgp_priv_data *priv = DRVDATA(card);
@@ -298,7 +298,7 @@ index 724fe73..ca3173c 100644
        unsigned int blob_id;
        sc_pkcs15_pubkey_t pubkey;
        u8 *data = NULL;
-@@ -1939,6 +1939,8 @@ static int pgp_update_card_algorithms(sc_card_t *card, sc_cardctl_openpgp_keygen
+@@ -1947,6 +1947,8 @@ static int pgp_update_card_algorithms(sc
   **/
  static int pgp_gen_key(sc_card_t *card, sc_cardctl_openpgp_keygen_info_t *key_info)
  {
@@ -307,7 +307,7 @@ index 724fe73..ca3173c 100644
        sc_apdu_t apdu;
        /* Temporary variables to hold APDU params */
        u8 apdu_case;
-@@ -2132,7 +2134,7 @@ pgp_build_extended_header_list(sc_card_t *card, sc_cardctl_openpgp_keystore_info
+@@ -2143,7 +2145,7 @@ pgp_build_extended_header_list(sc_card_t
        };
        size_t comp_to_add = 3;
        size_t req_e_len = 0;     /* The exponent length specified in Algorithm Attributes */
@@ -316,7 +316,7 @@ index 724fe73..ca3173c 100644
        u8 i;
        int r;
  
-@@ -2483,7 +2485,7 @@ static int
+@@ -2496,7 +2498,7 @@ static int
  pgp_delete_file(sc_card_t *card, const sc_path_t *path)
  {
        struct pgp_priv_data *priv = DRVDATA(card);
@@ -325,7 +325,7 @@ index 724fe73..ca3173c 100644
        sc_file_t *file;
        u8 key_id;
        int r;
-@@ -2533,7 +2535,7 @@ pgp_update_binary(sc_card_t *card, unsigned int idx,
+@@ -2546,7 +2548,7 @@ pgp_update_binary(sc_card_t *card, unsig
                  const u8 *buf, size_t count, unsigned long flags)
  {
        struct pgp_priv_data *priv = DRVDATA(card);
@@ -334,6 +334,3 @@ index 724fe73..ca3173c 100644
        int r = SC_SUCCESS;
  
        LOG_FUNC_CALLED(card->ctx);
--- 
-2.1.3
-
index 7d8a0ffc1e45035980483202f79eb3a3a9732d4d..22ae5f43fd0a8750d380249ba13f44c742939ca3 100644 (file)
@@ -8,11 +8,11 @@ Subject: [PATCH 24/26] OpenPGP: Fix crash after accessing inexistent file.
  src/libopensc/card-openpgp.c | 3 ---
  1 file changed, 3 deletions(-)
 
-diff --git a/src/libopensc/card-openpgp.c b/src/libopensc/card-openpgp.c
-index ca3173c..94c69ae 100644
---- a/src/libopensc/card-openpgp.c
-+++ b/src/libopensc/card-openpgp.c
-@@ -973,7 +973,6 @@ pgp_select_file(sc_card_t *card, const sc_path_t *path, sc_file_t **ret)
+Index: opensc-20150513/src/libopensc/card-openpgp.c
+===================================================================
+--- opensc-20150513.orig/src/libopensc/card-openpgp.c
++++ opensc-20150513/src/libopensc/card-openpgp.c
+@@ -981,7 +981,6 @@ pgp_select_file(sc_card_t *card, const s
                         * So we set its size to be the same as max certificate size the card supports. */
                        (*ret)->size = priv->max_cert_size;
                }
@@ -20,7 +20,7 @@ index ca3173c..94c69ae 100644
                LOG_FUNC_RETURN(card->ctx, SC_SUCCESS);
        }
  
-@@ -990,7 +989,6 @@ pgp_select_file(sc_card_t *card, const sc_path_t *path, sc_file_t **ret)
+@@ -998,7 +997,6 @@ pgp_select_file(sc_card_t *card, const s
                /* This file ID is refered when importing key&certificate via pkcs15init, like above.
                 * We pretend to successfully find this inexistent file. */
                if (id == 0x4402 || id == 0x5f48) {
@@ -28,7 +28,7 @@ index ca3173c..94c69ae 100644
                        if (ret == NULL)
                                /* No need to return file */
                                LOG_FUNC_RETURN(card->ctx, SC_SUCCESS);
-@@ -1002,7 +1000,6 @@ pgp_select_file(sc_card_t *card, const sc_path_t *path, sc_file_t **ret)
+@@ -1010,7 +1008,6 @@ pgp_select_file(sc_card_t *card, const s
                }
  
                if (r < 0) {    /* failure */
@@ -36,6 +36,3 @@ index ca3173c..94c69ae 100644
                        LOG_FUNC_RETURN(card->ctx, r);
                }
        }
--- 
-2.1.3
-
index 0eb750c34f0e4d838e8fdec50bbd2403cad7c89e..002bec3d93161ed8d9ed35c778b7162eb650572d 100644 (file)
@@ -8,11 +8,11 @@ Subject: [PATCH 25/26] Replace hardcode.
  src/libopensc/card-openpgp.c | 72 +++++++++++++++++++++++++-------------------
  1 file changed, 41 insertions(+), 31 deletions(-)
 
-diff --git a/src/libopensc/card-openpgp.c b/src/libopensc/card-openpgp.c
-index 94c69ae..1e6e338 100644
---- a/src/libopensc/card-openpgp.c
-+++ b/src/libopensc/card-openpgp.c
-@@ -152,6 +152,24 @@ static int                pgp_get_pubkey(sc_card_t *, unsigned int,
+Index: opensc-20150513/src/libopensc/card-openpgp.c
+===================================================================
+--- opensc-20150513.orig/src/libopensc/card-openpgp.c
++++ opensc-20150513/src/libopensc/card-openpgp.c
+@@ -154,6 +154,24 @@ static int                pgp_get_pubkey(sc_card_t *,
  static int            pgp_get_pubkey_pem(sc_card_t *, unsigned int,
                                u8 *, size_t);
  
@@ -37,7 +37,7 @@ index 94c69ae..1e6e338 100644
  static struct do_info         pgp1_objects[] = {      /* OpenPGP card spec 1.1 */
        { 0x004f, SIMPLE,      READ_ALWAYS | WRITE_NEVER, NULL,               NULL        },
        { 0x005b, SIMPLE,      READ_ALWAYS | WRITE_PIN3,  NULL,               sc_put_data },
-@@ -192,12 +210,12 @@ static struct do_info            pgp1_objects[] = {      /* OpenPGP card spec 1.1 */
+@@ -194,12 +212,12 @@ static struct do_info            pgp1_objects[] =
        { 0x5f35, SIMPLE,      READ_ALWAYS | WRITE_PIN3,  NULL,               sc_put_data },
        { 0x5f50, SIMPLE,      READ_ALWAYS | WRITE_PIN3,  sc_get_data,        sc_put_data },
        { 0x7f49, CONSTRUCTED, READ_ALWAYS | WRITE_NEVER, NULL,               NULL        },
@@ -56,7 +56,7 @@ index 94c69ae..1e6e338 100644
        { 0, 0, 0, NULL, NULL },
  };
  
-@@ -246,30 +264,21 @@ static struct do_info            pgp2_objects[] = {      /* OpenPGP card spec 2.0 */
+@@ -248,30 +266,21 @@ static struct do_info            pgp2_objects[] =
        { 0x5f52, SIMPLE,      READ_ALWAYS | WRITE_NEVER, sc_get_data,        NULL        },
        /* The 7F21 is constructed DO in spec, but in practice, its content can be retrieved
         * as simple DO (no need to parse TLV). */
@@ -94,7 +94,7 @@ index 94c69ae..1e6e338 100644
  #define DRVDATA(card)        ((struct pgp_priv_data *) ((card)->drv_data))
  struct pgp_priv_data {
        pgp_blob_t *            mf;
-@@ -747,8 +756,9 @@ pgp_read_blob(sc_card_t *card, pgp_blob_t *blob)
+@@ -755,8 +764,9 @@ pgp_read_blob(sc_card_t *card, pgp_blob_
  
                /* Buffer length for Gnuk pubkey */
                if (card->type == SC_CARD_TYPE_OPENPGP_GNUK &&
@@ -106,7 +106,7 @@ index 94c69ae..1e6e338 100644
                        buf_len = MAXLEN_RESP_PUBKEY_GNUK;
                }
  
-@@ -1804,11 +1814,11 @@ pgp_update_pubkey_blob(sc_card_t *card, u8* modulus, size_t modulus_len,
+@@ -1812,11 +1822,11 @@ pgp_update_pubkey_blob(sc_card_t *card,
        LOG_FUNC_CALLED(card->ctx);
  
        if (key_id == SC_OPENPGP_KEY_SIGN)
@@ -121,7 +121,7 @@ index 94c69ae..1e6e338 100644
        else {
                sc_log(card->ctx, "Unknown key id %X.", key_id);
                LOG_FUNC_RETURN(card->ctx, SC_ERROR_INVALID_ARGUMENTS);
-@@ -2501,17 +2511,17 @@ pgp_delete_file(sc_card_t *card, const sc_path_t *path)
+@@ -2514,17 +2524,17 @@ pgp_delete_file(sc_card_t *card, const s
                LOG_FUNC_RETURN(card->ctx, SC_ERROR_NOT_SUPPORTED);
  
        if (card->type != SC_CARD_TYPE_OPENPGP_GNUK &&
@@ -143,6 +143,3 @@ index 94c69ae..1e6e338 100644
                r = gnuk_delete_key(card, 3);
        }
        else {
--- 
-2.1.3
-
index d106e868c9f630e7886d390f6cafb984cbbb357d..6931aa64a1f5c32ed9f8343145b255b3052243a4 100644 (file)
@@ -7,11 +7,11 @@ Subject: [PATCH 26/26] hardcode->defines for DO's
  src/libopensc/card-openpgp.c | 16 ++++++++++++++--
  1 file changed, 14 insertions(+), 2 deletions(-)
 
-diff --git a/src/libopensc/card-openpgp.c b/src/libopensc/card-openpgp.c
-index 1e6e338..8464914 100644
---- a/src/libopensc/card-openpgp.c
-+++ b/src/libopensc/card-openpgp.c
-@@ -164,6 +164,18 @@ static int                pgp_get_pubkey_pem(sc_card_t *, unsigned int,
+Index: opensc-20150513/src/libopensc/card-openpgp.c
+===================================================================
+--- opensc-20150513.orig/src/libopensc/card-openpgp.c
++++ opensc-20150513/src/libopensc/card-openpgp.c
+@@ -166,6 +166,18 @@ static int                pgp_get_pubkey_pem(sc_card_t
  #define DO_SIGN_SYM              0xb601
  #define DO_ENCR_SYM              0xb801
  #define DO_AUTH_SYM              0xa401
@@ -30,7 +30,7 @@ index 1e6e338..8464914 100644
  /* Maximum length for response buffer when reading pubkey. This value is calculated with
   * 4096-bit key length */
  #define MAXLEN_RESP_PUBKEY       527
-@@ -851,7 +863,7 @@ pgp_get_blob(sc_card_t *card, pgp_blob_t *blob, unsigned int id,
+@@ -859,7 +871,7 @@ pgp_get_blob(sc_card_t *card, pgp_blob_t
        /* Special case:
         * Gnuk does not have default value for children of DO 65 (DOs 5B, 5F2D, 5F35)
         * So, if these blob was not found, we create it. */
@@ -39,7 +39,7 @@ index 1e6e338..8464914 100644
                sc_log(card->ctx, "Create blob %X under %X", id, blob->id);
                child = pgp_new_blob(card, blob, id, sc_file_new());
                if (child) {
-@@ -1198,7 +1210,7 @@ pgp_get_data(sc_card_t *card, unsigned int tag, u8 *buf, size_t buf_len)
+@@ -1206,7 +1218,7 @@ pgp_get_data(sc_card_t *card, unsigned i
        /* For Gnuk card, if there is no certificate, it returns error instead of empty data.
         * So, for this case, we ignore error and consider success */
        if (r == SC_ERROR_DATA_OBJECT_NOT_FOUND && card->type == SC_CARD_TYPE_OPENPGP_GNUK
@@ -48,6 +48,3 @@ index 1e6e338..8464914 100644
                r = SC_SUCCESS;
                apdu.resplen = 0;
        }
--- 
-2.1.3
-
diff --git a/utils/opensc/patches/0027-OpenPGP-Remove-unused-variables-and-fix-type-cast.patch b/utils/opensc/patches/0027-OpenPGP-Remove-unused-variables-and-fix-type-cast.patch
new file mode 100644 (file)
index 0000000..742f76a
--- /dev/null
@@ -0,0 +1,82 @@
+From 99b5cb53e1da2f0d7692f28dceff8485d4b74daf Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Nguy=E1=BB=85n=20H=E1=BB=93ng=20Qu=C3=A2n?=
+ <ng.hong.quan@gmail.com>
+Date: Wed, 10 Dec 2014 03:59:54 +0800
+Subject: [PATCH 1/2] OpenPGP: Remove unused variables and fix type cast.
+
+---
+ src/libopensc/card-openpgp.c | 10 +++-------
+ src/tools/openpgp-tool.c     |  4 +---
+ 2 files changed, 4 insertions(+), 10 deletions(-)
+
+Index: opensc-20150513/src/libopensc/card-openpgp.c
+===================================================================
+--- opensc-20150513.orig/src/libopensc/card-openpgp.c
++++ opensc-20150513/src/libopensc/card-openpgp.c
+@@ -1966,8 +1966,6 @@ static int pgp_update_card_algorithms(sc
+  **/
+ static int pgp_gen_key(sc_card_t *card, sc_cardctl_openpgp_keygen_info_t *key_info)
+ {
+-      struct pgp_priv_data *priv = DRVDATA(card);
+-      pgp_blob_t *algo_blob;
+       sc_apdu_t apdu;
+       /* Temporary variables to hold APDU params */
+       u8 apdu_case;
+@@ -2396,10 +2394,9 @@ static int pgp_erase_card(sc_card_t *car
+               {0, 0x44, 0, 0}
+       };
+       u8 apdu_lens[10] = {13, 13, 13, 13, 13, 13, 13, 13, 4, 4};
+-      u8 buf[SC_MAX_APDU_BUFFER_SIZE];
+       u8 rbuf[SC_MAX_APDU_BUFFER_SIZE];
+       sc_apdu_t apdu;
+-      int i, l, r;
++      u8 i, l, r;
+       LOG_FUNC_CALLED(ctx);
+@@ -2478,7 +2475,7 @@ gnuk_delete_key(sc_card_t *card, u8 key_
+ {
+       sc_context_t *ctx = card->ctx;
+       int r = SC_SUCCESS;
+-      u8 *data = NULL;
++      char *data = NULL;
+       LOG_FUNC_CALLED(ctx);
+@@ -2506,7 +2503,7 @@ gnuk_delete_key(sc_card_t *card, u8 key_
+       else if (key_id == 3)
+               data = "\x4D\x02\xA4";
+-      r = pgp_put_data(card, 0x4D, data, strlen(data) + 1);
++      r = pgp_put_data(card, 0x4D, (const u8 *)data, strlen((const char *)data) + 1);
+       LOG_FUNC_RETURN(ctx, r);
+ }
+@@ -2519,7 +2516,6 @@ pgp_delete_file(sc_card_t *card, const s
+       struct pgp_priv_data *priv = DRVDATA(card);
+       pgp_blob_t *blob;
+       sc_file_t *file;
+-      u8 key_id;
+       int r;
+       LOG_FUNC_CALLED(card->ctx);
+Index: opensc-20150513/src/tools/openpgp-tool.c
+===================================================================
+--- opensc-20150513.orig/src/tools/openpgp-tool.c
++++ opensc-20150513/src/tools/openpgp-tool.c
+@@ -473,7 +473,6 @@ int do_verify(sc_card_t *card, char *typ
+  **/
+ int delete_key_openpgp(sc_card_t *card, u8 key_id)
+ {
+-      sc_context_t *ctx = card->ctx;
+       char *del_fingerprint = "00:DA:00:C6:14:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00";
+       char *del_creationtime = "00:DA:00:CD:04:00:00:00:00";
+       /* We need to replace the 4th byte later */
+@@ -520,7 +519,6 @@ int delete_key_openpgp(sc_card_t *card,
+ int do_delete_key(sc_card_t *card, u8 key_id)
+ {
+-      sc_context_t *ctx = card->ctx;
+       sc_path_t path;
+       int r = SC_SUCCESS;
diff --git a/utils/opensc/patches/0028-openpgp-tool-Fix-wrong-operator.patch b/utils/opensc/patches/0028-openpgp-tool-Fix-wrong-operator.patch
new file mode 100644 (file)
index 0000000..e423e17
--- /dev/null
@@ -0,0 +1,28 @@
+From c71a453ff1e19721a9245b8a2d637eabd9f12e54 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Nguy=E1=BB=85n=20H=E1=BB=93ng=20Qu=C3=A2n?=
+ <ng.hong.quan@gmail.com>
+Date: Thu, 11 Dec 2014 12:51:15 +0800
+Subject: [PATCH 2/2] openpgp-tool: Fix wrong operator
+
+Used "!=" instead of "|="
+---
+ src/tools/openpgp-tool.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+Index: opensc-20150513/src/tools/openpgp-tool.c
+===================================================================
+--- opensc-20150513.orig/src/tools/openpgp-tool.c
++++ opensc-20150513/src/tools/openpgp-tool.c
+@@ -639,10 +639,10 @@ int main(int argc, char **argv)
+       }
+       if (opt_delkey)
+-              exit_status != do_delete_key(card, key_id);
++              exit_status |= do_delete_key(card, key_id);
+       if (opt_erase)
+-              exit_status != do_erase(card);
++              exit_status |= do_erase(card);
+ out:
+       sc_unlock(card);