summaryrefslogtreecommitdiffstats
path: root/DeDRM_plugin
diff options
context:
space:
mode:
Diffstat (limited to 'DeDRM_plugin')
-rw-r--r--DeDRM_plugin/kgenpids.py33
-rw-r--r--DeDRM_plugin/kindlekey.py12
2 files changed, 32 insertions, 13 deletions
diff --git a/DeDRM_plugin/kgenpids.py b/DeDRM_plugin/kgenpids.py
index 31cb6a5..d11c3da 100644
--- a/DeDRM_plugin/kgenpids.py
+++ b/DeDRM_plugin/kgenpids.py
@@ -53,11 +53,17 @@ def SHA1(message):
def encode(data, map):
result = b''
for char in data:
- value = char
+ if sys.version_info[0] == 2:
+ value = ord(char)
+ else:
+ value = char
+
Q = (value ^ 0x80) // len(map)
R = value % len(map)
- result += bytes([map[Q]])
- result += bytes([map[R]])
+
+ result += bytes(bytearray([map[Q]]))
+ result += bytes(bytearray([map[R]]))
+
return result
# Hash the bytes in data and then encode the digest with the characters in map
@@ -84,8 +90,11 @@ def decode(data,map):
def getTwoBitsFromBitField(bitField,offset):
byteNumber = offset // 4
bitPosition = 6 - 2*(offset % 4)
- return bitField[byteNumber] >> bitPosition & 3
-
+ if sys.version_info[0] == 2:
+ return ord(bitField[byteNumber]) >> bitPosition & 3
+ else:
+ return bitField[byteNumber] >> bitPosition & 3
+
# Returns the six bits at offset from a bit field
def getSixBitsFromBitField(bitField,offset):
offset *= 3
@@ -97,7 +106,8 @@ def encodePID(hash):
global charMap3
PID = b''
for position in range (0,8):
- PID += bytes([charMap3[getSixBitsFromBitField(hash,position)]])
+ PID += bytes(bytearray([charMap3[getSixBitsFromBitField(hash,position)]]))
+
return PID
# Encryption table used to generate the device PID
@@ -134,7 +144,7 @@ def generateDevicePID(table,dsn,nbRoll):
index = (index+1) %8
for counter in range (0,8):
index = ((((pid[counter] >>5) & 3) ^ pid[counter]) & 0x1f) + (pid[counter] >> 7)
- pidAscii += bytes([charMap4[index]])
+ pidAscii += bytes(bytearray([charMap4[index]]))
return pidAscii
def crc32(s):
@@ -150,7 +160,7 @@ def checksumPid(s):
for i in (0,1):
b = crc & 0xff
pos = (b // l) ^ (b % l)
- res += bytes([charMap4[pos%l]])
+ res += bytes(bytearray([charMap4[pos%l]]))
crc >>= 8
return res
@@ -161,14 +171,17 @@ def pidFromSerial(s, l):
crc = crc32(s)
arr1 = [0]*l
for i in range(len(s)):
- arr1[i%l] ^= s[i]
+ if sys.version_info[0] == 2:
+ arr1[i%l] ^= ord(s[i])
+ else:
+ arr1[i%l] ^= s[i]
crc_bytes = [crc >> 24 & 0xff, crc >> 16 & 0xff, crc >> 8 & 0xff, crc & 0xff]
for i in range(l):
arr1[i] ^= crc_bytes[i&3]
pid = b""
for i in range(l):
b = arr1[i] & 0xff
- pid += bytes([charMap4[(b >> 7) + ((b >> 5 & 3) ^ (b & 0x1f))]])
+ pid += bytes(bytearray([charMap4[(b >> 7) + ((b >> 5 & 3) ^ (b & 0x1f))]]))
return pid
diff --git a/DeDRM_plugin/kindlekey.py b/DeDRM_plugin/kindlekey.py
index 14e4ed1..e8a0e65 100644
--- a/DeDRM_plugin/kindlekey.py
+++ b/DeDRM_plugin/kindlekey.py
@@ -115,11 +115,17 @@ def primes(n):
def encode(data, map):
result = b''
for char in data:
- value = char
+ if sys.version_info[0] == 2:
+ value = ord(char)
+ else:
+ value = char
+
Q = (value ^ 0x80) // len(map)
R = value % len(map)
- result += bytes([map[Q]])
- result += bytes([map[R]])
+
+ result += bytes(bytearray([map[Q]]))
+ result += bytes(bytearray([map[R]]))
+
return result
# Hash the bytes in data and then encode the digest with the characters in map