Skip to content

Commit

Permalink
Updated to inept.pdf for PC
Browse files Browse the repository at this point in the history
Contributed changes for PC compatibility. Thanks, Aldo.

Update main version to 7.0.2
  • Loading branch information
apprenticeharper committed Jan 3, 2021
1 parent 6cee615 commit ed412be
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 8 deletions.
3 changes: 2 additions & 1 deletion DeDRM_plugin/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
# Copyright © 2008-2020 Apprentice Harper et al.

__license__ = 'GPL v3'
__version__ = '7.0.0'
__version__ = '7.0.2'
__docformat__ = 'restructuredtext en'


Expand Down Expand Up @@ -72,6 +72,7 @@
# 6.8.1 - Kindle key fix for Mac OS X Big Sur
# 7.0.0 - Switched to Python 3 for calibre 5.0. Thanks to all who contributed
# 7.0.1 - More Python 3 changes. Adobe PDF decryption should now work in some cases
# 7.0.2 - More Python 3 changes. Adobe PDF decryption should now work on PC too.

"""
Decrypt DRMed ebooks.
Expand Down
18 changes: 11 additions & 7 deletions DeDRM_plugin/ineptpdf.py
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,8 @@ def _load_crypto_pycrypto():
from Crypto.PublicKey import RSA as _RSA
from Crypto.Cipher import ARC4 as _ARC4
from Crypto.Cipher import AES as _AES

from Crypto.Cipher import PKCS1_v1_5 as _PKCS1_v1_5

# ASN.1 parsing code from tlslite
class ASN1Error(Exception):
pass
Expand Down Expand Up @@ -374,7 +375,7 @@ def decrypt(self, data):

class RSA(object):
def __init__(self, der):
key = ASN1Parser([ord(x) for x in der])
key = ASN1Parser([x for x in der])
key = [key.getChild(x).value for x in range(1, 4)]
key = [self.bytesToNumber(v) for v in key]
self._rsa = _RSA.construct(key)
Expand All @@ -386,7 +387,7 @@ def bytesToNumber(self, bytes):
return total

def decrypt(self, data):
return self._rsa.decrypt(data)
return _PKCS1_v1_5.new(self._rsa).decrypt(data, 172)

return (ARC4, RSA, AES)

Expand Down Expand Up @@ -1596,10 +1597,13 @@ def initialize_ebx(self, password, docid, param):
expr = './/{http://ns.adobe.com/adept}encryptedKey'
bookkey = codecs.decode(''.join(rights.findtext(expr)).encode('utf-8'),'base64')
bookkey = rsa.decrypt(bookkey)
if bookkey[0] != 2:
raise ADEPTError('error decrypting book session key')
index = bookkey.index(b'\0') + 1
bookkey = bookkey[index:]
#if bookkey[0] != 2:
# raise ADEPTError('error decrypting book session key')
try:
index = bookkey.index(b'\0') + 1
bookkey = bookkey[index:]
except ValueError:
pass
ebx_V = int_value(param.get('V', 4))
ebx_type = int_value(param.get('EBX_ENCRYPTIONTYPE', 6))
# added because of improper booktype / decryption book session key errors
Expand Down

0 comments on commit ed412be

Please sign in to comment.