#! /usr/bin/python """ upgrade_by_passwd.py - a tool to install another firmware for Gnuk Token which is just shipped from factory Copyright (C) 2012, 2013 Free Software Initiative of Japan Author: NIIBE Yutaka 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 . """ from gnuk_token import * import sys, binascii, time, os import rsa DEFAULT_PW3 = "12345678" BY_ADMIN = 3 KEYNO_FOR_AUTH=2 def main(keyno, passwd, data_regnual, data_upgrade): l = len(data_regnual) if (l & 0x03) != 0: data_regnual = data_regnual.ljust(l + 4 - (l & 0x03), chr(0)) crc32code = crc32(data_regnual) print "CRC32: %04x\n" % crc32code data_regnual += pack(' 3: option = sys.argv[1] sys.argv.pop(1) if option == '-p': from getpass import getpass passwd = getpass("Admin password: ") elif option == '-k': keyno = int(sys.argv[1]) sys.argv.pop(1) filename_regnual = sys.argv[1] filename_upgrade = sys.argv[2] f = open(filename_regnual) data_regnual = f.read() f.close() print "%s: %d" % (filename_regnual, len(data_regnual)) f = open(filename_upgrade) data_upgrade = f.read() f.close() print "%s: %d" % (filename_upgrade, len(data_upgrade)) # First 4096-byte in data_upgrade is SYS, so, skip it. main(keyno, passwd, data_regnual, data_upgrade[4096:])