]> xmof Git - DeDRM.git/commitdiff
Add some Python2 compat code I forgot to add earlier
authorNoDRM <no_drm123@protonmail.com>
Wed, 13 Jul 2022 15:31:14 +0000 (17:31 +0200)
committerNoDRM <no_drm123@protonmail.com>
Wed, 13 Jul 2022 15:31:57 +0000 (17:31 +0200)
DeDRM_plugin/ineptpdf.py
DeDRM_plugin/utilities.py

index 310ab1e50c4dbb9690053f959742df57c78b5fa6..24fc15082a5aa39095ed47ffdcbed431806f82e2 100755 (executable)
 #   9.1.0 - Support for decrypting with owner password, support for V=5, R=5 and R=6 PDF files, support for AES256-encrypted PDFs.
 #   9.1.1 - Only support PyCryptodome; clean up the code
 #   10.0.0 - Add support for "hardened" Adobe DRM (RMSDK >= 10)
+#   10.0.2 - Fix some Python2 stuff
 
 """
 Decrypts Adobe ADEPT-encrypted PDF files.
 """
 
 __license__ = 'GPL v3'
-__version__ = "10.0.0"
+__version__ = "10.0.2"
 
 import codecs
 import hashlib
@@ -65,6 +66,8 @@ import os
 import re
 import zlib
 import struct
+import binascii
+import base64
 from io import BytesIO
 from decimal import Decimal
 import itertools
@@ -1369,7 +1372,7 @@ class PDFDocument(object):
         return file_key
 
 
-    def process_with_aes(self, key: bytes, encrypt: bool, data: bytes, repetitions: int = 1, iv: bytes = None):
+    def process_with_aes(self, key, encrypt, data, repetitions = 1, iv = None):
         if iv is None:
             keylen = len(key)
             iv = bytes([0x00]*keylen)
@@ -1601,19 +1604,17 @@ class PDFDocument(object):
 
     def initialize_ebx_ignoble(self, keyb64, docid, param):
         self.is_printable = self.is_modifiable = self.is_extractable = True
-        try: 
-            key = keyb64.decode('base64')[:16]
-            # This will probably always error, but I'm not 100% sure, so lets leave the old code in.
-        except AttributeError: 
-            key = codecs.decode(keyb64.encode("ascii"), 'base64')[:16]
+        key = keyb64.decode('base64')[:16]
 
         length = int_value(param.get('Length', 0)) / 8
-        rights = str_value(param.get('ADEPT_LICENSE')).decode('base64')
+        rights = codecs.decode(str_value(param.get('ADEPT_LICENSE')), "base64")
         rights = zlib.decompress(rights, -15)
         rights = etree.fromstring(rights)
         expr = './/{http://ns.adobe.com/adept}encryptedKey'
-        bookkey = ''.join(rights.findtext(expr)).decode('base64')
-        bookkey = unpad(AES.new(key, AES.MODE_CBC, b'\x00'*16).decrypt(bookkey), 16) # PKCS#7
+        bookkey = ''.join(rights.findtext(expr))
+        bookkey = base64.b64decode(bookkey)
+        bookkey = AES.new(key, AES.MODE_CBC, b'\x00'*16).decrypt(bookkey)
+        bookkey = unpad(bookkey, 16) # PKCS#7
         if len(bookkey) > 16:
             bookkey = bookkey[-16:]
         ebx_V = int_value(param.get('V', 4))
index bd008b597a88456a002027fbc345158ea5a5872b..cd08a66571e6ad2d8eecd925cb063ba5b858f6db 100644 (file)
@@ -4,6 +4,7 @@
 #@@CALIBRE_COMPAT_CODE@@
 
 from ignoblekeyGenPassHash import generate_key
+import sys
 
 __license__ = 'GPL v3'
 
@@ -21,8 +22,13 @@ DETAILED_MESSAGE = \
 
 def uStrCmp (s1, s2, caseless=False):
     import unicodedata as ud
-    str1 = s1 if isinstance(s1, str) else str(s1)
-    str2 = s2 if isinstance(s2, str) else str(s2)
+    if sys.version_info[0] == 2:
+        str1 = s1 if isinstance(s1, unicode) else unicode(s1)
+        str2 = s2 if isinstance(s2, unicode) else unicode(s2)
+    else: 
+        str1 = s1 if isinstance(s1, str) else str(s1)
+        str2 = s2 if isinstance(s2, str) else str(s2)
+
     if caseless:
         return ud.normalize('NFC', str1.lower()) == ud.normalize('NFC', str2.lower())
     else: