diff options
Diffstat (limited to 'DeDRM_plugin/mobidedrm.py')
-rwxr-xr-x | DeDRM_plugin/mobidedrm.py | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/DeDRM_plugin/mobidedrm.py b/DeDRM_plugin/mobidedrm.py index 5989e8b..864c08f 100755 --- a/DeDRM_plugin/mobidedrm.py +++ b/DeDRM_plugin/mobidedrm.py @@ -80,11 +80,14 @@ import sys import os import struct import binascii -from alfcrypto import Pukall_Cipher -from utilities import SafeUnbuffered -from argv_utils import unicode_argv +#@@CALIBRE_COMPAT_CODE@@ + + +from .alfcrypto import Pukall_Cipher +from .utilities import SafeUnbuffered +from .argv_utils import unicode_argv class DrmException(Exception): @@ -103,10 +106,17 @@ def PC1(key, src, decryption=True): except: raise -# accepts unicode returns unicode +letters = b'ABCDEFGHIJKLMNPQRSTUVWXYZ123456789' + +def crc32(s): + return (~binascii.crc32(s,-1))&0xFFFFFFFF + def checksumPid(s): - letters = 'ABCDEFGHIJKLMNPQRSTUVWXYZ123456789' - crc = (~binascii.crc32(s.encode('utf-8'),-1))&0xFFFFFFFF + + s = s.encode() + + + crc = crc32(s) crc = crc ^ (crc >> 16) res = s l = len(letters) @@ -115,7 +125,7 @@ def checksumPid(s): pos = (b // l) ^ (b % l) res += bytes(bytearray([letters[pos%l]])) crc >>= 8 - return res + return res.decode() # expects bytearray def getSizeOfTrailingDataEntries(ptr, size, flags): |