]> xmof Git - DeDRM.git/commitdiff
Fix kgenpids string vs bytes usage for python3 for calibre 5.1.
authorJeremy Whiting <jpwhiting@kde.org>
Fri, 2 Oct 2020 06:19:49 +0000 (00:19 -0600)
committerJeremy Whiting <jpwhiting@kde.org>
Sun, 4 Oct 2020 04:36:35 +0000 (22:36 -0600)
In order to properly get pids etc. we need to pass bytes to MD5 and SHA1
instead of unicode strings. Also ord() is no longer needed since
data is bytes value gets int and we need chr() to get characters from
the mapping bytearrays.

DeDRM_plugin/kgenpids.py

index 3e80598a9a28213d20997f35311acef46ff434e1..b1006411befb41206b2a2d326f8ee969907ea107 100644 (file)
@@ -52,11 +52,11 @@ def SHA1(message):
 def encode(data, map):
     result = ''
     for char in data:
-        value = ord(char)
+        value = char
         Q = (value ^ 0x80) // len(map)
         R = value % len(map)
-        result += map[Q]
-        result += map[R]
+        result += chr(map[Q])
+        result += chr(map[R])
     return result
 
 # Hash the bytes in data and then encode the digest with the characters in map
@@ -238,18 +238,18 @@ def getK4Pids(rec209, token, kindleDatabase):
                 # Get the UserName we added
                 UserName = bytearray.fromhex((kindleDatabase[1])['UserName']).decode()
                 # encode it
-                encodedUsername = encodeHash(UserName,charMap1)
+                encodedUsername = encodeHash(UserName.encode(),charMap1)
                 #print "encodedUsername",encodedUsername.encode('hex')
         except KeyError:
             print("Keys not found in the database {0}.".format(kindleDatabase[0]))
             return pids
 
         # Get the ID string used
-        encodedIDString = encodeHash(IDString,charMap1)
+        encodedIDString = encodeHash(IDString.encode(),charMap1)
         #print "encodedIDString",encodedIDString.encode('hex')
 
         # concat, hash and encode to calculate the DSN
-        DSN = encode(SHA1(MazamaRandomNumber+encodedIDString+encodedUsername),charMap1)
+        DSN = encode(SHA1((MazamaRandomNumber+encodedIDString+encodedUsername).encode()),charMap1)
         #print "DSN",DSN.encode('hex')
         pass