Compare commits

..

1 Commits

Author SHA1 Message Date
Aleksa Sarai
134cd80713 Merge ad33aea18d into e82d2b5c9c 2023-08-02 18:43:50 +02:00
3 changed files with 13 additions and 33 deletions

View File

@@ -101,4 +101,3 @@ This is v10.0.9, a release candidate for v10.1.0. I don't expect there to be maj
- Fix a bug where decrypting a 40-bit RC4 pdf with R=2 didn't work.
- Fix a bug where decrypting a 256-bit AES pdf with V=5 didn't work.
- Fix bugs in kgenpids.py and kindlekey.py that caused it to fail on Python 2 (#380).

View File

@@ -53,17 +53,11 @@ def SHA1(message):
def encode(data, map):
result = b''
for char in data:
if sys.version_info[0] == 2:
value = ord(char)
else:
value = char
value = char
Q = (value ^ 0x80) // len(map)
R = value % len(map)
result += bytes(bytearray([map[Q]]))
result += bytes(bytearray([map[R]]))
result += bytes([map[Q]])
result += bytes([map[R]])
return result
# Hash the bytes in data and then encode the digest with the characters in map
@@ -90,11 +84,8 @@ def decode(data,map):
def getTwoBitsFromBitField(bitField,offset):
byteNumber = offset // 4
bitPosition = 6 - 2*(offset % 4)
if sys.version_info[0] == 2:
return ord(bitField[byteNumber]) >> bitPosition & 3
else:
return bitField[byteNumber] >> bitPosition & 3
return bitField[byteNumber] >> bitPosition & 3
# Returns the six bits at offset from a bit field
def getSixBitsFromBitField(bitField,offset):
offset *= 3
@@ -106,8 +97,7 @@ def encodePID(hash):
global charMap3
PID = b''
for position in range (0,8):
PID += bytes(bytearray([charMap3[getSixBitsFromBitField(hash,position)]]))
PID += bytes([charMap3[getSixBitsFromBitField(hash,position)]])
return PID
# Encryption table used to generate the device PID
@@ -144,7 +134,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(bytearray([charMap4[index]]))
pidAscii += bytes([charMap4[index]])
return pidAscii
def crc32(s):
@@ -160,7 +150,7 @@ def checksumPid(s):
for i in (0,1):
b = crc & 0xff
pos = (b // l) ^ (b % l)
res += bytes(bytearray([charMap4[pos%l]]))
res += bytes([charMap4[pos%l]])
crc >>= 8
return res
@@ -171,17 +161,14 @@ def pidFromSerial(s, l):
crc = crc32(s)
arr1 = [0]*l
for i in range(len(s)):
if sys.version_info[0] == 2:
arr1[i%l] ^= ord(s[i])
else:
arr1[i%l] ^= s[i]
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(bytearray([charMap4[(b >> 7) + ((b >> 5 & 3) ^ (b & 0x1f))]]))
pid += bytes([charMap4[(b >> 7) + ((b >> 5 & 3) ^ (b & 0x1f))]])
return pid

View File

@@ -115,17 +115,11 @@ def primes(n):
def encode(data, map):
result = b''
for char in data:
if sys.version_info[0] == 2:
value = ord(char)
else:
value = char
value = char
Q = (value ^ 0x80) // len(map)
R = value % len(map)
result += bytes(bytearray([map[Q]]))
result += bytes(bytearray([map[R]]))
result += bytes([map[Q]])
result += bytes([map[R]])
return result
# Hash the bytes in data and then encode the digest with the characters in map