From c386ac6e6dc3eba9f364cf94c660433c9cbb96bb Mon Sep 17 00:00:00 2001 From: Apprentice Alf Date: Thu, 11 Nov 2010 22:11:36 +0000 Subject: [PATCH] tools v2.2 --- .gitignore | 2 +- Adobe_EPUB_Tools/README_ineptepub.txt | 9 +- Adobe_EPUB_Tools/ineptepub.pyw | 11 +- Adobe_EPUB_Tools/ineptkey.pyw | 76 ++- Barnes_and_Noble_EPUB_Tools/ignobleepub.pyw | 6 +- Barnes_and_Noble_EPUB_Tools/ignoblekeygen.pyw | 6 +- Calibre_Plugins/Win_OpenSSL_0.9.8o.txt | 26 + Calibre_Plugins/eReaderPDB2PML_plugin.zip | Bin 697329 -> 148407 bytes .../eReaderPDB2PML-README.txt | 21 - .../eReaderPDB2PML_plugin.py | 8 +- .../eReaderPDB2PML_plugin/erdr2pml.py | 262 +------- .../eReaderPDB2PML_plugin/openssl_des.py | 90 +++ .../osx/psyco/.svn/all-wcprops | 47 -- .../osx/psyco/.svn/dir-prop-base | 7 - .../osx/psyco/.svn/entries | 266 -------- .../psyco/.svn/prop-base/__init__.py.svn-base | 9 - .../psyco/.svn/prop-base/classes.py.svn-base | 9 - .../osx/psyco/.svn/prop-base/core.py.svn-base | 9 - .../.svn/prop-base/kdictproxy.py.svn-base | 9 - .../psyco/.svn/prop-base/logger.py.svn-base | 9 - .../psyco/.svn/prop-base/profiler.py.svn-base | 9 - .../psyco/.svn/prop-base/support.py.svn-base | 9 - .../psyco/.svn/text-base/__init__.py.svn-base | 54 -- .../psyco/.svn/text-base/classes.py.svn-base | 42 -- .../osx/psyco/.svn/text-base/core.py.svn-base | 231 ------- .../.svn/text-base/kdictproxy.py.svn-base | 133 ---- .../psyco/.svn/text-base/logger.py.svn-base | 96 --- .../psyco/.svn/text-base/profiler.py.svn-base | 379 ----------- .../psyco/.svn/text-base/support.py.svn-base | 191 ------ .../osx/psyco/__init__.py | 54 -- .../osx/psyco/classes.py | 42 -- .../eReaderPDB2PML_plugin/osx/psyco/core.py | 231 ------- .../osx/psyco/kdictproxy.py | 133 ---- .../eReaderPDB2PML_plugin/osx/psyco/logger.py | 96 --- .../osx/psyco/profiler.py | 379 ----------- .../osx/psyco/support.py | 191 ------ .../eReaderPDB2PML_plugin/python_des.py | 218 +++++++ .../windows/psyco/__init__.pyo | Bin 0 -> 2079 bytes .../windows/psyco/_psyco.pyd | Bin 0 -> 278016 bytes .../windows/psyco/builtin.pyo | Bin 0 -> 7116 bytes .../windows/psyco/classes.pyo | Bin 0 -> 1684 bytes .../windows/psyco/clibrary.pyo | Bin 0 -> 526 bytes .../windows/psyco/core.pyo | Bin 0 -> 6168 bytes .../windows/psyco/kdictproxy.pyo | Bin 0 -> 1920 bytes .../windows/psyco/logger.pyo | Bin 0 -> 2780 bytes .../windows/psyco/profiler.pyo | Bin 0 -> 13248 bytes .../windows/psyco/support.pyo | Bin 0 -> 6591 bytes Calibre_Plugins/ignobleepub_plugin.zip | Bin 29048 -> 28861 bytes .../ignobleepub_plugin/Ignobleepub-README.txt | 65 -- .../ignobleepub_plugin/ignobleepub_plugin.py | 29 +- .../windows/Crypto/Cipher/AES.pyd | Bin 0 -> 31744 bytes Calibre_Plugins/ignobleepub_plugin/zipfix.py | 136 ++++ Calibre_Plugins/ineptepub_plugin.zip | Bin 91024 -> 91673 bytes .../ineptepub_plugin/Ineptepub-README.txt | 62 -- Calibre_Plugins/ineptepub_plugin/ade_key.py | 119 +++- .../ineptepub_plugin/ineptepub_plugin.py | 23 +- .../ineptepub_plugin/osx/Carbon/File.pyo | Bin 0 -> 217 bytes .../ineptepub_plugin/osx/Carbon/Folder.pyo | Bin 0 -> 221 bytes .../ineptepub_plugin/osx/Carbon/Folders.pyo | Bin 0 -> 10060 bytes .../ineptepub_plugin/osx/Carbon/__init__.pyo | Bin 0 -> 461 bytes .../windows/Crypto/Cipher/AES.pyd | Bin 0 -> 31744 bytes .../windows/Crypto/Hash/SHA256.pyd | Bin 0 -> 11264 bytes .../windows/Crypto/Random/OSRNG/winrandom.pyd | Bin 0 -> 10752 bytes .../windows/Crypto/Util/_counter.pyd | Bin 0 -> 11264 bytes Calibre_Plugins/ineptepub_plugin/zipfix.py | 136 ++++ Calibre_Plugins/k4mobidedrm_plugin.zip | Bin 15485 -> 15804 bytes .../k4mobidedrm_plugin/k4mobidedrm_plugin.py | 116 +++- .../k4mobidedrm_plugin/k4mutils.py | 41 +- .../k4mobidedrm_plugin/k4pcutils.py | 11 +- .../k4mobidedrm_plugin/mobidedrm.py | 74 +-- .../K4MobiDeDRM.pyw | 50 +- .../README_K4MobiDeDRM.txt | 6 +- .../lib/k4mobidedrm.py | 116 +++- .../lib/k4mutils.py | 41 +- .../lib/k4pcutils.py | 11 +- .../lib/mobidedrm.py | 74 +-- .../Kindle_4_Mac_Unswindle/K4Munswindle.pyw | 16 +- .../README_K4Munswindle.txt | 17 +- .../Kindle_4_Mac_Unswindle/lib/mobidedrm.py | 103 ++- .../Kindle_4_PC_Unswindle/mobidedrm.py | 103 ++- Kindle_Mobi_Tools/MobiDeDRM.py | 297 +++++++++ Mobi_Additional_Tools/lib/mobidedrm.py | 8 +- Topaz_Tools/README_Topaz_Tools.txt | 13 +- ...Extract_Kindle4PC.pyw => TopazExtract.pyw} | 42 +- Topaz_Tools/lib/changes.txt | 64 -- Topaz_Tools/lib/cmbtc_dump.py | 604 ++++++------------ Topaz_Tools/lib/cmbtc_dump_nonK4PC.py | 524 --------------- Topaz_Tools/lib/k4mutils.py | 322 ++++++++++ Topaz_Tools/lib/k4pcutils.py | 110 ++++ Topaz_Tools/lib/topaz-changes.txt | 93 --- Topaz_Tools/lib/topaz-readme.txt | 20 +- ePub_Fixer/README_ePub_Fixer.txt | 17 + .../ePub_Fixer.pyw | 101 ++- ePub_Fixer/lib/scrolltextwidget.py | 27 + ePub_Fixer/lib/subasyncio.py | 149 +++++ ePub_Fixer/lib/zipfix.py | 136 ++++ .../lib/eReaderPDB2PML_plugin.py | 148 +++++ eReader_PDB_Tools/lib/erdr2pml.py | 262 +------- eReader_PDB_Tools/lib/openssl_des.py | 90 +++ eReader_PDB_Tools/lib/python_des.py | 218 +++++++ 100 files changed, 3157 insertions(+), 4807 deletions(-) create mode 100644 Calibre_Plugins/Win_OpenSSL_0.9.8o.txt delete mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/eReaderPDB2PML-README.txt create mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/openssl_des.py delete mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/all-wcprops delete mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/dir-prop-base delete mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/entries delete mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/prop-base/__init__.py.svn-base delete mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/prop-base/classes.py.svn-base delete mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/prop-base/core.py.svn-base delete mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/prop-base/kdictproxy.py.svn-base delete mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/prop-base/logger.py.svn-base delete mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/prop-base/profiler.py.svn-base delete mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/prop-base/support.py.svn-base delete mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/text-base/__init__.py.svn-base delete mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/text-base/classes.py.svn-base delete mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/text-base/core.py.svn-base delete mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/text-base/kdictproxy.py.svn-base delete mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/text-base/logger.py.svn-base delete mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/text-base/profiler.py.svn-base delete mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/text-base/support.py.svn-base delete mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/__init__.py delete mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/classes.py delete mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/core.py delete mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/kdictproxy.py delete mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/logger.py delete mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/profiler.py delete mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/support.py create mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/python_des.py create mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/windows/psyco/__init__.pyo create mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/windows/psyco/_psyco.pyd create mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/windows/psyco/builtin.pyo create mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/windows/psyco/classes.pyo create mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/windows/psyco/clibrary.pyo create mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/windows/psyco/core.pyo create mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/windows/psyco/kdictproxy.pyo create mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/windows/psyco/logger.pyo create mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/windows/psyco/profiler.pyo create mode 100644 Calibre_Plugins/eReaderPDB2PML_plugin/windows/psyco/support.pyo delete mode 100644 Calibre_Plugins/ignobleepub_plugin/Ignobleepub-README.txt create mode 100644 Calibre_Plugins/ignobleepub_plugin/windows/Crypto/Cipher/AES.pyd create mode 100644 Calibre_Plugins/ignobleepub_plugin/zipfix.py delete mode 100644 Calibre_Plugins/ineptepub_plugin/Ineptepub-README.txt create mode 100644 Calibre_Plugins/ineptepub_plugin/osx/Carbon/File.pyo create mode 100644 Calibre_Plugins/ineptepub_plugin/osx/Carbon/Folder.pyo create mode 100644 Calibre_Plugins/ineptepub_plugin/osx/Carbon/Folders.pyo create mode 100644 Calibre_Plugins/ineptepub_plugin/osx/Carbon/__init__.pyo create mode 100644 Calibre_Plugins/ineptepub_plugin/windows/Crypto/Cipher/AES.pyd create mode 100644 Calibre_Plugins/ineptepub_plugin/windows/Crypto/Hash/SHA256.pyd create mode 100644 Calibre_Plugins/ineptepub_plugin/windows/Crypto/Random/OSRNG/winrandom.pyd create mode 100644 Calibre_Plugins/ineptepub_plugin/windows/Crypto/Util/_counter.pyd create mode 100644 Calibre_Plugins/ineptepub_plugin/zipfix.py create mode 100644 Kindle_Mobi_Tools/MobiDeDRM.py rename Topaz_Tools/{TopazExtract_Kindle4PC.pyw => TopazExtract.pyw} (81%) delete mode 100644 Topaz_Tools/lib/changes.txt delete mode 100644 Topaz_Tools/lib/cmbtc_dump_nonK4PC.py create mode 100644 Topaz_Tools/lib/k4mutils.py create mode 100644 Topaz_Tools/lib/k4pcutils.py delete mode 100644 Topaz_Tools/lib/topaz-changes.txt create mode 100644 ePub_Fixer/README_ePub_Fixer.txt rename Topaz_Tools/TopazExtract_iPhone_iPad_K4M.pyw => ePub_Fixer/ePub_Fixer.pyw (62%) create mode 100644 ePub_Fixer/lib/scrolltextwidget.py create mode 100644 ePub_Fixer/lib/subasyncio.py create mode 100644 ePub_Fixer/lib/zipfix.py create mode 100644 eReader_PDB_Tools/lib/eReaderPDB2PML_plugin.py create mode 100644 eReader_PDB_Tools/lib/openssl_des.py create mode 100644 eReader_PDB_Tools/lib/python_des.py diff --git a/.gitignore b/.gitignore index b2d0d77..436624b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ # Byte-compiled / optimized / DLL files __pycache__/ -*.py[cod] +*.pyc # C extensions *.so diff --git a/Adobe_EPUB_Tools/README_ineptepub.txt b/Adobe_EPUB_Tools/README_ineptepub.txt index cab043d..d764357 100644 --- a/Adobe_EPUB_Tools/README_ineptepub.txt +++ b/Adobe_EPUB_Tools/README_ineptepub.txt @@ -2,17 +2,18 @@ From Apprentice Alf's Blog Adobe Adept ePub and PDF, .epub, .pdf -The wonderful I♥CABBAGES has produced scripts that will remove the DRM from ePubs and PDFs encryped with Adobe’s DRM. Installing these scripts is a little more complex that the Mobipocket and eReader decryption tools, as they require installation of the PyCrypto package for Windows Boxes. For Mac OS X and Linux boxes, these scripts use the already installed OpenSSL libcrypto so there is no additional requirements for these platforms. +This directory includes modified versions of the I♥CABBAGES Adobe Adept inept scripts for epubs. These scripts have been modified to work with OpenSSL on Windows as well as Linux and Mac OS X. His original scripts can be found in the clearly labelled folder. If a Windows User has OpenSSL installed, these scripts will make use of it in place of PyCrypto. + +The wonderful I♥CABBAGES has produced scripts that will remove the DRM from ePubs and PDFs encryped with Adobe’s DRM. These scripts require installation of the PyCrypto python package *or* the OpenSSL library on Windows. For Mac OS X and Linux boxes, these scripts use the already installed OpenSSL libcrypto so there is no additional requirements for these platforms. For more info, see the author's blog: http://i-u2665-cabbages.blogspot.com/2009_02_01_archive.html There are two scripts: -The first is called ineptkey_v5.pyw. Simply double-click to launch it and it will create a key file that is needed later to actually remove the DRM. This script need only be run once unless you change your ADE account information. - -The second is called in ineptepub_v5.pyw. Simply double-click to launch it. It will ask for your previously generated key file and the path to the book you want to remove the DRM from. +The first is called ineptkey_v5.1.pyw. Simply double-click to launch it and it will create a key file that is needed later to actually remove the DRM. This script need only be run once unless you change your ADE account information. +The second is called in ineptepub_v5.3.pyw. Simply double-click to launch it. It will ask for your previously generated key file and the path to the book you want to remove the DRM from. Both of these scripts are gui python programs. Python 2.X (32 bit) is already installed in Mac OSX. We recommend ActiveState's Active Python Version 2.X (32 bit) for Windows users. diff --git a/Adobe_EPUB_Tools/ineptepub.pyw b/Adobe_EPUB_Tools/ineptepub.pyw index d6c5f7d..701fc2e 100644 --- a/Adobe_EPUB_Tools/ineptepub.pyw +++ b/Adobe_EPUB_Tools/ineptepub.pyw @@ -24,7 +24,7 @@ # Improve OS X support by using OpenSSL when available # 5.1 - Improve OpenSSL error checking # 5.2 - Fix ctypes error causing segfaults on some systems - +# 5.3 - add support for OpenSSL on Windows, fix bug with some versions of libcrypto 0.9.8 prior to path level o """ Decrypt Adobe ADEPT-encrypted EPUB books. """ @@ -53,7 +53,11 @@ def _load_crypto_libcrypto(): Structure, c_ulong, create_string_buffer, cast from ctypes.util import find_library - libcrypto = find_library('crypto') + if sys.platform.startswith('win'): + libcrypto = find_library('libeay32') + else: + libcrypto = find_library('crypto') + if libcrypto is None: raise ADEPTError('libcrypto not found') libcrypto = CDLL(libcrypto) @@ -116,6 +120,9 @@ def _load_crypto_libcrypto(): class AES(object): def __init__(self, userkey): self._blocksize = len(userkey) + if (self._blocksize != 16) and (self._blocksize != 24) and (self._blocksize != 32) : + raise ADEPTError('AES improper key used') + return key = self._key = AES_KEY() rv = AES_set_decrypt_key(userkey, len(userkey) * 8, key) if rv < 0: diff --git a/Adobe_EPUB_Tools/ineptkey.pyw b/Adobe_EPUB_Tools/ineptkey.pyw index 3756ae3..e0ac72e 100644 --- a/Adobe_EPUB_Tools/ineptkey.pyw +++ b/Adobe_EPUB_Tools/ineptkey.pyw @@ -30,6 +30,7 @@ # 4.4 - Make it working on 64-bit Python # 5 - Clean up and improve 4.x changes; # Clean up and merge OS X support by unknown +# 5.1 - add support for using OpenSSL on Windows in place of PyCrypto """ Retrieve Adobe ADEPT user key. @@ -53,14 +54,76 @@ class ADEPTError(Exception): if sys.platform.startswith('win'): from ctypes import windll, c_char_p, c_wchar_p, c_uint, POINTER, byref, \ create_unicode_buffer, create_string_buffer, CFUNCTYPE, addressof, \ - string_at, Structure, c_void_p, cast, c_size_t, memmove + string_at, Structure, c_void_p, cast, c_size_t, memmove, CDLL, c_int, \ + c_long, c_ulong + from ctypes.wintypes import LPVOID, DWORD, BOOL import _winreg as winreg - try: - from Crypto.Cipher import AES - except ImportError: + def _load_crypto_libcrypto(): + from ctypes.util import find_library + libcrypto = find_library('libeay32') + if libcrypto is None: + raise ADEPTError('libcrypto not found') + libcrypto = CDLL(libcrypto) + AES_MAXNR = 14 + c_char_pp = POINTER(c_char_p) + c_int_p = POINTER(c_int) + class AES_KEY(Structure): + _fields_ = [('rd_key', c_long * (4 * (AES_MAXNR + 1))), + ('rounds', c_int)] + AES_KEY_p = POINTER(AES_KEY) + + def F(restype, name, argtypes): + func = getattr(libcrypto, name) + func.restype = restype + func.argtypes = argtypes + return func + + AES_set_decrypt_key = F(c_int, 'AES_set_decrypt_key', + [c_char_p, c_int, AES_KEY_p]) + AES_cbc_encrypt = F(None, 'AES_cbc_encrypt', + [c_char_p, c_char_p, c_ulong, AES_KEY_p, c_char_p, + c_int]) + class AES(object): + def __init__(self, userkey): + self._blocksize = len(userkey) + if (self._blocksize != 16) and (self._blocksize != 24) and (self._blocksize != 32) : + raise ADEPTError('AES improper key used') + key = self._key = AES_KEY() + rv = AES_set_decrypt_key(userkey, len(userkey) * 8, key) + if rv < 0: + raise ADEPTError('Failed to initialize AES key') + def decrypt(self, data): + out = create_string_buffer(len(data)) + iv = ("\x00" * self._blocksize) + rv = AES_cbc_encrypt(data, out, len(data), self._key, iv, 0) + if rv == 0: + raise ADEPTError('AES decryption failed') + return out.raw + return AES + + def _load_crypto_pycrypto(): + from Crypto.Cipher import AES as _AES + class AES(object): + def __init__(self, key): + self._aes = _AES.new(key, _AES.MODE_CBC) + def decrypt(self, data): + return self._aes.decrypt(data) + return AES + + def _load_crypto(): AES = None + for loader in (_load_crypto_libcrypto, _load_crypto_pycrypto): + try: + AES = loader() + break + except (ImportError, ADEPTError): + pass + return AES + + AES = _load_crypto() + DEVICE_KEY_PATH = r'Software\Adobe\Adept\Device' PRIVATE_LICENCE_KEY_PATH = r'Software\Adobe\Adept\Activation' @@ -230,7 +293,7 @@ if sys.platform.startswith('win'): if AES is None: tkMessageBox.showerror( "ADEPT Key", - "This script requires PyCrypto, which must be installed " + "This script requires PyCrypto or OpenSSL which must be installed " "separately. Read the top-of-script comment for details.") return False root = GetSystemDirectory().split('\\')[0] + '\\' @@ -274,7 +337,8 @@ if sys.platform.startswith('win'): if userkey is None: raise ADEPTError('Could not locate privateLicenseKey') userkey = userkey.decode('base64') - userkey = AES.new(keykey, AES.MODE_CBC).decrypt(userkey) + aes = AES(keykey) + userkey = aes.decrypt(userkey) userkey = userkey[26:-ord(userkey[-1])] with open(keypath, 'wb') as f: f.write(userkey) diff --git a/Barnes_and_Noble_EPUB_Tools/ignobleepub.pyw b/Barnes_and_Noble_EPUB_Tools/ignobleepub.pyw index 38e23d1..46cd4e8 100644 --- a/Barnes_and_Noble_EPUB_Tools/ignobleepub.pyw +++ b/Barnes_and_Noble_EPUB_Tools/ignobleepub.pyw @@ -11,6 +11,7 @@ # 1 - Initial release # 2 - Added OS X support by using OpenSSL when available # 3 - screen out improper key lengths to prevent segfaults on Linux +# 3.1 - Allow Windows versions of libcrypto to be found from __future__ import with_statement @@ -36,7 +37,10 @@ def _load_crypto_libcrypto(): Structure, c_ulong, create_string_buffer, cast from ctypes.util import find_library - libcrypto = find_library('crypto') + if sys.platform.startswith('win'): + libcrypto = find_library('libeay32') + else: + libcrypto = find_library('crypto') if libcrypto is None: raise IGNOBLEError('libcrypto not found') libcrypto = CDLL(libcrypto) diff --git a/Barnes_and_Noble_EPUB_Tools/ignoblekeygen.pyw b/Barnes_and_Noble_EPUB_Tools/ignoblekeygen.pyw index 70d0535..479c11d 100644 --- a/Barnes_and_Noble_EPUB_Tools/ignoblekeygen.pyw +++ b/Barnes_and_Noble_EPUB_Tools/ignoblekeygen.pyw @@ -10,6 +10,7 @@ # Revision history: # 1 - Initial release # 2 - Add OS X support by using OpenSSL when available (taken/modified from ineptepub v5) +# 2.1 - Allow Windows versions of libcrypto to be found """ Generate Barnes & Noble EPUB user key from name and credit card number. @@ -40,7 +41,10 @@ def _load_crypto_libcrypto(): Structure, c_ulong, create_string_buffer, cast from ctypes.util import find_library - libcrypto = find_library('crypto') + if sys.platform.startswith('win'): + libcrypto = find_library('libeay32') + else: + libcrypto = find_library('crypto') if libcrypto is None: print 'libcrypto not found' raise IGNOBLEError('libcrypto not found') diff --git a/Calibre_Plugins/Win_OpenSSL_0.9.8o.txt b/Calibre_Plugins/Win_OpenSSL_0.9.8o.txt new file mode 100644 index 0000000..c3ee4fb --- /dev/null +++ b/Calibre_Plugins/Win_OpenSSL_0.9.8o.txt @@ -0,0 +1,26 @@ +Installing openssl on Windows 64-bit (Windows 2000 and higher) + +Win64 OpenSSL v0.9.8o (8Mb) +http://www.slproweb.com/download/Win64OpenSSL-0_9_8o.exe +(if you get an error message about missing Visual C++ redistributables... cancel the install and install the below support program from Microsoft, THEN install OpenSSL) + +Visual C++ 2008 Redistributables (x64) (1.7Mb) +http://www.microsoft.com/downloads/details.aspx?familyid=bd2a6171-e2d6-4230-b809-9a8d7548c1b6 + + + +Installing openssl on Windows 32-bit (Windows 2000 and higher) + +Win32 OpenSSL v0.9.8o (8Mb) +http://www.slproweb.com/download/Win32OpenSSL-0_9_8o.exe +(if you get an error message about missing Visual C++ redistributables... cancel the install and install the below support program from Microsoft, THEN install OpenSSL) + +Visual C++ 2008 Redistributables (1.7Mb) +http://www.microsoft.com/downloads/details.aspx?familyid=9B2DA534-3E03-4391-8A4D-074B9F2BC1BF + + + +Other versions of OpenSSL (and versions for Windows older than Windows 2000) can be found on the following website. + +Shining Light Productions +http://www.slproweb.com/products/Win32OpenSSL.html diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin.zip b/Calibre_Plugins/eReaderPDB2PML_plugin.zip index c1d3563694358a991fbc32ba5bc8020602c5ce36..5e0fc75d14ea23f15b872e0d44b5cb9597ad3c56 100644 GIT binary patch delta 13064 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

EqRsma=4M2+|bz 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�X8!#4Nt` zS$A?9##gBmD?@kb5UvR@4Xlh)b-nr@Vq*S4Wl8+fWZbkP%h~j=TaVC7m1mf$)Zl+M zragO;=KK+3>(VEl;II&O_w@FW(A0Lm>_N(Enqj}EF`k#~;SXxAekMY7jD7+4YuZcB z3~hX6;v7@nu&?9#<7w*{i zokU-^@io&i+$t?bLD^1C7v$?d``ohBu)p<6RD7KShzs(SqnA$3A`LRoURr;wty*yh zI?$jlUvV2&LSuMv;&y|d4DSC?Q}>KQed z%gZX^z830FBe3--b654Zlf{2B9!T%jo9~KJ?<&l9H;H$rrEa;IjEs4ef(H0c;w+>8 z1|6WCqN64m#ErfEylpmuGxFCP@KXlZ^?m4jv{(WjaY|$m{tX^&p+g^8jlRuz!I`06 zPHJSXO4>c=JPX3^qVMF3rrWV|6|wU)eNNYP%Q{0dHMiz5G~D^7hMRxQW+=E1417iK z;hM5Np&80m+N76E{Z+8GDC@7FroD}!*<{_irfYg7j!5b8RmAEeXFzabmd|fivtf3daYANzp^Cn-a`F!ef;EjrZ zt8ptb*WAjtB6H0b9HQn+wwjMSGHjP0Z&v-4C|Sm;;%2`6n5*7tRL!zgosp{Az?u1L zAu_Nc6|9x#H5gUTF{*BLq^kDksyOrxH}jAoy*}T_V&(g7lIMRl8xY`J4hTQ8LBK2k zLaSQR$`D#0f2_+e`B6~Z2aHroi&2*^e&M>IUmHlXGY~6}w^k63ljp@m`AI1MY^wZN zz8*L+is2gT=qz7#=zin->5ydB>2YkDfpubK?Som4frr;4;VNN?%X*P_mbxs@YvL5a zd_hyNL7rC&hxLE5x7d(WDbL%?7QNpfP;TBk?{( z`9Ab-fM^qI0N4;3adw+B3f#yAT5JVc-0`2-3S7`b6V{9Kk;Ez?dcB|a+vrnc9aM-XvYAXiQ3LB9>(6K<7laBfKlM zwAP8*Cy$GJjn&{rD*cM;U&pHqRduQgs)%vbJ*iv3D@D~Bu3G6<1Dk0-+9u}vo2pjP zf)-UDIxc?*LJe0Df269kwyVCWYAx|1QFSU;C5^wNwk(ON#ENRascMtrZ%CY8fx1~- zmv2lV%70b$iz~cOUAIN?Hzx)g>#$XCK8E_u2o+(sd_U2D%Qw}>!nD<|;QF+jSW~9@ zVyX63pBL&N=p$6`rekK-@@n-=EZaSy4x_xz<==nj`C$7;Vy|TwO53mRR{U#~;5w?N z7i|M=m27Zk7)}YN=Jr#aJ-9t?T{rwBRj0}B&vo{}?ma!({TGh(s?7b~bM(RQqmCZ@ z{>i?o{w|&2i`(uO_2l=r_f<7uaP3+(Tx;CzPF(v3T(^PgiR+%(S6!!3*SZ&;?;|;w z;@5x8OjHa2OS>0a_Z+EB;iua@f_$}vkRyXSpUy>OpUOzwYj zgsy-`$X5;=8Bf~gCb>8fH`Fn?_HLn`VWq|OR(3u_Qk^>bVjjrb<2P|__z)%7!TEp` z|H0Cm)rsERqzbXLbK>Y)7k2z6FBgNv)=+AM#|&SdN-w`{?hSJoT*NgF75Bhiv^au{e)1GN4s zi7h>-1}n{#7rLFpaa`fkIBljBQ6Sh&_8?q1(BcckLKEaq9HHsTWDo0oU|MIV%jpO% z(VzNfN?(I9i1kAf*MI#yMAePhMM%e4W^yj*Rs?Q<<}OzPTWM{xf7n*ye|vv;ZEqFG z-D)8>nX`@Wbux0kKno1l*8sD8_#%>Io~w<2F_B}Jdl)b2pXqueYi!6@{aiPbbVA{P z?wFdPW&f5KB<*2pNtE`TPt*W$wx~mOq~S52eOZ3+U*qx6!M^dB&UjSy#G?V6i+ENP zcnATtFFcT5rUxDqz8Q~XqHljZ>Nf(9TEe3u4UuMIgO;4zOzh}=H6X;@zVJDkk;13_ zKf>qNc6{0aRN(Ui#-~Z(1O3;)hZMKg)V=UT%!E%X@39Wf`Y!P4FLJ=%n!+UyxctzL zOLiI_pMQ~tM=sMZ;qk(=z@ycj_+14%4!7$XEy~0}oFh2IsI=+NQ00Hb{?zjy>6yjN z)T@W^>hW&-tI!w1EE7M$()i}ommj0>Pxx(R>g^=F#Rcc5$gg_~Hvgc9qyUmM^}tJD z2M?}8qFwg}momW}9#j@B9;k-bR(B0orY`detE;w2SY(uy*?e-oj*pp?a62zek`tmr zPPo3OobcVg)tMS(&U6ON|;!43$XXM zg30}dasuCV5N-qNBqwx|oDddrLZ)3#$o#M5gs(@Zp?MRD9=9h0VVYy>`+8|LF!sBvp~;FWSoRdKg)d11f0!pwfkbcd?qI$~*y{}pAr zM>$$v*k7*p=1p@egCrUGkCff&cGRf;c=&1CQB=g87aM>~O&_YaI zi|syN@FQiPp^?CJv8loGU#+042Ok))iMH)+^L)qgnp zsM?%j6~t021xww|%&n4HDp&nWUsacoiw=J3(VL^W(x7~;)cN*G8vB)+Vbey6GY)~gOqui|2S55bdO9ny zdt02H!7Gu(=^w9klYRvv&xr3nkru_M1lH(RHg)%m{SK@lbk2ed^UHU{QOQJvG3wV> zL(*827Kx3f6U*x9Uv2=dRmxzcL7X-2%uRplorCy9(%(+qd+=X0041J`&?QStaFfCL z3l>u=)iI|L$U$){KVv(q5_x|KDEY$er8lVkbN5jD`n568S-T?4C5TyiZTsY=`3SPzyYHS&J`Ir*7p0duo61u+pGE z{*iG^*`dtb>NZr>ITbWIFF6yNEA+$;p@MUz@Y{*KecWG@W1iJ2^^D99RKJI|pd}4r z3%aQh)O{GOV2zCw3I4o%W zBAaTmc%eFNG+cNZNe4E(b#8xt%JkL=U9TL2+f1<&j$2pz>hB+z$_r-r6`h;rS2VhZ zUs3p(#AY)eY1C1d;fKpc;(6hhG!`OWPv@;RoAXwCn)6nSowwThaNcT9mrB}g&RcCM z=dCu&d8-}HTkU-~Z?&7wTkV$fR(t5%?6~zq-d5WBblej61R5XR?8JZK!uxfcFX`y0 zYWZlIpQQ3P;U~GY=^Ond;rgSkO!-L$?S7JoH?jPJ0__kVF8|yA4}OxuFUUUccE6uL z|CM8_#lG0qho4W$$v*Bwp9SxVDQ;!w($C=Wva~yc6AuX=37)ef$`m(0#?L+3JN{hQ zi*X+6=kx#deE$D?BKdy_q$^5g4ku@8FaJ?yMh3J++MWDa_5L;-8q>z~eZ;3uAFD=~ zB=h_+Dbl|m4G1nQ8`KYd&QcnTY&%2xiR5%d$t5{;{x>t~{k6aXQ?!K1j=1Gmb-B!- z0AUqvIX=LAoPH>~lxkl|n-rOaw*mTbtDBwtcX5#oIGTk2;0u2)_-f`jlrAZ<3BqGZ zHd-iRqRgR10ylUk%_6O3lGsVQuC0!_%KdLjTLwy7s>`C~fmUsbLyBnF&>5Km&&5JDG6w?B}bKmPwfq!S59_RrC-Hv>;>7hw^zq92l`{xpST7zmlrtH z5?&J%*rV0ESbFFO{Q%hirra>8Jd=KS%L|-xoh$x*N9uoEbF#}3@YefdnDzMal>cH$ zj=I=Q<0vOx7|LZYKp5(BEf|0)Df=lCKrOAq2+t|2U0M67o`F+N%d7cuLrrv?Pg#Op<# zGaB=LQsfPxqtO7m%QLB>w8c?Q-QN<0RJ_I{qSyd!2F+)ywCn*l(@`_%=vQzUp1^c8 z-OY3qqj5;5Bck-?{!B-~W@FrEE_Eo`Oh@$#4#9sRfx}Km5#f#>4xLA$H4^r; zA^Kux54s7r5xOx)9benyRxbB-Ja9U6_u9M7{ptozdG${|{--j$WjSp{%zcU}?Kc(y zQU5KHlNC8jd#!TmH7%XwJHaAM7bp`XY_T=!b&Ic?binV@0(6rz@f@eMNt?^|d0B5WT`s625W_?)DmTXCVp49N7O8(O z*D`Z&6Ej=rW~WkXX5rdMz-R&q9x;7PMM)b8uGHJ=*zf^eL<{JxAHC(f-=HE*;Lcu3 zORnr=zRonpopdwb^bl91*5m)~O5LLas*e!K1-;5Frtl>0cO`+vS1mpC*-=BT#`b`1 zpvB_jQ=N`-ZzgX9;jf8<#lMexWo>_rWudX@?)ckXg1OWcI7aqpY84XPf;+4+$Y|

2Q>1o9)N{Y2^1+zV0P|4frGMEbX+E^zItg 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

vrLVbOii;)jh3nK$V_OKnSbCV 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�#n& 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 z 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 diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/eReaderPDB2PML-README.txt b/Calibre_Plugins/eReaderPDB2PML_plugin/eReaderPDB2PML-README.txt deleted file mode 100644 index 75dfda5..0000000 --- a/Calibre_Plugins/eReaderPDB2PML_plugin/eReaderPDB2PML-README.txt +++ /dev/null @@ -1,21 +0,0 @@ -eReader PDB2PML - eReaderPDB2PML_vXX_plugin.zip - -All credit given to The Dark Reverser for the original standalone script. I had the much easier job of converting it to a Calibre plugin. - -This plugin is meant to convert secure Ereader files (PDB) to unsecured PMLZ files. Calibre can then convert it to whatever format you desire. It is meant to function without having to install any dependencies... other than having Calibre installed, of course. I've included the psyco libraries (compiled for each platform) for speed. If your system can use them, great! Otherwise, they won't be used and things will just work slower. - -Installation: -Go to Calibre's Preferences page... click on the Plugins button. Use the file dialog button to select the plugin's zip file (eReaderPDB2PML_vXX_plugin.zip) and click the 'Add' button. You're done. - -Configuration: -Highlight the plugin (eReader PDB 2 PML under the "File type plugins" category) and click the "Customize Plugin" button on Calibre's Preferences->Plugins page. Enter your name and last 8 digits of the credit card number separated by a comma: Your Name,12341234 - -If you've purchased books with more than one credit card, separate the info with a colon: Your Name,12341234:Other Name,23452345 (NOTE: Do NOT put quotes around your name like you do with the original script!!) - -Troubleshooting: -If you find that it's not working for you (imported pdb's are not converted to pmlz format), you can save a lot of time and trouble by trying to add the pdb to Calibre with the command line tools. This will print out a lot of helpful debugging info that can be copied into any online help requests. I'm going to ask you to do it first, anyway, so you might -as well get used to it. ;) - -Open a command prompt (terminal) and change to the directory where the ebook you're trying to import resides. Then type the command "calibredb add your_ebook.pdb". Don't type the quotes and obviously change the 'your_ebook.pdb' to whatever the filename of your book is. Copy the resulting output and paste it into any online help request you make. - -** Note: the Mac version of Calibre doesn't install the command line tools by default. If you go to the 'Preferences' page and click on the miscellaneous button, you'll see the option to install the command line tools. diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/eReaderPDB2PML_plugin.py b/Calibre_Plugins/eReaderPDB2PML_plugin/eReaderPDB2PML_plugin.py index 64b3019..fe4c9b3 100644 --- a/Calibre_Plugins/eReaderPDB2PML_plugin/eReaderPDB2PML_plugin.py +++ b/Calibre_Plugins/eReaderPDB2PML_plugin/eReaderPDB2PML_plugin.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -# eReaderPDB2PML_v01_plugin.py +# eReaderPDB2PML_plugin.py # Released under the terms of the GNU General Public Licence, version 3 or # later. # @@ -30,7 +30,8 @@ # NOTE: Do NOT put quotes around your name like you do with the original script!! # # Revision history: -# 0.1 - Initial release +# 0.0.1 - Initial release +# 0.0.2 - updated to distinguish it from earlier non-openssl version import sys, os @@ -42,7 +43,7 @@ class eRdrDeDRM(FileTypePlugin): Credit given to The Dark Reverser for the original standalone script.' supported_platforms = ['linux', 'osx', 'windows'] # Platforms this plugin will run on author = 'DiapDealer' # The author of this plugin - version = (0, 0, 1) # The version number of this plugin + version = (0, 0, 2) # The version number of this plugin file_types = set(['pdb']) # The file types that this plugin will be applied to on_import = True # Run this plugin during the import @@ -52,7 +53,6 @@ class eRdrDeDRM(FileTypePlugin): pdir = 'windows' if iswindows else 'osx' if isosx else 'linux' ppath = os.path.join(self.sys_insertion_path, pdir) sys.path.insert(0, ppath) - #sys.path.append(ppath) global bookname, erdr2pml import erdr2pml diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/erdr2pml.py b/Calibre_Plugins/eReaderPDB2PML_plugin/erdr2pml.py index 089d000..daa6b21 100644 --- a/Calibre_Plugins/eReaderPDB2PML_plugin/erdr2pml.py +++ b/Calibre_Plugins/eReaderPDB2PML_plugin/erdr2pml.py @@ -54,26 +54,30 @@ # 0.13 - change to unbuffered stdout for use with gui front ends # 0.14 - contributed enhancement to support --make-pmlz switch # 0.15 - enabled high-ascii to pml character encoding. DropBook now works on Mac. +# 0.16 - convert to use openssl DES (very very fast) or pure python DES if openssl's libcrypto is not available -__version__='0.15' +Des = None -# Import Psyco if available -try: - # Dumb speed hack 1 - # http://psyco.sourceforge.net - import psyco - psyco.full() - pass -except ImportError: - pass -try: - # Dumb speed hack 2 - # All map() calls converted to list comprehension (some use zip) - # override zip with izip - saves memory and in rough testing - # appears to be faster zip() is only used in the converted map() calls - from itertools import izip as zip -except ImportError: - pass +import openssl_des +Des = openssl_des.load_libcrypto() + +# if that did not work then use pure python implementation +# of DES and try to speed it up with Psycho +if Des == None: + import python_des + Des = python_des.Des + # Import Psyco if available + try: + # Dumb speed hack 1 + # http://psyco.sourceforge.net + import psyco + psyco.full() + pass + except ImportError: + pass + + +__version__='0.16' class Unbuffered: def __init__(self, stream): @@ -101,223 +105,6 @@ import logging logging.basicConfig() #logging.basicConfig(level=logging.DEBUG) -ECB = 0 -CBC = 1 -class Des(object): - __pc1 = [56, 48, 40, 32, 24, 16, 8, 0, 57, 49, 41, 33, 25, 17, - 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, - 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, - 13, 5, 60, 52, 44, 36, 28, 20, 12, 4, 27, 19, 11, 3] - __left_rotations = [1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1] - __pc2 = [13, 16, 10, 23, 0, 4,2, 27, 14, 5, 20, 9, - 22, 18, 11, 3, 25, 7, 15, 6, 26, 19, 12, 1, - 40, 51, 30, 36, 46, 54, 29, 39, 50, 44, 32, 47, - 43, 48, 38, 55, 33, 52, 45, 41, 49, 35, 28, 31] - __ip = [57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3, - 61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7, - 56, 48, 40, 32, 24, 16, 8, 0, 58, 50, 42, 34, 26, 18, 10, 2, - 60, 52, 44, 36, 28, 20, 12, 4, 62, 54, 46, 38, 30, 22, 14, 6] - __expansion_table = [31, 0, 1, 2, 3, 4, 3, 4, 5, 6, 7, 8, - 7, 8, 9, 10, 11, 12,11, 12, 13, 14, 15, 16, - 15, 16, 17, 18, 19, 20,19, 20, 21, 22, 23, 24, - 23, 24, 25, 26, 27, 28,27, 28, 29, 30, 31, 0] - __sbox = [[14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7, - 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8, - 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0, - 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13], - [15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10, - 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5, - 0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15, - 13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9], - [10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8, - 13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1, - 13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7, - 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12], - [7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15, - 13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9, - 10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4, - 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14], - [2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9, - 14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6, - 4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14, - 11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3], - [12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11, - 10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8, - 9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6, - 4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13], - [4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1, - 13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6, - 1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2, - 6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12], - [13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7, - 1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2, - 7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8, - 2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11],] - __p = [15, 6, 19, 20, 28, 11,27, 16, 0, 14, 22, 25, - 4, 17, 30, 9, 1, 7,23,13, 31, 26, 2, 8,18, 12, 29, 5, 21, 10,3, 24] - __fp = [39, 7, 47, 15, 55, 23, 63, 31,38, 6, 46, 14, 54, 22, 62, 30, - 37, 5, 45, 13, 53, 21, 61, 29,36, 4, 44, 12, 52, 20, 60, 28, - 35, 3, 43, 11, 51, 19, 59, 27,34, 2, 42, 10, 50, 18, 58, 26, - 33, 1, 41, 9, 49, 17, 57, 25,32, 0, 40, 8, 48, 16, 56, 24] - # Type of crypting being done - ENCRYPT = 0x00 - DECRYPT = 0x01 - def __init__(self, key, mode=ECB, IV=None): - if len(key) != 8: - raise ValueError("Invalid DES key size. Key must be exactly 8 bytes long.") - self.block_size = 8 - self.key_size = 8 - self.__padding = '' - self.setMode(mode) - if IV: - self.setIV(IV) - self.L = [] - self.R = [] - self.Kn = [ [0] * 48 ] * 16 # 16 48-bit keys (K1 - K16) - self.final = [] - self.setKey(key) - def getKey(self): - return self.__key - def setKey(self, key): - self.__key = key - self.__create_sub_keys() - def getMode(self): - return self.__mode - def setMode(self, mode): - self.__mode = mode - def getIV(self): - return self.__iv - def setIV(self, IV): - if not IV or len(IV) != self.block_size: - raise ValueError("Invalid Initial Value (IV), must be a multiple of " + str(self.block_size) + " bytes") - self.__iv = IV - def getPadding(self): - return self.__padding - def __String_to_BitList(self, data): - l = len(data) * 8 - result = [0] * l - pos = 0 - for c in data: - i = 7 - ch = ord(c) - while i >= 0: - if ch & (1 << i) != 0: - result[pos] = 1 - else: - result[pos] = 0 - pos += 1 - i -= 1 - return result - def __BitList_to_String(self, data): - result = '' - pos = 0 - c = 0 - while pos < len(data): - c += data[pos] << (7 - (pos % 8)) - if (pos % 8) == 7: - result += chr(c) - c = 0 - pos += 1 - return result - def __permutate(self, table, block): - return [block[x] for x in table] - def __create_sub_keys(self): - key = self.__permutate(Des.__pc1, self.__String_to_BitList(self.getKey())) - i = 0 - self.L = key[:28] - self.R = key[28:] - while i < 16: - j = 0 - while j < Des.__left_rotations[i]: - self.L.append(self.L[0]) - del self.L[0] - self.R.append(self.R[0]) - del self.R[0] - j += 1 - self.Kn[i] = self.__permutate(Des.__pc2, self.L + self.R) - i += 1 - def __des_crypt(self, block, crypt_type): - block = self.__permutate(Des.__ip, block) - self.L = block[:32] - self.R = block[32:] - if crypt_type == Des.ENCRYPT: - iteration = 0 - iteration_adjustment = 1 - else: - iteration = 15 - iteration_adjustment = -1 - i = 0 - while i < 16: - tempR = self.R[:] - self.R = self.__permutate(Des.__expansion_table, self.R) - self.R = [x ^ y for x,y in zip(self.R, self.Kn[iteration])] - B = [self.R[:6], self.R[6:12], self.R[12:18], self.R[18:24], self.R[24:30], self.R[30:36], self.R[36:42], self.R[42:]] - j = 0 - Bn = [0] * 32 - pos = 0 - while j < 8: - m = (B[j][0] << 1) + B[j][5] - n = (B[j][1] << 3) + (B[j][2] << 2) + (B[j][3] << 1) + B[j][4] - v = Des.__sbox[j][(m << 4) + n] - Bn[pos] = (v & 8) >> 3 - Bn[pos + 1] = (v & 4) >> 2 - Bn[pos + 2] = (v & 2) >> 1 - Bn[pos + 3] = v & 1 - pos += 4 - j += 1 - self.R = self.__permutate(Des.__p, Bn) - self.R = [x ^ y for x, y in zip(self.R, self.L)] - self.L = tempR - i += 1 - iteration += iteration_adjustment - self.final = self.__permutate(Des.__fp, self.R + self.L) - return self.final - def crypt(self, data, crypt_type): - if not data: - return '' - if len(data) % self.block_size != 0: - if crypt_type == Des.DECRYPT: # Decryption must work on 8 byte blocks - raise ValueError("Invalid data length, data must be a multiple of " + str(self.block_size) + " bytes\n.") - if not self.getPadding(): - raise ValueError("Invalid data length, data must be a multiple of " + str(self.block_size) + " bytes\n. Try setting the optional padding character") - else: - data += (self.block_size - (len(data) % self.block_size)) * self.getPadding() - if self.getMode() == CBC: - if self.getIV(): - iv = self.__String_to_BitList(self.getIV()) - else: - raise ValueError("For CBC mode, you must supply the Initial Value (IV) for ciphering") - i = 0 - dict = {} - result = [] - while i < len(data): - block = self.__String_to_BitList(data[i:i+8]) - if self.getMode() == CBC: - if crypt_type == Des.ENCRYPT: - block = [x ^ y for x, y in zip(block, iv)] - processed_block = self.__des_crypt(block, crypt_type) - if crypt_type == Des.DECRYPT: - processed_block = [x ^ y for x, y in zip(processed_block, iv)] - iv = block - else: - iv = processed_block - else: - processed_block = self.__des_crypt(block, crypt_type) - result.append(self.__BitList_to_String(processed_block)) - i += 8 - if crypt_type == Des.DECRYPT and self.getPadding(): - s = result[-1] - while s[-1] == self.getPadding(): - s = s[:-1] - result[-1] = s - return ''.join(result) - def encrypt(self, data, pad=''): - self.__padding = pad - return self.crypt(data, Des.ENCRYPT) - def decrypt(self, data, pad=''): - self.__padding = pad - return self.crypt(data, Des.DECRYPT) - class Sectionizer(object): def __init__(self, filename, ident): self.contents = file(filename, 'rb').read() @@ -685,8 +472,5 @@ def main(argv=None): return 0 if __name__ == "__main__": - #import cProfile - #command = """sys.exit(main())""" - #cProfile.runctx( command, globals(), locals(), filename="cprofile.profile" ) - sys.exit(main()) + diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/openssl_des.py b/Calibre_Plugins/eReaderPDB2PML_plugin/openssl_des.py new file mode 100644 index 0000000..8a044fa --- /dev/null +++ b/Calibre_Plugins/eReaderPDB2PML_plugin/openssl_des.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python +# vim:ts=4:sw=4:softtabstop=4:smarttab:expandtab + +# implement just enough of des from openssl to make erdr2pml.py happy + +def load_libcrypto(): + from ctypes import CDLL, POINTER, c_void_p, c_char_p, c_char, c_int, c_long, \ + Structure, c_ulong, create_string_buffer, cast + from ctypes.util import find_library + import sys + + if sys.platform.startswith('win'): + libcrypto = find_library('libeay32') + else: + libcrypto = find_library('crypto') + + if libcrypto is None: + return None + + libcrypto = CDLL(libcrypto) + + # typedef struct DES_ks + # { + # union + # { + # DES_cblock cblock; + # /* make sure things are correct size on machines with + # * 8 byte longs */ + # DES_LONG deslong[2]; + # } ks[16]; + # } DES_key_schedule; + + # just create a big enough place to hold everything + # it will have alignment of structure so we should be okay (16 byte aligned?) + class DES_KEY_SCHEDULE(Structure): + _fields_ = [('DES_cblock1', c_char * 16), + ('DES_cblock2', c_char * 16), + ('DES_cblock3', c_char * 16), + ('DES_cblock4', c_char * 16), + ('DES_cblock5', c_char * 16), + ('DES_cblock6', c_char * 16), + ('DES_cblock7', c_char * 16), + ('DES_cblock8', c_char * 16), + ('DES_cblock9', c_char * 16), + ('DES_cblock10', c_char * 16), + ('DES_cblock11', c_char * 16), + ('DES_cblock12', c_char * 16), + ('DES_cblock13', c_char * 16), + ('DES_cblock14', c_char * 16), + ('DES_cblock15', c_char * 16), + ('DES_cblock16', c_char * 16)] + + DES_KEY_SCHEDULE_p = POINTER(DES_KEY_SCHEDULE) + + def F(restype, name, argtypes): + func = getattr(libcrypto, name) + func.restype = restype + func.argtypes = argtypes + return func + + DES_set_key = F(None, 'DES_set_key',[c_char_p, DES_KEY_SCHEDULE_p]) + DES_ecb_encrypt = F(None, 'DES_ecb_encrypt',[c_char_p, c_char_p, DES_KEY_SCHEDULE_p, c_int]) + + + class DES(object): + def __init__(self, key): + if len(key) != 8 : + raise Error('DES improper key used') + return + self.key = key + self.keyschedule = DES_KEY_SCHEDULE() + DES_set_key(self.key, self.keyschedule) + def desdecrypt(self, data): + ob = create_string_buffer(len(data)) + DES_ecb_encrypt(data, ob, self.keyschedule, 0) + return ob.raw + def decrypt(self, data): + if not data: + return '' + i = 0 + result = [] + while i < len(data): + block = data[i:i+8] + processed_block = self.desdecrypt(block) + result.append(processed_block) + i += 8 + return ''.join(result) + + return DES + diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/all-wcprops b/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/all-wcprops deleted file mode 100644 index 881cf30..0000000 --- a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/all-wcprops +++ /dev/null @@ -1,47 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 41 -/svn/!svn/ver/70200/psyco/dist/py-support -END -core.py -K 25 -svn:wc:ra_dav:version-url -V 49 -/svn/!svn/ver/70200/psyco/dist/py-support/core.py -END -support.py -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/49315/psyco/dist/py-support/support.py -END -classes.py -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/35003/psyco/dist/py-support/classes.py -END -__init__.py -K 25 -svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/35003/psyco/dist/py-support/__init__.py -END -logger.py -K 25 -svn:wc:ra_dav:version-url -V 51 -/svn/!svn/ver/23284/psyco/dist/py-support/logger.py -END -kdictproxy.py -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/35003/psyco/dist/py-support/kdictproxy.py -END -profiler.py -K 25 -svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/70200/psyco/dist/py-support/profiler.py -END diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/dir-prop-base b/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/dir-prop-base deleted file mode 100644 index a87157b..0000000 --- a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/dir-prop-base +++ /dev/null @@ -1,7 +0,0 @@ -K 10 -svn:ignore -V 14 -*~ -*.pyc -*.pyo -END diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/entries b/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/entries deleted file mode 100644 index 936b265..0000000 --- a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/entries +++ /dev/null @@ -1,266 +0,0 @@ -10 - -dir -78269 -http://codespeak.net/svn/psyco/dist/py-support -http://codespeak.net/svn - - - -2009-12-18T16:35:35.119276Z -70200 -arigo -has-props - - - - - - - - - - - - - -fd0d7bf2-dfb6-0310-8d31-b7ecfe96aada - -core.py -file - - - - -2010-10-25T15:10:42.000000Z -3b362177a839893c9e867880b3a7cef3 -2009-12-18T16:35:35.119276Z -70200 -arigo -has-props - - - - - - - - - - - - - - - - - - - - -8144 - -support.py -file - - - - -2010-10-25T15:10:42.000000Z -b0551e975d774f2f7f58a29ed4b6b90e -2007-12-03T12:27:25.632574Z -49315 -arigo -has-props - - - - - - - - - - - - - - - - - - - - -6043 - -classes.py -file - - - - -2010-10-25T15:10:42.000000Z -5932ed955198d16ec17285dfb195d341 -2006-11-26T13:03:26.949973Z -35003 -arigo -has-props - - - - - - - - - - - - - - - - - - - - -1440 - -__init__.py -file - - - - -2010-10-25T15:10:42.000000Z -219582b5182dfa38a9119d059a71965f -2006-11-26T13:03:26.949973Z -35003 -arigo -has-props - - - - - - - - - - - - - - - - - - - - -1895 - -logger.py -file - - - - -2010-10-25T15:10:42.000000Z -aa21f905df036af43082e1ea2a2561ee -2006-02-13T15:02:51.744168Z -23284 -arigo -has-props - - - - - - - - - - - - - - - - - - - - -2678 - -kdictproxy.py -file - - - - -2010-10-25T15:10:42.000000Z -1c8611748dcee5b29848bf25be3ec473 -2006-11-26T13:03:26.949973Z -35003 -arigo -has-props - - - - - - - - - - - - - - - - - - - - -4369 - -profiler.py -file - - - - -2010-10-25T15:10:42.000000Z -858162366cbc39cd9e249e35e6f510c4 -2009-12-18T16:35:35.119276Z -70200 -arigo -has-props - - - - - - - - - - - - - - - - - - - - -11238 - diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/prop-base/__init__.py.svn-base b/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/prop-base/__init__.py.svn-base deleted file mode 100644 index 7b57b30..0000000 --- a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/prop-base/__init__.py.svn-base +++ /dev/null @@ -1,9 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -K 12 -svn:keywords -V 23 -Author Date Id Revision -END diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/prop-base/classes.py.svn-base b/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/prop-base/classes.py.svn-base deleted file mode 100644 index 7b57b30..0000000 --- a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/prop-base/classes.py.svn-base +++ /dev/null @@ -1,9 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -K 12 -svn:keywords -V 23 -Author Date Id Revision -END diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/prop-base/core.py.svn-base b/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/prop-base/core.py.svn-base deleted file mode 100644 index 7b57b30..0000000 --- a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/prop-base/core.py.svn-base +++ /dev/null @@ -1,9 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -K 12 -svn:keywords -V 23 -Author Date Id Revision -END diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/prop-base/kdictproxy.py.svn-base b/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/prop-base/kdictproxy.py.svn-base deleted file mode 100644 index 7b57b30..0000000 --- a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/prop-base/kdictproxy.py.svn-base +++ /dev/null @@ -1,9 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -K 12 -svn:keywords -V 23 -Author Date Id Revision -END diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/prop-base/logger.py.svn-base b/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/prop-base/logger.py.svn-base deleted file mode 100644 index 7b57b30..0000000 --- a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/prop-base/logger.py.svn-base +++ /dev/null @@ -1,9 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -K 12 -svn:keywords -V 23 -Author Date Id Revision -END diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/prop-base/profiler.py.svn-base b/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/prop-base/profiler.py.svn-base deleted file mode 100644 index 7b57b30..0000000 --- a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/prop-base/profiler.py.svn-base +++ /dev/null @@ -1,9 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -K 12 -svn:keywords -V 23 -Author Date Id Revision -END diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/prop-base/support.py.svn-base b/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/prop-base/support.py.svn-base deleted file mode 100644 index 7b57b30..0000000 --- a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/prop-base/support.py.svn-base +++ /dev/null @@ -1,9 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -K 12 -svn:keywords -V 23 -Author Date Id Revision -END diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/text-base/__init__.py.svn-base b/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/text-base/__init__.py.svn-base deleted file mode 100644 index d25e197..0000000 --- a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/text-base/__init__.py.svn-base +++ /dev/null @@ -1,54 +0,0 @@ -########################################################################### -# -# Psyco top-level file of the Psyco package. -# Copyright (C) 2001-2002 Armin Rigo et.al. - -"""Psyco -- the Python Specializing Compiler. - -Typical usage: add the following lines to your application's main module, -preferably after the other imports: - -try: - import psyco - psyco.full() -except ImportError: - print 'Psyco not installed, the program will just run slower' -""" -########################################################################### - - -# -# This module is present to make 'psyco' a package and to -# publish the main functions and variables. -# -# More documentation can be found in core.py. -# - - -# Try to import the dynamic-loading _psyco and report errors -try: - import _psyco -except ImportError, e: - extramsg = '' - import sys, imp - try: - file, filename, (suffix, mode, type) = imp.find_module('_psyco', __path__) - except ImportError: - ext = [suffix for suffix, mode, type in imp.get_suffixes() - if type == imp.C_EXTENSION] - if ext: - extramsg = (" (cannot locate the compiled extension '_psyco%s' " - "in the package path '%s')" % (ext[0], '; '.join(__path__))) - else: - extramsg = (" (check that the compiled extension '%s' is for " - "the correct Python version; this is Python %s)" % - (filename, sys.version.split()[0])) - raise ImportError, str(e) + extramsg - -# Publish important data by importing them in the package -from support import __version__, error, warning, _getrealframe, _getemulframe -from support import version_info, __version__ as hexversion -from core import full, profile, background, runonly, stop, cannotcompile -from core import log, bind, unbind, proxy, unproxy, dumpcodebuf -from _psyco import setfilter -from _psyco import compact, compacttype diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/text-base/classes.py.svn-base b/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/text-base/classes.py.svn-base deleted file mode 100644 index 0563f84..0000000 --- a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/text-base/classes.py.svn-base +++ /dev/null @@ -1,42 +0,0 @@ -########################################################################### -# -# Psyco class support module. -# Copyright (C) 2001-2002 Armin Rigo et.al. - -"""Psyco class support module. - -'psyco.classes.psyobj' is an alternate Psyco-optimized root for classes. -Any class inheriting from it or using the metaclass '__metaclass__' might -get optimized specifically for Psyco. It is equivalent to call -psyco.bind() on the class object after its creation. - -Importing everything from psyco.classes in a module will import the -'__metaclass__' name, so all classes defined after a - - from psyco.classes import * - -will automatically use the Psyco-optimized metaclass. -""" -########################################################################### - -__all__ = ['psyobj', 'psymetaclass', '__metaclass__'] - - -from _psyco import compacttype -import core -from types import FunctionType - -class psymetaclass(compacttype): - "Psyco-optimized meta-class. Turns all methods into Psyco proxies." - - def __new__(cls, name, bases, dict): - bindlist = dict.get('__psyco__bind__') - if bindlist is None: - bindlist = [key for key, value in dict.items() - if isinstance(value, FunctionType)] - for attr in bindlist: - dict[attr] = core.proxy(dict[attr]) - return super(psymetaclass, cls).__new__(cls, name, bases, dict) - -psyobj = psymetaclass("psyobj", (), {}) -__metaclass__ = psymetaclass diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/text-base/core.py.svn-base b/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/text-base/core.py.svn-base deleted file mode 100644 index 995c9ae..0000000 --- a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/text-base/core.py.svn-base +++ /dev/null @@ -1,231 +0,0 @@ -########################################################################### -# -# Psyco main functions. -# Copyright (C) 2001-2002 Armin Rigo et.al. - -"""Psyco main functions. - -Here are the routines that you can use from your applications. -These are mostly interfaces to the C core, but they depend on -the Python version. - -You can use these functions from the 'psyco' module instead of -'psyco.core', e.g. - - import psyco - psyco.log('/tmp/psyco.log') - psyco.profile() -""" -########################################################################### - -import _psyco -import types -from support import * - -newfunction = types.FunctionType -newinstancemethod = types.MethodType - - -# Default charge profiler values -default_watermark = 0.09 # between 0.0 (0%) and 1.0 (100%) -default_halflife = 0.5 # seconds -default_pollfreq_profile = 20 # Hz -default_pollfreq_background = 100 # Hz -- a maximum for sleep's resolution -default_parentframe = 0.25 # should not be more than 0.5 (50%) - - -def full(memory=None, time=None, memorymax=None, timemax=None): - """Compile as much as possible. - -Typical use is for small scripts performing intensive computations -or string handling.""" - import profiler - p = profiler.FullCompiler() - p.run(memory, time, memorymax, timemax) - - -def profile(watermark = default_watermark, - halflife = default_halflife, - pollfreq = default_pollfreq_profile, - parentframe = default_parentframe, - memory=None, time=None, memorymax=None, timemax=None): - """Turn on profiling. - -The 'watermark' parameter controls how easily running functions will -be compiled. The smaller the value, the more functions are compiled.""" - import profiler - p = profiler.ActivePassiveProfiler(watermark, halflife, - pollfreq, parentframe) - p.run(memory, time, memorymax, timemax) - - -def background(watermark = default_watermark, - halflife = default_halflife, - pollfreq = default_pollfreq_background, - parentframe = default_parentframe, - memory=None, time=None, memorymax=None, timemax=None): - """Turn on passive profiling. - -This is a very lightweight mode in which only intensively computing -functions can be detected. The smaller the 'watermark', the more functions -are compiled.""" - import profiler - p = profiler.PassiveProfiler(watermark, halflife, pollfreq, parentframe) - p.run(memory, time, memorymax, timemax) - - -def runonly(memory=None, time=None, memorymax=None, timemax=None): - """Nonprofiler. - -XXX check if this is useful and document.""" - import profiler - p = profiler.RunOnly() - p.run(memory, time, memorymax, timemax) - - -def stop(): - """Turn off all automatic compilation. bind() calls remain in effect.""" - import profiler - profiler.go([]) - - -def log(logfile='', mode='w', top=10): - """Enable logging to the given file. - -If the file name is unspecified, a default name is built by appending -a 'log-psyco' extension to the main script name. - -Mode is 'a' to append to a possibly existing file or 'w' to overwrite -an existing file. Note that the log file may grow quickly in 'a' mode.""" - import profiler, logger - if not logfile: - import os - logfile, dummy = os.path.splitext(sys.argv[0]) - if os.path.basename(logfile): - logfile += '.' - logfile += 'log-psyco' - if hasattr(_psyco, 'VERBOSE_LEVEL'): - print >> sys.stderr, 'psyco: logging to', logfile - # logger.current should be a real file object; subtle problems - # will show up if its write() and flush() methods are written - # in Python, as Psyco will invoke them while compiling. - logger.current = open(logfile, mode) - logger.print_charges = top - profiler.logger = logger - logger.writedate('Logging started') - cannotcompile(logger.psycowrite) - _psyco.statwrite(logger=logger.psycowrite) - - -def bind(x, rec=None): - """Enable compilation of the given function, method, or class object. - -If C is a class (or anything with a '__dict__' attribute), bind(C) will -rebind all functions and methods found in C.__dict__ (which means, for -classes, all methods defined in the class but not in its parents). - -The optional second argument specifies the number of recursive -compilation levels: all functions called by func are compiled -up to the given depth of indirection.""" - if isinstance(x, types.MethodType): - x = x.im_func - if isinstance(x, types.FunctionType): - if rec is None: - x.func_code = _psyco.proxycode(x) - else: - x.func_code = _psyco.proxycode(x, rec) - return - if hasattr(x, '__dict__'): - funcs = [o for o in x.__dict__.values() - if isinstance(o, types.MethodType) - or isinstance(o, types.FunctionType)] - if not funcs: - raise error, ("nothing bindable found in %s object" % - type(x).__name__) - for o in funcs: - bind(o, rec) - return - raise TypeError, "cannot bind %s objects" % type(x).__name__ - - -def unbind(x): - """Reverse of bind().""" - if isinstance(x, types.MethodType): - x = x.im_func - if isinstance(x, types.FunctionType): - try: - f = _psyco.unproxycode(x.func_code) - except error: - pass - else: - x.func_code = f.func_code - return - if hasattr(x, '__dict__'): - for o in x.__dict__.values(): - if (isinstance(o, types.MethodType) - or isinstance(o, types.FunctionType)): - unbind(o) - return - raise TypeError, "cannot unbind %s objects" % type(x).__name__ - - -def proxy(x, rec=None): - """Return a Psyco-enabled copy of the function. - -The original function is still available for non-compiled calls. -The optional second argument specifies the number of recursive -compilation levels: all functions called by func are compiled -up to the given depth of indirection.""" - if isinstance(x, types.FunctionType): - if rec is None: - code = _psyco.proxycode(x) - else: - code = _psyco.proxycode(x, rec) - return newfunction(code, x.func_globals, x.func_name) - if isinstance(x, types.MethodType): - p = proxy(x.im_func, rec) - return newinstancemethod(p, x.im_self, x.im_class) - raise TypeError, "cannot proxy %s objects" % type(x).__name__ - - -def unproxy(proxy): - """Return a new copy of the original function of method behind a proxy. -The result behaves like the original function in that calling it -does not trigger compilation nor execution of any compiled code.""" - if isinstance(proxy, types.FunctionType): - return _psyco.unproxycode(proxy.func_code) - if isinstance(proxy, types.MethodType): - f = unproxy(proxy.im_func) - return newinstancemethod(f, proxy.im_self, proxy.im_class) - raise TypeError, "%s objects cannot be proxies" % type(proxy).__name__ - - -def cannotcompile(x): - """Instruct Psyco never to compile the given function, method -or code object.""" - if isinstance(x, types.MethodType): - x = x.im_func - if isinstance(x, types.FunctionType): - x = x.func_code - if isinstance(x, types.CodeType): - _psyco.cannotcompile(x) - else: - raise TypeError, "unexpected %s object" % type(x).__name__ - - -def dumpcodebuf(): - """Write in file psyco.dump a copy of the emitted machine code, -provided Psyco was compiled with a non-zero CODE_DUMP. -See py-utils/httpxam.py to examine psyco.dump.""" - if hasattr(_psyco, 'dumpcodebuf'): - _psyco.dumpcodebuf() - - -########################################################################### -# Psyco variables -# error * the error raised by Psyco -# warning * the warning raised by Psyco -# __in_psyco__ * a new built-in variable which is always zero, but which -# Psyco special-cases by returning 1 instead. So -# __in_psyco__ can be used in a function to know if -# that function is being executed by Psyco or not. diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/text-base/kdictproxy.py.svn-base b/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/text-base/kdictproxy.py.svn-base deleted file mode 100644 index c764e5e..0000000 --- a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/text-base/kdictproxy.py.svn-base +++ /dev/null @@ -1,133 +0,0 @@ -########################################################################### -# -# Support code for the 'psyco.compact' type. - -from __future__ import generators - -try: - from UserDict import DictMixin -except ImportError: - - # backported from Python 2.3 to Python 2.2 - class DictMixin: - # Mixin defining all dictionary methods for classes that already have - # a minimum dictionary interface including getitem, setitem, delitem, - # and keys. Without knowledge of the subclass constructor, the mixin - # does not define __init__() or copy(). In addition to the four base - # methods, progressively more efficiency comes with defining - # __contains__(), __iter__(), and iteritems(). - - # second level definitions support higher levels - def __iter__(self): - for k in self.keys(): - yield k - def has_key(self, key): - try: - value = self[key] - except KeyError: - return False - return True - def __contains__(self, key): - return self.has_key(key) - - # third level takes advantage of second level definitions - def iteritems(self): - for k in self: - yield (k, self[k]) - def iterkeys(self): - return self.__iter__() - - # fourth level uses definitions from lower levels - def itervalues(self): - for _, v in self.iteritems(): - yield v - def values(self): - return [v for _, v in self.iteritems()] - def items(self): - return list(self.iteritems()) - def clear(self): - for key in self.keys(): - del self[key] - def setdefault(self, key, default): - try: - return self[key] - except KeyError: - self[key] = default - return default - def pop(self, key, *args): - if len(args) > 1: - raise TypeError, "pop expected at most 2 arguments, got "\ - + repr(1 + len(args)) - try: - value = self[key] - except KeyError: - if args: - return args[0] - raise - del self[key] - return value - def popitem(self): - try: - k, v = self.iteritems().next() - except StopIteration: - raise KeyError, 'container is empty' - del self[k] - return (k, v) - def update(self, other): - # Make progressively weaker assumptions about "other" - if hasattr(other, 'iteritems'): # iteritems saves memory and lookups - for k, v in other.iteritems(): - self[k] = v - elif hasattr(other, '__iter__'): # iter saves memory - for k in other: - self[k] = other[k] - else: - for k in other.keys(): - self[k] = other[k] - def get(self, key, default=None): - try: - return self[key] - except KeyError: - return default - def __repr__(self): - return repr(dict(self.iteritems())) - def __cmp__(self, other): - if other is None: - return 1 - if isinstance(other, DictMixin): - other = dict(other.iteritems()) - return cmp(dict(self.iteritems()), other) - def __len__(self): - return len(self.keys()) - -########################################################################### - -from _psyco import compact - - -class compactdictproxy(DictMixin): - - def __init__(self, ko): - self._ko = ko # compact object of which 'self' is the dict - - def __getitem__(self, key): - return compact.__getslot__(self._ko, key) - - def __setitem__(self, key, value): - compact.__setslot__(self._ko, key, value) - - def __delitem__(self, key): - compact.__delslot__(self._ko, key) - - def keys(self): - return compact.__members__.__get__(self._ko) - - def clear(self): - keys = self.keys() - keys.reverse() - for key in keys: - del self[key] - - def __repr__(self): - keys = ', '.join(self.keys()) - return '' % (keys,) diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/text-base/logger.py.svn-base b/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/text-base/logger.py.svn-base deleted file mode 100644 index a3c5219..0000000 --- a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/text-base/logger.py.svn-base +++ /dev/null @@ -1,96 +0,0 @@ -########################################################################### -# -# Psyco logger. -# Copyright (C) 2001-2002 Armin Rigo et.al. - -"""Psyco logger. - -See log() in core.py. -""" -########################################################################### - - -import _psyco -from time import time, localtime, strftime - - -current = None -print_charges = 10 -dump_delay = 0.2 -dump_last = 0.0 - -def write(s, level): - t = time() - f = t-int(t) - try: - current.write("%s.%02d %-*s%s\n" % ( - strftime("%X", localtime(int(t))), - int(f*100.0), 63-level, s, - "%"*level)) - current.flush() - except (OSError, IOError): - pass - -def psycowrite(s): - t = time() - f = t-int(t) - try: - current.write("%s.%02d %-*s%s\n" % ( - strftime("%X", localtime(int(t))), - int(f*100.0), 60, s.strip(), - "% %")) - current.flush() - except (OSError, IOError): - pass - -##def writelines(lines, level=0): -## if lines: -## t = time() -## f = t-int(t) -## timedesc = strftime("%x %X", localtime(int(t))) -## print >> current, "%s.%03d %-*s %s" % ( -## timedesc, int(f*1000), -## 50-level, lines[0], -## "+"*level) -## timedesc = " " * (len(timedesc)+5) -## for line in lines[1:]: -## print >> current, timedesc, line - -def writememory(): - write("memory usage: %d+ kb" % _psyco.memory(), 1) - -def dumpcharges(): - global dump_last - if print_charges: - t = time() - if not (dump_last <= t < dump_last+dump_delay): - if t <= dump_last+1.5*dump_delay: - dump_last += dump_delay - else: - dump_last = t - #write("%s: charges:" % who, 0) - lst = _psyco.stattop(print_charges) - if lst: - f = t-int(t) - lines = ["%s.%02d ______\n" % ( - strftime("%X", localtime(int(t))), - int(f*100.0))] - i = 1 - for co, charge in lst: - detail = co.co_filename - if len(detail) > 19: - detail = '...' + detail[-17:] - lines.append(" #%-3d |%4.1f %%| %-26s%20s:%d\n" % - (i, charge*100.0, co.co_name, detail, - co.co_firstlineno)) - i += 1 - current.writelines(lines) - current.flush() - -def writefinalstats(): - dumpcharges() - writememory() - writedate("program exit") - -def writedate(msg): - write('%s, %s' % (msg, strftime("%x")), 20) diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/text-base/profiler.py.svn-base b/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/text-base/profiler.py.svn-base deleted file mode 100644 index f1d06f1..0000000 --- a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/text-base/profiler.py.svn-base +++ /dev/null @@ -1,379 +0,0 @@ -########################################################################### -# -# Psyco profiler (Python part). -# Copyright (C) 2001-2002 Armin Rigo et.al. - -"""Psyco profiler (Python part). - -The implementation of the non-time-critical parts of the profiler. -See profile() and full() in core.py for the easy interface. -""" -########################################################################### - -import _psyco -from support import * -import math, time, types, atexit -now = time.time -try: - import thread -except ImportError: - import dummy_thread as thread - - -# current profiler instance -current = None - -# enabled profilers, in order of priority -profilers = [] - -# logger module (when enabled by core.log()) -logger = None - -# a lock for a thread-safe go() -go_lock = thread.allocate_lock() - -def go(stop=0): - # run the highest-priority profiler in 'profilers' - global current - go_lock.acquire() - try: - prev = current - if stop: - del profilers[:] - if prev: - if profilers and profilers[0] is prev: - return # best profiler already running - prev.stop() - current = None - for p in profilers[:]: - if p.start(): - current = p - if logger: # and p is not prev: - logger.write("%s: starting" % p.__class__.__name__, 5) - return - finally: - go_lock.release() - # no profiler is running now - if stop: - if logger: - logger.writefinalstats() - else: - tag2bind() - -atexit.register(go, 1) - - -def buildfncache(globals, cache): - if hasattr(types.IntType, '__dict__'): - clstypes = (types.ClassType, types.TypeType) - else: - clstypes = types.ClassType - for x in globals.values(): - if isinstance(x, types.MethodType): - x = x.im_func - if isinstance(x, types.FunctionType): - cache[x.func_code] = x, '' - elif isinstance(x, clstypes): - for y in x.__dict__.values(): - if isinstance(y, types.MethodType): - y = y.im_func - if isinstance(y, types.FunctionType): - cache[y.func_code] = y, x.__name__ - -# code-to-function mapping (cache) -function_cache = {} - -def trytobind(co, globals, log=1): - try: - f, clsname = function_cache[co] - except KeyError: - buildfncache(globals, function_cache) - try: - f, clsname = function_cache[co] - except KeyError: - if logger: - logger.write('warning: cannot find function %s in %s' % - (co.co_name, globals.get('__name__', '?')), 3) - return # give up - if logger and log: - modulename = globals.get('__name__', '?') - if clsname: - modulename += '.' + clsname - logger.write('bind function: %s.%s' % (modulename, co.co_name), 1) - f.func_code = _psyco.proxycode(f) - - -# the list of code objects that have been tagged -tagged_codes = [] - -def tag(co, globals): - if logger: - try: - f, clsname = function_cache[co] - except KeyError: - buildfncache(globals, function_cache) - try: - f, clsname = function_cache[co] - except KeyError: - clsname = '' # give up - modulename = globals.get('__name__', '?') - if clsname: - modulename += '.' + clsname - logger.write('tag function: %s.%s' % (modulename, co.co_name), 1) - tagged_codes.append((co, globals)) - _psyco.turbo_frame(co) - _psyco.turbo_code(co) - -def tag2bind(): - if tagged_codes: - if logger: - logger.write('profiling stopped, binding %d functions' % - len(tagged_codes), 2) - for co, globals in tagged_codes: - trytobind(co, globals, 0) - function_cache.clear() - del tagged_codes[:] - - -class Profiler: - MemoryTimerResolution = 0.103 - - def run(self, memory, time, memorymax, timemax): - self.memory = memory - self.memorymax = memorymax - self.time = time - if timemax is None: - self.endtime = None - else: - self.endtime = now() + timemax - self.alarms = [] - profilers.append(self) - go() - - def start(self): - curmem = _psyco.memory() - memlimits = [] - if self.memorymax is not None: - if curmem >= self.memorymax: - if logger: - logger.writememory() - return self.limitreached('memorymax') - memlimits.append(self.memorymax) - if self.memory is not None: - if self.memory <= 0: - if logger: - logger.writememory() - return self.limitreached('memory') - memlimits.append(curmem + self.memory) - self.memory_at_start = curmem - - curtime = now() - timelimits = [] - if self.endtime is not None: - if curtime >= self.endtime: - return self.limitreached('timemax') - timelimits.append(self.endtime - curtime) - if self.time is not None: - if self.time <= 0.0: - return self.limitreached('time') - timelimits.append(self.time) - self.time_at_start = curtime - - try: - self.do_start() - except error, e: - if logger: - logger.write('%s: disabled by psyco.error:' % ( - self.__class__.__name__), 4) - logger.write(' %s' % str(e), 3) - return 0 - - if memlimits: - self.memlimits_args = (time.sleep, (self.MemoryTimerResolution,), - self.check_memory, (min(memlimits),)) - self.alarms.append(_psyco.alarm(*self.memlimits_args)) - if timelimits: - self.alarms.append(_psyco.alarm(time.sleep, (min(timelimits),), - self.time_out)) - return 1 - - def stop(self): - for alarm in self.alarms: - alarm.stop(0) - for alarm in self.alarms: - alarm.stop(1) # wait for parallel threads to stop - del self.alarms[:] - if self.time is not None: - self.time -= now() - self.time_at_start - if self.memory is not None: - self.memory -= _psyco.memory() - self.memory_at_start - - try: - self.do_stop() - except error: - return 0 - return 1 - - def check_memory(self, limit): - if _psyco.memory() < limit: - return self.memlimits_args - go() - - def time_out(self): - self.time = 0.0 - go() - - def limitreached(self, limitname): - try: - profilers.remove(self) - except ValueError: - pass - if logger: - logger.write('%s: disabled (%s limit reached)' % ( - self.__class__.__name__, limitname), 4) - return 0 - - -class FullCompiler(Profiler): - - def do_start(self): - _psyco.profiling('f') - - def do_stop(self): - _psyco.profiling('.') - - -class RunOnly(Profiler): - - def do_start(self): - _psyco.profiling('n') - - def do_stop(self): - _psyco.profiling('.') - - -class ChargeProfiler(Profiler): - - def __init__(self, watermark, parentframe): - self.watermark = watermark - self.parent2 = parentframe * 2.0 - self.lock = thread.allocate_lock() - - def init_charges(self): - _psyco.statwrite(watermark = self.watermark, - parent2 = self.parent2) - - def do_stop(self): - _psyco.profiling('.') - _psyco.statwrite(callback = None) - - -class ActiveProfiler(ChargeProfiler): - - def active_start(self): - _psyco.profiling('p') - - def do_start(self): - self.init_charges() - self.active_start() - _psyco.statwrite(callback = self.charge_callback) - - def charge_callback(self, frame, charge): - tag(frame.f_code, frame.f_globals) - - -class PassiveProfiler(ChargeProfiler): - - initial_charge_unit = _psyco.statread('unit') - reset_stats_after = 120 # half-lives (maximum 200!) - reset_limit = initial_charge_unit * (2.0 ** reset_stats_after) - - def __init__(self, watermark, halflife, pollfreq, parentframe): - ChargeProfiler.__init__(self, watermark, parentframe) - self.pollfreq = pollfreq - # self.progress is slightly more than 1.0, and computed so that - # do_profile() will double the change_unit every 'halflife' seconds. - self.progress = 2.0 ** (1.0 / (halflife * pollfreq)) - - def reset(self): - _psyco.statwrite(unit = self.initial_charge_unit, callback = None) - _psyco.statreset() - if logger: - logger.write("%s: resetting stats" % self.__class__.__name__, 1) - - def passive_start(self): - self.passivealarm_args = (time.sleep, (1.0 / self.pollfreq,), - self.do_profile) - self.alarms.append(_psyco.alarm(*self.passivealarm_args)) - - def do_start(self): - tag2bind() - self.init_charges() - self.passive_start() - - def do_profile(self): - _psyco.statcollect() - if logger: - logger.dumpcharges() - nunit = _psyco.statread('unit') * self.progress - if nunit > self.reset_limit: - self.reset() - else: - _psyco.statwrite(unit = nunit, callback = self.charge_callback) - return self.passivealarm_args - - def charge_callback(self, frame, charge): - trytobind(frame.f_code, frame.f_globals) - - -class ActivePassiveProfiler(PassiveProfiler, ActiveProfiler): - - def do_start(self): - self.init_charges() - self.active_start() - self.passive_start() - - def charge_callback(self, frame, charge): - tag(frame.f_code, frame.f_globals) - - - -# -# we register our own version of sys.settrace(), sys.setprofile() -# and thread.start_new_thread(). -# - -def psyco_settrace(*args, **kw): - "This is the Psyco-aware version of sys.settrace()." - result = original_settrace(*args, **kw) - go() - return result - -def psyco_setprofile(*args, **kw): - "This is the Psyco-aware version of sys.setprofile()." - result = original_setprofile(*args, **kw) - go() - return result - -def psyco_thread_stub(callable, args, kw): - _psyco.statcollect() - if kw is None: - return callable(*args) - else: - return callable(*args, **kw) - -def psyco_start_new_thread(callable, args, kw=None): - "This is the Psyco-aware version of thread.start_new_thread()." - return original_start_new_thread(psyco_thread_stub, (callable, args, kw)) - -original_settrace = sys.settrace -original_setprofile = sys.setprofile -original_start_new_thread = thread.start_new_thread -sys.settrace = psyco_settrace -sys.setprofile = psyco_setprofile -thread.start_new_thread = psyco_start_new_thread -# hack to patch threading._start_new_thread if the module is -# already loaded -if ('threading' in sys.modules and - hasattr(sys.modules['threading'], '_start_new_thread')): - sys.modules['threading']._start_new_thread = psyco_start_new_thread diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/text-base/support.py.svn-base b/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/text-base/support.py.svn-base deleted file mode 100644 index 387321a..0000000 --- a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/.svn/text-base/support.py.svn-base +++ /dev/null @@ -1,191 +0,0 @@ -########################################################################### -# -# Psyco general support module. -# Copyright (C) 2001-2002 Armin Rigo et.al. - -"""Psyco general support module. - -For internal use. -""" -########################################################################### - -import sys, _psyco, __builtin__ - -error = _psyco.error -class warning(Warning): - pass - -_psyco.NoLocalsWarning = warning - -def warn(msg): - from warnings import warn - warn(msg, warning, stacklevel=2) - -# -# Version checks -# -__version__ = 0x010600f0 -if _psyco.PSYVER != __version__: - raise error, "version mismatch between Psyco parts, reinstall it" - -version_info = (__version__ >> 24, - (__version__ >> 16) & 0xff, - (__version__ >> 8) & 0xff, - {0xa0: 'alpha', - 0xb0: 'beta', - 0xc0: 'candidate', - 0xf0: 'final'}[__version__ & 0xf0], - __version__ & 0xf) - - -VERSION_LIMITS = [0x02020200, # 2.2.2 - 0x02030000, # 2.3 - 0x02040000] # 2.4 - -if ([v for v in VERSION_LIMITS if v <= sys.hexversion] != - [v for v in VERSION_LIMITS if v <= _psyco.PYVER ]): - if sys.hexversion < VERSION_LIMITS[0]: - warn("Psyco requires Python version 2.2.2 or later") - else: - warn("Psyco version does not match Python version. " - "Psyco must be updated or recompiled") - - -if hasattr(_psyco, 'ALL_CHECKS') and hasattr(_psyco, 'VERBOSE_LEVEL'): - print >> sys.stderr, ('psyco: running in debugging mode on %s' % - _psyco.PROCESSOR) - - -########################################################################### -# sys._getframe() gives strange results on a mixed Psyco- and Python-style -# stack frame. Psyco provides a replacement that partially emulates Python -# frames from Psyco frames. The new sys._getframe() may return objects of -# a custom "Psyco frame" type, which is a subtype of the normal frame type. -# -# The same problems require some other built-in functions to be replaced -# as well. Note that the local variables are not available in any -# dictionary with Psyco. - - -class Frame: - pass - - -class PythonFrame(Frame): - - def __init__(self, frame): - self.__dict__.update({ - '_frame': frame, - }) - - def __getattr__(self, attr): - if attr == 'f_back': - try: - result = embedframe(_psyco.getframe(self._frame)) - except ValueError: - result = None - except error: - warn("f_back is skipping dead Psyco frames") - result = self._frame.f_back - self.__dict__['f_back'] = result - return result - else: - return getattr(self._frame, attr) - - def __setattr__(self, attr, value): - setattr(self._frame, attr, value) - - def __delattr__(self, attr): - delattr(self._frame, attr) - - -class PsycoFrame(Frame): - - def __init__(self, tag): - self.__dict__.update({ - '_tag' : tag, - 'f_code' : tag[0], - 'f_globals': tag[1], - }) - - def __getattr__(self, attr): - if attr == 'f_back': - try: - result = embedframe(_psyco.getframe(self._tag)) - except ValueError: - result = None - elif attr == 'f_lineno': - result = self.f_code.co_firstlineno # better than nothing - elif attr == 'f_builtins': - result = self.f_globals['__builtins__'] - elif attr == 'f_restricted': - result = self.f_builtins is not __builtins__ - elif attr == 'f_locals': - raise AttributeError, ("local variables of functions run by Psyco " - "cannot be accessed in any way, sorry") - else: - raise AttributeError, ("emulated Psyco frames have " - "no '%s' attribute" % attr) - self.__dict__[attr] = result - return result - - def __setattr__(self, attr, value): - raise AttributeError, "Psyco frame objects are read-only" - - def __delattr__(self, attr): - if attr == 'f_trace': - # for bdb which relies on CPython frames exhibiting a slightly - # buggy behavior: you can 'del f.f_trace' as often as you like - # even without having set it previously. - return - raise AttributeError, "Psyco frame objects are read-only" - - -def embedframe(result): - if type(result) is type(()): - return PsycoFrame(result) - else: - return PythonFrame(result) - -def _getframe(depth=0): - """Return a frame object from the call stack. This is a replacement for -sys._getframe() which is aware of Psyco frames. - -The returned objects are instances of either PythonFrame or PsycoFrame -instead of being real Python-level frame object, so that they can emulate -the common attributes of frame objects. - -The original sys._getframe() ignoring Psyco frames altogether is stored in -psyco._getrealframe(). See also psyco._getemulframe().""" - # 'depth+1' to account for this _getframe() Python function - return embedframe(_psyco.getframe(depth+1)) - -def _getemulframe(depth=0): - """As _getframe(), but the returned objects are real Python frame objects -emulating Psyco frames. Some of their attributes can be wrong or missing, -however.""" - # 'depth+1' to account for this _getemulframe() Python function - return _psyco.getframe(depth+1, 1) - -def patch(name, module=__builtin__): - f = getattr(_psyco, name) - org = getattr(module, name) - if org is not f: - setattr(module, name, f) - setattr(_psyco, 'original_' + name, org) - -_getrealframe = sys._getframe -sys._getframe = _getframe -patch('globals') -patch('eval') -patch('execfile') -patch('locals') -patch('vars') -patch('dir') -patch('input') -_psyco.original_raw_input = raw_input -__builtin__.__in_psyco__ = 0==1 # False - -if hasattr(_psyco, 'compact'): - import kdictproxy - _psyco.compactdictproxy = kdictproxy.compactdictproxy diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/__init__.py b/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/__init__.py deleted file mode 100644 index d25e197..0000000 --- a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/__init__.py +++ /dev/null @@ -1,54 +0,0 @@ -########################################################################### -# -# Psyco top-level file of the Psyco package. -# Copyright (C) 2001-2002 Armin Rigo et.al. - -"""Psyco -- the Python Specializing Compiler. - -Typical usage: add the following lines to your application's main module, -preferably after the other imports: - -try: - import psyco - psyco.full() -except ImportError: - print 'Psyco not installed, the program will just run slower' -""" -########################################################################### - - -# -# This module is present to make 'psyco' a package and to -# publish the main functions and variables. -# -# More documentation can be found in core.py. -# - - -# Try to import the dynamic-loading _psyco and report errors -try: - import _psyco -except ImportError, e: - extramsg = '' - import sys, imp - try: - file, filename, (suffix, mode, type) = imp.find_module('_psyco', __path__) - except ImportError: - ext = [suffix for suffix, mode, type in imp.get_suffixes() - if type == imp.C_EXTENSION] - if ext: - extramsg = (" (cannot locate the compiled extension '_psyco%s' " - "in the package path '%s')" % (ext[0], '; '.join(__path__))) - else: - extramsg = (" (check that the compiled extension '%s' is for " - "the correct Python version; this is Python %s)" % - (filename, sys.version.split()[0])) - raise ImportError, str(e) + extramsg - -# Publish important data by importing them in the package -from support import __version__, error, warning, _getrealframe, _getemulframe -from support import version_info, __version__ as hexversion -from core import full, profile, background, runonly, stop, cannotcompile -from core import log, bind, unbind, proxy, unproxy, dumpcodebuf -from _psyco import setfilter -from _psyco import compact, compacttype diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/classes.py b/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/classes.py deleted file mode 100644 index 0563f84..0000000 --- a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/classes.py +++ /dev/null @@ -1,42 +0,0 @@ -########################################################################### -# -# Psyco class support module. -# Copyright (C) 2001-2002 Armin Rigo et.al. - -"""Psyco class support module. - -'psyco.classes.psyobj' is an alternate Psyco-optimized root for classes. -Any class inheriting from it or using the metaclass '__metaclass__' might -get optimized specifically for Psyco. It is equivalent to call -psyco.bind() on the class object after its creation. - -Importing everything from psyco.classes in a module will import the -'__metaclass__' name, so all classes defined after a - - from psyco.classes import * - -will automatically use the Psyco-optimized metaclass. -""" -########################################################################### - -__all__ = ['psyobj', 'psymetaclass', '__metaclass__'] - - -from _psyco import compacttype -import core -from types import FunctionType - -class psymetaclass(compacttype): - "Psyco-optimized meta-class. Turns all methods into Psyco proxies." - - def __new__(cls, name, bases, dict): - bindlist = dict.get('__psyco__bind__') - if bindlist is None: - bindlist = [key for key, value in dict.items() - if isinstance(value, FunctionType)] - for attr in bindlist: - dict[attr] = core.proxy(dict[attr]) - return super(psymetaclass, cls).__new__(cls, name, bases, dict) - -psyobj = psymetaclass("psyobj", (), {}) -__metaclass__ = psymetaclass diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/core.py b/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/core.py deleted file mode 100644 index 995c9ae..0000000 --- a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/core.py +++ /dev/null @@ -1,231 +0,0 @@ -########################################################################### -# -# Psyco main functions. -# Copyright (C) 2001-2002 Armin Rigo et.al. - -"""Psyco main functions. - -Here are the routines that you can use from your applications. -These are mostly interfaces to the C core, but they depend on -the Python version. - -You can use these functions from the 'psyco' module instead of -'psyco.core', e.g. - - import psyco - psyco.log('/tmp/psyco.log') - psyco.profile() -""" -########################################################################### - -import _psyco -import types -from support import * - -newfunction = types.FunctionType -newinstancemethod = types.MethodType - - -# Default charge profiler values -default_watermark = 0.09 # between 0.0 (0%) and 1.0 (100%) -default_halflife = 0.5 # seconds -default_pollfreq_profile = 20 # Hz -default_pollfreq_background = 100 # Hz -- a maximum for sleep's resolution -default_parentframe = 0.25 # should not be more than 0.5 (50%) - - -def full(memory=None, time=None, memorymax=None, timemax=None): - """Compile as much as possible. - -Typical use is for small scripts performing intensive computations -or string handling.""" - import profiler - p = profiler.FullCompiler() - p.run(memory, time, memorymax, timemax) - - -def profile(watermark = default_watermark, - halflife = default_halflife, - pollfreq = default_pollfreq_profile, - parentframe = default_parentframe, - memory=None, time=None, memorymax=None, timemax=None): - """Turn on profiling. - -The 'watermark' parameter controls how easily running functions will -be compiled. The smaller the value, the more functions are compiled.""" - import profiler - p = profiler.ActivePassiveProfiler(watermark, halflife, - pollfreq, parentframe) - p.run(memory, time, memorymax, timemax) - - -def background(watermark = default_watermark, - halflife = default_halflife, - pollfreq = default_pollfreq_background, - parentframe = default_parentframe, - memory=None, time=None, memorymax=None, timemax=None): - """Turn on passive profiling. - -This is a very lightweight mode in which only intensively computing -functions can be detected. The smaller the 'watermark', the more functions -are compiled.""" - import profiler - p = profiler.PassiveProfiler(watermark, halflife, pollfreq, parentframe) - p.run(memory, time, memorymax, timemax) - - -def runonly(memory=None, time=None, memorymax=None, timemax=None): - """Nonprofiler. - -XXX check if this is useful and document.""" - import profiler - p = profiler.RunOnly() - p.run(memory, time, memorymax, timemax) - - -def stop(): - """Turn off all automatic compilation. bind() calls remain in effect.""" - import profiler - profiler.go([]) - - -def log(logfile='', mode='w', top=10): - """Enable logging to the given file. - -If the file name is unspecified, a default name is built by appending -a 'log-psyco' extension to the main script name. - -Mode is 'a' to append to a possibly existing file or 'w' to overwrite -an existing file. Note that the log file may grow quickly in 'a' mode.""" - import profiler, logger - if not logfile: - import os - logfile, dummy = os.path.splitext(sys.argv[0]) - if os.path.basename(logfile): - logfile += '.' - logfile += 'log-psyco' - if hasattr(_psyco, 'VERBOSE_LEVEL'): - print >> sys.stderr, 'psyco: logging to', logfile - # logger.current should be a real file object; subtle problems - # will show up if its write() and flush() methods are written - # in Python, as Psyco will invoke them while compiling. - logger.current = open(logfile, mode) - logger.print_charges = top - profiler.logger = logger - logger.writedate('Logging started') - cannotcompile(logger.psycowrite) - _psyco.statwrite(logger=logger.psycowrite) - - -def bind(x, rec=None): - """Enable compilation of the given function, method, or class object. - -If C is a class (or anything with a '__dict__' attribute), bind(C) will -rebind all functions and methods found in C.__dict__ (which means, for -classes, all methods defined in the class but not in its parents). - -The optional second argument specifies the number of recursive -compilation levels: all functions called by func are compiled -up to the given depth of indirection.""" - if isinstance(x, types.MethodType): - x = x.im_func - if isinstance(x, types.FunctionType): - if rec is None: - x.func_code = _psyco.proxycode(x) - else: - x.func_code = _psyco.proxycode(x, rec) - return - if hasattr(x, '__dict__'): - funcs = [o for o in x.__dict__.values() - if isinstance(o, types.MethodType) - or isinstance(o, types.FunctionType)] - if not funcs: - raise error, ("nothing bindable found in %s object" % - type(x).__name__) - for o in funcs: - bind(o, rec) - return - raise TypeError, "cannot bind %s objects" % type(x).__name__ - - -def unbind(x): - """Reverse of bind().""" - if isinstance(x, types.MethodType): - x = x.im_func - if isinstance(x, types.FunctionType): - try: - f = _psyco.unproxycode(x.func_code) - except error: - pass - else: - x.func_code = f.func_code - return - if hasattr(x, '__dict__'): - for o in x.__dict__.values(): - if (isinstance(o, types.MethodType) - or isinstance(o, types.FunctionType)): - unbind(o) - return - raise TypeError, "cannot unbind %s objects" % type(x).__name__ - - -def proxy(x, rec=None): - """Return a Psyco-enabled copy of the function. - -The original function is still available for non-compiled calls. -The optional second argument specifies the number of recursive -compilation levels: all functions called by func are compiled -up to the given depth of indirection.""" - if isinstance(x, types.FunctionType): - if rec is None: - code = _psyco.proxycode(x) - else: - code = _psyco.proxycode(x, rec) - return newfunction(code, x.func_globals, x.func_name) - if isinstance(x, types.MethodType): - p = proxy(x.im_func, rec) - return newinstancemethod(p, x.im_self, x.im_class) - raise TypeError, "cannot proxy %s objects" % type(x).__name__ - - -def unproxy(proxy): - """Return a new copy of the original function of method behind a proxy. -The result behaves like the original function in that calling it -does not trigger compilation nor execution of any compiled code.""" - if isinstance(proxy, types.FunctionType): - return _psyco.unproxycode(proxy.func_code) - if isinstance(proxy, types.MethodType): - f = unproxy(proxy.im_func) - return newinstancemethod(f, proxy.im_self, proxy.im_class) - raise TypeError, "%s objects cannot be proxies" % type(proxy).__name__ - - -def cannotcompile(x): - """Instruct Psyco never to compile the given function, method -or code object.""" - if isinstance(x, types.MethodType): - x = x.im_func - if isinstance(x, types.FunctionType): - x = x.func_code - if isinstance(x, types.CodeType): - _psyco.cannotcompile(x) - else: - raise TypeError, "unexpected %s object" % type(x).__name__ - - -def dumpcodebuf(): - """Write in file psyco.dump a copy of the emitted machine code, -provided Psyco was compiled with a non-zero CODE_DUMP. -See py-utils/httpxam.py to examine psyco.dump.""" - if hasattr(_psyco, 'dumpcodebuf'): - _psyco.dumpcodebuf() - - -########################################################################### -# Psyco variables -# error * the error raised by Psyco -# warning * the warning raised by Psyco -# __in_psyco__ * a new built-in variable which is always zero, but which -# Psyco special-cases by returning 1 instead. So -# __in_psyco__ can be used in a function to know if -# that function is being executed by Psyco or not. diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/kdictproxy.py b/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/kdictproxy.py deleted file mode 100644 index c764e5e..0000000 --- a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/kdictproxy.py +++ /dev/null @@ -1,133 +0,0 @@ -########################################################################### -# -# Support code for the 'psyco.compact' type. - -from __future__ import generators - -try: - from UserDict import DictMixin -except ImportError: - - # backported from Python 2.3 to Python 2.2 - class DictMixin: - # Mixin defining all dictionary methods for classes that already have - # a minimum dictionary interface including getitem, setitem, delitem, - # and keys. Without knowledge of the subclass constructor, the mixin - # does not define __init__() or copy(). In addition to the four base - # methods, progressively more efficiency comes with defining - # __contains__(), __iter__(), and iteritems(). - - # second level definitions support higher levels - def __iter__(self): - for k in self.keys(): - yield k - def has_key(self, key): - try: - value = self[key] - except KeyError: - return False - return True - def __contains__(self, key): - return self.has_key(key) - - # third level takes advantage of second level definitions - def iteritems(self): - for k in self: - yield (k, self[k]) - def iterkeys(self): - return self.__iter__() - - # fourth level uses definitions from lower levels - def itervalues(self): - for _, v in self.iteritems(): - yield v - def values(self): - return [v for _, v in self.iteritems()] - def items(self): - return list(self.iteritems()) - def clear(self): - for key in self.keys(): - del self[key] - def setdefault(self, key, default): - try: - return self[key] - except KeyError: - self[key] = default - return default - def pop(self, key, *args): - if len(args) > 1: - raise TypeError, "pop expected at most 2 arguments, got "\ - + repr(1 + len(args)) - try: - value = self[key] - except KeyError: - if args: - return args[0] - raise - del self[key] - return value - def popitem(self): - try: - k, v = self.iteritems().next() - except StopIteration: - raise KeyError, 'container is empty' - del self[k] - return (k, v) - def update(self, other): - # Make progressively weaker assumptions about "other" - if hasattr(other, 'iteritems'): # iteritems saves memory and lookups - for k, v in other.iteritems(): - self[k] = v - elif hasattr(other, '__iter__'): # iter saves memory - for k in other: - self[k] = other[k] - else: - for k in other.keys(): - self[k] = other[k] - def get(self, key, default=None): - try: - return self[key] - except KeyError: - return default - def __repr__(self): - return repr(dict(self.iteritems())) - def __cmp__(self, other): - if other is None: - return 1 - if isinstance(other, DictMixin): - other = dict(other.iteritems()) - return cmp(dict(self.iteritems()), other) - def __len__(self): - return len(self.keys()) - -########################################################################### - -from _psyco import compact - - -class compactdictproxy(DictMixin): - - def __init__(self, ko): - self._ko = ko # compact object of which 'self' is the dict - - def __getitem__(self, key): - return compact.__getslot__(self._ko, key) - - def __setitem__(self, key, value): - compact.__setslot__(self._ko, key, value) - - def __delitem__(self, key): - compact.__delslot__(self._ko, key) - - def keys(self): - return compact.__members__.__get__(self._ko) - - def clear(self): - keys = self.keys() - keys.reverse() - for key in keys: - del self[key] - - def __repr__(self): - keys = ', '.join(self.keys()) - return '' % (keys,) diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/logger.py b/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/logger.py deleted file mode 100644 index a3c5219..0000000 --- a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/logger.py +++ /dev/null @@ -1,96 +0,0 @@ -########################################################################### -# -# Psyco logger. -# Copyright (C) 2001-2002 Armin Rigo et.al. - -"""Psyco logger. - -See log() in core.py. -""" -########################################################################### - - -import _psyco -from time import time, localtime, strftime - - -current = None -print_charges = 10 -dump_delay = 0.2 -dump_last = 0.0 - -def write(s, level): - t = time() - f = t-int(t) - try: - current.write("%s.%02d %-*s%s\n" % ( - strftime("%X", localtime(int(t))), - int(f*100.0), 63-level, s, - "%"*level)) - current.flush() - except (OSError, IOError): - pass - -def psycowrite(s): - t = time() - f = t-int(t) - try: - current.write("%s.%02d %-*s%s\n" % ( - strftime("%X", localtime(int(t))), - int(f*100.0), 60, s.strip(), - "% %")) - current.flush() - except (OSError, IOError): - pass - -##def writelines(lines, level=0): -## if lines: -## t = time() -## f = t-int(t) -## timedesc = strftime("%x %X", localtime(int(t))) -## print >> current, "%s.%03d %-*s %s" % ( -## timedesc, int(f*1000), -## 50-level, lines[0], -## "+"*level) -## timedesc = " " * (len(timedesc)+5) -## for line in lines[1:]: -## print >> current, timedesc, line - -def writememory(): - write("memory usage: %d+ kb" % _psyco.memory(), 1) - -def dumpcharges(): - global dump_last - if print_charges: - t = time() - if not (dump_last <= t < dump_last+dump_delay): - if t <= dump_last+1.5*dump_delay: - dump_last += dump_delay - else: - dump_last = t - #write("%s: charges:" % who, 0) - lst = _psyco.stattop(print_charges) - if lst: - f = t-int(t) - lines = ["%s.%02d ______\n" % ( - strftime("%X", localtime(int(t))), - int(f*100.0))] - i = 1 - for co, charge in lst: - detail = co.co_filename - if len(detail) > 19: - detail = '...' + detail[-17:] - lines.append(" #%-3d |%4.1f %%| %-26s%20s:%d\n" % - (i, charge*100.0, co.co_name, detail, - co.co_firstlineno)) - i += 1 - current.writelines(lines) - current.flush() - -def writefinalstats(): - dumpcharges() - writememory() - writedate("program exit") - -def writedate(msg): - write('%s, %s' % (msg, strftime("%x")), 20) diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/profiler.py b/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/profiler.py deleted file mode 100644 index f1d06f1..0000000 --- a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/profiler.py +++ /dev/null @@ -1,379 +0,0 @@ -########################################################################### -# -# Psyco profiler (Python part). -# Copyright (C) 2001-2002 Armin Rigo et.al. - -"""Psyco profiler (Python part). - -The implementation of the non-time-critical parts of the profiler. -See profile() and full() in core.py for the easy interface. -""" -########################################################################### - -import _psyco -from support import * -import math, time, types, atexit -now = time.time -try: - import thread -except ImportError: - import dummy_thread as thread - - -# current profiler instance -current = None - -# enabled profilers, in order of priority -profilers = [] - -# logger module (when enabled by core.log()) -logger = None - -# a lock for a thread-safe go() -go_lock = thread.allocate_lock() - -def go(stop=0): - # run the highest-priority profiler in 'profilers' - global current - go_lock.acquire() - try: - prev = current - if stop: - del profilers[:] - if prev: - if profilers and profilers[0] is prev: - return # best profiler already running - prev.stop() - current = None - for p in profilers[:]: - if p.start(): - current = p - if logger: # and p is not prev: - logger.write("%s: starting" % p.__class__.__name__, 5) - return - finally: - go_lock.release() - # no profiler is running now - if stop: - if logger: - logger.writefinalstats() - else: - tag2bind() - -atexit.register(go, 1) - - -def buildfncache(globals, cache): - if hasattr(types.IntType, '__dict__'): - clstypes = (types.ClassType, types.TypeType) - else: - clstypes = types.ClassType - for x in globals.values(): - if isinstance(x, types.MethodType): - x = x.im_func - if isinstance(x, types.FunctionType): - cache[x.func_code] = x, '' - elif isinstance(x, clstypes): - for y in x.__dict__.values(): - if isinstance(y, types.MethodType): - y = y.im_func - if isinstance(y, types.FunctionType): - cache[y.func_code] = y, x.__name__ - -# code-to-function mapping (cache) -function_cache = {} - -def trytobind(co, globals, log=1): - try: - f, clsname = function_cache[co] - except KeyError: - buildfncache(globals, function_cache) - try: - f, clsname = function_cache[co] - except KeyError: - if logger: - logger.write('warning: cannot find function %s in %s' % - (co.co_name, globals.get('__name__', '?')), 3) - return # give up - if logger and log: - modulename = globals.get('__name__', '?') - if clsname: - modulename += '.' + clsname - logger.write('bind function: %s.%s' % (modulename, co.co_name), 1) - f.func_code = _psyco.proxycode(f) - - -# the list of code objects that have been tagged -tagged_codes = [] - -def tag(co, globals): - if logger: - try: - f, clsname = function_cache[co] - except KeyError: - buildfncache(globals, function_cache) - try: - f, clsname = function_cache[co] - except KeyError: - clsname = '' # give up - modulename = globals.get('__name__', '?') - if clsname: - modulename += '.' + clsname - logger.write('tag function: %s.%s' % (modulename, co.co_name), 1) - tagged_codes.append((co, globals)) - _psyco.turbo_frame(co) - _psyco.turbo_code(co) - -def tag2bind(): - if tagged_codes: - if logger: - logger.write('profiling stopped, binding %d functions' % - len(tagged_codes), 2) - for co, globals in tagged_codes: - trytobind(co, globals, 0) - function_cache.clear() - del tagged_codes[:] - - -class Profiler: - MemoryTimerResolution = 0.103 - - def run(self, memory, time, memorymax, timemax): - self.memory = memory - self.memorymax = memorymax - self.time = time - if timemax is None: - self.endtime = None - else: - self.endtime = now() + timemax - self.alarms = [] - profilers.append(self) - go() - - def start(self): - curmem = _psyco.memory() - memlimits = [] - if self.memorymax is not None: - if curmem >= self.memorymax: - if logger: - logger.writememory() - return self.limitreached('memorymax') - memlimits.append(self.memorymax) - if self.memory is not None: - if self.memory <= 0: - if logger: - logger.writememory() - return self.limitreached('memory') - memlimits.append(curmem + self.memory) - self.memory_at_start = curmem - - curtime = now() - timelimits = [] - if self.endtime is not None: - if curtime >= self.endtime: - return self.limitreached('timemax') - timelimits.append(self.endtime - curtime) - if self.time is not None: - if self.time <= 0.0: - return self.limitreached('time') - timelimits.append(self.time) - self.time_at_start = curtime - - try: - self.do_start() - except error, e: - if logger: - logger.write('%s: disabled by psyco.error:' % ( - self.__class__.__name__), 4) - logger.write(' %s' % str(e), 3) - return 0 - - if memlimits: - self.memlimits_args = (time.sleep, (self.MemoryTimerResolution,), - self.check_memory, (min(memlimits),)) - self.alarms.append(_psyco.alarm(*self.memlimits_args)) - if timelimits: - self.alarms.append(_psyco.alarm(time.sleep, (min(timelimits),), - self.time_out)) - return 1 - - def stop(self): - for alarm in self.alarms: - alarm.stop(0) - for alarm in self.alarms: - alarm.stop(1) # wait for parallel threads to stop - del self.alarms[:] - if self.time is not None: - self.time -= now() - self.time_at_start - if self.memory is not None: - self.memory -= _psyco.memory() - self.memory_at_start - - try: - self.do_stop() - except error: - return 0 - return 1 - - def check_memory(self, limit): - if _psyco.memory() < limit: - return self.memlimits_args - go() - - def time_out(self): - self.time = 0.0 - go() - - def limitreached(self, limitname): - try: - profilers.remove(self) - except ValueError: - pass - if logger: - logger.write('%s: disabled (%s limit reached)' % ( - self.__class__.__name__, limitname), 4) - return 0 - - -class FullCompiler(Profiler): - - def do_start(self): - _psyco.profiling('f') - - def do_stop(self): - _psyco.profiling('.') - - -class RunOnly(Profiler): - - def do_start(self): - _psyco.profiling('n') - - def do_stop(self): - _psyco.profiling('.') - - -class ChargeProfiler(Profiler): - - def __init__(self, watermark, parentframe): - self.watermark = watermark - self.parent2 = parentframe * 2.0 - self.lock = thread.allocate_lock() - - def init_charges(self): - _psyco.statwrite(watermark = self.watermark, - parent2 = self.parent2) - - def do_stop(self): - _psyco.profiling('.') - _psyco.statwrite(callback = None) - - -class ActiveProfiler(ChargeProfiler): - - def active_start(self): - _psyco.profiling('p') - - def do_start(self): - self.init_charges() - self.active_start() - _psyco.statwrite(callback = self.charge_callback) - - def charge_callback(self, frame, charge): - tag(frame.f_code, frame.f_globals) - - -class PassiveProfiler(ChargeProfiler): - - initial_charge_unit = _psyco.statread('unit') - reset_stats_after = 120 # half-lives (maximum 200!) - reset_limit = initial_charge_unit * (2.0 ** reset_stats_after) - - def __init__(self, watermark, halflife, pollfreq, parentframe): - ChargeProfiler.__init__(self, watermark, parentframe) - self.pollfreq = pollfreq - # self.progress is slightly more than 1.0, and computed so that - # do_profile() will double the change_unit every 'halflife' seconds. - self.progress = 2.0 ** (1.0 / (halflife * pollfreq)) - - def reset(self): - _psyco.statwrite(unit = self.initial_charge_unit, callback = None) - _psyco.statreset() - if logger: - logger.write("%s: resetting stats" % self.__class__.__name__, 1) - - def passive_start(self): - self.passivealarm_args = (time.sleep, (1.0 / self.pollfreq,), - self.do_profile) - self.alarms.append(_psyco.alarm(*self.passivealarm_args)) - - def do_start(self): - tag2bind() - self.init_charges() - self.passive_start() - - def do_profile(self): - _psyco.statcollect() - if logger: - logger.dumpcharges() - nunit = _psyco.statread('unit') * self.progress - if nunit > self.reset_limit: - self.reset() - else: - _psyco.statwrite(unit = nunit, callback = self.charge_callback) - return self.passivealarm_args - - def charge_callback(self, frame, charge): - trytobind(frame.f_code, frame.f_globals) - - -class ActivePassiveProfiler(PassiveProfiler, ActiveProfiler): - - def do_start(self): - self.init_charges() - self.active_start() - self.passive_start() - - def charge_callback(self, frame, charge): - tag(frame.f_code, frame.f_globals) - - - -# -# we register our own version of sys.settrace(), sys.setprofile() -# and thread.start_new_thread(). -# - -def psyco_settrace(*args, **kw): - "This is the Psyco-aware version of sys.settrace()." - result = original_settrace(*args, **kw) - go() - return result - -def psyco_setprofile(*args, **kw): - "This is the Psyco-aware version of sys.setprofile()." - result = original_setprofile(*args, **kw) - go() - return result - -def psyco_thread_stub(callable, args, kw): - _psyco.statcollect() - if kw is None: - return callable(*args) - else: - return callable(*args, **kw) - -def psyco_start_new_thread(callable, args, kw=None): - "This is the Psyco-aware version of thread.start_new_thread()." - return original_start_new_thread(psyco_thread_stub, (callable, args, kw)) - -original_settrace = sys.settrace -original_setprofile = sys.setprofile -original_start_new_thread = thread.start_new_thread -sys.settrace = psyco_settrace -sys.setprofile = psyco_setprofile -thread.start_new_thread = psyco_start_new_thread -# hack to patch threading._start_new_thread if the module is -# already loaded -if ('threading' in sys.modules and - hasattr(sys.modules['threading'], '_start_new_thread')): - sys.modules['threading']._start_new_thread = psyco_start_new_thread diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/support.py b/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/support.py deleted file mode 100644 index 387321a..0000000 --- a/Calibre_Plugins/eReaderPDB2PML_plugin/osx/psyco/support.py +++ /dev/null @@ -1,191 +0,0 @@ -########################################################################### -# -# Psyco general support module. -# Copyright (C) 2001-2002 Armin Rigo et.al. - -"""Psyco general support module. - -For internal use. -""" -########################################################################### - -import sys, _psyco, __builtin__ - -error = _psyco.error -class warning(Warning): - pass - -_psyco.NoLocalsWarning = warning - -def warn(msg): - from warnings import warn - warn(msg, warning, stacklevel=2) - -# -# Version checks -# -__version__ = 0x010600f0 -if _psyco.PSYVER != __version__: - raise error, "version mismatch between Psyco parts, reinstall it" - -version_info = (__version__ >> 24, - (__version__ >> 16) & 0xff, - (__version__ >> 8) & 0xff, - {0xa0: 'alpha', - 0xb0: 'beta', - 0xc0: 'candidate', - 0xf0: 'final'}[__version__ & 0xf0], - __version__ & 0xf) - - -VERSION_LIMITS = [0x02020200, # 2.2.2 - 0x02030000, # 2.3 - 0x02040000] # 2.4 - -if ([v for v in VERSION_LIMITS if v <= sys.hexversion] != - [v for v in VERSION_LIMITS if v <= _psyco.PYVER ]): - if sys.hexversion < VERSION_LIMITS[0]: - warn("Psyco requires Python version 2.2.2 or later") - else: - warn("Psyco version does not match Python version. " - "Psyco must be updated or recompiled") - - -if hasattr(_psyco, 'ALL_CHECKS') and hasattr(_psyco, 'VERBOSE_LEVEL'): - print >> sys.stderr, ('psyco: running in debugging mode on %s' % - _psyco.PROCESSOR) - - -########################################################################### -# sys._getframe() gives strange results on a mixed Psyco- and Python-style -# stack frame. Psyco provides a replacement that partially emulates Python -# frames from Psyco frames. The new sys._getframe() may return objects of -# a custom "Psyco frame" type, which is a subtype of the normal frame type. -# -# The same problems require some other built-in functions to be replaced -# as well. Note that the local variables are not available in any -# dictionary with Psyco. - - -class Frame: - pass - - -class PythonFrame(Frame): - - def __init__(self, frame): - self.__dict__.update({ - '_frame': frame, - }) - - def __getattr__(self, attr): - if attr == 'f_back': - try: - result = embedframe(_psyco.getframe(self._frame)) - except ValueError: - result = None - except error: - warn("f_back is skipping dead Psyco frames") - result = self._frame.f_back - self.__dict__['f_back'] = result - return result - else: - return getattr(self._frame, attr) - - def __setattr__(self, attr, value): - setattr(self._frame, attr, value) - - def __delattr__(self, attr): - delattr(self._frame, attr) - - -class PsycoFrame(Frame): - - def __init__(self, tag): - self.__dict__.update({ - '_tag' : tag, - 'f_code' : tag[0], - 'f_globals': tag[1], - }) - - def __getattr__(self, attr): - if attr == 'f_back': - try: - result = embedframe(_psyco.getframe(self._tag)) - except ValueError: - result = None - elif attr == 'f_lineno': - result = self.f_code.co_firstlineno # better than nothing - elif attr == 'f_builtins': - result = self.f_globals['__builtins__'] - elif attr == 'f_restricted': - result = self.f_builtins is not __builtins__ - elif attr == 'f_locals': - raise AttributeError, ("local variables of functions run by Psyco " - "cannot be accessed in any way, sorry") - else: - raise AttributeError, ("emulated Psyco frames have " - "no '%s' attribute" % attr) - self.__dict__[attr] = result - return result - - def __setattr__(self, attr, value): - raise AttributeError, "Psyco frame objects are read-only" - - def __delattr__(self, attr): - if attr == 'f_trace': - # for bdb which relies on CPython frames exhibiting a slightly - # buggy behavior: you can 'del f.f_trace' as often as you like - # even without having set it previously. - return - raise AttributeError, "Psyco frame objects are read-only" - - -def embedframe(result): - if type(result) is type(()): - return PsycoFrame(result) - else: - return PythonFrame(result) - -def _getframe(depth=0): - """Return a frame object from the call stack. This is a replacement for -sys._getframe() which is aware of Psyco frames. - -The returned objects are instances of either PythonFrame or PsycoFrame -instead of being real Python-level frame object, so that they can emulate -the common attributes of frame objects. - -The original sys._getframe() ignoring Psyco frames altogether is stored in -psyco._getrealframe(). See also psyco._getemulframe().""" - # 'depth+1' to account for this _getframe() Python function - return embedframe(_psyco.getframe(depth+1)) - -def _getemulframe(depth=0): - """As _getframe(), but the returned objects are real Python frame objects -emulating Psyco frames. Some of their attributes can be wrong or missing, -however.""" - # 'depth+1' to account for this _getemulframe() Python function - return _psyco.getframe(depth+1, 1) - -def patch(name, module=__builtin__): - f = getattr(_psyco, name) - org = getattr(module, name) - if org is not f: - setattr(module, name, f) - setattr(_psyco, 'original_' + name, org) - -_getrealframe = sys._getframe -sys._getframe = _getframe -patch('globals') -patch('eval') -patch('execfile') -patch('locals') -patch('vars') -patch('dir') -patch('input') -_psyco.original_raw_input = raw_input -__builtin__.__in_psyco__ = 0==1 # False - -if hasattr(_psyco, 'compact'): - import kdictproxy - _psyco.compactdictproxy = kdictproxy.compactdictproxy diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/python_des.py b/Calibre_Plugins/eReaderPDB2PML_plugin/python_des.py new file mode 100644 index 0000000..c5bb204 --- /dev/null +++ b/Calibre_Plugins/eReaderPDB2PML_plugin/python_des.py @@ -0,0 +1,218 @@ +import sys + +ECB = 0 +CBC = 1 +class Des(object): + __pc1 = [56, 48, 40, 32, 24, 16, 8, 0, 57, 49, 41, 33, 25, 17, + 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, + 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, + 13, 5, 60, 52, 44, 36, 28, 20, 12, 4, 27, 19, 11, 3] + __left_rotations = [1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1] + __pc2 = [13, 16, 10, 23, 0, 4,2, 27, 14, 5, 20, 9, + 22, 18, 11, 3, 25, 7, 15, 6, 26, 19, 12, 1, + 40, 51, 30, 36, 46, 54, 29, 39, 50, 44, 32, 47, + 43, 48, 38, 55, 33, 52, 45, 41, 49, 35, 28, 31] + __ip = [57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3, + 61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7, + 56, 48, 40, 32, 24, 16, 8, 0, 58, 50, 42, 34, 26, 18, 10, 2, + 60, 52, 44, 36, 28, 20, 12, 4, 62, 54, 46, 38, 30, 22, 14, 6] + __expansion_table = [31, 0, 1, 2, 3, 4, 3, 4, 5, 6, 7, 8, + 7, 8, 9, 10, 11, 12,11, 12, 13, 14, 15, 16, + 15, 16, 17, 18, 19, 20,19, 20, 21, 22, 23, 24, + 23, 24, 25, 26, 27, 28,27, 28, 29, 30, 31, 0] + __sbox = [[14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7, + 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8, + 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0, + 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13], + [15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10, + 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5, + 0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15, + 13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9], + [10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8, + 13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1, + 13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7, + 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12], + [7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15, + 13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9, + 10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4, + 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14], + [2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9, + 14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6, + 4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14, + 11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3], + [12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11, + 10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8, + 9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6, + 4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13], + [4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1, + 13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6, + 1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2, + 6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12], + [13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7, + 1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2, + 7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8, + 2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11],] + __p = [15, 6, 19, 20, 28, 11,27, 16, 0, 14, 22, 25, + 4, 17, 30, 9, 1, 7,23,13, 31, 26, 2, 8,18, 12, 29, 5, 21, 10,3, 24] + __fp = [39, 7, 47, 15, 55, 23, 63, 31,38, 6, 46, 14, 54, 22, 62, 30, + 37, 5, 45, 13, 53, 21, 61, 29,36, 4, 44, 12, 52, 20, 60, 28, + 35, 3, 43, 11, 51, 19, 59, 27,34, 2, 42, 10, 50, 18, 58, 26, + 33, 1, 41, 9, 49, 17, 57, 25,32, 0, 40, 8, 48, 16, 56, 24] + # Type of crypting being done + ENCRYPT = 0x00 + DECRYPT = 0x01 + def __init__(self, key, mode=ECB, IV=None): + if len(key) != 8: + raise ValueError("Invalid DES key size. Key must be exactly 8 bytes long.") + self.block_size = 8 + self.key_size = 8 + self.__padding = '' + self.setMode(mode) + if IV: + self.setIV(IV) + self.L = [] + self.R = [] + self.Kn = [ [0] * 48 ] * 16 # 16 48-bit keys (K1 - K16) + self.final = [] + self.setKey(key) + def getKey(self): + return self.__key + def setKey(self, key): + self.__key = key + self.__create_sub_keys() + def getMode(self): + return self.__mode + def setMode(self, mode): + self.__mode = mode + def getIV(self): + return self.__iv + def setIV(self, IV): + if not IV or len(IV) != self.block_size: + raise ValueError("Invalid Initial Value (IV), must be a multiple of " + str(self.block_size) + " bytes") + self.__iv = IV + def getPadding(self): + return self.__padding + def __String_to_BitList(self, data): + l = len(data) * 8 + result = [0] * l + pos = 0 + for c in data: + i = 7 + ch = ord(c) + while i >= 0: + if ch & (1 << i) != 0: + result[pos] = 1 + else: + result[pos] = 0 + pos += 1 + i -= 1 + return result + def __BitList_to_String(self, data): + result = '' + pos = 0 + c = 0 + while pos < len(data): + c += data[pos] << (7 - (pos % 8)) + if (pos % 8) == 7: + result += chr(c) + c = 0 + pos += 1 + return result + def __permutate(self, table, block): + return [block[x] for x in table] + def __create_sub_keys(self): + key = self.__permutate(Des.__pc1, self.__String_to_BitList(self.getKey())) + i = 0 + self.L = key[:28] + self.R = key[28:] + while i < 16: + j = 0 + while j < Des.__left_rotations[i]: + self.L.append(self.L[0]) + del self.L[0] + self.R.append(self.R[0]) + del self.R[0] + j += 1 + self.Kn[i] = self.__permutate(Des.__pc2, self.L + self.R) + i += 1 + def __des_crypt(self, block, crypt_type): + block = self.__permutate(Des.__ip, block) + self.L = block[:32] + self.R = block[32:] + if crypt_type == Des.ENCRYPT: + iteration = 0 + iteration_adjustment = 1 + else: + iteration = 15 + iteration_adjustment = -1 + i = 0 + while i < 16: + tempR = self.R[:] + self.R = self.__permutate(Des.__expansion_table, self.R) + self.R = [x ^ y for x,y in zip(self.R, self.Kn[iteration])] + B = [self.R[:6], self.R[6:12], self.R[12:18], self.R[18:24], self.R[24:30], self.R[30:36], self.R[36:42], self.R[42:]] + j = 0 + Bn = [0] * 32 + pos = 0 + while j < 8: + m = (B[j][0] << 1) + B[j][5] + n = (B[j][1] << 3) + (B[j][2] << 2) + (B[j][3] << 1) + B[j][4] + v = Des.__sbox[j][(m << 4) + n] + Bn[pos] = (v & 8) >> 3 + Bn[pos + 1] = (v & 4) >> 2 + Bn[pos + 2] = (v & 2) >> 1 + Bn[pos + 3] = v & 1 + pos += 4 + j += 1 + self.R = self.__permutate(Des.__p, Bn) + self.R = [x ^ y for x, y in zip(self.R, self.L)] + self.L = tempR + i += 1 + iteration += iteration_adjustment + self.final = self.__permutate(Des.__fp, self.R + self.L) + return self.final + def crypt(self, data, crypt_type): + if not data: + return '' + if len(data) % self.block_size != 0: + if crypt_type == Des.DECRYPT: # Decryption must work on 8 byte blocks + raise ValueError("Invalid data length, data must be a multiple of " + str(self.block_size) + " bytes\n.") + if not self.getPadding(): + raise ValueError("Invalid data length, data must be a multiple of " + str(self.block_size) + " bytes\n. Try setting the optional padding character") + else: + data += (self.block_size - (len(data) % self.block_size)) * self.getPadding() + if self.getMode() == CBC: + if self.getIV(): + iv = self.__String_to_BitList(self.getIV()) + else: + raise ValueError("For CBC mode, you must supply the Initial Value (IV) for ciphering") + i = 0 + dict = {} + result = [] + while i < len(data): + block = self.__String_to_BitList(data[i:i+8]) + if self.getMode() == CBC: + if crypt_type == Des.ENCRYPT: + block = [x ^ y for x, y in zip(block, iv)] + processed_block = self.__des_crypt(block, crypt_type) + if crypt_type == Des.DECRYPT: + processed_block = [x ^ y for x, y in zip(processed_block, iv)] + iv = block + else: + iv = processed_block + else: + processed_block = self.__des_crypt(block, crypt_type) + result.append(self.__BitList_to_String(processed_block)) + i += 8 + if crypt_type == Des.DECRYPT and self.getPadding(): + s = result[-1] + while s[-1] == self.getPadding(): + s = s[:-1] + result[-1] = s + return ''.join(result) + def encrypt(self, data, pad=''): + self.__padding = pad + return self.crypt(data, Des.ENCRYPT) + def decrypt(self, data, pad=''): + self.__padding = pad + return self.crypt(data, Des.DECRYPT) diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/windows/psyco/__init__.pyo b/Calibre_Plugins/eReaderPDB2PML_plugin/windows/psyco/__init__.pyo new file mode 100644 index 0000000000000000000000000000000000000000..170fe3682da7b26796625aed6ef2e13a2fe7a2f6 GIT binary patch literal 2079 zcmZ`)ZF3Yw5PoJaxsb~X0W^ewGQ5Pl07(QDHBgpS$OptiYN1MM65QI`ox4mjx4Z1j znVes&lHcJs|B!#hKcL;SIbS}w$@TTlKHc;5(>;5?|FP8h?WH91CxNjmL z2NYR>Ji?KH5}2$^ZzHG(-xo__Mz?U-K`H1`GZ1+TYIceWL8l4YP;E?l&~2DGgj%A+KVzEMfm08G8MPdO&*B~M^_$!OiO@^o*$NILlnW4=unRc< z_E!k{>@7o`gFc7y8Zn$@FK^>gJ_mC?@DLb8SS8|b*M%sqLcGq;KzE=8%mtYDcuS5r zMN!TAedrmy6VS7`_)CN$;vmv$9!ION7oje~u0gHAUV^#=yAHJudl~97Q6O9=;I2Sj z3Fr@+)dd`V2zwRkDy)Q(u-BlNG({|iXV;;w!`^_p0echbChP{(2J9`UTd-ZIZi8OJ zQ3TtA>NWSv;eHcp6ZSUL?Piradk5;yv|)Flwx<3z)DCn6^AXfN=pC5*&|5GcL*L`V z%_nTtr`X%V-p(}Y0n}$x|MTESc-cG4Gqomw7jBZ3a%)Ta11(=n{6SgBmzB;;YRylk z7|O@xs4`a9+nvs{NS z)D&`5=3}excB)zrbe;C?M5Y6;>yW1;3biz&s;s@+?R0!S+3iTWnk88=)vyq}?ZMdE z-eyOiWV-V5X^4AL*Ja&ARkbO+>^21!rI)5~KDAcocf)p7T@LGXB#(`?@^I|DtjC3P zREn;<9rGt$&ppWm-zJlUJ>4^MWiLw$PH0Q2PKRV!qf##QiPwdrl4Z9E*>GLjx!Ezz zjz~FKrT##6>A|Mq{Em(`9!mE^llwqtM+8s(|0WJ8og9>nZdqB^I`h-+{iti+{~?7N zC+YvRs~c{!H%nXi1u{u;3QH2ti<))wbL1VTbwR!KON<(7U+dHkNGJXGiXM%dl^zrK zi)5zBOfe{9UhTE`(F_^xQgECvtB|8n?^LlKi|ZL}%VEIvO_2x5$3<|N9`)*E66lSK z#^)mP@us0Tcw!~g-`uSrF&m+3Z{o(Bd*Cqx{UH1J%`X*WV+9i2hn z6y}=-yK%)QEVL=+ieqLNv&=EGiaCYvkU7vN(^L$hIny!MAG6LeBVraQ<_U;-UgBjo z{BDU?*qmd-KVk6&GJ#uWQ|G7<9+J`pVhMe7es4$@rjZ1XcS;f#j6~$kj_LKFlXR4r zfXV`j1L;`%psw@DD6BFCf)~kg>JpRm%en}o*St9TV;T_BDohr?R6O%;o@Lhb>$Ild zMY{emZij9k@9sBe>HdTLZ%u#S8Lzi!viMND{Sd#OB&IMvNw%v=p!BF2i7#0X_lQh; yVX@s3EA-bEYoaB3Vp&LWQ_PWnBWgwKVy)E^tKy2-Cd{f>Y^{lTaapvZMe!GTBIzvv literal 0 HcmV?d00001 diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/windows/psyco/_psyco.pyd b/Calibre_Plugins/eReaderPDB2PML_plugin/windows/psyco/_psyco.pyd new file mode 100644 index 0000000000000000000000000000000000000000..6acad6c192615c9e9f6799018d311cac864c94dd GIT binary patch literal 278016 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 literal 0 HcmV?d00001 diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/windows/psyco/classes.pyo b/Calibre_Plugins/eReaderPDB2PML_plugin/windows/psyco/classes.pyo new file mode 100644 index 0000000000000000000000000000000000000000..24ae574b9f85af81ca280d06f16ff8f0cbc5ecea GIT binary patch literal 1684 zcmbtUO^+Kz5Un2DWA9{_T?Gjgp_TfAY!GV+4jfQ~5)zQ2peS-8A&gg}*_pQ8@yzt> zbUTTW&1Lx|ocKHZ6>gm1Rktw^ae~oyZGTj~s(MxBUw%DFe!BPgaZdZMkN@|utc56u zrjUY)h>8v^IyA+;OGS@X5tTT0NbotPRhOpN;IB`s9+fdoW4uMAIy8sTfPN&pA^LXO zC)M|uN3_HhKn8p>Jz|(=qlBIRCWxNeO>SgfX4Xo(ZW_}%S(##8s&SGG8-5-8S7paI znX4B=sjbXvnUzkpb>@`x7#F5-y3*gPLbk>@IX7*9g<*2P-t2wodZ}9NbiI)C)>KkE z3B|SL3%69VQZ5V84Ab;*NYkOL^kV6fg@VDslWkP4=Q_{Ia^pSvP{#6+;~>@bTEEOn zRXgdBBb1Vm(3P%>(FfAh-equy%vA1VHb+*7%F4V|nbW2Q505J5g+o*?Rl9M^L-+x2 zPmt7LWzU{`rOQ%kZ^&MfH`A%JN_`})0gvUMM9D(UbqxkX6j_qU@Oi4<@D-pxOcL)Y zTRT%B-ay6LDxaFC<8PHY5IRm=j1~YS@^;5zdw6vxxcCSC`geRI^b5IL5V@(EEO&0x zs3+l;A--DIIWzVg*N0YTn=i2JyATSkjy8ovs|#*c^!DW0C}M^C5dRkNg{OBcpRd~* zod>!Q=+YDxe50=3L^iE?t z=T#z}orjl0nnkpWY1b#$p)F*WZXzMYHz3y| z9W&r|KzHCV?CxGK=^F>I0c|mn5$Pk|Z1Enk%1sw@$wWMHr;uri;^ZbxxmnZHPb{J# z!UP~5sF_;96OneRvW_QOV~niJ>Re4&!>i?{4QkBL#v5SHRXg#;RrO9b@<4v)NP3 zkf}fUboRBrnpq@pfp%JD3uR|M>)C#y#?5BJy(qEl83c(_aU#yeNc1Td?}?GmlLJB) z2sceV5$Ik28-`=ZurPU=dZ@pG`OgtCbLUu=oyQ`M0wz~ratC7X6P*hGJZ7Pk6RzHb vwLGajJl5CAmtul@nsEL9e}uk5cLN2VzYR$H7DU`R?VO2YaTdLEd|UhhcnGd* literal 0 HcmV?d00001 diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/windows/psyco/clibrary.pyo b/Calibre_Plugins/eReaderPDB2PML_plugin/windows/psyco/clibrary.pyo new file mode 100644 index 0000000000000000000000000000000000000000..593d23c0b6beef42f6fc04adb3a94b5dc823842a GIT binary patch literal 526 zcmbVJO-sW-5Pg%R))opqc<>^4GZz(l5EPL@#Y?4>RuD?0q?@(I#%!A1Km+xpKgB=f zU-1vh}_yFBzcL&Ql~01072Aj=&r93(C#9!PqS zgviA^@J2Q#HAEi9zLkl;Ieg-ku{6uos@%{6rn#KQ+Q@t=9*b0%Sf!n;$YoZVCzT3^ zZ@Amh<5?dutPZgTt{?XC>R`=Dcy^#_AOnnPS;xI0E^bQ>d@Er*hP%9wm4llw(bBiF z#)6hhV=t*$MZ>i8nV|xG%B$W*Fs$r!&Vt)`7U<17@5a4vO_=~AdbB=IZ{^YVm^ z@9~?VF2{0N$W+K_Po*Y|Q{CWw-DH4U#}2iqK?8q>>83AMXJk)}-J4drqpEGY%zyhd dsx$dB_jwviChIZ<^@U9>U*C){hjZe?!Wwf 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 JfUTLe_$ON^eCq%J literal 0 HcmV?d00001 diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/windows/psyco/logger.pyo b/Calibre_Plugins/eReaderPDB2PML_plugin/windows/psyco/logger.pyo new file mode 100644 index 0000000000000000000000000000000000000000..869f0054b6878137b7254792d9eab2b89150b02c GIT binary patch literal 2780 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 Shf=jXHe^5OQCZ|iz5feI>EVz7 literal 0 HcmV?d00001 diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/windows/psyco/support.pyo b/Calibre_Plugins/eReaderPDB2PML_plugin/windows/psyco/support.pyo new file mode 100644 index 0000000000000000000000000000000000000000..d276bd5a3569293d9c1f8a8526e6d188973b11d9 GIT binary patch literal 6591 zcmcgwOK%*<5w4kCK6d#K^`cCPvPX_&t!;_1Wk*09BbLn2uwsT1W(C<^%NPuIdUuCf z&a7r;MH8?QATk2vnp~1wU?8^~l7A2&$DDG{e@Ku&;Cx^8a7YnKf`~#$PP4oERaIT} zbyffMpL5M`ZhZ7nSIVCm{J()O|FbI+iF8mp61nogkq#=h?n=kqtJkDc6XQx;mrh+G z)F-5eVRiXhHs5WC7P4#(Y!>*@NYq)~}9mZT5jtn@|dojEbH@}ti$NM~LQ{v3&q$(AGO4A?;DyqtLWcX9B2HfLun z9GU_7k5@C$$r%?M2j6E4D%~4cNteY=(OFsA5=rMlgDTF+V~G3kr;fIkwWSI;K?OzU z<*_Si3uA5jMQy)e*E=co=q1(TDOq%H{h0G2PolRZx=YJa8D1If`kZ_WU(UTIoi4f2D*msMei=on7?GhP zU%@E8bmU8L27AKk)uBGefqS=G6BxUpqPDnBQAa^>mF>I$6GQXJ3}bH4s&NE`D;1La zq$opHa5lH|zLNJPeHJ0P(kXm784_o~iT?p9^J{24GFcv{iMJi++hNfic$=o!F(&cs z5s$*G$gg;ri4*WY9C~pPzkq4+0*h~1P=tb#hr`hzjDO1}_rXG8{0FugD7s-1#Zg$8 z_)jEpd@qK1kP`v~3UOUG7OAnQvzTBp$pWljL1B5y%)@b~R}Z;$f=O7O-bavO2I%yiT3Q9Lw}9^}pS^ z#T@pyx8}cpyS)~yuiaZ)&tCyWjqDvS8z(e$c!C$1&2hia229s@(D$WWb?`w3yY6C+ z{`?nL@Y(OH@o@OjY=W$Rh_5vKf|r%m$iLx<2VmV3w*EEzRBtU--~_Hx^vWV-f-YRg zgf6+|$HpqY{2U564-PeUWB^Cfi|{&8JE9M9@J2C-GU!n`2SFf;y9Gdio%VQaC)du+ zuxG7GCxPT9GkT)!!1BvZKR3O!!RUSTssZAPt?#$084~LktqoJCrITy zl5{h8_jp(w$-vd1gP`0f2-;XbUqm6!oKtg_oq4CJ-*L1j+%7f7k9_FSo~mTO3SS@s*in<{PSFaNcV{9c^=Y~8wEkgUFj-fjgnPzubdO=4{{Ex zu)cMO?Z^Nri_Egk74#&O?dQR4xqJ{rSh{4kMbFvCF`umZFR^%;#YGhRTWjrE?z?#` zvyM+gib=OI(U@=4)KK*X`QYiG`yc0NfSYgh#paiIl^e3KGSDf0DfXH7eg+fD@g zP$F^hL)$x{y(evNgTS=a(Afz0$s-UJOCvJ^G?bYUk_I-WDZ?UCr4n6d*;aIIQRf>z z!Aqg97YyUXAckNd3OpUh!-ApFESf>p#2rOKF941e87?hE4%12)rd^y}&Ra#R-lH&! z!_6TAleFjc#!0t8G?p`V@HTf#WbTFuqZR}uVYh4Y98n2kiZI#rcEa5&UY=&zuEs}Z zd(7D9NksPs;Uj~v$GdzfzwFWBMfvlc?b#p7cur|MoFM}h%YBt?Bn<`Aov14BKb*tbG1pB z>zq?zI$o*Zw`- zc|mgBE#KK+DP#6w6G78Gq4vL#*#i%pd^-QGs}Rl%UeT?PbuES8+7 zS&W2@uN#Ntj{6Dvz{df=fD(p93gu7~#@9ufDM~j-d~i^`k?m4wO+mA;fhh)da3~&IKd~*E^peSI;>sjE9C+8xMZ9iJUyN-F2z&s_I7?Kn~0o<*c&z+UF|b9bJ^t4Z@sIrAo<*2>G-g z@*V&7>RP*f+xIn!-wA4Q9|+58@hAE3}jDq3j;K)OU0?gXmJf=NSVHTz^6(#A=k z5CwU8k`MR{hMbx;{auQeuT=Vqs7ry5QJ)Puhb K=a{>I1m|D%!;-ZC literal 0 HcmV?d00001 diff --git a/Calibre_Plugins/ignobleepub_plugin.zip b/Calibre_Plugins/ignobleepub_plugin.zip index a043ceb914738700473d4fa90e760f939a4f093a..fc1bd10791e80f870ab2a88e45c411341fe00922 100644 GIT binary patch delta 6795 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 VRaCS;2V?%eg?^hFcb7l2{{pHTvAh5P delta 6992 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 page. Enter the name and credit card number separated -by a comma: Your Name,1234123412341234 - -If you've purchased books with more than one credit card, separate that other info with -a colon: Your Name,1234123412341234:Other Name,2345234523452345 - -** NOTE ** The above method is your only option if you don't have/can't run the original -I <3 Cabbages scripts on your particular machine. - -** NOTE ** Your credit card number will be on display in Calibre's Plugin configuration -page when using the above method. If other people have access to your computer, -you may want to use the second configuration method below. - -2) If you already have keyfiles generated with I <3 Cabbages' ignoblekeygen.pyw -script, you can put those keyfiles into Calibre's configuration directory. The easiest -way to find the correct directory is to go to Calibre's Preferences page... click -on the 'Miscellaneous' button (looks like a gear), and then click the 'Open Calibre -configuration directory' button. Paste your keyfiles in there. Just make sure that -they have different names and are saved with the '.b64' extension (like the ignoblekeygen -script produces). This directory isn't touched when upgrading Calibre, so it's quite safe -to leave then there. - -All keyfiles from method 2 and all data entered from method 1 will be used to attempt -to decrypt a book. You can use method 1 or method 2, or a combination of both. - -Troubleshooting: - -If you find that it's not working for you (imported epubs still have DRM), you can -save a lot of time and trouble by trying to add the epub to Calibre with the command -line tools. This will print out a lot of helpful debugging info that can be copied into -any online help requests. I'm going to ask you to do it first, anyway, so you might -as well get used to it. ;) - -Open a command prompt (terminal) and change to the directory where the ebook you're -trying to import resides. Then type the command "calibredb add your_ebook.epub". -Don't type the quotes and obviously change the 'your_ebook.epub' to whatever the -filename of your book is. Copy the resulting output and paste it into any online -help request you make. - -** Note: the Mac version of Calibre doesn't install the command line tools by default. -If you go to the 'Preferences' page and click on the miscellaneous button, you'll -see the option to install the command line tools. diff --git a/Calibre_Plugins/ignobleepub_plugin/ignobleepub_plugin.py b/Calibre_Plugins/ignobleepub_plugin/ignobleepub_plugin.py index 5147f06..91d472f 100644 --- a/Calibre_Plugins/ignobleepub_plugin/ignobleepub_plugin.py +++ b/Calibre_Plugins/ignobleepub_plugin/ignobleepub_plugin.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -# ignobleepub_v01_plugin.py +# ignobleepub_plugin.py # Released under the terms of the GNU General Public Licence, version 3 or # later. # @@ -41,7 +41,9 @@ # # # Revision history: -# 0.1 - Initial release +# 0.1.0 - Initial release +# 0.1.1 - Allow Windows users to make use of openssl if they have it installed. +# - Incorporated SomeUpdates zipfix routine. """ @@ -77,7 +79,10 @@ def _load_crypto_libcrypto(): Structure, c_ulong, create_string_buffer, cast from ctypes.util import find_library - libcrypto = find_library('crypto') + if sys.platform.startswith('win'): + libcrypto = find_library('libeay32') + else: + libcrypto = find_library('crypto') if libcrypto is None: raise IGNOBLEError('libcrypto not found') libcrypto = CDLL(libcrypto) @@ -261,7 +266,7 @@ class IgnobleDeDRM(FileTypePlugin): Credit given to I <3 Cabbages for the original stand-alone scripts.' supported_platforms = ['linux', 'osx', 'windows'] author = 'DiapDealer' - version = (0, 1, 0) + version = (0, 1, 1) minimum_calibre_version = (0, 6, 44) # Compiled python libraries cannot be imported in earlier versions. file_types = set(['epub']) on_import = True @@ -277,13 +282,12 @@ class IgnobleDeDRM(FileTypePlugin): # Add the included pycrypto import directory for Windows users. pdir = 'windows' if iswindows else 'osx' if isosx else 'linux' ppath = os.path.join(self.sys_insertion_path, pdir) - #sys.path.insert(0, ppath) sys.path.append(ppath) AES, AES2 = _load_crypto() if AES == None or AES2 == None: - # Failed to load libcrypto or PyCrypto... Adobe Epubs can\'t be decrypted.' + # Failed to load libcrypto or PyCrypto... Adobe Epubs can't be decrypted.' sys.path.remove(ppath) raise IGNOBLEError('IgnobleEpub - Failed to load crypto libs.') return @@ -337,10 +341,19 @@ class IgnobleDeDRM(FileTypePlugin): # Attempt to decrypt epub with each encryption key (generated or provided). for userkey in userkeys: # Create a TemporaryPersistent file to work with. + # Check original epub archive for zip errors. + import zipfix + inf = self.temporary_file('.epub') + try: + fr = zipfix.fixZip(path_to_ebook, inf.name) + fr.fix() + except Exception, e: + raise Exception(e) + return of = self.temporary_file('.epub') # Give the user key, ebook and TemporaryPersistent file to the Stripper function. - result = plugin_main(userkey, path_to_ebook, of.name) + result = plugin_main(userkey, inf.name, of.name) # Ebook is not a B&N Adept epub... do nothing and pass it on. # This allows a non-encrypted epub to be imported without error messages. @@ -372,4 +385,4 @@ class IgnobleDeDRM(FileTypePlugin): def customization_help(self, gui=False): - return 'Enter B&N Account name and CC# (separate name and CC# with a comma)' \ No newline at end of file + return 'Enter B&N Account name and CC# (separate name and CC# with a comma)' diff --git a/Calibre_Plugins/ignobleepub_plugin/windows/Crypto/Cipher/AES.pyd b/Calibre_Plugins/ignobleepub_plugin/windows/Crypto/Cipher/AES.pyd new file mode 100644 index 0000000000000000000000000000000000000000..46a60a5c5418316685cf5687f376864d18c33cf3 GIT binary patch literal 31744 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 I-?YI01C5gb`v3p{ literal 0 HcmV?d00001 diff --git a/Calibre_Plugins/ignobleepub_plugin/zipfix.py b/Calibre_Plugins/ignobleepub_plugin/zipfix.py new file mode 100644 index 0000000..40c41d2 --- /dev/null +++ b/Calibre_Plugins/ignobleepub_plugin/zipfix.py @@ -0,0 +1,136 @@ +#!/usr/bin/env python + +import sys +import zlib +import zipfile +import os +import os.path +import getopt +from struct import unpack + + +_FILENAME_LEN_OFFSET = 26 +_EXTRA_LEN_OFFSET = 28 +_FILENAME_OFFSET = 30 +_MAX_SIZE = 64 * 1024 + +class fixZip: + def __init__(self, zinput, zoutput): + self.inzip = zipfile.ZipFile(zinput,'r') + self.outzip = zipfile.ZipFile(zoutput,'w') + # open the input zip for reading only as a raw file + self.bzf = file(zinput,'rb') + + def getlocalname(self, zi): + local_header_offset = zi.header_offset + self.bzf.seek(local_header_offset + _FILENAME_LEN_OFFSET) + leninfo = self.bzf.read(2) + local_name_length, = unpack(' 0: + if len(cmpdata) > _MAX_SIZE : + newdata = cmpdata[0:_MAX_SIZE] + cmpdata = cmpdata[_MAX_SIZE:] + else: + newdata = cmpdata + cmpdata = '' + newdata = dc.decompress(newdata) + unprocessed = dc.unconsumed_tail + if len(unprocessed) == 0: + newdata += dc.flush() + data += newdata + cmpdata += unprocessed + unprocessed = '' + return data + + def getfiledata(self, zi): + # get file name length and exta data length to find start of file data + local_header_offset = zi.header_offset + + self.bzf.seek(local_header_offset + _FILENAME_LEN_OFFSET) + leninfo = self.bzf.read(2) + local_name_length, = unpack('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 E0YZk`9TZ75+~5&aKdAYdEHlCYm9>i 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 # @@ -41,6 +41,8 @@ # # Revision history: # 0.1 - Initial release +# 0.1.1 - Allow Windows users to make use of openssl if they have it installed. +# - Incorporated SomeUpdates zipfix routine. """ @@ -76,7 +78,10 @@ def _load_crypto_libcrypto(): Structure, c_ulong, create_string_buffer, cast from ctypes.util import find_library - libcrypto = find_library('crypto') + if sys.platform.startswith('win'): + libcrypto = find_library('libeay32') + else: + libcrypto = find_library('crypto') if libcrypto is None: raise ADEPTError('libcrypto not found') libcrypto = CDLL(libcrypto) @@ -358,7 +363,7 @@ class IneptDeDRM(FileTypePlugin): Credit given to I <3 Cabbages for the original stand-alone scripts.' supported_platforms = ['linux', 'osx', 'windows'] author = 'DiapDealer' - version = (0, 1, 0) + version = (0, 1, 1) minimum_calibre_version = (0, 6, 44) # Compiled python libraries cannot be imported in earlier versions. file_types = set(['epub']) on_import = True @@ -376,7 +381,6 @@ class IneptDeDRM(FileTypePlugin): # Add the included Carbon import directory for Mac users. pdir = 'windows' if iswindows else 'osx' if isosx else 'linux' ppath = os.path.join(self.sys_insertion_path, pdir) - #sys.path.insert(0, ppath) sys.path.append(ppath) AES, RSA = _load_crypto() @@ -433,10 +437,19 @@ class IneptDeDRM(FileTypePlugin): # Attempt to decrypt epub with each encryption key found. for userkey in userkeys: # Create a TemporaryPersistent file to work with. + # Check original epub archive for zip errors. + import zipfix + inf = self.temporary_file('.epub') + try: + fr = zipfix.fixZip(path_to_ebook, inf.name) + fr.fix() + except Exception, e: + raise Exception(e) + return of = self.temporary_file('.epub') # Give the user key, ebook and TemporaryPersistent file to the plugin_main function. - result = plugin_main(userkey, path_to_ebook, of.name) + result = plugin_main(userkey, inf.name, of.name) # Ebook is not an Adobe Adept epub... do nothing and pass it on. # This allows a non-encrypted epub to be imported without error messages. diff --git a/Calibre_Plugins/ineptepub_plugin/osx/Carbon/File.pyo b/Calibre_Plugins/ineptepub_plugin/osx/Carbon/File.pyo new file mode 100644 index 0000000000000000000000000000000000000000..be3ab04dba9e2aaef03bc221d1b1df5a5803cf65 GIT binary patch literal 217 zcmcckiI+>Xz z*sMTyyjx~Yss@n3fFO$FfL#6H%HopLTz#L+q@u*4N`1GY#N5>K{G#k){ea4njQl*k zG?<8fSZYymW`16=zLB1peokhRegRkoh*yx4SfZPon5^%dSd^5Xrw_7D4=Bw6w8ADg QKczG$)ehvQVjyM!03w7n@c;k- literal 0 HcmV?d00001 diff --git a/Calibre_Plugins/ineptepub_plugin/osx/Carbon/Folder.pyo b/Calibre_Plugins/ineptepub_plugin/osx/Carbon/Folder.pyo new file mode 100644 index 0000000000000000000000000000000000000000..5a82134eb69feffa703a985ee061cb01ce1be6ac GIT binary patch literal 221 zcmcckiI+>Xz z*z7=dyjy-wN@|e?kja1`iW7ib{ou;tlGI#%pUkA9#G*=lx1z+{)bjkI>|*_Z%94!y zJiRoSh<;dVQE_H|Ua`KBo|%45W|DpZSOthzkds)Vo12)d@0?hal%J;$u}}}FfCFfW SO>TZlX-=vg$X&%i%m4r~2{)|( literal 0 HcmV?d00001 diff --git a/Calibre_Plugins/ineptepub_plugin/osx/Carbon/Folders.pyo b/Calibre_Plugins/ineptepub_plugin/osx/Carbon/Folders.pyo new file mode 100644 index 0000000000000000000000000000000000000000..c5a2ee03eb0181530627c568d6ab572968f6eea9 GIT binary patch literal 10060 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 literal 0 HcmV?d00001 diff --git a/Calibre_Plugins/ineptepub_plugin/windows/Crypto/Cipher/AES.pyd b/Calibre_Plugins/ineptepub_plugin/windows/Crypto/Cipher/AES.pyd new file mode 100644 index 0000000000000000000000000000000000000000..46a60a5c5418316685cf5687f376864d18c33cf3 GIT binary patch literal 31744 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 I-?YI01C5gb`v3p{ literal 0 HcmV?d00001 diff --git a/Calibre_Plugins/ineptepub_plugin/windows/Crypto/Hash/SHA256.pyd b/Calibre_Plugins/ineptepub_plugin/windows/Crypto/Hash/SHA256.pyd new file mode 100644 index 0000000000000000000000000000000000000000..10d91f8c0554cf7ea81b5b4d70d55c13f9c792fa GIT binary patch literal 11264 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 VbShnb(x+MoeDi#hfqx(a{{?&G4K4rx literal 0 HcmV?d00001 diff --git a/Calibre_Plugins/ineptepub_plugin/windows/Crypto/Random/OSRNG/winrandom.pyd b/Calibre_Plugins/ineptepub_plugin/windows/Crypto/Random/OSRNG/winrandom.pyd new file mode 100644 index 0000000000000000000000000000000000000000..d877a0c406204980a932ae39ea965f683d5a3210 GIT binary patch literal 10752 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 literal 0 HcmV?d00001 diff --git a/Calibre_Plugins/ineptepub_plugin/windows/Crypto/Util/_counter.pyd b/Calibre_Plugins/ineptepub_plugin/windows/Crypto/Util/_counter.pyd new file mode 100644 index 0000000000000000000000000000000000000000..bb7de6c61c94edfbb78a28cd37318691e78f7813 GIT binary patch literal 11264 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 literal 0 HcmV?d00001 diff --git a/Calibre_Plugins/ineptepub_plugin/zipfix.py b/Calibre_Plugins/ineptepub_plugin/zipfix.py new file mode 100644 index 0000000..40c41d2 --- /dev/null +++ b/Calibre_Plugins/ineptepub_plugin/zipfix.py @@ -0,0 +1,136 @@ +#!/usr/bin/env python + +import sys +import zlib +import zipfile +import os +import os.path +import getopt +from struct import unpack + + +_FILENAME_LEN_OFFSET = 26 +_EXTRA_LEN_OFFSET = 28 +_FILENAME_OFFSET = 30 +_MAX_SIZE = 64 * 1024 + +class fixZip: + def __init__(self, zinput, zoutput): + self.inzip = zipfile.ZipFile(zinput,'r') + self.outzip = zipfile.ZipFile(zoutput,'w') + # open the input zip for reading only as a raw file + self.bzf = file(zinput,'rb') + + def getlocalname(self, zi): + local_header_offset = zi.header_offset + self.bzf.seek(local_header_offset + _FILENAME_LEN_OFFSET) + leninfo = self.bzf.read(2) + local_name_length, = unpack(' 0: + if len(cmpdata) > _MAX_SIZE : + newdata = cmpdata[0:_MAX_SIZE] + cmpdata = cmpdata[_MAX_SIZE:] + else: + newdata = cmpdata + cmpdata = '' + newdata = dc.decompress(newdata) + unprocessed = dc.unconsumed_tail + if len(unprocessed) == 0: + newdata += dc.flush() + data += newdata + cmpdata += unprocessed + unprocessed = '' + return data + + def getfiledata(self, zi): + # get file name length and exta data length to find start of file data + local_header_offset = zi.header_offset + + self.bzf.seek(local_header_offset + _FILENAME_LEN_OFFSET) + leninfo = self.bzf.read(2) + local_name_length, = unpack('Daby+qP|W(s45Xcg~tQ@60(fRjX>%{_^{< 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 diff --git a/Calibre_Plugins/k4mobidedrm_plugin/k4mobidedrm_plugin.py b/Calibre_Plugins/k4mobidedrm_plugin/k4mobidedrm_plugin.py index 6a5c071..4fc0337 100644 --- a/Calibre_Plugins/k4mobidedrm_plugin/k4mobidedrm_plugin.py +++ b/Calibre_Plugins/k4mobidedrm_plugin/k4mobidedrm_plugin.py @@ -43,6 +43,7 @@ import sys import os, csv, getopt import binascii import zlib +import re from struct import pack, unpack, unpack_from @@ -115,9 +116,9 @@ def decode(data,map): # Parse the Kindle.info file and return the records as a list of key-values -def parseKindleInfo(): +def parseKindleInfo(kInfoFile): DB = {} - infoReader = openKindleInfo() + infoReader = openKindleInfo(kInfoFile) infoReader.read(1) data = infoReader.read() if sys.platform.startswith('win'): @@ -279,10 +280,10 @@ class MobiPeek: # DiapDealer's stuff: Parse the EXTH header records and parse the Kindleinfo # file to calculate the book pid. -def getK4Pids(exth, title): +def getK4Pids(exth, title, kInfoFile=None): global kindleDatabase try: - kindleDatabase = parseKindleInfo() + kindleDatabase = parseKindleInfo(kInfoFile) except Exception as message: print(message) @@ -353,30 +354,49 @@ def getK4Pids(exth, title): raise DrmException("\nCould not access K4 data - Perhaps K4 is not installed/configured?") return null +def usage(progname): + print "Removes DRM protection from K4PC, K4M, and Mobi ebooks" + print "Usage:" + print " %s [-k ] [-p ] " % progname + # # Main # def main(argv=sys.argv): global kindleDatabase import mobidedrm + + progname = os.path.basename(argv[0]) + kInfoFiles = [] + pidnums = "" + print ('K4MobiDeDrm v%(__version__)s ' 'provided by the work of many including DiapDealer, SomeUpdates, IHeartCabbages, CMBDTC, Skindle, DarkReverser, ApprenticeAlf, etc .' % globals()) - if len(argv)<3: - print "Removes DRM protection from K4PC, K4M, and Mobi ebooks" - print "Usage:" - print " %s []" % argv[0] - return 1 - - if len(argv) == 4: - pidnums = argv[3] - - if len(argv) == 3: - pidnums = "" + try: + opts, args = getopt.getopt(sys.argv[1:], "k:p:") + except getopt.GetoptError, err: + print str(err) + usage(progname) + sys.exit(2) + + if len(args)<2: + usage(progname) + sys.exit(2) + + for o, a in opts: + if o == "-k": + if a == None : + raise DrmException("Invalid parameter for -k") + kInfoFiles.append(a) + if o == "-p": + if a == None : + raise DrmException("Invalid parameter for -p") + pidnums = a kindleDatabase = None - infile = argv[1] - outfile = argv[2] + infile = args[0] + outfile = args[1] try: # first try with K4PC/K4M ex = MobiPeek(infile) @@ -394,8 +414,25 @@ def main(argv=sys.argv): else: file(outfile, 'wb').write(unlocked_file) return 0 - - # now try from the pid list + + # now try alternate kindle.info files + if kInfoFiles: + for infoFile in kInfoFiles: + kindleDatabase = None + try: + title = ex.getBookTitle() + exth = ex.getexthData() + pid = getK4Pids(exth, title, infoFile) + unlocked_file = mobidedrm.getUnencryptedBook(infile, pid) + except DrmException: + pass + except mobidedrm.DrmException: + pass + else: + file(outfile, 'wb').write(unlocked_file) + return 0 + + # Lastly, try from the pid list pids = pidnums.split(',') for pid in pids: try: @@ -426,7 +463,7 @@ if not __name__ == "__main__" and inCalibre: Provided by the work of many including DiapDealer, SomeUpdates, IHeartCabbages, CMBDTC, Skindle, DarkReverser, ApprenticeAlf, etc.' supported_platforms = ['osx', 'windows', 'linux'] # Platforms this plugin will run on author = 'DiapDealer, SomeUpdates' # The author of this plugin - version = (0, 0, 1) # The version number of this plugin + version = (0, 1, 1) # The version number of this plugin file_types = set(['prc','mobi','azw']) # The file types that this plugin will be applied to on_import = True # Run this plugin during the import priority = 200 # run this plugin before mobidedrm, k4pcdedrm, k4dedrm @@ -442,7 +479,27 @@ if not __name__ == "__main__" and inCalibre: from k4mutils import openKindleInfo, CryptUnprotectData, GetUserName, GetVolumeSerialNumber, charMap1, charMap2, charMap3, charMap4 import mobidedrm + # Get supplied list of PIDs to try from plugin customization. pidnums = self.site_customization + + # Load any kindle info files (*.info) included Calibre's config directory. + kInfoFiles = [] + try: + # Find Calibre's configuration directory. + confpath = os.path.split(os.path.split(self.plugin_path)[0])[0] + print 'K4MobiDeDRM: Calibre configuration directory = %s' % confpath + files = os.listdir(confpath) + filefilter = re.compile("\.info$", re.IGNORECASE) + files = filter(filefilter.search, files) + + if files: + for filename in files: + fpath = os.path.join(confpath, filename) + kInfoFiles.append(fpath) + print 'K4MobiDeDRM: Kindle info file %s found in config folder.' % filename + except IOError: + print 'K4MobiDeDRM: Error reading kindle info files from config directory.' + pass # first try with book specifc pid from K4PC or K4M try: @@ -463,6 +520,25 @@ if not __name__ == "__main__" and inCalibre: of.write(unlocked_file) of.close() return of.name + + # Now try alternate kindle info files + if kInfoFiles: + for infoFile in kInfoFiles: + kindleDatabase = None + try: + title = ex.getBookTitle() + exth = ex.getexthData() + pid = getK4Pids(exth, title, infoFile) + unlocked_file = mobidedrm.getUnencryptedBook(path_to_ebook,pid) + except DrmException: + pass + except mobidedrm.DrmException: + pass + else: + of = self.temporary_file('.mobi') + of.write(unlocked_file) + of.close() + return of.name # now try from the pid list pids = pidnums.split(',') diff --git a/Calibre_Plugins/k4mobidedrm_plugin/k4mutils.py b/Calibre_Plugins/k4mobidedrm_plugin/k4mutils.py index cb13e5f..977d81c 100644 --- a/Calibre_Plugins/k4mobidedrm_plugin/k4mutils.py +++ b/Calibre_Plugins/k4mobidedrm_plugin/k4mutils.py @@ -298,22 +298,25 @@ def CryptUnprotectData(encryptedData): return cleartext # Locate and open the .kindle-info file -def openKindleInfo(): - home = os.getenv('HOME') - cmdline = 'find "' + home + '/Library/Application Support" -name ".kindle-info"' - cmdline = cmdline.encode(sys.getfilesystemencoding()) - p1 = Process(cmdline, shell=True, bufsize=1, stdin=None, stdout=PIPE, stderr=PIPE, close_fds=False) - poll = p1.wait('wait') - results = p1.read() - reslst = results.split('\n') - kinfopath = 'NONE' - cnt = len(reslst) - for j in xrange(cnt): - resline = reslst[j] - pp = resline.find('.kindle-info') - if pp >= 0: - kinfopath = resline - break - if not os.path.exists(kinfopath): - raise K4MDrmException('Error: .kindle-info file can not be found') - return open(kinfopath,'r') +def openKindleInfo(kInfoFile=None): + if kInfoFile == None: + home = os.getenv('HOME') + cmdline = 'find "' + home + '/Library/Application Support" -name ".kindle-info"' + cmdline = cmdline.encode(sys.getfilesystemencoding()) + p1 = Process(cmdline, shell=True, bufsize=1, stdin=None, stdout=PIPE, stderr=PIPE, close_fds=False) + poll = p1.wait('wait') + results = p1.read() + reslst = results.split('\n') + kinfopath = 'NONE' + cnt = len(reslst) + for j in xrange(cnt): + resline = reslst[j] + pp = resline.find('.kindle-info') + if pp >= 0: + kinfopath = resline + break + if not os.path.exists(kinfopath): + raise K4MDrmException('Error: .kindle-info file can not be found') + return open(kinfopath,'r') + else: + return open(kInfoFile, 'r') \ No newline at end of file diff --git a/Calibre_Plugins/k4mobidedrm_plugin/k4pcutils.py b/Calibre_Plugins/k4mobidedrm_plugin/k4pcutils.py index 777376d..337b992 100644 --- a/Calibre_Plugins/k4mobidedrm_plugin/k4pcutils.py +++ b/Calibre_Plugins/k4mobidedrm_plugin/k4pcutils.py @@ -101,7 +101,10 @@ CryptUnprotectData = CryptUnprotectData() # # Locate and open the Kindle.info file. # -def openKindleInfo(): - regkey = winreg.OpenKey(winreg.HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\\") - path = winreg.QueryValueEx(regkey, 'Local AppData')[0] - return open(path+'\\Amazon\\Kindle For PC\\{AMAwzsaPaaZAzmZzZQzgZCAkZ3AjA_AY}\\kindle.info','r') +def openKindleInfo(kInfoFile=None): + if kInfoFile == None: + regkey = winreg.OpenKey(winreg.HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\\") + path = winreg.QueryValueEx(regkey, 'Local AppData')[0] + return open(path+'\\Amazon\\Kindle For PC\\{AMAwzsaPaaZAzmZzZQzgZCAkZ3AjA_AY}\\kindle.info','r') + else: + return open(kInfoFile, 'r') diff --git a/Calibre_Plugins/k4mobidedrm_plugin/mobidedrm.py b/Calibre_Plugins/k4mobidedrm_plugin/mobidedrm.py index 5ed58a5..eed1cce 100644 --- a/Calibre_Plugins/k4mobidedrm_plugin/mobidedrm.py +++ b/Calibre_Plugins/k4mobidedrm_plugin/mobidedrm.py @@ -37,14 +37,17 @@ # in utf8 file are encrypted. (Although neither kind gets compressed.) # This knowledge leads to a simplification of the test for the # trailing data byte flags - version 5 and higher AND header size >= 0xE4. -# 0.15 - Now outputs 'hearbeat', and is also quicker for long files. +# 0.15 - Now outputs 'heartbeat', and is also quicker for long files. # 0.16 - And reverts to 'done' not 'done.' at the end for unswindle compatibility. # 0.17 - added modifications to support its use as an imported python module # both inside calibre and also in other places (ie K4DeDRM tools) -# 0.17a - disabled the standalone plugin feature since a plugin can not import +# 0.17a- disabled the standalone plugin feature since a plugin can not import # a plugin +# 0.18 - It seems that multibyte entries aren't encrypted in a v7 file... +# Removed the disabled Calibre plug-in code +# Permit use of 8-digit PIDs -__version__ = '0.17' +__version__ = '0.18' import sys import struct @@ -127,10 +130,11 @@ def getSizeOfTrailingDataEntries(ptr, size, flags): if testflags & 1: num += getSizeOfTrailingDataEntry(ptr, size - num) testflags >>= 1 - # Multibyte data, if present, is included in the encryption, so - # we do not need to check the low bit. - # if flags & 1: - # num += (ord(ptr[size - num - 1]) & 0x3) + 1 + # Check the low bit to see if there's multibyte data present. + # if multibyte data is included in the encryped data, we'll + # have already cleared this flag. + if flags & 1: + num += (ord(ptr[size - num - 1]) & 0x3) + 1 return num class DrmStripper: @@ -181,9 +185,14 @@ class DrmStripper: return found_key def __init__(self, data_file, pid): - if checksumPid(pid[0:-2]) != pid: - raise DrmException("invalid PID checksum") - pid = pid[0:-2] + if len(pid)==10: + if checksumPid(pid[0:-2]) != pid: + raise DrmException("invalid PID checksum") + pid = pid[0:-2] + elif len(pid)==8: + print "PID without checksum given. With checksum PID is "+checksumPid(pid) + else: + raise DrmException("Invalid PID length") self.data_file = data_file header = data_file[0:72] @@ -206,6 +215,10 @@ class DrmStripper: if (mobi_length >= 0xE4) and (mobi_version >= 5): extra_data_flags, = struct.unpack('>H', sect[0xF2:0xF4]) print "Extra Data Flags = %d" %extra_data_flags + if mobi_version < 7: + # multibyte utf8 data is included in the encryption for mobi_version 5 (& 6?) + # so clear that byte so that we leave it to be decrypted. + extra_data_flags &= 0xFFFE crypto_type, = struct.unpack('>H', sect[0xC:0xC+2]) if crypto_type == 0: @@ -282,44 +295,3 @@ def main(argv=sys.argv): if __name__ == "__main__": sys.exit(main()) - -#if not __name__ == "__main__": -if False: - - # note a calibre plugin can not import code with another calibre plugin - # in it as it ends up registering two different plugins - from calibre.customize import FileTypePlugin - - class MobiDeDRM(FileTypePlugin): - name = 'MobiDeDRM' # Name of the plugin - description = 'Removes DRM from secure Mobi files' - supported_platforms = ['linux', 'osx', 'windows'] # Platforms this plugin will run on - author = 'The Dark Reverser' # The author of this plugin - version = (0, 1, 7) # The version number of this plugin - file_types = set(['prc','mobi','azw']) # The file types that this plugin will be applied to - on_import = True # Run this plugin during the import - - def run(self, path_to_ebook): - from calibre.gui2 import is_ok_to_use_qt - from PyQt4.Qt import QMessageBox - PID = self.site_customization - data_file = file(path_to_ebook, 'rb').read() - ar = PID.split(',') - for i in ar: - try: - unlocked_file = DrmStripper(data_file, i).getResult() - except DrmException: - if is_ok_to_use_qt(): - d = QMessageBox(QMessageBox.Warning, "MobiDeDRM Plugin", "Error decoding: %s\n" % path_to_ebook) - d.show() - d.raise_() - d.exec_() - raise Exception("MobiDeDRM Plugin: Error decoding ebook") - else: - of = self.temporary_file('.mobi') - of.write(unlocked_file) - of.close() - return of.name - - def customization_help(self, gui=False): - return 'Enter PID (separate multiple PIDs with comma)' diff --git a/Kindle_Mobi_Tools/K4_Mobi_DeDRM_Combined_Tool/K4MobiDeDRM.pyw b/Kindle_Mobi_Tools/K4_Mobi_DeDRM_Combined_Tool/K4MobiDeDRM.pyw index 467d87e..0d995e7 100644 --- a/Kindle_Mobi_Tools/K4_Mobi_DeDRM_Combined_Tool/K4MobiDeDRM.pyw +++ b/Kindle_Mobi_Tools/K4_Mobi_DeDRM_Combined_Tool/K4MobiDeDRM.pyw @@ -45,11 +45,20 @@ class MainDialog(Tkinter.Frame): self.outpath.insert(0, outname) button = Tkinter.Button(body, text="...", command=self.get_outpath) button.grid(row=1, column=2) + + Tkinter.Label(body, text='Kindle.info file (optional)').grid(row=2, sticky=Tkconstants.E) + self.altinfopath = Tkinter.Entry(body, width=50) + self.altinfopath.grid(row=2, column=1, sticky=sticky) + #cwd = os.getcwdu() + #cwd = cwd.encode('utf-8') + #self.altinfopath.insert(0, cwd) + button = Tkinter.Button(body, text="...", command=self.get_altinfopath) + button.grid(row=2, column=2) - Tkinter.Label(body, text='Comma Separated List of 10 Character PIDs (no spaces)').grid(row=2, sticky=Tkconstants.E) + Tkinter.Label(body, text='Comma Separated List of 10 Character PIDs (no spaces)').grid(row=3, sticky=Tkconstants.E) self.pidnums = Tkinter.StringVar() self.pidinfo = Tkinter.Entry(body, width=50, textvariable=self.pidnums) - self.pidinfo.grid(row=2, column=1, sticky=sticky) + self.pidinfo.grid(row=3, column=1, sticky=sticky) msg1 = 'Conversion Log \n\n' self.stext = ScrolledText(body, bd=5, relief=Tkconstants.RIDGE, height=15, width=60, wrap=Tkconstants.WORD) @@ -100,16 +109,23 @@ class MainDialog(Tkinter.Frame): return # run as a subprocess via pipes and collect stdout - def mobirdr(self, infile, outfile, pidnums): + def mobirdr(self, infile, outfile, altinfopath, pidnums): # os.putenv('PYTHONUNBUFFERED', '1') - cmdline = 'python ./lib/k4mobidedrm.py "' + infile + '" "' + outfile + '" "' + pidnums + '"' + pidoption = '' + if pidnums and pidnums != '': + pidoption = ' -p "' + pidnums + '" ' + infooption = '' + if altinfopath and altinfopath != '': + infooption = ' -k "' + altinfopath + '" ' + cmdline = 'python ./lib/k4mobidedrm.py ' + pidoption + infooption + '"' + infile + '" "' + outfile + '"' + print cmdline if sys.platform.startswith('win'): search_path = os.environ['PATH'] search_path = search_path.lower() if search_path.find('python') >= 0: - cmdline = 'python lib\k4mobidedrm.py "' + infile + '" "' + outfile + '" "' + pidnums + '"' + cmdline = 'python lib\k4mobidedrm.py ' + pidoption + infooption + '"' + infile + '" "' + outfile + '"' else : - cmdline = 'lib\k4mobidedrm.py "' + infile + '" "' + outfile + '" "' + pidnums + '"' + cmdline = 'lib\k4mobidedrm.py ' + pidoption + infooption + '"' + infile + '" "' + outfile + '"' cmdline = cmdline.encode(sys.getfilesystemencoding()) p2 = Process(cmdline, shell=True, bufsize=1, stdin=None, stdout=PIPE, stderr=PIPE, close_fds=False) @@ -141,6 +157,20 @@ class MainDialog(Tkinter.Frame): self.outpath.insert(0, outpath) return + def get_altinfopath(self): + cwd = os.getcwdu() + cwd = cwd.encode('utf-8') + altinfopath = tkFileDialog.askopenfilename( + parent=None, title='Select kindle.info File', + defaultextension='.prc', filetypes=[('Kindle Info', '.info'), + ('All Files', '.*')], + initialdir=cwd) + if altinfopath: + altinfopath = os.path.normpath(altinfopath) + self.altinfopath.delete(0, Tkconstants.END) + self.altinfopath.insert(0, altinfopath) + return + def quitting(self): # kill any still running subprocess if self.p2 != None: @@ -154,6 +184,7 @@ class MainDialog(Tkinter.Frame): self.sbotton.configure(state='disabled') mobipath = self.mobipath.get() outpath = self.outpath.get() + altinfopath = self.altinfopath.get() pidnums = self.pidinfo.get() if not mobipath or not os.path.exists(mobipath): @@ -168,6 +199,10 @@ class MainDialog(Tkinter.Frame): self.status['text'] = 'Error specified output directory does not exist' self.sbotton.configure(state='normal') return + if altinfopath and not os.path.exists(altinfopath): + self.status['text'] = 'Specified kindle.info file does not exist' + self.sbotton.configure(state='normal') + return # default output file name to be input file name + '_nodrm.mobi' initname = os.path.splitext(os.path.basename(mobipath))[0] initname += '_nodrm.mobi' @@ -176,12 +211,13 @@ class MainDialog(Tkinter.Frame): log = 'Command = "python k4mobidedrm.py"\n' log += 'K4PC, K4M or Mobi Path = "'+ mobipath + '"\n' log += 'Output File = "' + outpath + '"\n' + log += 'Kindle.info file = "' + altinfopath + '"\n' log += 'PID list = "' + pidnums + '"\n' log += '\n\n' log += 'Please Wait ...\n\n' log = log.encode('utf-8') self.stext.insert(Tkconstants.END,log) - self.p2 = self.mobirdr(mobipath, outpath, pidnums) + self.p2 = self.mobirdr(mobipath, outpath, altinfopath, pidnums) # python does not seem to allow you to create # your own eventloop which every other gui does - strange diff --git a/Kindle_Mobi_Tools/K4_Mobi_DeDRM_Combined_Tool/README_K4MobiDeDRM.txt b/Kindle_Mobi_Tools/K4_Mobi_DeDRM_Combined_Tool/README_K4MobiDeDRM.txt index ce97ee3..71bf28e 100644 --- a/Kindle_Mobi_Tools/K4_Mobi_DeDRM_Combined_Tool/README_K4MobiDeDRM.txt +++ b/Kindle_Mobi_Tools/K4_Mobi_DeDRM_Combined_Tool/README_K4MobiDeDRM.txt @@ -13,11 +13,13 @@ hit the first '...' button to locate your DRM Kindle-style ebook 3. Then hit the second '...' button to select an output directory for the unlocked file -4. Then add in any PIDs you need from KindleV1, Kindle for iPhone/iPad/iPodTouch, or other single PID devices to the provided box as a comma separated list of 10 digit PID numbers. +4. If you have multiple Kindle.Info files and would like to use one specific one, please hit the third "...' button to select it. Note, if you only have one Kindle.Info file (like most users) this can and should be left blank. + +5. . Then add in any PIDs you need from KindleV1, Kindle for iPhone/iPad/iPodTouch, or other single PID devices to the provided box as a comma separated list of 10 digit PID numbers. If this is a Kindle for Mac or a Kindle for PC book then you can leave this box blank -5. hit the 'Start' button +6. hit the 'Start' button After a short delay, you should see progress in the Conversion Log window indicating is the unlocking was a success or failure. diff --git a/Kindle_Mobi_Tools/K4_Mobi_DeDRM_Combined_Tool/lib/k4mobidedrm.py b/Kindle_Mobi_Tools/K4_Mobi_DeDRM_Combined_Tool/lib/k4mobidedrm.py index 6a5c071..4fc0337 100644 --- a/Kindle_Mobi_Tools/K4_Mobi_DeDRM_Combined_Tool/lib/k4mobidedrm.py +++ b/Kindle_Mobi_Tools/K4_Mobi_DeDRM_Combined_Tool/lib/k4mobidedrm.py @@ -43,6 +43,7 @@ import sys import os, csv, getopt import binascii import zlib +import re from struct import pack, unpack, unpack_from @@ -115,9 +116,9 @@ def decode(data,map): # Parse the Kindle.info file and return the records as a list of key-values -def parseKindleInfo(): +def parseKindleInfo(kInfoFile): DB = {} - infoReader = openKindleInfo() + infoReader = openKindleInfo(kInfoFile) infoReader.read(1) data = infoReader.read() if sys.platform.startswith('win'): @@ -279,10 +280,10 @@ class MobiPeek: # DiapDealer's stuff: Parse the EXTH header records and parse the Kindleinfo # file to calculate the book pid. -def getK4Pids(exth, title): +def getK4Pids(exth, title, kInfoFile=None): global kindleDatabase try: - kindleDatabase = parseKindleInfo() + kindleDatabase = parseKindleInfo(kInfoFile) except Exception as message: print(message) @@ -353,30 +354,49 @@ def getK4Pids(exth, title): raise DrmException("\nCould not access K4 data - Perhaps K4 is not installed/configured?") return null +def usage(progname): + print "Removes DRM protection from K4PC, K4M, and Mobi ebooks" + print "Usage:" + print " %s [-k ] [-p ] " % progname + # # Main # def main(argv=sys.argv): global kindleDatabase import mobidedrm + + progname = os.path.basename(argv[0]) + kInfoFiles = [] + pidnums = "" + print ('K4MobiDeDrm v%(__version__)s ' 'provided by the work of many including DiapDealer, SomeUpdates, IHeartCabbages, CMBDTC, Skindle, DarkReverser, ApprenticeAlf, etc .' % globals()) - if len(argv)<3: - print "Removes DRM protection from K4PC, K4M, and Mobi ebooks" - print "Usage:" - print " %s []" % argv[0] - return 1 - - if len(argv) == 4: - pidnums = argv[3] - - if len(argv) == 3: - pidnums = "" + try: + opts, args = getopt.getopt(sys.argv[1:], "k:p:") + except getopt.GetoptError, err: + print str(err) + usage(progname) + sys.exit(2) + + if len(args)<2: + usage(progname) + sys.exit(2) + + for o, a in opts: + if o == "-k": + if a == None : + raise DrmException("Invalid parameter for -k") + kInfoFiles.append(a) + if o == "-p": + if a == None : + raise DrmException("Invalid parameter for -p") + pidnums = a kindleDatabase = None - infile = argv[1] - outfile = argv[2] + infile = args[0] + outfile = args[1] try: # first try with K4PC/K4M ex = MobiPeek(infile) @@ -394,8 +414,25 @@ def main(argv=sys.argv): else: file(outfile, 'wb').write(unlocked_file) return 0 - - # now try from the pid list + + # now try alternate kindle.info files + if kInfoFiles: + for infoFile in kInfoFiles: + kindleDatabase = None + try: + title = ex.getBookTitle() + exth = ex.getexthData() + pid = getK4Pids(exth, title, infoFile) + unlocked_file = mobidedrm.getUnencryptedBook(infile, pid) + except DrmException: + pass + except mobidedrm.DrmException: + pass + else: + file(outfile, 'wb').write(unlocked_file) + return 0 + + # Lastly, try from the pid list pids = pidnums.split(',') for pid in pids: try: @@ -426,7 +463,7 @@ if not __name__ == "__main__" and inCalibre: Provided by the work of many including DiapDealer, SomeUpdates, IHeartCabbages, CMBDTC, Skindle, DarkReverser, ApprenticeAlf, etc.' supported_platforms = ['osx', 'windows', 'linux'] # Platforms this plugin will run on author = 'DiapDealer, SomeUpdates' # The author of this plugin - version = (0, 0, 1) # The version number of this plugin + version = (0, 1, 1) # The version number of this plugin file_types = set(['prc','mobi','azw']) # The file types that this plugin will be applied to on_import = True # Run this plugin during the import priority = 200 # run this plugin before mobidedrm, k4pcdedrm, k4dedrm @@ -442,7 +479,27 @@ if not __name__ == "__main__" and inCalibre: from k4mutils import openKindleInfo, CryptUnprotectData, GetUserName, GetVolumeSerialNumber, charMap1, charMap2, charMap3, charMap4 import mobidedrm + # Get supplied list of PIDs to try from plugin customization. pidnums = self.site_customization + + # Load any kindle info files (*.info) included Calibre's config directory. + kInfoFiles = [] + try: + # Find Calibre's configuration directory. + confpath = os.path.split(os.path.split(self.plugin_path)[0])[0] + print 'K4MobiDeDRM: Calibre configuration directory = %s' % confpath + files = os.listdir(confpath) + filefilter = re.compile("\.info$", re.IGNORECASE) + files = filter(filefilter.search, files) + + if files: + for filename in files: + fpath = os.path.join(confpath, filename) + kInfoFiles.append(fpath) + print 'K4MobiDeDRM: Kindle info file %s found in config folder.' % filename + except IOError: + print 'K4MobiDeDRM: Error reading kindle info files from config directory.' + pass # first try with book specifc pid from K4PC or K4M try: @@ -463,6 +520,25 @@ if not __name__ == "__main__" and inCalibre: of.write(unlocked_file) of.close() return of.name + + # Now try alternate kindle info files + if kInfoFiles: + for infoFile in kInfoFiles: + kindleDatabase = None + try: + title = ex.getBookTitle() + exth = ex.getexthData() + pid = getK4Pids(exth, title, infoFile) + unlocked_file = mobidedrm.getUnencryptedBook(path_to_ebook,pid) + except DrmException: + pass + except mobidedrm.DrmException: + pass + else: + of = self.temporary_file('.mobi') + of.write(unlocked_file) + of.close() + return of.name # now try from the pid list pids = pidnums.split(',') diff --git a/Kindle_Mobi_Tools/K4_Mobi_DeDRM_Combined_Tool/lib/k4mutils.py b/Kindle_Mobi_Tools/K4_Mobi_DeDRM_Combined_Tool/lib/k4mutils.py index cb13e5f..977d81c 100644 --- a/Kindle_Mobi_Tools/K4_Mobi_DeDRM_Combined_Tool/lib/k4mutils.py +++ b/Kindle_Mobi_Tools/K4_Mobi_DeDRM_Combined_Tool/lib/k4mutils.py @@ -298,22 +298,25 @@ def CryptUnprotectData(encryptedData): return cleartext # Locate and open the .kindle-info file -def openKindleInfo(): - home = os.getenv('HOME') - cmdline = 'find "' + home + '/Library/Application Support" -name ".kindle-info"' - cmdline = cmdline.encode(sys.getfilesystemencoding()) - p1 = Process(cmdline, shell=True, bufsize=1, stdin=None, stdout=PIPE, stderr=PIPE, close_fds=False) - poll = p1.wait('wait') - results = p1.read() - reslst = results.split('\n') - kinfopath = 'NONE' - cnt = len(reslst) - for j in xrange(cnt): - resline = reslst[j] - pp = resline.find('.kindle-info') - if pp >= 0: - kinfopath = resline - break - if not os.path.exists(kinfopath): - raise K4MDrmException('Error: .kindle-info file can not be found') - return open(kinfopath,'r') +def openKindleInfo(kInfoFile=None): + if kInfoFile == None: + home = os.getenv('HOME') + cmdline = 'find "' + home + '/Library/Application Support" -name ".kindle-info"' + cmdline = cmdline.encode(sys.getfilesystemencoding()) + p1 = Process(cmdline, shell=True, bufsize=1, stdin=None, stdout=PIPE, stderr=PIPE, close_fds=False) + poll = p1.wait('wait') + results = p1.read() + reslst = results.split('\n') + kinfopath = 'NONE' + cnt = len(reslst) + for j in xrange(cnt): + resline = reslst[j] + pp = resline.find('.kindle-info') + if pp >= 0: + kinfopath = resline + break + if not os.path.exists(kinfopath): + raise K4MDrmException('Error: .kindle-info file can not be found') + return open(kinfopath,'r') + else: + return open(kInfoFile, 'r') \ No newline at end of file diff --git a/Kindle_Mobi_Tools/K4_Mobi_DeDRM_Combined_Tool/lib/k4pcutils.py b/Kindle_Mobi_Tools/K4_Mobi_DeDRM_Combined_Tool/lib/k4pcutils.py index 777376d..337b992 100644 --- a/Kindle_Mobi_Tools/K4_Mobi_DeDRM_Combined_Tool/lib/k4pcutils.py +++ b/Kindle_Mobi_Tools/K4_Mobi_DeDRM_Combined_Tool/lib/k4pcutils.py @@ -101,7 +101,10 @@ CryptUnprotectData = CryptUnprotectData() # # Locate and open the Kindle.info file. # -def openKindleInfo(): - regkey = winreg.OpenKey(winreg.HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\\") - path = winreg.QueryValueEx(regkey, 'Local AppData')[0] - return open(path+'\\Amazon\\Kindle For PC\\{AMAwzsaPaaZAzmZzZQzgZCAkZ3AjA_AY}\\kindle.info','r') +def openKindleInfo(kInfoFile=None): + if kInfoFile == None: + regkey = winreg.OpenKey(winreg.HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\\") + path = winreg.QueryValueEx(regkey, 'Local AppData')[0] + return open(path+'\\Amazon\\Kindle For PC\\{AMAwzsaPaaZAzmZzZQzgZCAkZ3AjA_AY}\\kindle.info','r') + else: + return open(kInfoFile, 'r') diff --git a/Kindle_Mobi_Tools/K4_Mobi_DeDRM_Combined_Tool/lib/mobidedrm.py b/Kindle_Mobi_Tools/K4_Mobi_DeDRM_Combined_Tool/lib/mobidedrm.py index 5ed58a5..eed1cce 100644 --- a/Kindle_Mobi_Tools/K4_Mobi_DeDRM_Combined_Tool/lib/mobidedrm.py +++ b/Kindle_Mobi_Tools/K4_Mobi_DeDRM_Combined_Tool/lib/mobidedrm.py @@ -37,14 +37,17 @@ # in utf8 file are encrypted. (Although neither kind gets compressed.) # This knowledge leads to a simplification of the test for the # trailing data byte flags - version 5 and higher AND header size >= 0xE4. -# 0.15 - Now outputs 'hearbeat', and is also quicker for long files. +# 0.15 - Now outputs 'heartbeat', and is also quicker for long files. # 0.16 - And reverts to 'done' not 'done.' at the end for unswindle compatibility. # 0.17 - added modifications to support its use as an imported python module # both inside calibre and also in other places (ie K4DeDRM tools) -# 0.17a - disabled the standalone plugin feature since a plugin can not import +# 0.17a- disabled the standalone plugin feature since a plugin can not import # a plugin +# 0.18 - It seems that multibyte entries aren't encrypted in a v7 file... +# Removed the disabled Calibre plug-in code +# Permit use of 8-digit PIDs -__version__ = '0.17' +__version__ = '0.18' import sys import struct @@ -127,10 +130,11 @@ def getSizeOfTrailingDataEntries(ptr, size, flags): if testflags & 1: num += getSizeOfTrailingDataEntry(ptr, size - num) testflags >>= 1 - # Multibyte data, if present, is included in the encryption, so - # we do not need to check the low bit. - # if flags & 1: - # num += (ord(ptr[size - num - 1]) & 0x3) + 1 + # Check the low bit to see if there's multibyte data present. + # if multibyte data is included in the encryped data, we'll + # have already cleared this flag. + if flags & 1: + num += (ord(ptr[size - num - 1]) & 0x3) + 1 return num class DrmStripper: @@ -181,9 +185,14 @@ class DrmStripper: return found_key def __init__(self, data_file, pid): - if checksumPid(pid[0:-2]) != pid: - raise DrmException("invalid PID checksum") - pid = pid[0:-2] + if len(pid)==10: + if checksumPid(pid[0:-2]) != pid: + raise DrmException("invalid PID checksum") + pid = pid[0:-2] + elif len(pid)==8: + print "PID without checksum given. With checksum PID is "+checksumPid(pid) + else: + raise DrmException("Invalid PID length") self.data_file = data_file header = data_file[0:72] @@ -206,6 +215,10 @@ class DrmStripper: if (mobi_length >= 0xE4) and (mobi_version >= 5): extra_data_flags, = struct.unpack('>H', sect[0xF2:0xF4]) print "Extra Data Flags = %d" %extra_data_flags + if mobi_version < 7: + # multibyte utf8 data is included in the encryption for mobi_version 5 (& 6?) + # so clear that byte so that we leave it to be decrypted. + extra_data_flags &= 0xFFFE crypto_type, = struct.unpack('>H', sect[0xC:0xC+2]) if crypto_type == 0: @@ -282,44 +295,3 @@ def main(argv=sys.argv): if __name__ == "__main__": sys.exit(main()) - -#if not __name__ == "__main__": -if False: - - # note a calibre plugin can not import code with another calibre plugin - # in it as it ends up registering two different plugins - from calibre.customize import FileTypePlugin - - class MobiDeDRM(FileTypePlugin): - name = 'MobiDeDRM' # Name of the plugin - description = 'Removes DRM from secure Mobi files' - supported_platforms = ['linux', 'osx', 'windows'] # Platforms this plugin will run on - author = 'The Dark Reverser' # The author of this plugin - version = (0, 1, 7) # The version number of this plugin - file_types = set(['prc','mobi','azw']) # The file types that this plugin will be applied to - on_import = True # Run this plugin during the import - - def run(self, path_to_ebook): - from calibre.gui2 import is_ok_to_use_qt - from PyQt4.Qt import QMessageBox - PID = self.site_customization - data_file = file(path_to_ebook, 'rb').read() - ar = PID.split(',') - for i in ar: - try: - unlocked_file = DrmStripper(data_file, i).getResult() - except DrmException: - if is_ok_to_use_qt(): - d = QMessageBox(QMessageBox.Warning, "MobiDeDRM Plugin", "Error decoding: %s\n" % path_to_ebook) - d.show() - d.raise_() - d.exec_() - raise Exception("MobiDeDRM Plugin: Error decoding ebook") - else: - of = self.temporary_file('.mobi') - of.write(unlocked_file) - of.close() - return of.name - - def customization_help(self, gui=False): - return 'Enter PID (separate multiple PIDs with comma)' diff --git a/Kindle_Mobi_Tools/Kindle_4_Mac_Unswindle/K4Munswindle.pyw b/Kindle_Mobi_Tools/Kindle_4_Mac_Unswindle/K4Munswindle.pyw index 234f38f..58a8e96 100644 --- a/Kindle_Mobi_Tools/Kindle_4_Mac_Unswindle/K4Munswindle.pyw +++ b/Kindle_Mobi_Tools/Kindle_4_Mac_Unswindle/K4Munswindle.pyw @@ -145,7 +145,7 @@ class MainDialog(Tkinter.Frame): # run as a gdb subprocess via pipes and collect stdout def gdbrdr(self, k4mappfile, gdbcmds): - cmdline = 'gdb -q -silent -readnow -batch -x ' + gdbcmds + ' "' + k4mappfile + '"' + cmdline = '/usr/bin/gdb -q -silent -readnow -batch -x ' + gdbcmds + ' "' + k4mappfile + '"' cmdline = cmdline.encode(sys.getfilesystemencoding()) p3 = Process(cmdline, shell=True, bufsize=1, stdin=None, stdout=PIPE, stderr=PIPE, close_fds=False) poll = p3.wait('wait') @@ -169,8 +169,12 @@ class MainDialog(Tkinter.Frame): if fp >= 0: tp1 = resline.find('.azw') tp2 = resline.find('.prc') + tp3 = resline.find('.mbp') if tp1 >= 0 or tp2 >= 0: bookpath = resline[8:] + if tp3 >= 0 and topazbook == 1: + bookpath = resline[8:-3] + bookpath += 'azw' # put code here to get pid and file name return pidnum, bookpath, topazbook @@ -194,6 +198,9 @@ class MainDialog(Tkinter.Frame): sha1_app_digests = { 'e197ed2171ceb44a35c24bd30263b7253331694f' : 'gdb_kindle_cmds_r1.txt', '4f702436171f84acc13bdf9f94fae91525aecef5' : 'gdb_kindle_cmds_r2.txt', + '4981b7eb37ccf0b8f63f56e8024b5ab593e8a97c' : 'gdb_kindle_cmds_r3.txt', + '82909f0545688f09343e2c8fd8521eeee37d2de6' : 'gdb_kindle_cmds_r4.txt', + 'e260e3515cd525cd085c70baa6e42e08079edbcd' : 'gdb_kindle_cmds_r4.txt', 'no_sha1_digest_key_here_________________' : 'no_gdb_kindle_cmds.txt', } # now disable the button to prevent multiple launches @@ -220,12 +227,16 @@ class MainDialog(Tkinter.Frame): self.sbotton.configure(state='normal') return - # now check if the K4M app bianry is known and if so which gdbcmds to use + + # now check if the K4M app binary is known and if so which gdbcmds to use binary_app_file = k4mpath + '/Contents/MacOS/Kindle for Mac' if not os.path.exists(binary_app_file): binary_app_file = k4mpath + '/Contents/MacOS/Kindle' + k4mpath = binary_app_file + digest = SHA1(file(binary_app_file, 'rb').read()) + # print digest gdbcmds = None if digest in sha1_app_digests: @@ -246,6 +257,7 @@ class MainDialog(Tkinter.Frame): log += '\n\n' log = log.encode('utf-8') self.stext.insert(Tkconstants.END,log) + self.sbotton.configure(state='normal') return pidnum = self.checksumPid(pidnum) diff --git a/Kindle_Mobi_Tools/Kindle_4_Mac_Unswindle/README_K4Munswindle.txt b/Kindle_Mobi_Tools/Kindle_4_Mac_Unswindle/README_K4Munswindle.txt index 46f6a38..1f1907b 100644 --- a/Kindle_Mobi_Tools/Kindle_4_Mac_Unswindle/README_K4Munswindle.txt +++ b/Kindle_Mobi_Tools/Kindle_4_Mac_Unswindle/README_K4Munswindle.txt @@ -1,18 +1,21 @@ -K4MUnswindle +K4Munswindle Prerequisites: - Kindle for Mac.app Version 1.0.0 Beta 1 (27214) - (this is the original version) - or - Kindle.app Version 1.2.0 (30689) - (this is the current version at Amazon) + or + Kindle.app Version 1.2.1 (30781) + or + Kindle.app Version 1.2.2 (30814) + (this is now the current version) + - A **recent** version of the XCode Developer Tools **must** be Installed + (see your latest Mac OS X Install Disk for the installer, and then use Apple System Updates) - - XCode Developer Tools **must** be Installed - (see your latest Mac OS X Install Disk for the installer) +***PLEASE REMEMBER to UNCHECK the "auto updates" in the Kindle.app Preferences! +***otherwise it will always update and K4MUnswindle will stop working The directions for use are: diff --git a/Kindle_Mobi_Tools/Kindle_4_Mac_Unswindle/lib/mobidedrm.py b/Kindle_Mobi_Tools/Kindle_4_Mac_Unswindle/lib/mobidedrm.py index 07d5f6f..eed1cce 100644 --- a/Kindle_Mobi_Tools/Kindle_4_Mac_Unswindle/lib/mobidedrm.py +++ b/Kindle_Mobi_Tools/Kindle_4_Mac_Unswindle/lib/mobidedrm.py @@ -37,10 +37,17 @@ # in utf8 file are encrypted. (Although neither kind gets compressed.) # This knowledge leads to a simplification of the test for the # trailing data byte flags - version 5 and higher AND header size >= 0xE4. -# 0.15 - Now outputs 'hearbeat', and is also quicker for long files. +# 0.15 - Now outputs 'heartbeat', and is also quicker for long files. # 0.16 - And reverts to 'done' not 'done.' at the end for unswindle compatibility. +# 0.17 - added modifications to support its use as an imported python module +# both inside calibre and also in other places (ie K4DeDRM tools) +# 0.17a- disabled the standalone plugin feature since a plugin can not import +# a plugin +# 0.18 - It seems that multibyte entries aren't encrypted in a v7 file... +# Removed the disabled Calibre plug-in code +# Permit use of 8-digit PIDs -__version__ = '0.16' +__version__ = '0.18' import sys import struct @@ -123,10 +130,11 @@ def getSizeOfTrailingDataEntries(ptr, size, flags): if testflags & 1: num += getSizeOfTrailingDataEntry(ptr, size - num) testflags >>= 1 - # Multibyte data, if present, is included in the encryption, so - # we do not need to check the low bit. - # if flags & 1: - # num += (ord(ptr[size - num - 1]) & 0x3) + 1 + # Check the low bit to see if there's multibyte data present. + # if multibyte data is included in the encryped data, we'll + # have already cleared this flag. + if flags & 1: + num += (ord(ptr[size - num - 1]) & 0x3) + 1 return num class DrmStripper: @@ -177,9 +185,14 @@ class DrmStripper: return found_key def __init__(self, data_file, pid): - if checksumPid(pid[0:-2]) != pid: - raise DrmException("invalid PID checksum") - pid = pid[0:-2] + if len(pid)==10: + if checksumPid(pid[0:-2]) != pid: + raise DrmException("invalid PID checksum") + pid = pid[0:-2] + elif len(pid)==8: + print "PID without checksum given. With checksum PID is "+checksumPid(pid) + else: + raise DrmException("Invalid PID length") self.data_file = data_file header = data_file[0:72] @@ -202,6 +215,10 @@ class DrmStripper: if (mobi_length >= 0xE4) and (mobi_version >= 5): extra_data_flags, = struct.unpack('>H', sect[0xF2:0xF4]) print "Extra Data Flags = %d" %extra_data_flags + if mobi_version < 7: + # multibyte utf8 data is included in the encryption for mobi_version 5 (& 6?) + # so clear that byte so that we leave it to be decrypted. + extra_data_flags &= 0xFFFE crypto_type, = struct.unpack('>H', sect[0xC:0xC+2]) if crypto_type == 0: @@ -248,63 +265,33 @@ class DrmStripper: def getResult(self): return self.data_file -if not __name__ == "__main__": - from calibre.customize import FileTypePlugin +def getUnencryptedBook(infile,pid): + sys.stdout=Unbuffered(sys.stdout) + data_file = file(infile, 'rb').read() + strippedFile = DrmStripper(data_file, pid) + return strippedFile.getResult() - class MobiDeDRM(FileTypePlugin): - name = 'MobiDeDRM' # Name of the plugin - description = 'Removes DRM from secure Mobi files' - supported_platforms = ['linux', 'osx', 'windows'] # Platforms this plugin will run on - author = 'The Dark Reverser' # The author of this plugin - version = (0, 1, 6) # The version number of this plugin - file_types = set(['prc','mobi','azw']) # The file types that this plugin will be applied to - on_import = True # Run this plugin during the import - - def run(self, path_to_ebook): - from calibre.gui2 import is_ok_to_use_qt - from PyQt4.Qt import QMessageBox - PID = self.site_customization - data_file = file(path_to_ebook, 'rb').read() - ar = PID.split(',') - for i in ar: - try: - unlocked_file = DrmStripper(data_file, i).getResult() - except DrmException: - # ignore the error - pass - else: - of = self.temporary_file('.mobi') - of.write(unlocked_file) - of.close() - return of.name - if is_ok_to_use_qt(): - d = QMessageBox(QMessageBox.Warning, "MobiDeDRM Plugin", "Couldn't decode: %s\n\nImporting encrypted version." % path_to_ebook) - d.show() - d.raise_() - d.exec_() - return path_to_ebook - - def customization_help(self, gui=False): - return 'Enter PID (separate multiple PIDs with comma)' - -if __name__ == "__main__": +def main(argv=sys.argv): sys.stdout=Unbuffered(sys.stdout) print ('MobiDeDrm v%(__version__)s. ' 'Copyright 2008-2010 The Dark Reverser.' % globals()) - if len(sys.argv)<4: + if len(argv)<4: print "Removes protection from Mobipocket books" print "Usage:" print " %s " % sys.argv[0] - sys.exit(1) + return 1 else: - infile = sys.argv[1] - outfile = sys.argv[2] - pid = sys.argv[3] - data_file = file(infile, 'rb').read() + infile = argv[1] + outfile = argv[2] + pid = argv[3] try: - strippedFile = DrmStripper(data_file, pid) - file(outfile, 'wb').write(strippedFile.getResult()) + stripped_file = getUnencryptedBook(infile, pid) + file(outfile, 'wb').write(stripped_file) except DrmException, e: print "Error: %s" % e - sys.exit(1) - sys.exit(0) \ No newline at end of file + return 1 + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/Kindle_Mobi_Tools/Kindle_4_PC_Unswindle/mobidedrm.py b/Kindle_Mobi_Tools/Kindle_4_PC_Unswindle/mobidedrm.py index 07d5f6f..eed1cce 100644 --- a/Kindle_Mobi_Tools/Kindle_4_PC_Unswindle/mobidedrm.py +++ b/Kindle_Mobi_Tools/Kindle_4_PC_Unswindle/mobidedrm.py @@ -37,10 +37,17 @@ # in utf8 file are encrypted. (Although neither kind gets compressed.) # This knowledge leads to a simplification of the test for the # trailing data byte flags - version 5 and higher AND header size >= 0xE4. -# 0.15 - Now outputs 'hearbeat', and is also quicker for long files. +# 0.15 - Now outputs 'heartbeat', and is also quicker for long files. # 0.16 - And reverts to 'done' not 'done.' at the end for unswindle compatibility. +# 0.17 - added modifications to support its use as an imported python module +# both inside calibre and also in other places (ie K4DeDRM tools) +# 0.17a- disabled the standalone plugin feature since a plugin can not import +# a plugin +# 0.18 - It seems that multibyte entries aren't encrypted in a v7 file... +# Removed the disabled Calibre plug-in code +# Permit use of 8-digit PIDs -__version__ = '0.16' +__version__ = '0.18' import sys import struct @@ -123,10 +130,11 @@ def getSizeOfTrailingDataEntries(ptr, size, flags): if testflags & 1: num += getSizeOfTrailingDataEntry(ptr, size - num) testflags >>= 1 - # Multibyte data, if present, is included in the encryption, so - # we do not need to check the low bit. - # if flags & 1: - # num += (ord(ptr[size - num - 1]) & 0x3) + 1 + # Check the low bit to see if there's multibyte data present. + # if multibyte data is included in the encryped data, we'll + # have already cleared this flag. + if flags & 1: + num += (ord(ptr[size - num - 1]) & 0x3) + 1 return num class DrmStripper: @@ -177,9 +185,14 @@ class DrmStripper: return found_key def __init__(self, data_file, pid): - if checksumPid(pid[0:-2]) != pid: - raise DrmException("invalid PID checksum") - pid = pid[0:-2] + if len(pid)==10: + if checksumPid(pid[0:-2]) != pid: + raise DrmException("invalid PID checksum") + pid = pid[0:-2] + elif len(pid)==8: + print "PID without checksum given. With checksum PID is "+checksumPid(pid) + else: + raise DrmException("Invalid PID length") self.data_file = data_file header = data_file[0:72] @@ -202,6 +215,10 @@ class DrmStripper: if (mobi_length >= 0xE4) and (mobi_version >= 5): extra_data_flags, = struct.unpack('>H', sect[0xF2:0xF4]) print "Extra Data Flags = %d" %extra_data_flags + if mobi_version < 7: + # multibyte utf8 data is included in the encryption for mobi_version 5 (& 6?) + # so clear that byte so that we leave it to be decrypted. + extra_data_flags &= 0xFFFE crypto_type, = struct.unpack('>H', sect[0xC:0xC+2]) if crypto_type == 0: @@ -248,63 +265,33 @@ class DrmStripper: def getResult(self): return self.data_file -if not __name__ == "__main__": - from calibre.customize import FileTypePlugin +def getUnencryptedBook(infile,pid): + sys.stdout=Unbuffered(sys.stdout) + data_file = file(infile, 'rb').read() + strippedFile = DrmStripper(data_file, pid) + return strippedFile.getResult() - class MobiDeDRM(FileTypePlugin): - name = 'MobiDeDRM' # Name of the plugin - description = 'Removes DRM from secure Mobi files' - supported_platforms = ['linux', 'osx', 'windows'] # Platforms this plugin will run on - author = 'The Dark Reverser' # The author of this plugin - version = (0, 1, 6) # The version number of this plugin - file_types = set(['prc','mobi','azw']) # The file types that this plugin will be applied to - on_import = True # Run this plugin during the import - - def run(self, path_to_ebook): - from calibre.gui2 import is_ok_to_use_qt - from PyQt4.Qt import QMessageBox - PID = self.site_customization - data_file = file(path_to_ebook, 'rb').read() - ar = PID.split(',') - for i in ar: - try: - unlocked_file = DrmStripper(data_file, i).getResult() - except DrmException: - # ignore the error - pass - else: - of = self.temporary_file('.mobi') - of.write(unlocked_file) - of.close() - return of.name - if is_ok_to_use_qt(): - d = QMessageBox(QMessageBox.Warning, "MobiDeDRM Plugin", "Couldn't decode: %s\n\nImporting encrypted version." % path_to_ebook) - d.show() - d.raise_() - d.exec_() - return path_to_ebook - - def customization_help(self, gui=False): - return 'Enter PID (separate multiple PIDs with comma)' - -if __name__ == "__main__": +def main(argv=sys.argv): sys.stdout=Unbuffered(sys.stdout) print ('MobiDeDrm v%(__version__)s. ' 'Copyright 2008-2010 The Dark Reverser.' % globals()) - if len(sys.argv)<4: + if len(argv)<4: print "Removes protection from Mobipocket books" print "Usage:" print " %s " % sys.argv[0] - sys.exit(1) + return 1 else: - infile = sys.argv[1] - outfile = sys.argv[2] - pid = sys.argv[3] - data_file = file(infile, 'rb').read() + infile = argv[1] + outfile = argv[2] + pid = argv[3] try: - strippedFile = DrmStripper(data_file, pid) - file(outfile, 'wb').write(strippedFile.getResult()) + stripped_file = getUnencryptedBook(infile, pid) + file(outfile, 'wb').write(stripped_file) except DrmException, e: print "Error: %s" % e - sys.exit(1) - sys.exit(0) \ No newline at end of file + return 1 + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/Kindle_Mobi_Tools/MobiDeDRM.py b/Kindle_Mobi_Tools/MobiDeDRM.py new file mode 100644 index 0000000..eed1cce --- /dev/null +++ b/Kindle_Mobi_Tools/MobiDeDRM.py @@ -0,0 +1,297 @@ +#!/usr/bin/python +# +# This is a python script. You need a Python interpreter to run it. +# For example, ActiveState Python, which exists for windows. +# +# It can run standalone to convert files, or it can be installed as a +# plugin for Calibre (http://calibre-ebook.com/about) so that +# importing files with DRM 'Just Works'. +# +# To create a Calibre plugin, rename this file so that the filename +# ends in '_plugin.py', put it into a ZIP file and import that Calibre +# using its plugin configuration GUI. +# +# Changelog +# 0.01 - Initial version +# 0.02 - Huffdic compressed books were not properly decrypted +# 0.03 - Wasn't checking MOBI header length +# 0.04 - Wasn't sanity checking size of data record +# 0.05 - It seems that the extra data flags take two bytes not four +# 0.06 - And that low bit does mean something after all :-) +# 0.07 - The extra data flags aren't present in MOBI header < 0xE8 in size +# 0.08 - ...and also not in Mobi header version < 6 +# 0.09 - ...but they are there with Mobi header version 6, header size 0xE4! +# 0.10 - Outputs unencrypted files as-is, so that when run as a Calibre +# import filter it works when importing unencrypted files. +# Also now handles encrypted files that don't need a specific PID. +# 0.11 - use autoflushed stdout and proper return values +# 0.12 - Fix for problems with metadata import as Calibre plugin, report errors +# 0.13 - Formatting fixes: retabbed file, removed trailing whitespace +# and extra blank lines, converted CR/LF pairs at ends of each line, +# and other cosmetic fixes. +# 0.14 - Working out when the extra data flags are present has been problematic +# Versions 7 through 9 have tried to tweak the conditions, but have been +# only partially successful. Closer examination of lots of sample +# files reveals that a confusin has arisen because trailing data entries +# are not encrypted, but it turns out that the multibyte entries +# in utf8 file are encrypted. (Although neither kind gets compressed.) +# This knowledge leads to a simplification of the test for the +# trailing data byte flags - version 5 and higher AND header size >= 0xE4. +# 0.15 - Now outputs 'heartbeat', and is also quicker for long files. +# 0.16 - And reverts to 'done' not 'done.' at the end for unswindle compatibility. +# 0.17 - added modifications to support its use as an imported python module +# both inside calibre and also in other places (ie K4DeDRM tools) +# 0.17a- disabled the standalone plugin feature since a plugin can not import +# a plugin +# 0.18 - It seems that multibyte entries aren't encrypted in a v7 file... +# Removed the disabled Calibre plug-in code +# Permit use of 8-digit PIDs + +__version__ = '0.18' + +import sys +import struct +import binascii + +class Unbuffered: + def __init__(self, stream): + self.stream = stream + def write(self, data): + self.stream.write(data) + self.stream.flush() + def __getattr__(self, attr): + return getattr(self.stream, attr) + +class DrmException(Exception): + pass + +# Implementation of Pukall Cipher 1 +def PC1(key, src, decryption=True): + sum1 = 0; + sum2 = 0; + keyXorVal = 0; + if len(key)!=16: + print "Bad key length!" + return None + wkey = [] + for i in xrange(8): + wkey.append(ord(key[i*2])<<8 | ord(key[i*2+1])) + + dst = "" + for i in xrange(len(src)): + temp1 = 0; + byteXorVal = 0; + for j in xrange(8): + temp1 ^= wkey[j] + sum2 = (sum2+j)*20021 + sum1 + sum1 = (temp1*346)&0xFFFF + sum2 = (sum2+sum1)&0xFFFF + temp1 = (temp1*20021+1)&0xFFFF + byteXorVal ^= temp1 ^ sum2 + curByte = ord(src[i]) + if not decryption: + keyXorVal = curByte * 257; + curByte = ((curByte ^ (byteXorVal >> 8)) ^ byteXorVal) & 0xFF + if decryption: + keyXorVal = curByte * 257; + for j in xrange(8): + wkey[j] ^= keyXorVal; + dst+=chr(curByte) + return dst + +def checksumPid(s): + letters = "ABCDEFGHIJKLMNPQRSTUVWXYZ123456789" + crc = (~binascii.crc32(s,-1))&0xFFFFFFFF + crc = crc ^ (crc >> 16) + res = s + l = len(letters) + for i in (0,1): + b = crc & 0xff + pos = (b // l) ^ (b % l) + res += letters[pos%l] + crc >>= 8 + return res + +def getSizeOfTrailingDataEntries(ptr, size, flags): + def getSizeOfTrailingDataEntry(ptr, size): + bitpos, result = 0, 0 + if size <= 0: + return result + while True: + v = ord(ptr[size-1]) + result |= (v & 0x7F) << bitpos + bitpos += 7 + size -= 1 + if (v & 0x80) != 0 or (bitpos >= 28) or (size == 0): + return result + num = 0 + testflags = flags >> 1 + while testflags: + if testflags & 1: + num += getSizeOfTrailingDataEntry(ptr, size - num) + testflags >>= 1 + # Check the low bit to see if there's multibyte data present. + # if multibyte data is included in the encryped data, we'll + # have already cleared this flag. + if flags & 1: + num += (ord(ptr[size - num - 1]) & 0x3) + 1 + return num + +class DrmStripper: + def loadSection(self, section): + if (section + 1 == self.num_sections): + endoff = len(self.data_file) + else: + endoff = self.sections[section + 1][0] + off = self.sections[section][0] + return self.data_file[off:endoff] + + def patch(self, off, new): + self.data_file = self.data_file[:off] + new + self.data_file[off+len(new):] + + def patchSection(self, section, new, in_off = 0): + if (section + 1 == self.num_sections): + endoff = len(self.data_file) + else: + endoff = self.sections[section + 1][0] + off = self.sections[section][0] + assert off + in_off + len(new) <= endoff + self.patch(off + in_off, new) + + def parseDRM(self, data, count, pid): + pid = pid.ljust(16,'\0') + keyvec1 = "\x72\x38\x33\xB0\xB4\xF2\xE3\xCA\xDF\x09\x01\xD6\xE2\xE0\x3F\x96" + temp_key = PC1(keyvec1, pid, False) + temp_key_sum = sum(map(ord,temp_key)) & 0xff + found_key = None + for i in xrange(count): + verification, size, type, cksum, cookie = struct.unpack('>LLLBxxx32s', data[i*0x30:i*0x30+0x30]) + cookie = PC1(temp_key, cookie) + ver,flags,finalkey,expiry,expiry2 = struct.unpack('>LL16sLL', cookie) + if verification == ver and cksum == temp_key_sum and (flags & 0x1F) == 1: + found_key = finalkey + break + if not found_key: + # Then try the default encoding that doesn't require a PID + temp_key = keyvec1 + temp_key_sum = sum(map(ord,temp_key)) & 0xff + for i in xrange(count): + verification, size, type, cksum, cookie = struct.unpack('>LLLBxxx32s', data[i*0x30:i*0x30+0x30]) + cookie = PC1(temp_key, cookie) + ver,flags,finalkey,expiry,expiry2 = struct.unpack('>LL16sLL', cookie) + if verification == ver and cksum == temp_key_sum: + found_key = finalkey + break + return found_key + + def __init__(self, data_file, pid): + if len(pid)==10: + if checksumPid(pid[0:-2]) != pid: + raise DrmException("invalid PID checksum") + pid = pid[0:-2] + elif len(pid)==8: + print "PID without checksum given. With checksum PID is "+checksumPid(pid) + else: + raise DrmException("Invalid PID length") + + self.data_file = data_file + header = data_file[0:72] + if header[0x3C:0x3C+8] != 'BOOKMOBI': + raise DrmException("invalid file format") + self.num_sections, = struct.unpack('>H', data_file[76:78]) + + self.sections = [] + for i in xrange(self.num_sections): + offset, a1,a2,a3,a4 = struct.unpack('>LBBBB', data_file[78+i*8:78+i*8+8]) + flags, val = a1, a2<<16|a3<<8|a4 + self.sections.append( (offset, flags, val) ) + + sect = self.loadSection(0) + records, = struct.unpack('>H', sect[0x8:0x8+2]) + mobi_length, = struct.unpack('>L',sect[0x14:0x18]) + mobi_version, = struct.unpack('>L',sect[0x68:0x6C]) + extra_data_flags = 0 + print "MOBI header version = %d, length = %d" %(mobi_version, mobi_length) + if (mobi_length >= 0xE4) and (mobi_version >= 5): + extra_data_flags, = struct.unpack('>H', sect[0xF2:0xF4]) + print "Extra Data Flags = %d" %extra_data_flags + if mobi_version < 7: + # multibyte utf8 data is included in the encryption for mobi_version 5 (& 6?) + # so clear that byte so that we leave it to be decrypted. + extra_data_flags &= 0xFFFE + + crypto_type, = struct.unpack('>H', sect[0xC:0xC+2]) + if crypto_type == 0: + print "This book is not encrypted." + else: + if crypto_type == 1: + raise DrmException("cannot decode Mobipocket encryption type 1") + if crypto_type != 2: + raise DrmException("unknown encryption type: %d" % crypto_type) + + # calculate the keys + drm_ptr, drm_count, drm_size, drm_flags = struct.unpack('>LLLL', sect[0xA8:0xA8+16]) + if drm_count == 0: + raise DrmException("no PIDs found in this file") + found_key = self.parseDRM(sect[drm_ptr:drm_ptr+drm_size], drm_count, pid) + if not found_key: + raise DrmException("no key found. maybe the PID is incorrect") + + # kill the drm keys + self.patchSection(0, "\0" * drm_size, drm_ptr) + # kill the drm pointers + self.patchSection(0, "\xff" * 4 + "\0" * 12, 0xA8) + # clear the crypto type + self.patchSection(0, "\0" * 2, 0xC) + + # decrypt sections + print "Decrypting. Please wait . . .", + new_data = self.data_file[:self.sections[1][0]] + for i in xrange(1, records+1): + data = self.loadSection(i) + extra_size = getSizeOfTrailingDataEntries(data, len(data), extra_data_flags) + if i%100 == 0: + print ".", + # print "record %d, extra_size %d" %(i,extra_size) + new_data += PC1(found_key, data[0:len(data) - extra_size]) + if extra_size > 0: + new_data += data[-extra_size:] + #self.patchSection(i, PC1(found_key, data[0:len(data) - extra_size])) + if self.num_sections > records+1: + new_data += self.data_file[self.sections[records+1][0]:] + self.data_file = new_data + print "done" + + def getResult(self): + return self.data_file + +def getUnencryptedBook(infile,pid): + sys.stdout=Unbuffered(sys.stdout) + data_file = file(infile, 'rb').read() + strippedFile = DrmStripper(data_file, pid) + return strippedFile.getResult() + +def main(argv=sys.argv): + sys.stdout=Unbuffered(sys.stdout) + print ('MobiDeDrm v%(__version__)s. ' + 'Copyright 2008-2010 The Dark Reverser.' % globals()) + if len(argv)<4: + print "Removes protection from Mobipocket books" + print "Usage:" + print " %s " % sys.argv[0] + return 1 + else: + infile = argv[1] + outfile = argv[2] + pid = argv[3] + try: + stripped_file = getUnencryptedBook(infile, pid) + file(outfile, 'wb').write(stripped_file) + except DrmException, e: + print "Error: %s" % e + return 1 + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/Mobi_Additional_Tools/lib/mobidedrm.py b/Mobi_Additional_Tools/lib/mobidedrm.py index 5ed58a5..18514a0 100644 --- a/Mobi_Additional_Tools/lib/mobidedrm.py +++ b/Mobi_Additional_Tools/lib/mobidedrm.py @@ -40,9 +40,9 @@ # 0.15 - Now outputs 'hearbeat', and is also quicker for long files. # 0.16 - And reverts to 'done' not 'done.' at the end for unswindle compatibility. # 0.17 - added modifications to support its use as an imported python module -# both inside calibre and also in other places (ie K4DeDRM tools) -# 0.17a - disabled the standalone plugin feature since a plugin can not import -# a plugin +# both inside calibre and also in other places (ie K4MobiDeDRM tools) +# and modified the plugin code so that it will not interfere with other +# mobi/azw plugins if installed at the same time __version__ = '0.17' @@ -284,8 +284,6 @@ if __name__ == "__main__": sys.exit(main()) #if not __name__ == "__main__": -if False: - # note a calibre plugin can not import code with another calibre plugin # in it as it ends up registering two different plugins from calibre.customize import FileTypePlugin diff --git a/Topaz_Tools/README_Topaz_Tools.txt b/Topaz_Tools/README_Topaz_Tools.txt index 02bd298..49e6ae9 100644 --- a/Topaz_Tools/README_Topaz_Tools.txt +++ b/Topaz_Tools/README_Topaz_Tools.txt @@ -1,4 +1,5 @@ -The Topaz Tools only work for "Kindle for PC" books, and original standalone Kindles that have never been updated to firmware 2.5 or later, Kindle for iPhone/iPad/iPodTouch (where the PID is known) and Kindle for Mac (with the PID provided by the Kindle_4_Mac_Tools). +The Topaz Tools work for "Kindle for PC" books, "Kindle for Mac" books, original standalone Kindles that have never been updated to firmware 2.5 or later, and Kindle for iPhone/iPad/iPodTouch (where the PID is known). + For Topaz: @@ -8,19 +9,13 @@ For Topaz: 3. move to tools\Topaz_Tools\ -4. If you have an old Kindle (never updated to 2.5 or later) or an iPod, iPhone, or iPad or Kindle for Mac and you know your PID then double-click on the following: - -TopazExtract_iPhone_iPad_K4M.pyw - -If you have Kindle for PC (and no Kindle for Mac will NOT work here) then instead double-click on the following: - -TopazExtract_Kindle4PC.pyw +4. double-click on TopazExtract.pyw Hit the first “…” button to select the Topaz book with DRM that you want to convert Hit the second “…” to select an entirely new directory to extract the many book pieces into -And add info for your PID (or extra PIDs) if needed (should not be needed for Kindle For PC). +And add info for your PID (or extra PIDs) if needed (should not be needed for Kindle For PC or Kindle for Mac). This field is useful if you have Kindle for iPad/iPhone/iPodTouch or an old Kindle V1 and know your device PID. Hit the Start button diff --git a/Topaz_Tools/TopazExtract_Kindle4PC.pyw b/Topaz_Tools/TopazExtract.pyw similarity index 81% rename from Topaz_Tools/TopazExtract_Kindle4PC.pyw rename to Topaz_Tools/TopazExtract.pyw index 924d4c9..9d3b7fa 100644 --- a/Topaz_Tools/TopazExtract_Kindle4PC.pyw +++ b/Topaz_Tools/TopazExtract.pyw @@ -45,6 +45,15 @@ class MainDialog(Tkinter.Frame): self.outpath.insert(0, cwd) button = Tkinter.Button(body, text="...", command=self.get_outpath) button.grid(row=1, column=2) + + Tkinter.Label(body, text='Kindle.info file (optional)').grid(row=2, sticky=Tkconstants.E) + self.altinfopath = Tkinter.Entry(body, width=50) + self.altinfopath.grid(row=2, column=1, sticky=sticky) + #cwd = os.getcwdu() + #cwd = cwd.encode('utf-8') + #self.altinfopath.insert(0, cwd) + button = Tkinter.Button(body, text="...", command=self.get_altinfopath) + button.grid(row=2, column=2) Tkinter.Label(body, text='First 8 char of PID (optional)').grid(row=3, sticky=Tkconstants.E) self.pidnum = Tkinter.StringVar() @@ -98,20 +107,23 @@ class MainDialog(Tkinter.Frame): return # run as a subprocess via pipes and collect stdout - def topazrdr(self, infile, outdir, pidnum): + def topazrdr(self, infile, outdir, altinfopath, pidnum): # os.putenv('PYTHONUNBUFFERED', '1') pidoption = '' if pidnum and pidnum != '': pidoption = ' -p "' + pidnum + '" ' + infooption = '' + if altinfopath and altinfopath != '': + infooption = ' -k "' + altinfopath + '" ' outoption = ' -o "' + outdir + '" ' - cmdline = 'python ./lib/cmbtc_dump.py -v -d ' + pidoption + outoption + '"' + infile + '"' + cmdline = 'python ./lib/cmbtc_dump.py -v -d ' + pidoption + infooption + outoption + '"' + infile + '"' if sys.platform[0:3] == 'win': search_path = os.environ['PATH'] search_path = search_path.lower() if search_path.find('python') >= 0: - cmdline = 'python lib\cmbtc_dump.py -v -d ' + pidoption + outoption + '"' + infile + '"' + cmdline = 'python lib\cmbtc_dump.py -v -d ' + pidoption + infooption + outoption + '"' + infile + '"' else : - cmdline = 'lib\cmbtc_dump.py -v -d ' + pidoption + outoption + '"' + infile + '"' + cmdline = 'lib\cmbtc_dump.py -v -d ' + pidoption + infooption + outoption + '"' + infile + '"' cmdline = cmdline.encode(sys.getfilesystemencoding()) p2 = Process(cmdline, shell=True, bufsize=1, stdin=None, stdout=PIPE, stderr=PIPE, close_fds=False) @@ -140,6 +152,20 @@ class MainDialog(Tkinter.Frame): self.outpath.delete(0, Tkconstants.END) self.outpath.insert(0, outpath) return + + def get_altinfopath(self): + cwd = os.getcwdu() + cwd = cwd.encode('utf-8') + altinfopath = tkFileDialog.askopenfilename( + parent=None, title='Select kindle.info File', + defaultextension='.prc', filetypes=[('Kindle Info', '.info'), + ('All Files', '.*')], + initialdir=cwd) + if altinfopath: + altinfopath = os.path.normpath(altinfopath) + self.altinfopath.delete(0, Tkconstants.END) + self.altinfopath.insert(0, altinfopath) + return def quitting(self): # kill any still running subprocess @@ -154,6 +180,7 @@ class MainDialog(Tkinter.Frame): self.sbotton.configure(state='disabled') tpzpath = self.tpzpath.get() outpath = self.outpath.get() + altinfopath = self.altinfopath.get() if not tpzpath or not os.path.exists(tpzpath): self.status['text'] = 'Specified Topaz eBook file does not exist' self.sbotton.configure(state='normal') @@ -164,6 +191,10 @@ class MainDialog(Tkinter.Frame): return if not os.path.exists(outpath): os.makedirs(outpath) + if altinfopath and not os.path.exists(altinfopath): + self.status['text'] = 'Specified kindle.info file does not exist' + self.sbotton.configure(state='normal') + return pidnum = self.pidnum.get() # if not pidnum or pidnum == '': # self.status['text'] = 'You have not entered a PID ' @@ -173,12 +204,13 @@ class MainDialog(Tkinter.Frame): log = 'Command = "python cmbtc_dump.py"\n' log += 'Topaz Path Path = "'+ tpzpath + '"\n' log += 'Output Directory = "' + outpath + '"\n' + log += 'Kindle.info file = "' + altinfopath + '"\n' log += 'First 8 chars of PID = "' + pidnum + '"\n' log += '\n\n' log += 'Please Wait ...\n' log = log.encode('utf-8') self.stext.insert(Tkconstants.END,log) - self.p2 = self.topazrdr(tpzpath, outpath, pidnum) + self.p2 = self.topazrdr(tpzpath, outpath, altinfopath, pidnum) # python does not seem to allow you to create # your own eventloop which every other gui does - strange diff --git a/Topaz_Tools/lib/changes.txt b/Topaz_Tools/lib/changes.txt deleted file mode 100644 index 125a869..0000000 --- a/Topaz_Tools/lib/changes.txt +++ /dev/null @@ -1,64 +0,0 @@ -Changes in version 2.0 - - - gensvg.py now accepts two options - -x : output browseable XHTML+SVG pages (default) - -r : output raw SVG images (useful for later conversion to pdf) - - - flatxml2html.py now understands page.groups of type graphic - and handles vertical regions as svg images - - - genhtml.py now accepts an option - --fixed-image : which will force the conversion - of all fixed regions to svg images - - - minor bug fixes and html conversion improvements - - -Changes in version 1.8 - - gensvg.py now builds wonderful xhtml pages with embedded svg - that can be easily paged through as if reading a book! - (tested in Safari for Mac and Win and Firefox) - (requires javascript to be enabled) - - genhtml.py now REQUIRES that gensvg.py be run FIRST - this allows create of images on the fly from glyphs - - genhtml.py now automatically makes tables of words into svg - based images and will handle glyph based ornate first - letters of words - - cmbtc_dump_mac_linux.py has been renamed to be - cmbtc_dump_nonK4PC.py to make it clearer - when it needs to be used - - -Changes in version 1.7 - - gensvg.py has been improved so that the glyphs render exactly (ClarkNova) - - gensvg.py has fixed a render order "bug" that allowed some images to cover or hide text. (ClarkNova) - - change generated html to use external stylesheet via a link to "style.css" - - add missing tag - - make xhtml compliant doctype and minor changes to write correct xhtml - - make divs that act as anchors be hidden visually and to take up 0 height and 0 width to prevent any impact on layout - -Changes in version 1.6 - - support for books whose paragraphs have no styles - - support to run cmbtc_dump on Linux and Mac OSX provided you know your PID of your ipod or standalone Kindle - (contributed by DiapDealer) - -Changes in version 1.5 - - completely reworked generation of styles to use actual page heights and widths - - added new script getpagedim.py to support the above - - style names with underscores in them are now properly paired with their base class - - fixed hanging indents that did not ever set a left margin - - added support for a number of not previously known region types - - added support for a previously unknown snippet - <empty></empty> - - corrected a bug that caused unknown regions to abort the program - - added code to make the handling of unknown regions better in general - - corrected a bug that caused the last link on a page to be missing (if it was the last thing on the page) - -Changes in version 1.3 - - font generation by gensvg.py is now greatly improved with support for contour points added - - support for more region types - - support for inline images in paragraphs or text fields (ie. initial graphics for the first letter of a word) - - greatly improved dtd information used for the xml to prevent parsing mistakes - -Version 1.0 - - initial release - diff --git a/Topaz_Tools/lib/cmbtc_dump.py b/Topaz_Tools/lib/cmbtc_dump.py index 96a75b4..9dca393 100644 --- a/Topaz_Tools/lib/cmbtc_dump.py +++ b/Topaz_Tools/lib/cmbtc_dump.py @@ -1,19 +1,5 @@ -#! /usr/bin/python -# For use in Topaz Scripts version 2.6 - -""" - -Comprehensive Mazama Book DRM with Topaz Cryptography V2.0 - ------BEGIN PUBLIC KEY----- -MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDdBHJ4CNc6DNFCw4MRCw4SWAK6 -M8hYfnNEI0yQmn5Ti+W8biT7EatpauE/5jgQMPBmdNrDr1hbHyHBSP7xeC2qlRWC -B62UCxeu/fpfnvNHDN/wPWWH4jynZ2M6cdcnE5LQ+FfeKqZn7gnG2No1U9h7oOHx -y2/pHuYme7U1TsgSjwIDAQAB ------END PUBLIC KEY----- - -""" -from __future__ import with_statement +#!/usr/bin/env python +# For use with Topaz Scripts Version 2.6 class Unbuffered: def __init__(self, stream): @@ -27,155 +13,64 @@ class Unbuffered: import sys sys.stdout=Unbuffered(sys.stdout) - import csv import os import getopt import zlib from struct import pack from struct import unpack -from ctypes import windll, c_char_p, c_wchar_p, c_uint, POINTER, byref, \ - create_unicode_buffer, create_string_buffer, CFUNCTYPE, addressof, \ - string_at, Structure, c_void_p, cast -import _winreg as winreg -import Tkinter -import Tkconstants -import tkMessageBox import traceback import hashlib MAX_PATH = 255 -kernel32 = windll.kernel32 -advapi32 = windll.advapi32 -crypt32 = windll.crypt32 - -global kindleDatabase global bookFile global bookPayloadOffset global bookHeaderRecords global bookMetadata global bookKey global command +global kindleDatabase +global verbose +global PIDs + +if sys.platform.startswith('win'): + from k4pcutils import openKindleInfo, CryptUnprotectData, GetUserName, GetVolumeSerialNumber, charMap1, charMap2, charMap3, charMap4 +if sys.platform.startswith('darwin'): + from k4mutils import openKindleInfo, CryptUnprotectData, GetUserName, GetVolumeSerialNumber, charMap1, charMap2, charMap3, charMap4 -# -# Various character maps used to decrypt books. Probably supposed to act as obfuscation -# -charMap1 = "n5Pr6St7Uv8Wx9YzAb0Cd1Ef2Gh3Jk4M" -charMap2 = "AaZzB0bYyCc1XxDdW2wEeVv3FfUuG4g-TtHh5SsIiR6rJjQq7KkPpL8lOoMm9Nn_" -charMap3 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" -charMap4 = "ABCDEFGHIJKLMNPQRSTUVWXYZ123456789" -# # Exceptions for all the problems that might happen during the script -# - class CMBDTCError(Exception): pass class CMBDTCFatal(Exception): pass -# -# Stolen stuff -# -class DataBlob(Structure): - _fields_ = [('cbData', c_uint), - ('pbData', c_void_p)] -DataBlob_p = POINTER(DataBlob) - -def GetSystemDirectory(): - GetSystemDirectoryW = kernel32.GetSystemDirectoryW - GetSystemDirectoryW.argtypes = [c_wchar_p, c_uint] - GetSystemDirectoryW.restype = c_uint - def GetSystemDirectory(): - buffer = create_unicode_buffer(MAX_PATH + 1) - GetSystemDirectoryW(buffer, len(buffer)) - return buffer.value - return GetSystemDirectory -GetSystemDirectory = GetSystemDirectory() - - -def GetVolumeSerialNumber(): - GetVolumeInformationW = kernel32.GetVolumeInformationW - GetVolumeInformationW.argtypes = [c_wchar_p, c_wchar_p, c_uint, - POINTER(c_uint), POINTER(c_uint), - POINTER(c_uint), c_wchar_p, c_uint] - GetVolumeInformationW.restype = c_uint - def GetVolumeSerialNumber(path): - vsn = c_uint(0) - GetVolumeInformationW(path, None, 0, byref(vsn), None, None, None, 0) - return vsn.value - return GetVolumeSerialNumber -GetVolumeSerialNumber = GetVolumeSerialNumber() - - -def GetUserName(): - GetUserNameW = advapi32.GetUserNameW - GetUserNameW.argtypes = [c_wchar_p, POINTER(c_uint)] - GetUserNameW.restype = c_uint - def GetUserName(): - buffer = create_unicode_buffer(32) - size = c_uint(len(buffer)) - while not GetUserNameW(buffer, byref(size)): - buffer = create_unicode_buffer(len(buffer) * 2) - size.value = len(buffer) - return buffer.value.encode('utf-16-le')[::2] - return GetUserName -GetUserName = GetUserName() - - -def CryptUnprotectData(): - _CryptUnprotectData = crypt32.CryptUnprotectData - _CryptUnprotectData.argtypes = [DataBlob_p, c_wchar_p, DataBlob_p, - c_void_p, c_void_p, c_uint, DataBlob_p] - _CryptUnprotectData.restype = c_uint - def CryptUnprotectData(indata, entropy): - indatab = create_string_buffer(indata) - indata = DataBlob(len(indata), cast(indatab, c_void_p)) - entropyb = create_string_buffer(entropy) - entropy = DataBlob(len(entropy), cast(entropyb, c_void_p)) - outdata = DataBlob() - if not _CryptUnprotectData(byref(indata), None, byref(entropy), - None, None, 0, byref(outdata)): - raise CMBDTCFatal("Failed to Unprotect Data") - return string_at(outdata.pbData, outdata.cbData) - return CryptUnprotectData -CryptUnprotectData = CryptUnprotectData() - -# # Returns the MD5 digest of "message" -# - def MD5(message): ctx = hashlib.md5() ctx.update(message) return ctx.digest() -# -# Returns the MD5 digest of "message" -# +# Returns the MD5 digest of "message" def SHA1(message): ctx = hashlib.sha1() ctx.update(message) return ctx.digest() -# -# Open the book file at path -# +# Open the book file at path def openBook(path): try: return open(path,'rb') except: raise CMBDTCFatal("Could not open book file: " + path) -# -# Encode the bytes in data with the characters in map -# +# Encode the bytes in data with the characters in map def encode(data, map): result = "" for char in data: @@ -186,55 +81,52 @@ def encode(data, map): result += map[R] return result -# # Hash the bytes in data and then encode the digest with the characters in map -# - def encodeHash(data,map): return encode(MD5(data),map) -# # Decode the string in data with the characters in map. Returns the decoded bytes -# - def decode(data,map): result = "" - for i in range (0,len(data),2): + for i in range (0,len(data)-1,2): high = map.find(data[i]) low = map.find(data[i+1]) - value = (((high * 0x40) ^ 0x80) & 0xFF) + low + if (high == -1) or (low == -1) : + break + value = (((high * len(map)) ^ 0x80) & 0xFF) + low result += pack("B",value) return result - -# -# Locate and open the Kindle.info file (Hopefully in the way it is done in the Kindle application) -# - -def openKindleInfo(): - regkey = winreg.OpenKey(winreg.HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\\") - path = winreg.QueryValueEx(regkey, 'Local AppData')[0] - return open(path+'\\Amazon\\Kindle For PC\\{AMAwzsaPaaZAzmZzZQzgZCAkZ3AjA_AY}\\kindle.info','r') -# # Parse the Kindle.info file and return the records as a list of key-values -# - -def parseKindleInfo(): +def parseKindleInfo(kInfoFile): DB = {} - infoReader = openKindleInfo() + infoReader = openKindleInfo(kInfoFile) infoReader.read(1) data = infoReader.read() - items = data.split('{') - + if sys.platform.startswith('win'): + items = data.split('{') + else : + items = data.split('[') for item in items: splito = item.split(':') DB[splito[0]] =splito[1] return DB -# -# Find if the original string for a hashed/encoded string is known. If so return the original string othwise return an empty string. (Totally not optimal) -# +# Get a record from the Kindle.info file for the key "hashedKey" (already hashed and encoded). Return the decoded and decrypted record +def getKindleInfoValueForHash(hashedKey): + global kindleDatabase + encryptedValue = decode(kindleDatabase[hashedKey],charMap2) + if sys.platform.startswith('win'): + return CryptUnprotectData(encryptedValue,"") + else: + cleartext = CryptUnprotectData(encryptedValue) + return decode(cleartext, charMap1) +# Get a record from the Kindle.info file for the string in "key" (plaintext). Return the decoded and decrypted record +def getKindleInfoValueForKey(key): + return getKindleInfoValueForHash(encodeHash(key,charMap2)) + +# Find if the original string for a hashed/encoded string is known. If so return the original string othwise return an empty string. def findNameForHash(hash): names = ["kindle.account.tokens","kindle.cookie.item","eulaVersionAccepted","login_date","kindle.token.item","login","kindle.key.item","kindle.name.info","kindle.device.info", "MazamaRandomNumber"] result = "" @@ -242,42 +134,81 @@ def findNameForHash(hash): if hash == encodeHash(name, charMap2): result = name break - return name + return result -# # Print all the records from the kindle.info file (option -i) -# - def printKindleInfo(): for record in kindleDatabase: name = findNameForHash(record) if name != "" : print (name) - print ("--------------------------\n") + print ("--------------------------") else : print ("Unknown Record") print getKindleInfoValueForHash(record) print "\n" -# -# Get a record from the Kindle.info file for the key "hashedKey" (already hashed and encoded). Return the decoded and decrypted record -# -def getKindleInfoValueForHash(hashedKey): - global kindleDatabase - encryptedValue = decode(kindleDatabase[hashedKey],charMap2) - return CryptUnprotectData(encryptedValue,"") - # -# Get a record from the Kindle.info file for the string in "key" (plaintext). Return the decoded and decrypted record +# PID generation routines # - -def getKindleInfoValueForKey(key): - return getKindleInfoValueForHash(encodeHash(key,charMap2)) -# -# Get a 7 bit encoded number from the book file -# +# Returns two bit at offset from a bit field +def getTwoBitsFromBitField(bitField,offset): + byteNumber = offset // 4 + bitPosition = 6 - 2*(offset % 4) + return ord(bitField[byteNumber]) >> bitPosition & 3 +# Returns the six bits at offset from a bit field +def getSixBitsFromBitField(bitField,offset): + offset *= 3 + value = (getTwoBitsFromBitField(bitField,offset) <<4) + (getTwoBitsFromBitField(bitField,offset+1) << 2) +getTwoBitsFromBitField(bitField,offset+2) + return value + +# 8 bits to six bits encoding from hash to generate PID string +def encodePID(hash): + global charMap3 + PID = "" + for position in range (0,8): + PID += charMap3[getSixBitsFromBitField(hash,position)] + return PID + +# Encryption table used to generate the device PID +def generatePidEncryptionTable() : + table = [] + for counter1 in range (0,0x100): + value = counter1 + for counter2 in range (0,8): + if (value & 1 == 0) : + value = value >> 1 + else : + value = value >> 1 + value = value ^ 0xEDB88320 + table.append(value) + return table + +# Seed value used to generate the device PID +def generatePidSeed(table,dsn) : + value = 0 + for counter in range (0,4) : + index = (ord(dsn[counter]) ^ value) &0xFF + value = (value >> 8) ^ table[index] + return value + +# Generate the device PID +def generateDevicePID(table,dsn,nbRoll): + seed = generatePidSeed(table,dsn) + pidAscii = "" + pid = [(seed >>24) &0xFF,(seed >> 16) &0xff,(seed >> 8) &0xFF,(seed) & 0xFF,(seed>>24) & 0xFF,(seed >> 16) &0xff,(seed >> 8) &0xFF,(seed) & 0xFF] + index = 0 + for counter in range (0,nbRoll): + pid[index] = pid[index] ^ ord(dsn[counter]) + index = (index+1) %8 + for counter in range (0,8): + index = ((((pid[counter] >>5) & 3) ^ pid[counter]) & 0x1f) + (pid[counter] >> 7) + pidAscii += charMap4[index] + return pidAscii + +# Get a 7 bit encoded number from the book file def bookReadEncodedNumber(): flag = False data = ord(bookFile.read(1)) @@ -297,14 +228,12 @@ def bookReadEncodedNumber(): data = -data return data -# # Encode a number in 7 bit format -# - def encodeNumber(number): result = "" negative = False flag = 0 + print("Using encodeNumber routine") if number < 0 : number = -number + 1 @@ -326,26 +255,17 @@ def encodeNumber(number): return result[::-1] -# -# Get a length prefixed string from the file -# +# Get a length prefixed string from the file def bookReadString(): stringLength = bookReadEncodedNumber() return unpack(str(stringLength)+"s",bookFile.read(stringLength))[0] -# # Returns a length prefixed string -# - def lengthPrefixString(data): return encodeNumber(len(data))+data - -# # Read and return the data of one header record at the current book file position [[offset,decompressedLength,compressedLength],...] -# - def bookReadHeaderRecordData(): nbValues = bookReadEncodedNumber() values = [] @@ -353,10 +273,7 @@ def bookReadHeaderRecordData(): values.append([bookReadEncodedNumber(),bookReadEncodedNumber(),bookReadEncodedNumber()]) return values -# # Read and parse one header record at the current book file position and return the associated data [[offset,decompressedLength,compressedLength],...] -# - def parseTopazHeaderRecord(): if ord(bookFile.read(1)) != 0x63: raise CMBDTCFatal("Parse Error : Invalid Header") @@ -365,10 +282,7 @@ def parseTopazHeaderRecord(): record = bookReadHeaderRecordData() return [tag,record] -# # Parse the header of a Topaz file, get all the header records and the offset for the payload -# - def parseTopazHeader(): global bookHeaderRecords global bookPayloadOffset @@ -382,7 +296,7 @@ def parseTopazHeader(): for i in range (0,nbRecords): result = parseTopazHeaderRecord() - print result[0], result[1] + #print result[0], result[1] bookHeaderRecords[result[0]] = result[1] if ord(bookFile.read(1)) != 0x64 : @@ -390,11 +304,8 @@ def parseTopazHeader(): bookPayloadOffset = bookFile.tell() -# # Get a record in the book payload, given its name and index. If necessary the record is decrypted. The record is not decompressed # Correction, the record is correctly decompressed too -# - def getBookPayloadRecord(name, index): encrypted = False compressed = False @@ -434,10 +345,7 @@ def getBookPayloadRecord(name, index): return record -# # Extract, decrypt and decompress a book record indicated by name and index and print it or save it in "filename" -# - def extractBookPayloadRecord(name, index, filename): compressed = False @@ -463,17 +371,11 @@ def extractBookPayloadRecord(name, index, filename): else: print(record) -# # return next record [key,value] from the book metadata from the current book position -# - def readMetadataRecord(): return [bookReadString(),bookReadString()] -# # Parse the metadata record from the book payload and return a list of [key,values] -# - def parseMetadata(): global bookHeaderRecords global bookPayloadAddress @@ -491,40 +393,7 @@ def parseMetadata(): record =readMetadataRecord() bookMetadata[record[0]] = record[1] -# -# Returns two bit at offset from a bit field -# - -def getTwoBitsFromBitField(bitField,offset): - byteNumber = offset // 4 - bitPosition = 6 - 2*(offset % 4) - - return ord(bitField[byteNumber]) >> bitPosition & 3 - -# -# Returns the six bits at offset from a bit field -# - -def getSixBitsFromBitField(bitField,offset): - offset *= 3 - value = (getTwoBitsFromBitField(bitField,offset) <<4) + (getTwoBitsFromBitField(bitField,offset+1) << 2) +getTwoBitsFromBitField(bitField,offset+2) - return value - -# -# 8 bits to six bits encoding from hash to generate PID string -# - -def encodePID(hash): - global charMap3 - PID = "" - for position in range (0,8): - PID += charMap3[getSixBitsFromBitField(hash,position)] - return PID - -# # Context initialisation for the Topaz Crypto -# - def topazCryptoInit(key): ctx1 = 0x0CAFFE19E @@ -534,10 +403,7 @@ def topazCryptoInit(key): ctx1 = ((((ctx1 >>2) * (ctx1 >>7))&0xFFFFFFFF) ^ (keyByte * keyByte * 0x0F902007)& 0xFFFFFFFF ) return [ctx1,ctx2] -# # decrypt data with the context prepared by topazCryptoInit() -# - def topazCryptoDecrypt(data, ctx): ctx1 = ctx[0] ctx2 = ctx[1] @@ -553,18 +419,12 @@ def topazCryptoDecrypt(data, ctx): return plainText -# # Decrypt a payload record with the PID -# - def decryptRecord(data,PID): ctx = topazCryptoInit(PID) return topazCryptoDecrypt(data, ctx) -# # Try to decrypt a dkey record (contains the book PID) -# - def decryptDkeyRecord(data,PID): record = decryptRecord(data,PID) fields = unpack("3sB8sB8s3s",record) @@ -577,11 +437,8 @@ def decryptDkeyRecord(data,PID): raise CMBDTCError("Record didn't contain PID") return fields[4] - -# + # Decrypt all the book's dkey records (contain the book PID) -# - def decryptDkeyRecords(data,PID): nbKeyRecords = ord(data[0]) records = [] @@ -597,57 +454,7 @@ def decryptDkeyRecords(data,PID): return records -# -# Encryption table used to generate the device PID -# - -def generatePidEncryptionTable() : - table = [] - for counter1 in range (0,0x100): - value = counter1 - for counter2 in range (0,8): - if (value & 1 == 0) : - value = value >> 1 - else : - value = value >> 1 - value = value ^ 0xEDB88320 - table.append(value) - return table - -# -# Seed value used to generate the device PID -# - -def generatePidSeed(table,dsn) : - value = 0 - for counter in range (0,4) : - index = (ord(dsn[counter]) ^ value) &0xFF - value = (value >> 8) ^ table[index] - return value - -# -# Generate the device PID -# - -def generateDevicePID(table,dsn,nbRoll): - seed = generatePidSeed(table,dsn) - pidAscii = "" - pid = [(seed >>24) &0xFF,(seed >> 16) &0xff,(seed >> 8) &0xFF,(seed) & 0xFF,(seed>>24) & 0xFF,(seed >> 16) &0xff,(seed >> 8) &0xFF,(seed) & 0xFF] - index = 0 - - for counter in range (0,nbRoll): - pid[index] = pid[index] ^ ord(dsn[counter]) - index = (index+1) %8 - - for counter in range (0,8): - index = ((((pid[counter] >>5) & 3) ^ pid[counter]) & 0x1f) + (pid[counter] >> 7) - pidAscii += charMap4[index] - return pidAscii - -# # Create decrypted book payload -# - def createDecryptedPayload(payload): for headerRecord in bookHeaderRecords: name = headerRecord @@ -670,10 +477,7 @@ def createDecryptedPayload(payload): outputFile = os.path.join(destdir,fname) file(outputFile, 'wb').write(getBookPayloadRecord(name, index)) - # Create decrypted book -# - def createDecryptedBook(outdir): if not os.path.exists(outdir): os.makedirs(outdir) @@ -696,11 +500,7 @@ def createDecryptedBook(outdir): createDecryptedPayload(outdir) - -# # Set the command to execute by the programm according to cmdLine parameters -# - def setCommand(name) : global command if command != "" : @@ -708,28 +508,85 @@ def setCommand(name) : else : command = name -# # Program usage -# - def usage(): print("\nUsage:") - print("\ncmbtc_dump.py [options] bookFileName\n") + print("\ncmbtc_dump_linux.py [options] bookFileName\n") print("-p Adds a PID to the list of PIDs that are tried to decrypt the book key (can be used several times)") print("-d Dumps the unencrypted book as files to outdir") print("-o Output directory to save book files to") print("-v Verbose (can be used several times)") print("-i Prints kindle.info database") - -# -# Main -# - -def main(argv=sys.argv): - global kindleDatabase - global bookMetadata - global bookKey + print("-k Adds the path to an alternate kindle.info file") + +def prepTopazBook(bookPath): global bookFile + bookFile = openBook(bookPath) + parseTopazHeader() + parseMetadata() + +# Get Pids +def getK4Pids(kInfoFile=None): + global kindleDatabase + global PIDs + + # Read the encrypted database + kindleDatabase = None + try: + kindleDatabase = parseKindleInfo(kInfoFile) + except Exception as message: + #if verbose > 0: + # print(message) + pass + + if kindleDatabase != None : + # Compute the DSN + # Get the Mazama Random number + MazamaRandomNumber = getKindleInfoValueForKey("MazamaRandomNumber") + + # Get the HDD serial + encodedSystemVolumeSerialNumber = encodeHash(GetVolumeSerialNumber(),charMap1) + + # Get the current user name + encodedUsername = encodeHash(GetUserName(),charMap1) + + # concat, hash and encode + DSN = encode(SHA1(MazamaRandomNumber+encodedSystemVolumeSerialNumber+encodedUsername),charMap1) + + if verbose > 0: + print("DSN: " + DSN) + + # Compute the device PID + table = generatePidEncryptionTable() + devicePID = generateDevicePID(table,DSN,4) + PIDs.append(devicePID) + + if verbose > 0: + print("Device PID: " + devicePID) + + # Compute book PID + # Get the account token + kindleAccountToken = getKindleInfoValueForKey("kindle.account.tokens") + + if verbose > 0: + print("Account Token: " + kindleAccountToken) + + keysRecord = bookMetadata["keys"] + keysRecordRecord = bookMetadata[keysRecord] + + pidHash = SHA1(DSN+kindleAccountToken+keysRecord+keysRecordRecord) + + bookPID = encodePID(pidHash) + PIDs.append(bookPID) + + if verbose > 0: + print ("Book PID: " + bookPID ) + +# Main +def main(argv=sys.argv): + global verbose + global PIDs + global bookKey global command progname = os.path.basename(argv[0]) @@ -739,12 +596,12 @@ def main(argv=sys.argv): recordIndex = 0 outdir = "" PIDs = [] - kindleDatabase = None command = "" + kInfoFiles = [] - + try: - opts, args = getopt.getopt(sys.argv[1:], "vi:o:p:d") + opts, args = getopt.getopt(sys.argv[1:], "vi:k:o:p:d") except getopt.GetoptError, err: # print help information and exit: print str(err) # will print something like "option -a not recognized" @@ -760,103 +617,50 @@ def main(argv=sys.argv): verbose+=1 if o == "-i": setCommand("printInfo") + if o == "-k": + if a == None : + raise CMBDTCFatal("Invalid parameter for -k") + kInfoFiles.append(a) if o =="-o": if a == None : raise CMBDTCFatal("Invalid parameter for -o") outdir = a if o =="-p": + if a == None : + raise CMBDTCFatal("Invalid parameter for -p") PIDs.append(a) if o =="-d": setCommand("doit") if command == "" : - raise CMBDTCFatal("No action supplied on command line") - - # - # Read the encrypted database - # - - try: - kindleDatabase = parseKindleInfo() - except Exception as message: - if verbose>0: - print(message) - - if kindleDatabase != None : - if command == "printInfo" : - printKindleInfo() - - # - # Compute the DSN - # - - # Get the Mazama Random number - MazamaRandomNumber = getKindleInfoValueForKey("MazamaRandomNumber") - - # Get the HDD serial - encodedSystemVolumeSerialNumber = encodeHash(str(GetVolumeSerialNumber(GetSystemDirectory().split('\\')[0] + '\\')),charMap1) - - # Get the current user name - encodedUsername = encodeHash(GetUserName(),charMap1) - - # concat, hash and encode - DSN = encode(SHA1(MazamaRandomNumber+encodedSystemVolumeSerialNumber+encodedUsername),charMap1) - - if verbose >1: - print("DSN: " + DSN) - - # - # Compute the device PID - # - - table = generatePidEncryptionTable() - devicePID = generateDevicePID(table,DSN,4) - PIDs.append(devicePID) - - if verbose > 0: - print("Device PID: " + devicePID) - - # - # Open book and parse metadata - # + raise Exception("No action supplied on command line") + # Open book and parse metadata if len(args) == 1: - - bookFile = openBook(args[0]) - parseTopazHeader() - parseMetadata() - - # - # Compute book PID - # - - # Get the account token - - if kindleDatabase != None: - kindleAccountToken = getKindleInfoValueForKey("kindle.account.tokens") - - if verbose >1: - print("Account Token: " + kindleAccountToken) - - keysRecord = bookMetadata["keys"] - keysRecordRecord = bookMetadata[keysRecord] - - pidHash = SHA1(DSN+kindleAccountToken+keysRecord+keysRecordRecord) - - bookPID = encodePID(pidHash) - PIDs.append(bookPID) - - if verbose > 0: - print ("Book PID: " + bookPID ) - - # - # Decrypt book key - # - - dkey = getBookPayloadRecord('dkey', 0) + # Open the ebook + prepTopazBook(args[0]) + # Always try to get the default Kindle installation info. + getK4Pids() + + # If Alternate kindle.info files were supplied, parse them too. + if kInfoFiles: + for infoFile in kInfoFiles: + getK4Pids(infoFile) + + # Print the kindle info if requested. + if kindleDatabase != None : + if command == "printInfo" : + printKindleInfo() + + # Remove any duplicates that may occur from the PIDs List + PIDs = list(set(PIDs)) + + # Decrypt book key + dkey = getBookPayloadRecord('dkey', 0) bookKeys = [] for PID in PIDs : + print PID bookKeys+=decryptDkeyRecords(dkey,PID) if len(bookKeys) == 0 : @@ -867,7 +671,7 @@ def main(argv=sys.argv): bookKey = bookKeys[0] if verbose > 0: print("Book key: " + bookKey.encode('hex')) - + if command == "printRecord" : extractBookPayloadRecord(recordName,int(recordIndex),outputFile) if outputFile != "" and verbose>0 : @@ -875,7 +679,7 @@ def main(argv=sys.argv): elif command == "doit" : if outdir != "" : createDecryptedBook(outdir) - if verbose >0 : + if verbose > 0 : print ("Decrypted book saved. Don't pirate!") elif verbose > 0: print("Output directory name was not supplied.") diff --git a/Topaz_Tools/lib/cmbtc_dump_nonK4PC.py b/Topaz_Tools/lib/cmbtc_dump_nonK4PC.py deleted file mode 100644 index 949fe51..0000000 --- a/Topaz_Tools/lib/cmbtc_dump_nonK4PC.py +++ /dev/null @@ -1,524 +0,0 @@ -#!/usr/bin/python -# For use with Topaz Scripts Version 2.6 - -class Unbuffered: - def __init__(self, stream): - self.stream = stream - def write(self, data): - self.stream.write(data) - self.stream.flush() - def __getattr__(self, attr): - return getattr(self.stream, attr) - -import sys -sys.stdout=Unbuffered(sys.stdout) - -import csv -import os -import getopt -import zlib -from struct import pack -from struct import unpack - -MAX_PATH = 255 - -# Put the first 8 characters of your Kindle PID here -# or supply it with the -p option in the command line -#################################################### -kindlePID = "12345678" -#################################################### - -global bookFile -global bookPayloadOffset -global bookHeaderRecords -global bookMetadata -global bookKey -global command - -# -# Exceptions for all the problems that might happen during the script -# - -class CMBDTCError(Exception): - pass - -class CMBDTCFatal(Exception): - pass - - -# -# Open the book file at path -# - -def openBook(path): - try: - return open(path,'rb') - except: - raise CMBDTCFatal("Could not open book file: " + path) - -# -# Get a 7 bit encoded number from the book file -# - -def bookReadEncodedNumber(): - flag = False - data = ord(bookFile.read(1)) - - if data == 0xFF: - flag = True - data = ord(bookFile.read(1)) - - if data >= 0x80: - datax = (data & 0x7F) - while data >= 0x80 : - data = ord(bookFile.read(1)) - datax = (datax <<7) + (data & 0x7F) - data = datax - - if flag: - data = -data - return data - -# -# Encode a number in 7 bit format -# - -def encodeNumber(number): - result = "" - negative = False - flag = 0 - print("Using encodeNumber routine") - - if number < 0 : - number = -number + 1 - negative = True - - while True: - byte = number & 0x7F - number = number >> 7 - byte += flag - result += chr(byte) - flag = 0x80 - if number == 0 : - if (byte == 0xFF and negative == False) : - result += chr(0x80) - break - - if negative: - result += chr(0xFF) - - return result[::-1] - -# -# Get a length prefixed string from the file -# - -def bookReadString(): - stringLength = bookReadEncodedNumber() - return unpack(str(stringLength)+"s",bookFile.read(stringLength))[0] - -# -# Returns a length prefixed string -# - -def lengthPrefixString(data): - return encodeNumber(len(data))+data - - -# -# Read and return the data of one header record at the current book file position [[offset,decompressedLength,compressedLength],...] -# - -def bookReadHeaderRecordData(): - nbValues = bookReadEncodedNumber() - values = [] - for i in range (0,nbValues): - values.append([bookReadEncodedNumber(),bookReadEncodedNumber(),bookReadEncodedNumber()]) - return values - -# -# Read and parse one header record at the current book file position and return the associated data [[offset,decompressedLength,compressedLength],...] -# - -def parseTopazHeaderRecord(): - if ord(bookFile.read(1)) != 0x63: - raise CMBDTCFatal("Parse Error : Invalid Header") - - tag = bookReadString() - record = bookReadHeaderRecordData() - return [tag,record] - -# -# Parse the header of a Topaz file, get all the header records and the offset for the payload -# - -def parseTopazHeader(): - global bookHeaderRecords - global bookPayloadOffset - magic = unpack("4s",bookFile.read(4))[0] - - if magic != 'TPZ0': - raise CMBDTCFatal("Parse Error : Invalid Header, not a Topaz file") - - nbRecords = bookReadEncodedNumber() - bookHeaderRecords = {} - - for i in range (0,nbRecords): - result = parseTopazHeaderRecord() - print result[0], result[1] - bookHeaderRecords[result[0]] = result[1] - - if ord(bookFile.read(1)) != 0x64 : - raise CMBDTCFatal("Parse Error : Invalid Header") - - bookPayloadOffset = bookFile.tell() - -# -# Get a record in the book payload, given its name and index. If necessary the record is decrypted. The record is not decompressed -# Correction, the record is correctly decompressed too -# - -def getBookPayloadRecord(name, index): - encrypted = False - compressed = False - - try: - recordOffset = bookHeaderRecords[name][index][0] - except: - raise CMBDTCFatal("Parse Error : Invalid Record, record not found") - - bookFile.seek(bookPayloadOffset + recordOffset) - - tag = bookReadString() - if tag != name : - raise CMBDTCFatal("Parse Error : Invalid Record, record name doesn't match") - - recordIndex = bookReadEncodedNumber() - - if recordIndex < 0 : - encrypted = True - recordIndex = -recordIndex -1 - - if recordIndex != index : - raise CMBDTCFatal("Parse Error : Invalid Record, index doesn't match") - - if (bookHeaderRecords[name][index][2] > 0): - compressed = True - record = bookFile.read(bookHeaderRecords[name][index][2]) - else: - record = bookFile.read(bookHeaderRecords[name][index][1]) - - if encrypted: - ctx = topazCryptoInit(bookKey) - record = topazCryptoDecrypt(record,ctx) - - if compressed: - record = zlib.decompress(record) - - return record - -# -# Extract, decrypt and decompress a book record indicated by name and index and print it or save it in "filename" -# - -def extractBookPayloadRecord(name, index, filename): - compressed = False - - try: - compressed = bookHeaderRecords[name][index][2] != 0 - record = getBookPayloadRecord(name,index) - except: - print("Could not find record") - - # if compressed: - # try: - # record = zlib.decompress(record) - # except: - # raise CMBDTCFatal("Could not decompress record") - - if filename != "": - try: - file = open(filename,"wb") - file.write(record) - file.close() - except: - raise CMBDTCFatal("Could not write to destination file") - else: - print(record) - -# -# return next record [key,value] from the book metadata from the current book position -# - -def readMetadataRecord(): - return [bookReadString(),bookReadString()] - -# -# Parse the metadata record from the book payload and return a list of [key,values] -# - -def parseMetadata(): - global bookHeaderRecords - global bookPayloadAddress - global bookMetadata - bookMetadata = {} - bookFile.seek(bookPayloadOffset + bookHeaderRecords["metadata"][0][0]) - tag = bookReadString() - if tag != "metadata" : - raise CMBDTCFatal("Parse Error : Record Names Don't Match") - - flags = ord(bookFile.read(1)) - nbRecords = ord(bookFile.read(1)) - - for i in range (0,nbRecords) : - record =readMetadataRecord() - bookMetadata[record[0]] = record[1] - -# -# Context initialisation for the Topaz Crypto -# - -def topazCryptoInit(key): - ctx1 = 0x0CAFFE19E - - for keyChar in key: - keyByte = ord(keyChar) - ctx2 = ctx1 - ctx1 = ((((ctx1 >>2) * (ctx1 >>7))&0xFFFFFFFF) ^ (keyByte * keyByte * 0x0F902007)& 0xFFFFFFFF ) - return [ctx1,ctx2] - -# -# decrypt data with the context prepared by topazCryptoInit() -# - -def topazCryptoDecrypt(data, ctx): - ctx1 = ctx[0] - ctx2 = ctx[1] - - plainText = "" - - for dataChar in data: - dataByte = ord(dataChar) - m = (dataByte ^ ((ctx1 >> 3) &0xFF) ^ ((ctx2<<3) & 0xFF)) &0xFF - ctx2 = ctx1 - ctx1 = (((ctx1 >> 2) * (ctx1 >> 7)) &0xFFFFFFFF) ^((m * m * 0x0F902007) &0xFFFFFFFF) - plainText += chr(m) - - return plainText - -# -# Decrypt a payload record with the PID -# - -def decryptRecord(data,PID): - ctx = topazCryptoInit(PID) - return topazCryptoDecrypt(data, ctx) - -# -# Try to decrypt a dkey record (contains the book PID) -# - -def decryptDkeyRecord(data,PID): - record = decryptRecord(data,PID) - fields = unpack("3sB8sB8s3s",record) - - if fields[0] != "PID" or fields[5] != "pid" : - raise CMBDTCError("Didn't find PID magic numbers in record") - elif fields[1] != 8 or fields[3] != 8 : - raise CMBDTCError("Record didn't contain correct length fields") - elif fields[2] != PID : - raise CMBDTCError("Record didn't contain PID") - - return fields[4] - -# -# Decrypt all the book's dkey records (contain the book PID) -# - -def decryptDkeyRecords(data,PID): - nbKeyRecords = ord(data[0]) - records = [] - data = data[1:] - for i in range (0,nbKeyRecords): - length = ord(data[0]) - try: - key = decryptDkeyRecord(data[1:length+1],PID) - records.append(key) - except CMBDTCError: - pass - data = data[1+length:] - - return records - -# -# Create decrypted book payload -# - -def createDecryptedPayload(payload): - for headerRecord in bookHeaderRecords: - name = headerRecord - if name != "dkey" : - ext = '.dat' - if name == 'img' : ext = '.jpg' - if name == 'color' : ext = '.jpg' - for index in range (0,len(bookHeaderRecords[name])) : - fnum = "%04d" % index - fname = name + fnum + ext - destdir = payload - if name == 'img': - destdir = os.path.join(payload,'img') - if name == 'color': - destdir = os.path.join(payload,'color_img') - if name == 'page': - destdir = os.path.join(payload,'page') - if name == 'glyphs': - destdir = os.path.join(payload,'glyphs') - outputFile = os.path.join(destdir,fname) - file(outputFile, 'wb').write(getBookPayloadRecord(name, index)) - - -# Create decrypted book -# - -def createDecryptedBook(outdir): - if not os.path.exists(outdir): - os.makedirs(outdir) - - destdir = os.path.join(outdir,'img') - if not os.path.exists(destdir): - os.makedirs(destdir) - - destdir = os.path.join(outdir,'color_img') - if not os.path.exists(destdir): - os.makedirs(destdir) - - destdir = os.path.join(outdir,'page') - if not os.path.exists(destdir): - os.makedirs(destdir) - - destdir = os.path.join(outdir,'glyphs') - if not os.path.exists(destdir): - os.makedirs(destdir) - - createDecryptedPayload(outdir) - - -# -# Set the command to execute by the programm according to cmdLine parameters -# - -def setCommand(name) : - global command - if command != "" : - raise CMBDTCFatal("Invalid command line parameters") - else : - command = name - -# -# Program usage -# - -def usage(): - print("\nUsage:") - print("\ncmbtc_dump_linux.py [options] bookFileName\n") - print("-p Adds a PID to the list of PIDs that are tried to decrypt the book key (can be used several times)") - print("-d Dumps the unencrypted book as files to outdir") - print("-o Output directory to save book files to") - print("-v Verbose (can be used several times)") - - -# -# Main -# - -def main(argv=sys.argv): - global bookMetadata - global bookKey - global bookFile - global command - - progname = os.path.basename(argv[0]) - - verbose = 0 - recordName = "" - recordIndex = 0 - outdir = "" - PIDs = [] - command = "" - - # Preloads your Kindle pid from the top of the program. - PIDs.append(kindlePID) - - try: - opts, args = getopt.getopt(sys.argv[1:], "vo:p:d") - except getopt.GetoptError, err: - # print help information and exit: - print str(err) # will print something like "option -a not recognized" - usage() - sys.exit(2) - - if len(opts) == 0 and len(args) == 0 : - usage() - sys.exit(2) - - for o, a in opts: - if o == "-v": - verbose+=1 - if o =="-o": - if a == None : - raise CMBDTCFatal("Invalid parameter for -o") - outdir = a - if o =="-p": - PIDs.append(a) - if o =="-d": - setCommand("doit") - - if command == "" : - raise CMBDTCFatal("No action supplied on command line") - - # - # Open book and parse metadata - # - - if len(args) == 1: - - bookFile = openBook(args[0]) - parseTopazHeader() - parseMetadata() - - # - # Decrypt book key - # - - dkey = getBookPayloadRecord('dkey', 0) - - bookKeys = [] - for PID in PIDs : - bookKeys+=decryptDkeyRecords(dkey,PID) - - if len(bookKeys) == 0 : - if verbose > 0 : - print ("Book key could not be found. Maybe this book is not registered with this device.") - return 1 - else : - bookKey = bookKeys[0] - if verbose > 0: - print("Book key: " + bookKey.encode('hex')) - - if command == "printRecord" : - extractBookPayloadRecord(recordName,int(recordIndex),outputFile) - if outputFile != "" and verbose>0 : - print("Wrote record to file: "+outputFile) - elif command == "doit" : - if outdir != "" : - createDecryptedBook(outdir) - if verbose >0 : - print ("Decrypted book saved. Don't pirate!") - elif verbose > 0: - print("Output directory name was not supplied.") - return 1 - - return 0 - -if __name__ == '__main__': - sys.exit(main()) diff --git a/Topaz_Tools/lib/k4mutils.py b/Topaz_Tools/lib/k4mutils.py new file mode 100644 index 0000000..977d81c --- /dev/null +++ b/Topaz_Tools/lib/k4mutils.py @@ -0,0 +1,322 @@ +# standlone set of Mac OSX specific routines needed for K4DeDRM + +from __future__ import with_statement + +import sys +import os + +#Exception Handling +class K4MDrmException(Exception): + pass + +import signal +import threading +import subprocess +from subprocess import Popen, PIPE, STDOUT + +# **heavily** chopped up and modfied version of asyncproc.py +# to make it actually work on Windows as well as Mac/Linux +# For the original see: +# "http://www.lysator.liu.se/~bellman/download/" +# author is "Thomas Bellman <bellman@lysator.liu.se>" +# available under GPL version 3 or Later + +# create an asynchronous subprocess whose output can be collected in +# a non-blocking manner + +# What a mess! Have to use threads just to get non-blocking io +# in a cross-platform manner + +# luckily all thread use is hidden within this class + +class Process(object): + def __init__(self, *params, **kwparams): + if len(params) <= 3: + kwparams.setdefault('stdin', subprocess.PIPE) + if len(params) <= 4: + kwparams.setdefault('stdout', subprocess.PIPE) + if len(params) <= 5: + kwparams.setdefault('stderr', subprocess.PIPE) + self.__pending_input = [] + self.__collected_outdata = [] + self.__collected_errdata = [] + self.__exitstatus = None + self.__lock = threading.Lock() + self.__inputsem = threading.Semaphore(0) + self.__quit = False + + self.__process = subprocess.Popen(*params, **kwparams) + + if self.__process.stdin: + self.__stdin_thread = threading.Thread( + name="stdin-thread", + target=self.__feeder, args=(self.__pending_input, + self.__process.stdin)) + self.__stdin_thread.setDaemon(True) + self.__stdin_thread.start() + + if self.__process.stdout: + self.__stdout_thread = threading.Thread( + name="stdout-thread", + target=self.__reader, args=(self.__collected_outdata, + self.__process.stdout)) + self.__stdout_thread.setDaemon(True) + self.__stdout_thread.start() + + if self.__process.stderr: + self.__stderr_thread = threading.Thread( + name="stderr-thread", + target=self.__reader, args=(self.__collected_errdata, + self.__process.stderr)) + self.__stderr_thread.setDaemon(True) + self.__stderr_thread.start() + + def pid(self): + return self.__process.pid + + def kill(self, signal): + self.__process.send_signal(signal) + + # check on subprocess (pass in 'nowait') to act like poll + def wait(self, flag): + if flag.lower() == 'nowait': + rc = self.__process.poll() + else: + rc = self.__process.wait() + if rc != None: + if self.__process.stdin: + self.closeinput() + if self.__process.stdout: + self.__stdout_thread.join() + if self.__process.stderr: + self.__stderr_thread.join() + return self.__process.returncode + + def terminate(self): + if self.__process.stdin: + self.closeinput() + self.__process.terminate() + + # thread gets data from subprocess stdout + def __reader(self, collector, source): + while True: + data = os.read(source.fileno(), 65536) + self.__lock.acquire() + collector.append(data) + self.__lock.release() + if data == "": + source.close() + break + return + + # thread feeds data to subprocess stdin + def __feeder(self, pending, drain): + while True: + self.__inputsem.acquire() + self.__lock.acquire() + if not pending and self.__quit: + drain.close() + self.__lock.release() + break + data = pending.pop(0) + self.__lock.release() + drain.write(data) + + # non-blocking read of data from subprocess stdout + def read(self): + self.__lock.acquire() + outdata = "".join(self.__collected_outdata) + del self.__collected_outdata[:] + self.__lock.release() + return outdata + + # non-blocking read of data from subprocess stderr + def readerr(self): + self.__lock.acquire() + errdata = "".join(self.__collected_errdata) + del self.__collected_errdata[:] + self.__lock.release() + return errdata + + # non-blocking write to stdin of subprocess + def write(self, data): + if self.__process.stdin is None: + raise ValueError("Writing to process with stdin not a pipe") + self.__lock.acquire() + self.__pending_input.append(data) + self.__inputsem.release() + self.__lock.release() + + # close stdinput of subprocess + def closeinput(self): + self.__lock.acquire() + self.__quit = True + self.__inputsem.release() + self.__lock.release() + + +# interface to needed routines in openssl's libcrypto +def _load_crypto_libcrypto(): + from ctypes import CDLL, byref, POINTER, c_void_p, c_char_p, c_int, c_long, \ + Structure, c_ulong, create_string_buffer, addressof, string_at, cast + from ctypes.util import find_library + + libcrypto = find_library('crypto') + if libcrypto is None: + raise K4MDrmException('libcrypto not found') + libcrypto = CDLL(libcrypto) + + AES_MAXNR = 14 + c_char_pp = POINTER(c_char_p) + c_int_p = POINTER(c_int) + + class AES_KEY(Structure): + _fields_ = [('rd_key', c_long * (4 * (AES_MAXNR + 1))), ('rounds', c_int)] + AES_KEY_p = POINTER(AES_KEY) + + def F(restype, name, argtypes): + func = getattr(libcrypto, name) + func.restype = restype + func.argtypes = argtypes + return func + + AES_cbc_encrypt = F(None, 'AES_cbc_encrypt',[c_char_p, c_char_p, c_ulong, AES_KEY_p, c_char_p,c_int]) + + AES_set_decrypt_key = F(c_int, 'AES_set_decrypt_key',[c_char_p, c_int, AES_KEY_p]) + + PKCS5_PBKDF2_HMAC_SHA1 = F(c_int, 'PKCS5_PBKDF2_HMAC_SHA1', + [c_char_p, c_ulong, c_char_p, c_ulong, c_ulong, c_ulong, c_char_p]) + + class LibCrypto(object): + def __init__(self): + self._blocksize = 0 + self._keyctx = None + self.iv = 0 + + def set_decrypt_key(self, userkey, iv): + self._blocksize = len(userkey) + if (self._blocksize != 16) and (self._blocksize != 24) and (self._blocksize != 32) : + raise K4MDrmException('AES improper key used') + return + keyctx = self._keyctx = AES_KEY() + self.iv = iv + rv = AES_set_decrypt_key(userkey, len(userkey) * 8, keyctx) + if rv < 0: + raise K4MDrmException('Failed to initialize AES key') + + def decrypt(self, data): + out = create_string_buffer(len(data)) + rv = AES_cbc_encrypt(data, out, len(data), self._keyctx, self.iv, 0) + if rv == 0: + raise K4MDrmException('AES decryption failed') + return out.raw + + def keyivgen(self, passwd): + salt = '16743' + saltlen = 5 + passlen = len(passwd) + iter = 0x3e8 + keylen = 80 + out = create_string_buffer(keylen) + rv = PKCS5_PBKDF2_HMAC_SHA1(passwd, passlen, salt, saltlen, iter, keylen, out) + return out.raw + return LibCrypto + +def _load_crypto(): + LibCrypto = None + try: + LibCrypto = _load_crypto_libcrypto() + except (ImportError, K4MDrmException): + pass + return LibCrypto + +LibCrypto = _load_crypto() + +# +# Utility Routines +# + +# uses a sub process to get the Hard Drive Serial Number using ioreg +# returns with the first found serial number in that class +def GetVolumeSerialNumber(): + cmdline = '/usr/sbin/ioreg -r -c AppleAHCIDiskDriver' + cmdline = cmdline.encode(sys.getfilesystemencoding()) + p = Process(cmdline, shell=True, bufsize=1, stdin=None, stdout=PIPE, stderr=PIPE, close_fds=False) + poll = p.wait('wait') + results = p.read() + reslst = results.split('\n') + sernum = '9999999999' + cnt = len(reslst) + for j in xrange(cnt): + resline = reslst[j] + pp = resline.find('"Serial Number" = "') + if pp >= 0: + sernum = resline[pp+19:] + sernum = sernum[:-1] + sernum = sernum.lstrip() + break + return sernum + +# uses unix env to get username instead of using sysctlbyname +def GetUserName(): + username = os.getenv('USER') + return username + +# Various character maps used to decrypt books. Probably supposed to act as obfuscation +charMap1 = "n5Pr6St7Uv8Wx9YzAb0Cd1Ef2Gh3Jk4M" +charMap2 = "ZB0bYyc1xDdW2wEV3Ff7KkPpL8UuGA4gz-Tme9Nn_tHh5SvXCsIiR6rJjQaqlOoM" +charMap3 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" +charMap4 = "ABCDEFGHIJKLMNPQRSTUVWXYZ123456789" + +def encode(data, map): + result = "" + for char in data: + value = ord(char) + Q = (value ^ 0x80) // len(map) + R = value % len(map) + result += map[Q] + result += map[R] + return result + +import hashlib + +def SHA256(message): + ctx = hashlib.sha256() + ctx.update(message) + return ctx.digest() + +# implements an Pseudo Mac Version of Windows built-in Crypto routine +def CryptUnprotectData(encryptedData): + sp = GetVolumeSerialNumber() + '!@#' + GetUserName() + passwdData = encode(SHA256(sp),charMap1) + crp = LibCrypto() + key_iv = crp.keyivgen(passwdData) + key = key_iv[0:32] + iv = key_iv[32:48] + crp.set_decrypt_key(key,iv) + cleartext = crp.decrypt(encryptedData) + return cleartext + +# Locate and open the .kindle-info file +def openKindleInfo(kInfoFile=None): + if kInfoFile == None: + home = os.getenv('HOME') + cmdline = 'find "' + home + '/Library/Application Support" -name ".kindle-info"' + cmdline = cmdline.encode(sys.getfilesystemencoding()) + p1 = Process(cmdline, shell=True, bufsize=1, stdin=None, stdout=PIPE, stderr=PIPE, close_fds=False) + poll = p1.wait('wait') + results = p1.read() + reslst = results.split('\n') + kinfopath = 'NONE' + cnt = len(reslst) + for j in xrange(cnt): + resline = reslst[j] + pp = resline.find('.kindle-info') + if pp >= 0: + kinfopath = resline + break + if not os.path.exists(kinfopath): + raise K4MDrmException('Error: .kindle-info file can not be found') + return open(kinfopath,'r') + else: + return open(kInfoFile, 'r') \ No newline at end of file diff --git a/Topaz_Tools/lib/k4pcutils.py b/Topaz_Tools/lib/k4pcutils.py new file mode 100644 index 0000000..337b992 --- /dev/null +++ b/Topaz_Tools/lib/k4pcutils.py @@ -0,0 +1,110 @@ +# K4PC Windows specific routines + +from __future__ import with_statement + +import sys, os + +from ctypes import windll, c_char_p, c_wchar_p, c_uint, POINTER, byref, \ + create_unicode_buffer, create_string_buffer, CFUNCTYPE, addressof, \ + string_at, Structure, c_void_p, cast + +import _winreg as winreg + +import traceback + +MAX_PATH = 255 + +kernel32 = windll.kernel32 +advapi32 = windll.advapi32 +crypt32 = windll.crypt32 + + +# +# Various character maps used to decrypt books. Probably supposed to act as obfuscation +# +charMap1 = "n5Pr6St7Uv8Wx9YzAb0Cd1Ef2Gh3Jk4M" +charMap2 = "AaZzB0bYyCc1XxDdW2wEeVv3FfUuG4g-TtHh5SsIiR6rJjQq7KkPpL8lOoMm9Nn_" +charMap3 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" +charMap4 = "ABCDEFGHIJKLMNPQRSTUVWXYZ123456789" + +# +# Exceptions for all the problems that might happen during the script +# +class DrmException(Exception): + pass + + +class DataBlob(Structure): + _fields_ = [('cbData', c_uint), + ('pbData', c_void_p)] +DataBlob_p = POINTER(DataBlob) + + +def GetSystemDirectory(): + GetSystemDirectoryW = kernel32.GetSystemDirectoryW + GetSystemDirectoryW.argtypes = [c_wchar_p, c_uint] + GetSystemDirectoryW.restype = c_uint + def GetSystemDirectory(): + buffer = create_unicode_buffer(MAX_PATH + 1) + GetSystemDirectoryW(buffer, len(buffer)) + return buffer.value + return GetSystemDirectory +GetSystemDirectory = GetSystemDirectory() + +def GetVolumeSerialNumber(): + GetVolumeInformationW = kernel32.GetVolumeInformationW + GetVolumeInformationW.argtypes = [c_wchar_p, c_wchar_p, c_uint, + POINTER(c_uint), POINTER(c_uint), + POINTER(c_uint), c_wchar_p, c_uint] + GetVolumeInformationW.restype = c_uint + def GetVolumeSerialNumber(path = GetSystemDirectory().split('\\')[0] + '\\'): + vsn = c_uint(0) + GetVolumeInformationW(path, None, 0, byref(vsn), None, None, None, 0) + return str(vsn.value) + return GetVolumeSerialNumber +GetVolumeSerialNumber = GetVolumeSerialNumber() + + +def GetUserName(): + GetUserNameW = advapi32.GetUserNameW + GetUserNameW.argtypes = [c_wchar_p, POINTER(c_uint)] + GetUserNameW.restype = c_uint + def GetUserName(): + buffer = create_unicode_buffer(32) + size = c_uint(len(buffer)) + while not GetUserNameW(buffer, byref(size)): + buffer = create_unicode_buffer(len(buffer) * 2) + size.value = len(buffer) + return buffer.value.encode('utf-16-le')[::2] + return GetUserName +GetUserName = GetUserName() + + +def CryptUnprotectData(): + _CryptUnprotectData = crypt32.CryptUnprotectData + _CryptUnprotectData.argtypes = [DataBlob_p, c_wchar_p, DataBlob_p, + c_void_p, c_void_p, c_uint, DataBlob_p] + _CryptUnprotectData.restype = c_uint + def CryptUnprotectData(indata, entropy): + indatab = create_string_buffer(indata) + indata = DataBlob(len(indata), cast(indatab, c_void_p)) + entropyb = create_string_buffer(entropy) + entropy = DataBlob(len(entropy), cast(entropyb, c_void_p)) + outdata = DataBlob() + if not _CryptUnprotectData(byref(indata), None, byref(entropy), + None, None, 0, byref(outdata)): + raise DrmException("Failed to Unprotect Data") + return string_at(outdata.pbData, outdata.cbData) + return CryptUnprotectData +CryptUnprotectData = CryptUnprotectData() + +# +# Locate and open the Kindle.info file. +# +def openKindleInfo(kInfoFile=None): + if kInfoFile == None: + regkey = winreg.OpenKey(winreg.HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\\") + path = winreg.QueryValueEx(regkey, 'Local AppData')[0] + return open(path+'\\Amazon\\Kindle For PC\\{AMAwzsaPaaZAzmZzZQzgZCAkZ3AjA_AY}\\kindle.info','r') + else: + return open(kInfoFile, 'r') diff --git a/Topaz_Tools/lib/topaz-changes.txt b/Topaz_Tools/lib/topaz-changes.txt deleted file mode 100644 index 2f5bbbe..0000000 --- a/Topaz_Tools/lib/topaz-changes.txt +++ /dev/null @@ -1,93 +0,0 @@ -Changes in this Version - - bug fix to prevent problems with sample books - modified version of patch submitted by that-guy - -Changes in 2.6 - - fix for many additional version tags - - fixes to generate better links - - fixes to handle external links - - now handles new "marker" page .dat files - - improved special region handling - - properly handle class names with spaces - - handle default alignment for synthetic regions - - -Changes in 2.3 - - fix for use with non-latin1 based systems (thank you Tedd) - - fixes for out of order tokens in xml - -Changes in 2.2 - - fix for minor bug in encode_Number from clark nova - - more fixes to handle paths with spaces in them - - updates to work better with the gui front end - - -Changes in 2.1 - - extremely minor changes to support a gui frontend - - no changes to functionality - - -Changes in version 2.0 - - - gensvg.py now accepts two options - -x : output browseable XHTML+SVG pages (default) - -r : output raw SVG images (useful for later conversion to pdf) - - - flatxml2html.py now understands page.groups of type graphic - and handles vertical regions as svg images - - - genhtml.py now accepts an option - --fixed-image : which will force the conversion - of all fixed regions to svg images - - - minor bug fixes and html conversion improvements - - -Changes in version 1.8 - - gensvg.py now builds wonderful xhtml pages with embedded svg - that can be easily paged through as if reading a book! - (tested in Safari for Mac and Win and Firefox) - (requires javascript to be enabled) - - genhtml.py now REQUIRES that gensvg.py be run FIRST - this allows create of images on the fly from glyphs - - genhtml.py now automatically makes tables of words into svg - based images and will handle glyph based ornate first - letters of words - - cmbtc_dump_mac_linux.py has been renamed to be - cmbtc_dump_nonK4PC.py to make it clearer - when it needs to be used - - -Changes in version 1.7 - - gensvg.py has been improved so that the glyphs render exactly (ClarkNova) - - gensvg.py has fixed a render order "bug" that allowed some images to cover or hide text. (ClarkNova) - - change generated html to use external stylesheet via a link to "style.css" - - add missing <title> tag - - make xhtml compliant doctype and minor changes to write correct xhtml - - make divs that act as anchors be hidden visually and to take up 0 height and 0 width to prevent any impact on layout - -Changes in version 1.6 - - support for books whose paragraphs have no styles - - support to run cmbtc_dump on Linux and Mac OSX provided you know your PID of your ipod or standalone Kindle - (contributed by DiapDealer) - -Changes in version 1.5 - - completely reworked generation of styles to use actual page heights and widths - - added new script getpagedim.py to support the above - - style names with underscores in them are now properly paired with their base class - - fixed hanging indents that did not ever set a left margin - - added support for a number of not previously known region types - - added support for a previously unknown snippet - <empty></empty> - - corrected a bug that caused unknown regions to abort the program - - added code to make the handling of unknown regions better in general - - corrected a bug that caused the last link on a page to be missing (if it was the last thing on the page) - -Changes in version 1.3 - - font generation by gensvg.py is now greatly improved with support for contour points added - - support for more region types - - support for inline images in paragraphs or text fields (ie. initial graphics for the first letter of a word) - - greatly improved dtd information used for the xml to prevent parsing mistakes - -Version 1.0 - - initial release - diff --git a/Topaz_Tools/lib/topaz-readme.txt b/Topaz_Tools/lib/topaz-readme.txt index 6bc17e4..a1bcdab 100644 --- a/Topaz_Tools/lib/topaz-readme.txt +++ b/Topaz_Tools/lib/topaz-readme.txt @@ -19,8 +19,7 @@ Here are the steps: 1. Unzip the topazscripts.zip file to get the full set of python scripts. The files you should have after unzipping are: -cmbtc_dump.py - (author: cmbtc) unencrypts and dumps sections into separate files for Kindle for PC -cmbtc_dump_nonK4PC.py - (author - DiapDealer) for use with standalone Kindle and ipod/iphone topaz books +cmbtc_dump.py - (author: cmbtc) unencrypts and dumps sections into separate files for Kindle for PC and Mac decode_meta.py - converts metadata0000.dat to make it available convert2xml.py - converts page*.dat, other*.dat, and glyphs*.dat files to pseudo xml descriptions flatxml2html.py - converts a "flattened" xml description to html using the ocrtext @@ -29,6 +28,9 @@ getpagedim.py - reads page0000.dat to get the book height and width parameters genxml.py - main program to convert everything to xml genhtml.py - main program to generate "book.html" gensvg.py - (author: clarknova) main program to create an xhmtl page with embedded svg graphics +k4mutils.py - Mac OSX support routines for cmbtc_dump.py +k4pcutils.py - Windows support routines for cmbtc_dump.py + Please note, these scripts all import code from each other so please @@ -42,18 +44,15 @@ of its contents as files All Thanks go to CMBTC who broke the DRM for Topaz - without it nothing else would be possible -If you purchased the book for Kindle For PC, you must do the following: +If you purchased the book for Kindle for PC or Kindle for Mac, you must do the following: cmbtc_dump.py -d -o TARGETDIR [-p pid] YOURTOPAZBOOKNAMEHERE -However, if you purchased the book for a standalone Kindle or ipod/iphone +If you purchased the book for a standalone Kindle 1 or ipod/iphone/ipad and you know your pid (at least the first 8 characters) then you should -instead do the following - - cmbtc_dump_nonK4PC.py -d -o TARGETDIR -p 12345678 YOURTOPAZBOOKNAMEHERE - -where 12345678 should be replaced by the first 8 characters of your PID +add that using -p 12345678 switch as indicated above, replacing the +12345678 with the 8 characters of your pid This should create a directory called "TARGETDIR" in your current directory. @@ -64,7 +63,8 @@ other0000.dat - information used to create a style sheet dict0000.dat - dictionary of words used to build page descriptions page - directory filled with page*.dat files glyphs - directory filled with glyphs*.dat files - +img - directory filled with images +color_img - directory used for color images 3. REQUIRED: Create xhtml page descriptions with embedded svg that show the exact representation of each page as an image diff --git a/ePub_Fixer/README_ePub_Fixer.txt b/ePub_Fixer/README_ePub_Fixer.txt new file mode 100644 index 0000000..f7316f8 --- /dev/null +++ b/ePub_Fixer/README_ePub_Fixer.txt @@ -0,0 +1,17 @@ +ePub_Fixer + +ePubs are specially crafted zip archives. Unfortunately, many of te DRM encoded Adobe Adept and Barnes & Noble ePubs are not "proper" zip archives in that the names of some files in the zip central directory do NOT match the local name given in archive itself. This type of zip archive is technically incorrect/corrupted and can not be read by many other programs. + +ePub_Fixer was designed to fix improperly created zip archives of this type. + +1. Simply double-click to launch ePub_Fixer.pyw. + +2. use the first "..." button to select the ePub (with DRM) that needs to be fixed + +3. use the second "..." button to select where you want the fixed ePub (still with DRM!) to be placed. + +4. Hit the start button. + +Once the program has successfully completed, you can now feed the fixed ePubs into other programs such as DRM removal programs like ignobleepub.pyw and ineptepub.pyw. + + diff --git a/Topaz_Tools/TopazExtract_iPhone_iPad_K4M.pyw b/ePub_Fixer/ePub_Fixer.pyw similarity index 62% rename from Topaz_Tools/TopazExtract_iPhone_iPad_K4M.pyw rename to ePub_Fixer/ePub_Fixer.pyw index 83cb79c..6e3a53e 100644 --- a/Topaz_Tools/TopazExtract_iPhone_iPad_K4M.pyw +++ b/ePub_Fixer/ePub_Fixer.pyw @@ -3,16 +3,15 @@ import sys sys.path.append('lib') - import os, os.path, urllib import subprocess from subprocess import Popen, PIPE, STDOUT +import subasyncio +from subasyncio import Process import Tkinter import Tkconstants import tkFileDialog import tkMessageBox -import subasyncio -from subasyncio import Process from scrolltextwidget import ScrolledText class MainDialog(Tkinter.Frame): @@ -21,45 +20,41 @@ class MainDialog(Tkinter.Frame): self.root = root self.interval = 2000 self.p2 = None - self.status = Tkinter.Label(self, text='Extract Contents of Topaz eBook to a Directory') + self.status = Tkinter.Label(self, text='Fix Improper ePubs') self.status.pack(fill=Tkconstants.X, expand=1) body = Tkinter.Frame(self) body.pack(fill=Tkconstants.X, expand=1) sticky = Tkconstants.E + Tkconstants.W body.grid_columnconfigure(1, weight=2) - Tkinter.Label(body, text='Topaz eBook input file').grid(row=0, sticky=Tkconstants.E) - self.tpzpath = Tkinter.Entry(body, width=50) - self.tpzpath.grid(row=0, column=1, sticky=sticky) + Tkinter.Label(body, text='ePub input file').grid(row=0, sticky=Tkconstants.E) + self.epubpath = Tkinter.Entry(body, width=50) + self.epubpath.grid(row=0, column=1, sticky=sticky) cwd = os.getcwdu() cwd = cwd.encode('utf-8') - self.tpzpath.insert(0, cwd) - button = Tkinter.Button(body, text="...", command=self.get_tpzpath) + self.epubpath.insert(0, cwd) + button = Tkinter.Button(body, text="...", command=self.get_epubpath) button.grid(row=0, column=2) - Tkinter.Label(body, text='Output Directory').grid(row=1, sticky=Tkconstants.E) + Tkinter.Label(body, text='Directory to store fixed ePub in').grid(row=1, sticky=Tkconstants.E) self.outpath = Tkinter.Entry(body, width=50) self.outpath.grid(row=1, column=1, sticky=sticky) cwd = os.getcwdu() cwd = cwd.encode('utf-8') - self.outpath.insert(0, cwd) + outname = cwd + self.outpath.insert(0, outname) button = Tkinter.Button(body, text="...", command=self.get_outpath) button.grid(row=1, column=2) - Tkinter.Label(body, text='First 8 characters of PID').grid(row=3, sticky=Tkconstants.E) - self.pidnum = Tkinter.StringVar() - self.ccinfo = Tkinter.Entry(body, width=10, textvariable=self.pidnum) - self.ccinfo.grid(row=3, column=1, sticky=sticky) - - msg1 = 'Conversion Log \n\n' + msg1 = 'Log \n\n' self.stext = ScrolledText(body, bd=5, relief=Tkconstants.RIDGE, height=15, width=60, wrap=Tkconstants.WORD) - self.stext.grid(row=4, column=0, columnspan=2,sticky=sticky) + self.stext.grid(row=2, column=0, columnspan=2,sticky=sticky) self.stext.insert(Tkconstants.END,msg1) buttons = Tkinter.Frame(self) buttons.pack() self.sbotton = Tkinter.Button( - buttons, text="Start", width=10, command=self.convertit) + buttons, text="Start", width=10, command=self.fixit) self.sbotton.pack(side=Tkconstants.LEFT) Tkinter.Frame(buttons, width=10).pack(side=Tkconstants.LEFT) @@ -75,9 +70,9 @@ class MainDialog(Tkinter.Frame): if poll != None: text = self.p2.readerr() text += self.p2.read() - msg = text + '\n\n' + 'Files successfully extracted\n' + msg = text + '\n\n' + 'ePub successfully fixed\n' if poll != 0: - msg = text + '\n\n' + 'Error: File Extraction Failed\n' + msg = text + '\n\n' + 'Error: ePub Fixing Failed\n' self.showCmdOutput(msg) self.p2 = None self.sbotton.configure(state='normal') @@ -98,40 +93,37 @@ class MainDialog(Tkinter.Frame): return # run as a subprocess via pipes and collect stdout - def topazrdr(self, infile, outdir, pidnum): + def zipfixrdr(self, infile, outfile): # os.putenv('PYTHONUNBUFFERED', '1') - pidoption = ' -p "' + pidnum + '" ' - outoption = ' -o "' + outdir + '" ' - cmdline = 'python ./lib/cmbtc_dump_nonK4PC.py -v -d ' + pidoption + outoption + '"' + infile + '"' + cmdline = 'python ./lib/zipfix.py "' + infile + '" "' + outfile + '"' if sys.platform[0:3] == 'win': search_path = os.environ['PATH'] search_path = search_path.lower() if search_path.find('python') >= 0: - cmdline = 'python lib\cmbtc_dump_nonK4PC.py -v -d ' + pidoption + outoption + '"' + infile + '"' + cmdline = 'python lib\zipfix.py "' + infile + '" "' + outfile + '"' else : - cmdline = 'lib\cmbtc_dump_nonK4PC.py -v -d ' + pidoption + outoption + '"' + infile + '"' + cmdline = 'lib\zipfix.py "' + infile + '" "' + outfile + '"' cmdline = cmdline.encode(sys.getfilesystemencoding()) p2 = Process(cmdline, shell=True, bufsize=1, stdin=None, stdout=PIPE, stderr=PIPE, close_fds=False) return p2 - def get_tpzpath(self): - tpzpath = tkFileDialog.askopenfilename( - parent=None, title='Select Topaz File', - defaultextension='.prc', filetypes=[('Topaz azw1', '.azw1'), ('Topaz prc', '.prc'),('Topaz azw', '.azw'), - ('All Files', '.*')]) - if tpzpath: - tpzpath = os.path.normpath(tpzpath) - self.tpzpath.delete(0, Tkconstants.END) - self.tpzpath.insert(0, tpzpath) + def get_epubpath(self): + epubpath = tkFileDialog.askopenfilename( + parent=None, title='Select ePub to be Fixed', + defaultextension='.epub', filetypes=[('ePub eBook File', '.epub'), ('Zip File', '.zip'),('All Files', '.*')]) + if epubpath: + epubpath = os.path.normpath(epubpath) + self.epubpath.delete(0, Tkconstants.END) + self.epubpath.insert(0, epubpath) return def get_outpath(self): cwd = os.getcwdu() cwd = cwd.encode('utf-8') outpath = tkFileDialog.askdirectory( - parent=None, title='Directory to Extract Files into', + parent=None, title='Directory to Store Fixed ePub into', initialdir=cwd, initialfile=None) if outpath: outpath = os.path.normpath(outpath) @@ -147,36 +139,33 @@ class MainDialog(Tkinter.Frame): self.root.destroy() # actually ready to run the subprocess and get its output - def convertit(self): + def fixit(self): # now disable the button to prevent multiple launches self.sbotton.configure(state='disabled') - tpzpath = self.tpzpath.get() + epubpath = self.epubpath.get() outpath = self.outpath.get() - if not tpzpath or not os.path.exists(tpzpath): - self.status['text'] = 'Specified Topaz eBook file does not exist' + if not epubpath or not os.path.exists(epubpath): + self.status['text'] = 'Specified ePub eBook file does not exist' self.sbotton.configure(state='normal') return if not outpath: - self.status['text'] = 'No output directory specified' - self.sbotton.configure(state='normal') - return - if not os.path.exists(outpath): - os.makedirs(outpath) - pidnum = self.pidnum.get() - if not pidnum or pidnum == '': - self.status['text'] = 'You have not entered a PID ' + self.status['text'] = 'Error specified output directory does not exist' self.sbotton.configure(state='normal') return - log = 'Command = "python cmbtc_dump_nonK4PC.py"\n' - log += 'Topaz Path Path = "'+ tpzpath + '"\n' - log += 'Output Directory = "' + outpath + '"\n' - log += 'First 8 chars of PID = "' + pidnum + '"\n' + # default output file name to be input file name + '_fixed.epub' + initname = os.path.splitext(os.path.basename(epubpath))[0] + initname += '_fixed.epub' + outpath += os.sep + initname + + log = 'Command = "python zipfix.py"\n' + log += 'ePub Path = "'+ epubpath + '"\n' + log += 'Output File = "' + outpath + '"\n' log += '\n\n' - log += 'Please Wait ...\n' + log += 'Please Wait ...\n\n' log = log.encode('utf-8') self.stext.insert(Tkconstants.END,log) - self.p2 = self.topazrdr(tpzpath, outpath, pidnum) + self.p2 = self.zipfixrdr(epubpath, outpath) # python does not seem to allow you to create # your own eventloop which every other gui does - strange @@ -188,7 +177,7 @@ class MainDialog(Tkinter.Frame): def main(argv=None): root = Tkinter.Tk() - root.title('Topaz eBook File Extraction') + root.title('Fix Incorrect ePubs') root.resizable(True, False) root.minsize(300, 0) MainDialog(root).pack(fill=Tkconstants.X, expand=1) diff --git a/ePub_Fixer/lib/scrolltextwidget.py b/ePub_Fixer/lib/scrolltextwidget.py new file mode 100644 index 0000000..98b4147 --- /dev/null +++ b/ePub_Fixer/lib/scrolltextwidget.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python +# vim:ts=4:sw=4:softtabstop=4:smarttab:expandtab + +import Tkinter +import Tkconstants + +# basic scrolled text widget +class ScrolledText(Tkinter.Text): + def __init__(self, master=None, **kw): + self.frame = Tkinter.Frame(master) + self.vbar = Tkinter.Scrollbar(self.frame) + self.vbar.pack(side=Tkconstants.RIGHT, fill=Tkconstants.Y) + kw.update({'yscrollcommand': self.vbar.set}) + Tkinter.Text.__init__(self, self.frame, **kw) + self.pack(side=Tkconstants.LEFT, fill=Tkconstants.BOTH, expand=True) + self.vbar['command'] = self.yview + # Copy geometry methods of self.frame without overriding Text + # methods = hack! + text_meths = vars(Tkinter.Text).keys() + methods = vars(Tkinter.Pack).keys() + vars(Tkinter.Grid).keys() + vars(Tkinter.Place).keys() + methods = set(methods).difference(text_meths) + for m in methods: + if m[0] != '_' and m != 'config' and m != 'configure': + setattr(self, m, getattr(self.frame, m)) + + def __str__(self): + return str(self.frame) diff --git a/ePub_Fixer/lib/subasyncio.py b/ePub_Fixer/lib/subasyncio.py new file mode 100644 index 0000000..ed13aa1 --- /dev/null +++ b/ePub_Fixer/lib/subasyncio.py @@ -0,0 +1,149 @@ +#!/usr/bin/env python +# vim:ts=4:sw=4:softtabstop=4:smarttab:expandtab + +import os, sys +import signal +import threading +import subprocess +from subprocess import Popen, PIPE, STDOUT + +# **heavily** chopped up and modfied version of asyncproc.py +# to make it actually work on Windows as well as Mac/Linux +# For the original see: +# "http://www.lysator.liu.se/~bellman/download/" +# author is "Thomas Bellman <bellman@lysator.liu.se>" +# available under GPL version 3 or Later + +# create an asynchronous subprocess whose output can be collected in +# a non-blocking manner + +# What a mess! Have to use threads just to get non-blocking io +# in a cross-platform manner + +# luckily all thread use is hidden within this class + +class Process(object): + def __init__(self, *params, **kwparams): + if len(params) <= 3: + kwparams.setdefault('stdin', subprocess.PIPE) + if len(params) <= 4: + kwparams.setdefault('stdout', subprocess.PIPE) + if len(params) <= 5: + kwparams.setdefault('stderr', subprocess.PIPE) + self.__pending_input = [] + self.__collected_outdata = [] + self.__collected_errdata = [] + self.__exitstatus = None + self.__lock = threading.Lock() + self.__inputsem = threading.Semaphore(0) + self.__quit = False + + self.__process = subprocess.Popen(*params, **kwparams) + + if self.__process.stdin: + self.__stdin_thread = threading.Thread( + name="stdin-thread", + target=self.__feeder, args=(self.__pending_input, + self.__process.stdin)) + self.__stdin_thread.setDaemon(True) + self.__stdin_thread.start() + + if self.__process.stdout: + self.__stdout_thread = threading.Thread( + name="stdout-thread", + target=self.__reader, args=(self.__collected_outdata, + self.__process.stdout)) + self.__stdout_thread.setDaemon(True) + self.__stdout_thread.start() + + if self.__process.stderr: + self.__stderr_thread = threading.Thread( + name="stderr-thread", + target=self.__reader, args=(self.__collected_errdata, + self.__process.stderr)) + self.__stderr_thread.setDaemon(True) + self.__stderr_thread.start() + + def pid(self): + return self.__process.pid + + def kill(self, signal): + self.__process.send_signal(signal) + + # check on subprocess (pass in 'nowait') to act like poll + def wait(self, flag): + if flag.lower() == 'nowait': + rc = self.__process.poll() + else: + rc = self.__process.wait() + if rc != None: + if self.__process.stdin: + self.closeinput() + if self.__process.stdout: + self.__stdout_thread.join() + if self.__process.stderr: + self.__stderr_thread.join() + return self.__process.returncode + + def terminate(self): + if self.__process.stdin: + self.closeinput() + self.__process.terminate() + + # thread gets data from subprocess stdout + def __reader(self, collector, source): + while True: + data = os.read(source.fileno(), 65536) + self.__lock.acquire() + collector.append(data) + self.__lock.release() + if data == "": + source.close() + break + return + + # thread feeds data to subprocess stdin + def __feeder(self, pending, drain): + while True: + self.__inputsem.acquire() + self.__lock.acquire() + if not pending and self.__quit: + drain.close() + self.__lock.release() + break + data = pending.pop(0) + self.__lock.release() + drain.write(data) + + # non-blocking read of data from subprocess stdout + def read(self): + self.__lock.acquire() + outdata = "".join(self.__collected_outdata) + del self.__collected_outdata[:] + self.__lock.release() + return outdata + + # non-blocking read of data from subprocess stderr + def readerr(self): + self.__lock.acquire() + errdata = "".join(self.__collected_errdata) + del self.__collected_errdata[:] + self.__lock.release() + return errdata + + # non-blocking write to stdin of subprocess + def write(self, data): + if self.__process.stdin is None: + raise ValueError("Writing to process with stdin not a pipe") + self.__lock.acquire() + self.__pending_input.append(data) + self.__inputsem.release() + self.__lock.release() + + # close stdinput of subprocess + def closeinput(self): + self.__lock.acquire() + self.__quit = True + self.__inputsem.release() + self.__lock.release() + diff --git a/ePub_Fixer/lib/zipfix.py b/ePub_Fixer/lib/zipfix.py new file mode 100644 index 0000000..40c41d2 --- /dev/null +++ b/ePub_Fixer/lib/zipfix.py @@ -0,0 +1,136 @@ +#!/usr/bin/env python + +import sys +import zlib +import zipfile +import os +import os.path +import getopt +from struct import unpack + + +_FILENAME_LEN_OFFSET = 26 +_EXTRA_LEN_OFFSET = 28 +_FILENAME_OFFSET = 30 +_MAX_SIZE = 64 * 1024 + +class fixZip: + def __init__(self, zinput, zoutput): + self.inzip = zipfile.ZipFile(zinput,'r') + self.outzip = zipfile.ZipFile(zoutput,'w') + # open the input zip for reading only as a raw file + self.bzf = file(zinput,'rb') + + def getlocalname(self, zi): + local_header_offset = zi.header_offset + self.bzf.seek(local_header_offset + _FILENAME_LEN_OFFSET) + leninfo = self.bzf.read(2) + local_name_length, = unpack('<H', leninfo) + self.bzf.seek(local_header_offset + _FILENAME_OFFSET) + local_name = self.bzf.read(local_name_length) + return local_name + + def uncompress(self, cmpdata): + dc = zlib.decompressobj(-15) + data = '' + while len(cmpdata) > 0: + if len(cmpdata) > _MAX_SIZE : + newdata = cmpdata[0:_MAX_SIZE] + cmpdata = cmpdata[_MAX_SIZE:] + else: + newdata = cmpdata + cmpdata = '' + newdata = dc.decompress(newdata) + unprocessed = dc.unconsumed_tail + if len(unprocessed) == 0: + newdata += dc.flush() + data += newdata + cmpdata += unprocessed + unprocessed = '' + return data + + def getfiledata(self, zi): + # get file name length and exta data length to find start of file data + local_header_offset = zi.header_offset + + self.bzf.seek(local_header_offset + _FILENAME_LEN_OFFSET) + leninfo = self.bzf.read(2) + local_name_length, = unpack('<H', leninfo) + + self.bzf.seek(local_header_offset + _EXTRA_LEN_OFFSET) + exinfo = self.bzf.read(2) + extra_field_length, = unpack('<H', exinfo) + + self.bzf.seek(local_header_offset + _FILENAME_OFFSET + local_name_length + extra_field_length) + data = None + + # if not compressed we are good to go + if zi.compress_type == zipfile.ZIP_STORED: + data = self.bzf.read(zi.file_size) + + # if compressed we must decompress it using zlib + if zi.compress_type == zipfile.ZIP_DEFLATED: + cmpdata = self.bzf.read(zi.compress_size) + data = self.uncompress(cmpdata) + + return data + + + + def fix(self): + # get the zipinfo for each member of the input archive + # and copy member over to output archive + # if problems exist with local vs central filename, fix them + + for i, zinfo in enumerate(self.inzip.infolist()): + data = None + nzinfo = zinfo + + try: + data = self.inzip.read(zinfo) + except zipfile.BadZipfile or zipfile.error: + local_name = self.getlocalname(zinfo) + data = self.getfiledata(zinfo) + nzinfo.filename = local_name + + nzinfo.date_time = zinfo.date_time + nzinfo.compress_type = zinfo.compress_type + nzinfo.flag_bits = 0 + nzinfo.internal_attr = 0 + self.outzip.writestr(nzinfo,data) + + self.bzf.close() + self.inzip.close() + self.outzip.close() + + +def usage(): + print """usage: zipfix.py inputzip outputzip + inputzip is the source zipfile to fix + outputzip is the fixed zip archive + """ + + +def main(argv=sys.argv): + if len(argv)!=3: + usage() + return 1 + infile = None + outfile = None + infile = argv[1] + outfile = argv[2] + if not os.path.exists(infile): + print "Error: Input Zip File does not exist" + return 1 + try: + fr = fixZip(infile, outfile) + fr.fix() + return 0 + except Exception, e: + print "Error Occurred ", e + return 2 + +if __name__ == '__main__' : + sys.exit(main()) + + diff --git a/eReader_PDB_Tools/lib/eReaderPDB2PML_plugin.py b/eReader_PDB_Tools/lib/eReaderPDB2PML_plugin.py new file mode 100644 index 0000000..fe4c9b3 --- /dev/null +++ b/eReader_PDB_Tools/lib/eReaderPDB2PML_plugin.py @@ -0,0 +1,148 @@ +#!/usr/bin/env python + +# eReaderPDB2PML_plugin.py +# Released under the terms of the GNU General Public Licence, version 3 or +# later. <http://www.gnu.org/licenses/> +# +# All credit given to The Dark Reverser for the original standalone script. +# I had the much easier job of converting it to Calibre a plugin. +# +# This plugin is meant to convert secure Ereader files (PDB) to unsecured PMLZ files. +# Calibre can then convert it to whatever format you desire. +# It is meant to function without having to install any dependencies... +# other than having Calibre installed, of course. I've included the psyco libraries +# (compiled for each platform) for speed. If your system can use them, great! +# Otherwise, they won't be used and things will just work slower. +# +# Installation: +# Go to Calibre's Preferences page... click on the Plugins button. Use the file +# dialog button to select the plugin's zip file (eReaderPDB2PML_vXX_plugin.zip) and +# click the 'Add' button. You're done. +# +# Configuration: +# Highlight the plugin (eReader PDB 2 PML) and click the +# "Customize Plugin" button on Calibre's Preferences->Plugins page. +# Enter your name and the last 8 digits of the credit card number separated by +# a comma: Your Name,12341234 +# +# If you've purchased books with more than one credit card, separate the info with +# a colon: Your Name,12341234:Other Name,23452345 +# NOTE: Do NOT put quotes around your name like you do with the original script!! +# +# Revision history: +# 0.0.1 - Initial release +# 0.0.2 - updated to distinguish it from earlier non-openssl version + +import sys, os + +from calibre.customize import FileTypePlugin + +class eRdrDeDRM(FileTypePlugin): + name = 'eReader PDB 2 PML' # Name of the plugin + description = 'Removes DRM from secure pdb files. \ + Credit given to The Dark Reverser for the original standalone script.' + supported_platforms = ['linux', 'osx', 'windows'] # Platforms this plugin will run on + author = 'DiapDealer' # The author of this plugin + version = (0, 0, 2) # The version number of this plugin + file_types = set(['pdb']) # The file types that this plugin will be applied to + on_import = True # Run this plugin during the import + + def run(self, path_to_ebook): + from calibre.ptempfile import PersistentTemporaryDirectory + from calibre.constants import iswindows, isosx + pdir = 'windows' if iswindows else 'osx' if isosx else 'linux' + ppath = os.path.join(self.sys_insertion_path, pdir) + sys.path.insert(0, ppath) + + global bookname, erdr2pml + import erdr2pml + + if 'psyco' in sys.modules: + print 'Using psyco acceleration for %s.' % pdir + else: + print 'NOT using psyco acceleration for %s. Conversion may be slow.' % pdir + + infile = path_to_ebook + bookname = os.path.splitext(os.path.basename(infile))[0] + outdir = PersistentTemporaryDirectory() + pmlzfile = self.temporary_file(bookname + '.pmlz') + + if self.site_customization: + keydata = self.site_customization + ar = keydata.split(':') + for i in ar: + try: + name, cc = i.split(',') + except ValueError: + sys.path.remove(ppath) + print ' Error parsing user supplied data.' + return path_to_ebook + + try: + print "Processing..." + import time + start_time = time.time() + pmlfilepath = self.convertEreaderToPml(infile, name, cc, outdir) + + if pmlfilepath and pmlfilepath != 1: + import zipfile + import shutil + print " Creating PMLZ file" + myZipFile = zipfile.ZipFile(pmlzfile.name,'w',zipfile.ZIP_STORED, False) + list = os.listdir(outdir) + for file in list: + localname = file + filePath = os.path.join(outdir,file) + if os.path.isfile(filePath): + myZipFile.write(filePath, localname) + elif os.path.isdir(filePath): + imageList = os.listdir(filePath) + localimgdir = os.path.basename(filePath) + for image in imageList: + localname = os.path.join(localimgdir,image) + imagePath = os.path.join(filePath,image) + if os.path.isfile(imagePath): + myZipFile.write(imagePath, localname) + myZipFile.close() + end_time = time.time() + search_time = end_time - start_time + print 'elapsed time: %.2f seconds' % (search_time, ) + print "done" + return pmlzfile.name + else: + raise ValueError('Error Creating PML file.') + except ValueError, e: + print "Error: %s" % e + pass + raise Exception('Couldn\'t decrypt pdb file.') + else: + raise Exception('No name and CC# provided.') + + def convertEreaderToPml(self, infile, name, cc, outdir): + + print " Decoding File" + sect = erdr2pml.Sectionizer(infile, 'PNRdPPrs') + er = erdr2pml.EreaderProcessor(sect.loadSection, name, cc) + + if er.getNumImages() > 0: + print " Extracting images" + #imagedir = bookname + '_img/' + imagedir = 'images/' + imagedirpath = os.path.join(outdir,imagedir) + if not os.path.exists(imagedirpath): + os.makedirs(imagedirpath) + for i in xrange(er.getNumImages()): + name, contents = er.getImage(i) + file(os.path.join(imagedirpath, name), 'wb').write(contents) + + print " Extracting pml" + pml_string = er.getText() + pmlfilename = bookname + ".pml" + try: + file(os.path.join(outdir, pmlfilename),'wb').write(erdr2pml.cleanPML(pml_string)) + return os.path.join(outdir, pmlfilename) + except: + return 1 + + def customization_help(self, gui=False): + return 'Enter Account Name & Last 8 digits of Credit Card number (separate with a comma)' diff --git a/eReader_PDB_Tools/lib/erdr2pml.py b/eReader_PDB_Tools/lib/erdr2pml.py index 089d000..daa6b21 100644 --- a/eReader_PDB_Tools/lib/erdr2pml.py +++ b/eReader_PDB_Tools/lib/erdr2pml.py @@ -54,26 +54,30 @@ # 0.13 - change to unbuffered stdout for use with gui front ends # 0.14 - contributed enhancement to support --make-pmlz switch # 0.15 - enabled high-ascii to pml character encoding. DropBook now works on Mac. +# 0.16 - convert to use openssl DES (very very fast) or pure python DES if openssl's libcrypto is not available -__version__='0.15' +Des = None -# Import Psyco if available -try: - # Dumb speed hack 1 - # http://psyco.sourceforge.net - import psyco - psyco.full() - pass -except ImportError: - pass -try: - # Dumb speed hack 2 - # All map() calls converted to list comprehension (some use zip) - # override zip with izip - saves memory and in rough testing - # appears to be faster zip() is only used in the converted map() calls - from itertools import izip as zip -except ImportError: - pass +import openssl_des +Des = openssl_des.load_libcrypto() + +# if that did not work then use pure python implementation +# of DES and try to speed it up with Psycho +if Des == None: + import python_des + Des = python_des.Des + # Import Psyco if available + try: + # Dumb speed hack 1 + # http://psyco.sourceforge.net + import psyco + psyco.full() + pass + except ImportError: + pass + + +__version__='0.16' class Unbuffered: def __init__(self, stream): @@ -101,223 +105,6 @@ import logging logging.basicConfig() #logging.basicConfig(level=logging.DEBUG) -ECB = 0 -CBC = 1 -class Des(object): - __pc1 = [56, 48, 40, 32, 24, 16, 8, 0, 57, 49, 41, 33, 25, 17, - 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, - 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, - 13, 5, 60, 52, 44, 36, 28, 20, 12, 4, 27, 19, 11, 3] - __left_rotations = [1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1] - __pc2 = [13, 16, 10, 23, 0, 4,2, 27, 14, 5, 20, 9, - 22, 18, 11, 3, 25, 7, 15, 6, 26, 19, 12, 1, - 40, 51, 30, 36, 46, 54, 29, 39, 50, 44, 32, 47, - 43, 48, 38, 55, 33, 52, 45, 41, 49, 35, 28, 31] - __ip = [57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3, - 61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7, - 56, 48, 40, 32, 24, 16, 8, 0, 58, 50, 42, 34, 26, 18, 10, 2, - 60, 52, 44, 36, 28, 20, 12, 4, 62, 54, 46, 38, 30, 22, 14, 6] - __expansion_table = [31, 0, 1, 2, 3, 4, 3, 4, 5, 6, 7, 8, - 7, 8, 9, 10, 11, 12,11, 12, 13, 14, 15, 16, - 15, 16, 17, 18, 19, 20,19, 20, 21, 22, 23, 24, - 23, 24, 25, 26, 27, 28,27, 28, 29, 30, 31, 0] - __sbox = [[14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7, - 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8, - 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0, - 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13], - [15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10, - 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5, - 0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15, - 13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9], - [10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8, - 13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1, - 13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7, - 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12], - [7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15, - 13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9, - 10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4, - 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14], - [2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9, - 14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6, - 4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14, - 11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3], - [12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11, - 10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8, - 9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6, - 4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13], - [4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1, - 13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6, - 1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2, - 6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12], - [13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7, - 1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2, - 7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8, - 2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11],] - __p = [15, 6, 19, 20, 28, 11,27, 16, 0, 14, 22, 25, - 4, 17, 30, 9, 1, 7,23,13, 31, 26, 2, 8,18, 12, 29, 5, 21, 10,3, 24] - __fp = [39, 7, 47, 15, 55, 23, 63, 31,38, 6, 46, 14, 54, 22, 62, 30, - 37, 5, 45, 13, 53, 21, 61, 29,36, 4, 44, 12, 52, 20, 60, 28, - 35, 3, 43, 11, 51, 19, 59, 27,34, 2, 42, 10, 50, 18, 58, 26, - 33, 1, 41, 9, 49, 17, 57, 25,32, 0, 40, 8, 48, 16, 56, 24] - # Type of crypting being done - ENCRYPT = 0x00 - DECRYPT = 0x01 - def __init__(self, key, mode=ECB, IV=None): - if len(key) != 8: - raise ValueError("Invalid DES key size. Key must be exactly 8 bytes long.") - self.block_size = 8 - self.key_size = 8 - self.__padding = '' - self.setMode(mode) - if IV: - self.setIV(IV) - self.L = [] - self.R = [] - self.Kn = [ [0] * 48 ] * 16 # 16 48-bit keys (K1 - K16) - self.final = [] - self.setKey(key) - def getKey(self): - return self.__key - def setKey(self, key): - self.__key = key - self.__create_sub_keys() - def getMode(self): - return self.__mode - def setMode(self, mode): - self.__mode = mode - def getIV(self): - return self.__iv - def setIV(self, IV): - if not IV or len(IV) != self.block_size: - raise ValueError("Invalid Initial Value (IV), must be a multiple of " + str(self.block_size) + " bytes") - self.__iv = IV - def getPadding(self): - return self.__padding - def __String_to_BitList(self, data): - l = len(data) * 8 - result = [0] * l - pos = 0 - for c in data: - i = 7 - ch = ord(c) - while i >= 0: - if ch & (1 << i) != 0: - result[pos] = 1 - else: - result[pos] = 0 - pos += 1 - i -= 1 - return result - def __BitList_to_String(self, data): - result = '' - pos = 0 - c = 0 - while pos < len(data): - c += data[pos] << (7 - (pos % 8)) - if (pos % 8) == 7: - result += chr(c) - c = 0 - pos += 1 - return result - def __permutate(self, table, block): - return [block[x] for x in table] - def __create_sub_keys(self): - key = self.__permutate(Des.__pc1, self.__String_to_BitList(self.getKey())) - i = 0 - self.L = key[:28] - self.R = key[28:] - while i < 16: - j = 0 - while j < Des.__left_rotations[i]: - self.L.append(self.L[0]) - del self.L[0] - self.R.append(self.R[0]) - del self.R[0] - j += 1 - self.Kn[i] = self.__permutate(Des.__pc2, self.L + self.R) - i += 1 - def __des_crypt(self, block, crypt_type): - block = self.__permutate(Des.__ip, block) - self.L = block[:32] - self.R = block[32:] - if crypt_type == Des.ENCRYPT: - iteration = 0 - iteration_adjustment = 1 - else: - iteration = 15 - iteration_adjustment = -1 - i = 0 - while i < 16: - tempR = self.R[:] - self.R = self.__permutate(Des.__expansion_table, self.R) - self.R = [x ^ y for x,y in zip(self.R, self.Kn[iteration])] - B = [self.R[:6], self.R[6:12], self.R[12:18], self.R[18:24], self.R[24:30], self.R[30:36], self.R[36:42], self.R[42:]] - j = 0 - Bn = [0] * 32 - pos = 0 - while j < 8: - m = (B[j][0] << 1) + B[j][5] - n = (B[j][1] << 3) + (B[j][2] << 2) + (B[j][3] << 1) + B[j][4] - v = Des.__sbox[j][(m << 4) + n] - Bn[pos] = (v & 8) >> 3 - Bn[pos + 1] = (v & 4) >> 2 - Bn[pos + 2] = (v & 2) >> 1 - Bn[pos + 3] = v & 1 - pos += 4 - j += 1 - self.R = self.__permutate(Des.__p, Bn) - self.R = [x ^ y for x, y in zip(self.R, self.L)] - self.L = tempR - i += 1 - iteration += iteration_adjustment - self.final = self.__permutate(Des.__fp, self.R + self.L) - return self.final - def crypt(self, data, crypt_type): - if not data: - return '' - if len(data) % self.block_size != 0: - if crypt_type == Des.DECRYPT: # Decryption must work on 8 byte blocks - raise ValueError("Invalid data length, data must be a multiple of " + str(self.block_size) + " bytes\n.") - if not self.getPadding(): - raise ValueError("Invalid data length, data must be a multiple of " + str(self.block_size) + " bytes\n. Try setting the optional padding character") - else: - data += (self.block_size - (len(data) % self.block_size)) * self.getPadding() - if self.getMode() == CBC: - if self.getIV(): - iv = self.__String_to_BitList(self.getIV()) - else: - raise ValueError("For CBC mode, you must supply the Initial Value (IV) for ciphering") - i = 0 - dict = {} - result = [] - while i < len(data): - block = self.__String_to_BitList(data[i:i+8]) - if self.getMode() == CBC: - if crypt_type == Des.ENCRYPT: - block = [x ^ y for x, y in zip(block, iv)] - processed_block = self.__des_crypt(block, crypt_type) - if crypt_type == Des.DECRYPT: - processed_block = [x ^ y for x, y in zip(processed_block, iv)] - iv = block - else: - iv = processed_block - else: - processed_block = self.__des_crypt(block, crypt_type) - result.append(self.__BitList_to_String(processed_block)) - i += 8 - if crypt_type == Des.DECRYPT and self.getPadding(): - s = result[-1] - while s[-1] == self.getPadding(): - s = s[:-1] - result[-1] = s - return ''.join(result) - def encrypt(self, data, pad=''): - self.__padding = pad - return self.crypt(data, Des.ENCRYPT) - def decrypt(self, data, pad=''): - self.__padding = pad - return self.crypt(data, Des.DECRYPT) - class Sectionizer(object): def __init__(self, filename, ident): self.contents = file(filename, 'rb').read() @@ -685,8 +472,5 @@ def main(argv=None): return 0 if __name__ == "__main__": - #import cProfile - #command = """sys.exit(main())""" - #cProfile.runctx( command, globals(), locals(), filename="cprofile.profile" ) - sys.exit(main()) + diff --git a/eReader_PDB_Tools/lib/openssl_des.py b/eReader_PDB_Tools/lib/openssl_des.py new file mode 100644 index 0000000..8a044fa --- /dev/null +++ b/eReader_PDB_Tools/lib/openssl_des.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python +# vim:ts=4:sw=4:softtabstop=4:smarttab:expandtab + +# implement just enough of des from openssl to make erdr2pml.py happy + +def load_libcrypto(): + from ctypes import CDLL, POINTER, c_void_p, c_char_p, c_char, c_int, c_long, \ + Structure, c_ulong, create_string_buffer, cast + from ctypes.util import find_library + import sys + + if sys.platform.startswith('win'): + libcrypto = find_library('libeay32') + else: + libcrypto = find_library('crypto') + + if libcrypto is None: + return None + + libcrypto = CDLL(libcrypto) + + # typedef struct DES_ks + # { + # union + # { + # DES_cblock cblock; + # /* make sure things are correct size on machines with + # * 8 byte longs */ + # DES_LONG deslong[2]; + # } ks[16]; + # } DES_key_schedule; + + # just create a big enough place to hold everything + # it will have alignment of structure so we should be okay (16 byte aligned?) + class DES_KEY_SCHEDULE(Structure): + _fields_ = [('DES_cblock1', c_char * 16), + ('DES_cblock2', c_char * 16), + ('DES_cblock3', c_char * 16), + ('DES_cblock4', c_char * 16), + ('DES_cblock5', c_char * 16), + ('DES_cblock6', c_char * 16), + ('DES_cblock7', c_char * 16), + ('DES_cblock8', c_char * 16), + ('DES_cblock9', c_char * 16), + ('DES_cblock10', c_char * 16), + ('DES_cblock11', c_char * 16), + ('DES_cblock12', c_char * 16), + ('DES_cblock13', c_char * 16), + ('DES_cblock14', c_char * 16), + ('DES_cblock15', c_char * 16), + ('DES_cblock16', c_char * 16)] + + DES_KEY_SCHEDULE_p = POINTER(DES_KEY_SCHEDULE) + + def F(restype, name, argtypes): + func = getattr(libcrypto, name) + func.restype = restype + func.argtypes = argtypes + return func + + DES_set_key = F(None, 'DES_set_key',[c_char_p, DES_KEY_SCHEDULE_p]) + DES_ecb_encrypt = F(None, 'DES_ecb_encrypt',[c_char_p, c_char_p, DES_KEY_SCHEDULE_p, c_int]) + + + class DES(object): + def __init__(self, key): + if len(key) != 8 : + raise Error('DES improper key used') + return + self.key = key + self.keyschedule = DES_KEY_SCHEDULE() + DES_set_key(self.key, self.keyschedule) + def desdecrypt(self, data): + ob = create_string_buffer(len(data)) + DES_ecb_encrypt(data, ob, self.keyschedule, 0) + return ob.raw + def decrypt(self, data): + if not data: + return '' + i = 0 + result = [] + while i < len(data): + block = data[i:i+8] + processed_block = self.desdecrypt(block) + result.append(processed_block) + i += 8 + return ''.join(result) + + return DES + diff --git a/eReader_PDB_Tools/lib/python_des.py b/eReader_PDB_Tools/lib/python_des.py new file mode 100644 index 0000000..c5bb204 --- /dev/null +++ b/eReader_PDB_Tools/lib/python_des.py @@ -0,0 +1,218 @@ +import sys + +ECB = 0 +CBC = 1 +class Des(object): + __pc1 = [56, 48, 40, 32, 24, 16, 8, 0, 57, 49, 41, 33, 25, 17, + 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, + 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, + 13, 5, 60, 52, 44, 36, 28, 20, 12, 4, 27, 19, 11, 3] + __left_rotations = [1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1] + __pc2 = [13, 16, 10, 23, 0, 4,2, 27, 14, 5, 20, 9, + 22, 18, 11, 3, 25, 7, 15, 6, 26, 19, 12, 1, + 40, 51, 30, 36, 46, 54, 29, 39, 50, 44, 32, 47, + 43, 48, 38, 55, 33, 52, 45, 41, 49, 35, 28, 31] + __ip = [57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3, + 61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7, + 56, 48, 40, 32, 24, 16, 8, 0, 58, 50, 42, 34, 26, 18, 10, 2, + 60, 52, 44, 36, 28, 20, 12, 4, 62, 54, 46, 38, 30, 22, 14, 6] + __expansion_table = [31, 0, 1, 2, 3, 4, 3, 4, 5, 6, 7, 8, + 7, 8, 9, 10, 11, 12,11, 12, 13, 14, 15, 16, + 15, 16, 17, 18, 19, 20,19, 20, 21, 22, 23, 24, + 23, 24, 25, 26, 27, 28,27, 28, 29, 30, 31, 0] + __sbox = [[14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7, + 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8, + 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0, + 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13], + [15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10, + 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5, + 0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15, + 13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9], + [10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8, + 13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1, + 13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7, + 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12], + [7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15, + 13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9, + 10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4, + 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14], + [2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9, + 14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6, + 4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14, + 11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3], + [12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11, + 10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8, + 9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6, + 4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13], + [4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1, + 13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6, + 1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2, + 6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12], + [13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7, + 1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2, + 7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8, + 2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11],] + __p = [15, 6, 19, 20, 28, 11,27, 16, 0, 14, 22, 25, + 4, 17, 30, 9, 1, 7,23,13, 31, 26, 2, 8,18, 12, 29, 5, 21, 10,3, 24] + __fp = [39, 7, 47, 15, 55, 23, 63, 31,38, 6, 46, 14, 54, 22, 62, 30, + 37, 5, 45, 13, 53, 21, 61, 29,36, 4, 44, 12, 52, 20, 60, 28, + 35, 3, 43, 11, 51, 19, 59, 27,34, 2, 42, 10, 50, 18, 58, 26, + 33, 1, 41, 9, 49, 17, 57, 25,32, 0, 40, 8, 48, 16, 56, 24] + # Type of crypting being done + ENCRYPT = 0x00 + DECRYPT = 0x01 + def __init__(self, key, mode=ECB, IV=None): + if len(key) != 8: + raise ValueError("Invalid DES key size. Key must be exactly 8 bytes long.") + self.block_size = 8 + self.key_size = 8 + self.__padding = '' + self.setMode(mode) + if IV: + self.setIV(IV) + self.L = [] + self.R = [] + self.Kn = [ [0] * 48 ] * 16 # 16 48-bit keys (K1 - K16) + self.final = [] + self.setKey(key) + def getKey(self): + return self.__key + def setKey(self, key): + self.__key = key + self.__create_sub_keys() + def getMode(self): + return self.__mode + def setMode(self, mode): + self.__mode = mode + def getIV(self): + return self.__iv + def setIV(self, IV): + if not IV or len(IV) != self.block_size: + raise ValueError("Invalid Initial Value (IV), must be a multiple of " + str(self.block_size) + " bytes") + self.__iv = IV + def getPadding(self): + return self.__padding + def __String_to_BitList(self, data): + l = len(data) * 8 + result = [0] * l + pos = 0 + for c in data: + i = 7 + ch = ord(c) + while i >= 0: + if ch & (1 << i) != 0: + result[pos] = 1 + else: + result[pos] = 0 + pos += 1 + i -= 1 + return result + def __BitList_to_String(self, data): + result = '' + pos = 0 + c = 0 + while pos < len(data): + c += data[pos] << (7 - (pos % 8)) + if (pos % 8) == 7: + result += chr(c) + c = 0 + pos += 1 + return result + def __permutate(self, table, block): + return [block[x] for x in table] + def __create_sub_keys(self): + key = self.__permutate(Des.__pc1, self.__String_to_BitList(self.getKey())) + i = 0 + self.L = key[:28] + self.R = key[28:] + while i < 16: + j = 0 + while j < Des.__left_rotations[i]: + self.L.append(self.L[0]) + del self.L[0] + self.R.append(self.R[0]) + del self.R[0] + j += 1 + self.Kn[i] = self.__permutate(Des.__pc2, self.L + self.R) + i += 1 + def __des_crypt(self, block, crypt_type): + block = self.__permutate(Des.__ip, block) + self.L = block[:32] + self.R = block[32:] + if crypt_type == Des.ENCRYPT: + iteration = 0 + iteration_adjustment = 1 + else: + iteration = 15 + iteration_adjustment = -1 + i = 0 + while i < 16: + tempR = self.R[:] + self.R = self.__permutate(Des.__expansion_table, self.R) + self.R = [x ^ y for x,y in zip(self.R, self.Kn[iteration])] + B = [self.R[:6], self.R[6:12], self.R[12:18], self.R[18:24], self.R[24:30], self.R[30:36], self.R[36:42], self.R[42:]] + j = 0 + Bn = [0] * 32 + pos = 0 + while j < 8: + m = (B[j][0] << 1) + B[j][5] + n = (B[j][1] << 3) + (B[j][2] << 2) + (B[j][3] << 1) + B[j][4] + v = Des.__sbox[j][(m << 4) + n] + Bn[pos] = (v & 8) >> 3 + Bn[pos + 1] = (v & 4) >> 2 + Bn[pos + 2] = (v & 2) >> 1 + Bn[pos + 3] = v & 1 + pos += 4 + j += 1 + self.R = self.__permutate(Des.__p, Bn) + self.R = [x ^ y for x, y in zip(self.R, self.L)] + self.L = tempR + i += 1 + iteration += iteration_adjustment + self.final = self.__permutate(Des.__fp, self.R + self.L) + return self.final + def crypt(self, data, crypt_type): + if not data: + return '' + if len(data) % self.block_size != 0: + if crypt_type == Des.DECRYPT: # Decryption must work on 8 byte blocks + raise ValueError("Invalid data length, data must be a multiple of " + str(self.block_size) + " bytes\n.") + if not self.getPadding(): + raise ValueError("Invalid data length, data must be a multiple of " + str(self.block_size) + " bytes\n. Try setting the optional padding character") + else: + data += (self.block_size - (len(data) % self.block_size)) * self.getPadding() + if self.getMode() == CBC: + if self.getIV(): + iv = self.__String_to_BitList(self.getIV()) + else: + raise ValueError("For CBC mode, you must supply the Initial Value (IV) for ciphering") + i = 0 + dict = {} + result = [] + while i < len(data): + block = self.__String_to_BitList(data[i:i+8]) + if self.getMode() == CBC: + if crypt_type == Des.ENCRYPT: + block = [x ^ y for x, y in zip(block, iv)] + processed_block = self.__des_crypt(block, crypt_type) + if crypt_type == Des.DECRYPT: + processed_block = [x ^ y for x, y in zip(processed_block, iv)] + iv = block + else: + iv = processed_block + else: + processed_block = self.__des_crypt(block, crypt_type) + result.append(self.__BitList_to_String(processed_block)) + i += 8 + if crypt_type == Des.DECRYPT and self.getPadding(): + s = result[-1] + while s[-1] == self.getPadding(): + s = s[:-1] + result[-1] = s + return ''.join(result) + def encrypt(self, data, pad=''): + self.__padding = pad + return self.crypt(data, Des.ENCRYPT) + def decrypt(self, data, pad=''): + self.__padding = pad + return self.crypt(data, Des.DECRYPT)