Merge pull request #1502 from ableeker/python3

Fix for broken book keys
This commit is contained in:
Apprentice Harper 2021-02-14 08:55:56 +00:00 committed by GitHub
commit 495dda3809
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 9 deletions

View File

@ -415,12 +415,12 @@ def decryptBook(userkey, inpath, outpath):
return 1 return 1
bookkey = rsa.decrypt(codecs.decode(bookkey.encode('ascii'), 'base64')) bookkey = rsa.decrypt(codecs.decode(bookkey.encode('ascii'), 'base64'))
# Padded as per RSAES-PKCS1-v1_5 # Padded as per RSAES-PKCS1-v1_5
if len(bookkey) != 16: if len(bookkey) > 16:
if bookkey[-17] != '\x00' and bookkey[-17] != 0: if bookkey[-17] == '\x00' or bookkey[-17] == 0:
bookkey = bookkey[-16:]
else:
print("Could not decrypt {0:s}. Wrong key".format(os.path.basename(inpath))) print("Could not decrypt {0:s}. Wrong key".format(os.path.basename(inpath)))
return 2 return 2
else:
bookkey = bookkey[-16:]
encryption = inf.read('META-INF/encryption.xml') encryption = inf.read('META-INF/encryption.xml')
decryptor = Decryptor(bookkey, encryption) decryptor = Decryptor(bookkey, encryption)
kwds = dict(compression=ZIP_DEFLATED, allowZip64=False) kwds = dict(compression=ZIP_DEFLATED, allowZip64=False)

View File

@ -1599,11 +1599,10 @@ class PDFDocument(object):
bookkey = rsa.decrypt(bookkey) bookkey = rsa.decrypt(bookkey)
#if bookkey[0] != 2: #if bookkey[0] != 2:
# raise ADEPTError('error decrypting book session key') # raise ADEPTError('error decrypting book session key')
try: if len(bookkey) > 16:
index = bookkey.index(b'\0') + 1 if bookkey[-17] == '\x00' or bookkey[-17] == 0:
bookkey = bookkey[index:] bookkey = bookkey[-16:]
except ValueError: length = 16
pass
ebx_V = int_value(param.get('V', 4)) ebx_V = int_value(param.get('V', 4))
ebx_type = int_value(param.get('EBX_ENCRYPTIONTYPE', 6)) ebx_type = int_value(param.get('EBX_ENCRYPTIONTYPE', 6))
# added because of improper booktype / decryption book session key errors # added because of improper booktype / decryption book session key errors