--- bin/bna.orig +++ bin/bna @@ -4,7 +4,7 @@ import sys from argparse import ArgumentParser from binascii import hexlify, unhexlify -from configparser import ConfigParser +from ConfigParser import ConfigParser sys.path.append(os.path.join(os.path.dirname(os.path.realpath(__file__)), os.path.pardir)) import bna @@ -100,7 +100,7 @@ sys.stderr.write("Error: %s\n" % (msg)) exit(1) - def print(self, msg): + def printm(self, msg): print(msg) def add_serial(self, serial, secret): @@ -122,7 +122,7 @@ self.config.remove_option("bna", "default_serial") self.writeConfig() - self.print("Successfully deleted serial %s" % (bna.prettify_serial(serial))) + self.printm("Successfully deleted serial %s" % (bna.prettify_serial(serial))) def restore_serial(self, serial, code): serial = bna.normalize_serial(serial) @@ -131,19 +131,19 @@ secret = bna.restore(serial, code) self.add_serial(serial, hexlify(secret).decode("ascii")) - self.print("Restored serial %s" % (bna.prettify_serial(serial))) + self.printm("Restored serial %s" % (bna.prettify_serial(serial))) def list_serials(self): default = self.get_default_serial() total = 0 for serial in self._serials(): if serial == default: - self.print("%s (default)" % (serial)) + self.printm("%s (default)" % (serial)) else: - self.print(serial) + self.printm(serial) total += 1 - self.print("%i items" % (total)) + self.printm("%i items" % (total)) def query_new_authenticator(self): try: @@ -156,11 +156,11 @@ self.add_serial(serial, secret) - self.print("Success. Your new serial is: %s" % (bna.prettify_serial(serial))) + self.printm("Success. Your new serial is: %s" % (bna.prettify_serial(serial))) def run_live(self): from time import sleep - self.print("Ctrl-C to exit") + self.printm("Ctrl-C to exit") while 1: token, time_remaining = bna.get_token(secret=self._secret) if self.args.remaining: @@ -273,12 +273,12 @@ # Print the restore code if the user asked for it if self.args.restorecode: code = bna.get_restore_code(serial, self._secret) - self.print(code) + self.printm(code) return 0 if self.args.otpauth_url: url = bna.get_otpauth_url(serial, self._secret) - self.print(url) + self.printm(url) return 0 # otherwise print the token @@ -287,9 +287,9 @@ else: token, time_remaining = bna.get_token(secret=self._secret) if self.args.remaining: - self.print("%08i (%02is remaining)" % (token, time_remaining)) + self.printm("%08i (%02is remaining)" % (token, time_remaining)) else: - self.print("%08i" % (token)) + self.printm("%08i" % (token)) return 0 --- bna.py.orig +++ bna.py @@ -12,7 +12,7 @@ from binascii import hexlify from hashlib import sha1 -from http.client import HTTPConnection +from httplib import HTTPConnection from struct import pack, unpack from time import time @@ -88,7 +88,7 @@ def decrypt(response, otp): ret = bytearray() for c, e in zip(response, otp): - ret.append(c ^ e) + ret.append(ord(c) ^ ord(e)) return ret @@ -124,7 +124,7 @@ def bytes_to_restore_code(digest): ret = [] for i in digest: - c = i & 0x1f + c = ord(i) & 0x1f if c < 10: c += 48 else: @@ -160,7 +160,7 @@ msg = pack(">Q", int(t / seconds)) r = hmac.new(secret, msg, sha1).digest() k = r[19] - idx = k & 0x0f + idx = ord(k) & 0x0f h = unpack(">L", r[idx:idx + 4])[0] & 0x7fffffff return h % (10 ** digits), -(t % seconds - seconds) .