Fix for decrypting key

This commit is contained in:
Aldo Bleeker 2022-02-13 14:51:15 +01:00
parent f4634b5eab
commit a739f7f38a
1 changed files with 14 additions and 8 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,8 +1901,7 @@ class PDFDocument(object):
return
def verify_book_key(self, bookkey):
if bookkey[-17] != '\x00' and bookkey[-17] != 0:
# Byte not null, invalid result
if len(bookkey) < 16:
return False
if ((bookkey[0] != '\x02' and bookkey[0] != 2) and
@ -1911,6 +1910,13 @@ class PDFDocument(object):
# Key not starting with "00 02" or "02" -> error
return False
if len(bookkey) == 16:
return True
if bookkey[-17] != '\x00' and bookkey[-17] != 0:
# Byte not null, invalid result
return False
keylen = len(bookkey) - 17
for i in range(1, keylen):
if bookkey[i] == 0 or bookkey[i] == '\x00':
@ -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))