remove PC/SC tools
authorNIIBE Yutaka <gniibe@fsij.org>
Mon, 27 Jul 2015 09:55:10 +0000 (18:55 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Mon, 27 Jul 2015 09:55:10 +0000 (18:55 +0900)
ChangeLog
README
doc/gnuk-token-initial-configuration.rst
src/gnuk.h
src/openpgp-do.c
tool/gnuk_put_binary.py [deleted file]
tool/gnuk_remove_keys.py [deleted file]

index c6353f3..8cbcd54 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2015-07-24  Niibe Yutaka  <gniibe@fsij.org>
+
+       * tool/gnuk_put_binary.py: Remove.
+       * tool/gnuk_remove_keys.py: Remove.
+
 2015-07-23  Niibe Yutaka  <gniibe@fsij.org>
 
        * src/configure (nl): New.  Follow the change of NeuG.
 2015-07-23  Niibe Yutaka  <gniibe@fsij.org>
 
        * src/configure (nl): New.  Follow the change of NeuG.
diff --git a/README b/README
index 706570d..08891bb 100644 (file)
--- a/README
+++ b/README
@@ -208,6 +208,19 @@ Note that you need pinpad support for GnuPG to use PIN-pad enabled
 Gnuk.  The pinpad support for GnuPG is only available in version 2.
 
 
 Gnuk.  The pinpad support for GnuPG is only available in version 2.
 
 
+Build system and Host system
+============================
+
+Makefile is written for GNU make.  You need Bash 4.x for configure.
+
+If your bash is not installed as /bin/bash, you need to run configure
+script prepending 'bash' before './configure'.
+
+Some tools are written in Python.  If your Python is not installed as
+/usr/bin/python, please prepend 'python' for your command invocation.
+Python 2.7 and PyUSB 0.4.3 is assumed.
+
+
 Souce code
 ==========
 
 Souce code
 ==========
 
@@ -367,7 +380,8 @@ Here, you need to specify USB vendor ID and product ID.  For FSIJ's,
 it's: --vidpid=234b:0000 .  Please read section 'USB vendor ID and
 product ID' above.
 
 it's: --vidpid=234b:0000 .  Please read section 'USB vendor ID and
 product ID' above.
 
-Type:
+
+Then, type:
 
   $ make
 
 
   $ make
 
@@ -459,7 +473,7 @@ In case of PyUSB tool, you need to stop pcscd.
 
 If you use fixed serial number in the file 'GNUK_SERIAL_NUMBER', you can do:
 
 
 If you use fixed serial number in the file 'GNUK_SERIAL_NUMBER', you can do:
 
-  $ EMAIL=<YOUR-EMAIL-ADDRESS> ../tool/gnuk_put_binary.py -s ../GNUK_SERIAL_NUMBER
+  $ EMAIL=<YOUR-EMAIL-ADDRESS> ../tool/gnuk_put_binary_usb.py -s ../GNUK_SERIAL_NUMBER
   Writing serial number
   ...
 
   Writing serial number
   ...
 
@@ -467,7 +481,7 @@ If you use fixed serial number in the file 'GNUK_SERIAL_NUMBER', you can do:
 
 If you have card holder certificate binary file, you can do:
 
 
 If you have card holder certificate binary file, you can do:
 
-  $ ../tool/gnuk_put_binary.py ../../<YOUR-CERTIFICATE>.bin
+  $ ../tool/gnuk_put_binary_usb.py ../../<YOUR-CERTIFICATE>.bin
   ../../<YOUR-CERTIFICATE>.bin: <LENGTH-OF-YOUR-CERTIFICATE>
   Updating card holder certificate
   ...
   ../../<YOUR-CERTIFICATE>.bin: <LENGTH-OF-YOUR-CERTIFICATE>
   Updating card holder certificate
   ...
index 430570b..54fe47f 100644 (file)
@@ -37,9 +37,3 @@ The tool ``../tool/gnuk_put_binary_libusb.py`` examines  environment variable of
   Configuration:  1
   Interface:  0
   d2 76 00 01 24 01 02 00 f5 17 00 00 00 01 00 00
   Configuration:  1
   Interface:  0
   d2 76 00 01 24 01 02 00 f5 17 00 00 00 01 00 00
-
-
-The example above is the case of libusb version.
-
-Use the tool ``../tool/gnuk_put_binary.py`` instead , for PC/SC Lite.
-You need PyScard for this.
index 21159ab..7ea4fb9 100644 (file)
@@ -163,7 +163,6 @@ int flash_write_binary (uint8_t file_id, const uint8_t *data,
 
 /* Linker set these two symbols */
 extern uint8_t ch_certificate_start;
 
 /* Linker set these two symbols */
 extern uint8_t ch_certificate_start;
-extern uint8_t random_bits_start;
 
 #define FIRMWARE_UPDATE_KEY_CONTENT_LEN 256    /* RSA-2048 (p and q) */
 
 
 #define FIRMWARE_UPDATE_KEY_CONTENT_LEN 256    /* RSA-2048 (p and q) */
 
index a60f5cd..c29df0a 100644 (file)
@@ -489,11 +489,13 @@ static int
 do_hist_bytes (uint16_t tag, int with_tag)
 {
   /*
 do_hist_bytes (uint16_t tag, int with_tag)
 {
   /*
-   * Currently, we support no life cycle management.
-   * In case of Gnuk, user could flash the MCU, instead.
-   * Thus, just return the template as is.
+   * Currently, we support no life cycle management.  In case of Gnuk,
+   * user could flash the MCU with SWD/JTAG, instead.  It is also
+   * possible for user to do firmware upgrade through USB.
    *
    *
-   * In future (when Gnuk will be onn the real smartcard),
+   * Thus, here, it just returns the template as is.
+   *
+   * In future (when Gnuk will be on the real smartcard),
    * we can support life cycle management by implementing
    * TERMINATE DF / ACTIVATE FILE and fix code around here.
    */
    * we can support life cycle management by implementing
    * TERMINATE DF / ACTIVATE FILE and fix code around here.
    */
diff --git a/tool/gnuk_put_binary.py b/tool/gnuk_put_binary.py
deleted file mode 100755 (executable)
index a97a2d9..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-#! /usr/bin/python
-
-"""
-gnuk_put_binary.py - a tool to put binary to Gnuk Token
-This tool is for importing certificate, writing serial number, etc.
-
-Copyright (C) 2011, 2012 Free Software Initiative of Japan
-Author: NIIBE Yutaka <gniibe@fsij.org>
-
-This file is a part of Gnuk, a GnuPG USB Token implementation.
-
-Gnuk is free software: you can redistribute it and/or modify it
-under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-Gnuk is distributed in the hope that it will be useful, but WITHOUT
-ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-"""
-
-import sys, os, binascii, string
-
-# INPUT: binary file
-
-# Assume only single CCID device is attached to computer and it's Gnuk Token
-
-from smartcard.CardType import AnyCardType
-from smartcard.CardRequest import CardRequest
-from smartcard.util import toHexString
-
-def s2l(s):
-    return [ ord(c) for c in s ]
-
-class GnukToken(object):
-    def __init__(self):
-        cardtype = AnyCardType()
-        cardrequest = CardRequest(timeout=1, cardType=cardtype)
-        cardservice = cardrequest.waitforcard()
-        self.connection = cardservice.connection
-
-    def cmd_get_response(self, expected_len):
-        result = []
-        while True:
-            apdu = [0x00, 0xc0, 0x00, 0x00, expected_len]
-            response, sw1, sw2 = self.connection.transmit(apdu)
-            result += response
-            if sw1 == 0x90 and sw2 == 0x00:
-                return result
-            elif sw1 != 0x61: 
-                raise ValueError, ("%02x%02x" % (sw1, sw2))
-            else:
-                expected_len = sw2
-
-    def cmd_verify(self, who, passwd):
-        apdu = [0x00, 0x20, 0x00, 0x80+who, len(passwd)] + s2l(passwd)
-        response, sw1, sw2 = self.connection.transmit(apdu)
-        if not (sw1 == 0x90 and sw2 == 0x00):
-            raise ValueError, ("%02x%02x" % (sw1, sw2))
-
-    def cmd_read_binary(self, fileid):
-        apdu = [0x00, 0xb0, 0x80+fileid, 0x00] 
-        response, sw1, sw2 = self.connection.transmit(apdu)
-        if sw1 == 0x61:
-            response = self.cmd_get_response(sw2)
-        elif not (sw1 == 0x90 and sw2 == 0x00):
-            raise ValueError, ("%02x%02x" % (sw1, sw2))
-        return response
-
-    def cmd_write_binary(self, fileid, data, is_update):
-        count = 0
-        data_len = len(data)
-        if is_update:
-            ins = 0xd6
-        else:
-            ins = 0xd0
-        while count*256 < data_len:
-            if count == 0:
-                d = data[:256]
-                if len(d) <= 255:
-                    apdu = [0x00, ins, 0x80+fileid, 0x00, len(d)] + s2l(d)
-                else:
-                    apdu0 = [0x10, ins, 0x80+fileid, 0x00, 255] + s2l(d[:255])
-                    response, sw1, sw2 = self.connection.transmit(apdu0)
-                    apdu = [0x00, ins, 0x80+fileid, 0x00, 1 ] + s2l(d[255:])
-            else:
-                d = data[256*count:256*(count+1)]
-                if len(d) <= 255:
-                    apdu = [0x00, ins, count, 0x00, len(d)] + s2l(d)
-                else:
-                    apdu0 = [0x10, ins, count, 0x00, 255] + s2l(d[:255])
-                    response, sw1, sw2 = self.connection.transmit(apdu0)
-                    apdu = [0x00, ins, count, 0x00, 1] + s2l(d[255:])
-            response, sw1, sw2 = self.connection.transmit(apdu)
-            if not (sw1 == 0x90 and sw2 == 0x00):
-                if is_update:
-                    raise ValueError, ("update failure: %02x%02x" % (sw1, sw2))
-                else:
-                    raise ValueError, ("write failure: %02x%02x" % (sw1, sw2))
-            count += 1
-
-    def cmd_select_openpgp(self):
-        apdu = [0x00, 0xa4, 0x04, 0x0c, 6, 0xd2, 0x76, 0x00, 0x01, 0x24, 0x01]
-        response, sw1, sw2 = self.connection.transmit(apdu)
-        if sw1 == 0x61:
-            response = self.cmd_get_response(sw2)
-        elif not (sw1 == 0x90 and sw2 == 0x00):
-            raise ValueError, ("%02x%02x" % (sw1, sw2))
-
-    def cmd_get_data(self, tagh, tagl):
-        apdu = [0x00, 0xca, tagh, tagl]
-        response, sw1, sw2 = self.connection.transmit(apdu)
-        if sw1 == 0x61:
-            response = self.cmd_get_response(sw2)
-        elif not (sw1 == 0x90 and sw2 == 0x00):
-            raise ValueError, ("%02x%02x" % (sw1, sw2))
-        return response
-
-def compare(data_original, data_in_device):
-    i = 0 
-    for d in data_original:
-        if ord(d) != data_in_device[i]:
-            raise ValueError, "verify failed at %08x" % i
-        i += 1
-
-DEFAULT_PW3 = "12345678"
-BY_ADMIN = 3
-
-def main(fileid, is_update, data, passwd):
-    gnuk = GnukToken()
-
-    gnuk.connection.connect()
-    print "Token:", gnuk.connection.getReader()
-    print "ATR:", toHexString( gnuk.connection.getATR() )
-
-    gnuk.cmd_verify(BY_ADMIN, passwd)
-    gnuk.cmd_write_binary(fileid, data, is_update)
-    gnuk.cmd_select_openpgp()
-    if fileid == 0:
-        data_in_device = gnuk.cmd_get_data(0x00, 0x4f)
-        for d in data_in_device:
-            print "%02x" % d,
-        print
-        compare(data, data_in_device[8:])
-    elif fileid >= 1 and fileid <= 4:
-        data_in_device = gnuk.cmd_read_binary(fileid)
-        compare(data, data_in_device)
-    elif fileid == 5:
-        data_in_device = gnuk.cmd_get_data(0x7f, 0x21)
-        compare(data, data_in_device)
-
-    gnuk.connection.disconnect()
-    return 0
-
-
-if __name__ == '__main__':
-    passwd = DEFAULT_PW3
-    if sys.argv[1] == '-p':
-        from getpass import getpass
-        passwd = getpass("Admin password: ")
-        sys.argv.pop(1)
-    if sys.argv[1] == '-u':
-        is_update = True
-        sys.argv.pop(1)
-    else:
-        is_update = False
-    if sys.argv[1] == '-s':
-        fileid = 0              # serial number
-        filename = sys.argv[2]
-        f = open(filename)
-        email = os.environ['EMAIL']
-        serial_data_hex = None
-        for line in f.readlines():
-            field = string.split(line)
-            if field[0] == email:
-                serial_data_hex = field[1].replace(':','')
-        f.close()
-        if not serial_data_hex:
-            print "No serial number"
-            exit(1)
-        print "Writing serial number"
-        data = binascii.unhexlify(serial_data_hex)
-    elif sys.argv[1] == '-k':   # firmware update key
-        keyno = sys.argv[2]
-        fileid = 1 + int(keyno)
-        filename = sys.argv[3]
-        f = open(filename)
-        data = f.read()
-        f.close()
-    else:
-        fileid = 5              # Card holder certificate
-        filename = sys.argv[1]
-        f = open(filename)
-        data = f.read()
-        f.close()
-        print "%s: %d" % (filename, len(data))
-        print "Updating card holder certificate"
-    main(fileid, is_update, data, passwd)
diff --git a/tool/gnuk_remove_keys.py b/tool/gnuk_remove_keys.py
deleted file mode 100755 (executable)
index b8e0690..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-#! /usr/bin/python
-
-"""
-gnuk_remove_keys.py - a tool to remove keys in Gnuk Token
-
-Copyright (C) 2012 Free Software Initiative of Japan
-Author: NIIBE Yutaka <gniibe@fsij.org>
-
-This file is a part of Gnuk, a GnuPG USB Token implementation.
-
-Gnuk is free software: you can redistribute it and/or modify it
-under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-Gnuk is distributed in the hope that it will be useful, but WITHOUT
-ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-"""
-
-import sys, os, string
-
-# Assume only single CCID device is attached to computer and it's Gnuk Token
-
-from smartcard.CardType import AnyCardType
-from smartcard.CardRequest import CardRequest
-from smartcard.util import toHexString
-
-def s2l(s):
-    return [ ord(c) for c in s ]
-
-class GnukToken(object):
-    def __init__(self):
-        cardtype = AnyCardType()
-        cardrequest = CardRequest(timeout=1, cardType=cardtype)
-        cardservice = cardrequest.waitforcard()
-        self.connection = cardservice.connection
-
-    def cmd_get_response(self, expected_len):
-        apdu = [0x00, 0xc0, 0x00, 0x00, expected_len]
-        response, sw1, sw2 = self.connection.transmit(apdu)
-        if not (sw1 == 0x90 and sw2 == 0x00):
-            raise ValueError, ("%02x%02x" % (sw1, sw2))
-        return response
-
-    def cmd_verify(self, who, passwd):
-        apdu = [0x00, 0x20, 0x00, 0x80+who, len(passwd)] + s2l(passwd)
-        response, sw1, sw2 = self.connection.transmit(apdu)
-        if not (sw1 == 0x90 and sw2 == 0x00):
-            raise ValueError, ("%02x%02x" % (sw1, sw2))
-
-    def cmd_select_openpgp(self):
-        apdu = [0x00, 0xa4, 0x04, 0x0c, 6, 0xd2, 0x76, 0x00, 0x01, 0x24, 0x01]
-        response, sw1, sw2 = self.connection.transmit(apdu)
-        if sw1 == 0x61:
-            response = self.cmd_get_response(sw2)
-        elif not (sw1 == 0x90 and sw2 == 0x00):
-            raise ValueError, ("%02x%02x" % (sw1, sw2))
-
-    def cmd_put_data_remove(self, tagh, tagl):
-        apdu = [0x00, 0xda, tagh, tagl, 0]
-        response, sw1, sw2 = self.connection.transmit(apdu)
-        return response
-
-    def cmd_put_data_key_import_remove(self, keyno):
-        if keyno == 1:
-            keyspec = 0xb6      # SIG
-        elif keyno == 2:
-            keyspec = 0xb8      # DEC
-        else:
-            keyspec = 0xa4      # AUT
-        apdu = [0x00, 0xdb, 0x3f, 0xff, 4, 0x4d, 0x02, keyspec, 0x00]
-        response, sw1, sw2 = self.connection.transmit(apdu)
-        return response
-
-DEFAULT_PW3 = "12345678"
-BY_ADMIN = 3
-
-def main(passwd):
-    gnuk = GnukToken()
-
-    gnuk.connection.connect()
-    print "Token:", gnuk.connection.getReader()
-    print "ATR:", toHexString( gnuk.connection.getATR() )
-
-    gnuk.cmd_verify(BY_ADMIN, passwd)
-    gnuk.cmd_select_openpgp()
-    gnuk.cmd_put_data_remove(0x00, 0xc7) # FP_SIG
-    gnuk.cmd_put_data_remove(0x00, 0xce) # KGTIME_SIG
-    gnuk.cmd_put_data_key_import_remove(1)
-    gnuk.cmd_put_data_remove(0x00, 0xc8) # FP_DEC
-    gnuk.cmd_put_data_remove(0x00, 0xcf) # KGTIME_DEC
-    gnuk.cmd_put_data_key_import_remove(2)
-    gnuk.cmd_put_data_remove(0x00, 0xc9) # FP_AUT
-    gnuk.cmd_put_data_remove(0x00, 0xd0) # KGTIME_AUT
-    gnuk.cmd_put_data_key_import_remove(3)
-
-    gnuk.connection.disconnect()
-    return 0
-
-
-if __name__ == '__main__':
-    passwd = DEFAULT_PW3
-    if len(sys.argv) > 1 and sys.argv[1] == '-p':
-        from getpass import getpass
-        passwd = getpass("Admin password: ")
-        sys.argv.pop(1)
-    main(passwd)