Fix for key decryption failure

This commit is contained in:
Aldo Bleeker 2022-02-20 14:38:31 +01:00
parent f4634b5eab
commit f6b14efc5a
1 changed files with 12 additions and 6 deletions

View File

@ -427,7 +427,7 @@ def _load_crypto_pycrypto():
return total
def decrypt(self, data):
return _PKCS1_v1_5.new(self._rsa).decrypt(data, 172)
return _PKCS1_v1_5.new(self._rsa).decrypt(data, b'')
return (ARC4, RSA, AES)
@ -1901,6 +1901,12 @@ class PDFDocument(object):
return
def verify_book_key(self, bookkey):
if len(bookkey) < 16:
return False
if len(bookkey) == 16:
return True
if bookkey[-17] != '\x00' and bookkey[-17] != 0:
# Byte not null, invalid result
return False
@ -1985,12 +1991,12 @@ class PDFDocument(object):
bookkey = codecs.decode(bookkey.encode('utf-8'),'base64')
bookkey = rsa.decrypt(bookkey)
if not self.verify_book_key(bookkey):
raise ADEPTError('error decrypting book session key')
if len(bookkey) > 16:
if (self.verify_book_key(bookkey)):
bookkey = bookkey[-16:]
length = 16
else:
raise ADEPTError('error decrypting book session key')
bookkey = bookkey[-16:]
length = 16
ebx_V = int_value(param.get('V', 4))
ebx_type = int_value(param.get('EBX_ENCRYPTIONTYPE', 6))