diff options
author | apprenticeharper <[email protected]> | 2015-09-03 07:49:09 +0100 |
---|---|---|
committer | apprenticeharper <[email protected]> | 2015-09-03 07:49:09 +0100 |
commit | d54dc38c2d3083eb802557aa363498cf27f25f39 (patch) | |
tree | 872735b41dbbad61965ed5ae7eb47cfc22faf717 /Other_Tools | |
parent | 3c322f3695d126476dcfcc4ce4f848b382d40e06 (diff) |
Fix for Kobo Desktop 3.17
Diffstat (limited to 'Other_Tools')
-rw-r--r-- | Other_Tools/Kobo/obok.py | 45 |
1 files changed, 35 insertions, 10 deletions
diff --git a/Other_Tools/Kobo/obok.py b/Other_Tools/Kobo/obok.py index 42620d2..0545152 100644 --- a/Other_Tools/Kobo/obok.py +++ b/Other_Tools/Kobo/obok.py @@ -1,6 +1,12 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +# Version 3.1.4 September 2015 +# Updated for version 3.17 of the Windows Desktop app. +# +# Version 3.1.3 August 2015 +# Add translations for Portuguese and Arabic +# # Version 3.1.2 January 2015 # Add coding, version number and version announcement # @@ -109,7 +115,7 @@ # """Manage all Kobo books, either encrypted or DRM-free.""" -__version__ = '3.1.1' +__version__ = '3.1.3' import sys import os @@ -217,7 +223,7 @@ class KoboLibrary(object): of books, their titles, and the user's encryption key(s).""" def __init__ (self): - print u"Obok v{0}\nCopyright © 2012-2014 Physisticated et al.".format(__version__) + print u"Obok v{0}\nCopyright © 2012-2015 Physisticated et al.".format(__version__) if sys.platform.startswith('win'): if sys.getwindowsversion().major > 5: self.kobodir = os.environ['LOCALAPPDATA'] @@ -246,9 +252,8 @@ class KoboLibrary(object): """ if len(self._userkeys) != 0: return self._userkeys - userid = self.__getuserid() for macaddr in self.__getmacaddrs(): - self._userkeys.append(self.__getuserkey(macaddr, userid)) + self._userkeys.extend(self.__getuserkeys(macaddr)) return self._userkeys @property @@ -294,13 +299,33 @@ class KoboLibrary(object): macaddrs.append(m[0].upper()) return macaddrs - def __getuserid (self): - return self.__cursor.execute('SELECT UserID FROM user WHERE HasMadePurchase = "true"').fetchone()[0] - - def __getuserkey (self, macaddr, userid): + def __getuserids (self): + userids = [] + cursor = self.__cursor.execute('SELECT UserID FROM user WHERE HasMadePurchase = "true"') + row = cursor.fetchone() + while row is not None: + try: + userid = row[0] + userids.append(userid) + except: + pass + row = cursor.fetchone() + return userids + + def __getuserkeys (self, macaddr): + userids = self.__getuserids() + userkeys = [] + # This version is used for versions before 3.17.0. deviceid = hashlib.sha256('NoCanLook' + macaddr).hexdigest() - userkey = hashlib.sha256(deviceid + userid).hexdigest() - return binascii.a2b_hex(userkey[32:]) + for userid in userids: + userkey = hashlib.sha256(deviceid + userid).hexdigest() + userkeys.append(binascii.a2b_hex(userkey[32:])) + # This version is used for 3.17.0 and later. + deviceid = hashlib.sha256('XzUhGYdFp' + macaddr).hexdigest() + for userid in userids: + userkey = hashlib.sha256(deviceid + userid).hexdigest() + userkeys.append(binascii.a2b_hex(userkey[32:])) + return userkeys class KoboBook(object): """A Kobo book. |