mirror of
				https://github.com/noDRM/DeDRM_tools.git
				synced 2025-10-23 23:07:47 -04:00 
			
		
		
		
	Update to DeDRM to try to fix Linux python problem, and improve Adobe logging
This commit is contained in:
		
							parent
							
								
									72968d2124
								
							
						
					
					
						commit
						10963f6011
					
				
					 17 changed files with 180 additions and 45 deletions
				
			
		
										
											Binary file not shown.
										
									
								
							|  | @ -24,7 +24,7 @@ | ||||||
| 	<key>CFBundleExecutable</key> | 	<key>CFBundleExecutable</key> | ||||||
| 	<string>droplet</string> | 	<string>droplet</string> | ||||||
| 	<key>CFBundleGetInfoString</key> | 	<key>CFBundleGetInfoString</key> | ||||||
| 	<string>DeDRM AppleScript 6.3.4 Written 2010–2015 by Apprentice Alf et al.</string> | 	<string>DeDRM AppleScript 6.3.5 Written 2010–2016 by Apprentice Alf et al.</string> | ||||||
| 	<key>CFBundleIconFile</key> | 	<key>CFBundleIconFile</key> | ||||||
| 	<string>DeDRM</string> | 	<string>DeDRM</string> | ||||||
| 	<key>CFBundleIdentifier</key> | 	<key>CFBundleIdentifier</key> | ||||||
|  | @ -36,7 +36,7 @@ | ||||||
| 	<key>CFBundlePackageType</key> | 	<key>CFBundlePackageType</key> | ||||||
| 	<string>APPL</string> | 	<string>APPL</string> | ||||||
| 	<key>CFBundleShortVersionString</key> | 	<key>CFBundleShortVersionString</key> | ||||||
| 	<string>6.3.4</string> | 	<string>6.3.5</string> | ||||||
| 	<key>CFBundleSignature</key> | 	<key>CFBundleSignature</key> | ||||||
| 	<string>dplt</string> | 	<string>dplt</string> | ||||||
| 	<key>LSRequiresCarbon</key> | 	<key>LSRequiresCarbon</key> | ||||||
|  |  | ||||||
|  | @ -46,6 +46,7 @@ __docformat__ = 'restructuredtext en' | ||||||
| #   6.3.2 - Fixed Kindle for Android help file | #   6.3.2 - Fixed Kindle for Android help file | ||||||
| #   6.3.3 - Bug fix for Kindle for PC support | #   6.3.3 - Bug fix for Kindle for PC support | ||||||
| #   6.3.4 - Fixes for Kindle for Android, Linux, and Kobo 3.17 | #   6.3.4 - Fixes for Kindle for Android, Linux, and Kobo 3.17 | ||||||
|  | #   6.3.5 - Fixes for Linux, and Kobo 3.19 and more logging | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| """ | """ | ||||||
|  | @ -53,7 +54,7 @@ Decrypt DRMed ebooks. | ||||||
| """ | """ | ||||||
| 
 | 
 | ||||||
| PLUGIN_NAME = u"DeDRM" | PLUGIN_NAME = u"DeDRM" | ||||||
| PLUGIN_VERSION_TUPLE = (6, 3, 4) | PLUGIN_VERSION_TUPLE = (6, 3, 5) | ||||||
| PLUGIN_VERSION = u".".join([unicode(str(x)) for x in PLUGIN_VERSION_TUPLE]) | PLUGIN_VERSION = u".".join([unicode(str(x)) for x in PLUGIN_VERSION_TUPLE]) | ||||||
| # Include an html helpfile in the plugin's zipfile with the following name. | # Include an html helpfile in the plugin's zipfile with the following name. | ||||||
| RESOURCE_NAME = PLUGIN_NAME + '_Help.htm' | RESOURCE_NAME = PLUGIN_NAME + '_Help.htm' | ||||||
|  | @ -96,7 +97,7 @@ class DeDRM(FileTypePlugin): | ||||||
|     supported_platforms     = ['linux', 'osx', 'windows'] |     supported_platforms     = ['linux', 'osx', 'windows'] | ||||||
|     author                  = u"Apprentice Alf, Aprentice Harper, The Dark Reverser and i♥cabbages" |     author                  = u"Apprentice Alf, Aprentice Harper, The Dark Reverser and i♥cabbages" | ||||||
|     version                 = PLUGIN_VERSION_TUPLE |     version                 = PLUGIN_VERSION_TUPLE | ||||||
|     minimum_calibre_version = (0, 7, 55)  # Compiled python libraries cannot be imported in earlier versions. |     minimum_calibre_version = (1, 0, 0)  # Compiled python libraries cannot be imported in earlier versions. | ||||||
|     file_types              = set(['epub','pdf','pdb','prc','mobi','pobi','azw','azw1','azw3','azw4','tpz']) |     file_types              = set(['epub','pdf','pdb','prc','mobi','pobi','azw','azw1','azw3','azw4','tpz']) | ||||||
|     on_import               = True |     on_import               = True | ||||||
|     priority                = 600 |     priority                = 600 | ||||||
|  | @ -296,11 +297,15 @@ class DeDRM(FileTypePlugin): | ||||||
|                     traceback.print_exc() |                     traceback.print_exc() | ||||||
|                     result = 1 |                     result = 1 | ||||||
| 
 | 
 | ||||||
|  |                 try: | ||||||
|                     of.close() |                     of.close() | ||||||
|  |                 except: | ||||||
|  |                     print u"{0} v{1}: Exception closing temporary file after {2:.1f} seconds. Ignored.".format(PLUGIN_NAME, PLUGIN_VERSION, time.time()-self.starttime) | ||||||
| 
 | 
 | ||||||
|                 if  result == 0: |                 if  result == 0: | ||||||
|                     # Decryption was successful. |                     # Decryption was successful. | ||||||
|                     # Return the modified PersistentTemporary file to calibre. |                     # Return the modified PersistentTemporary file to calibre. | ||||||
|  |                     print u"{0} v{1}: Decrypted with key {2:s} after {3:.1f} seconds".format(PLUGIN_NAME, PLUGIN_VERSION,keyname,time.time()-self.starttime) | ||||||
|                     return of.name |                     return of.name | ||||||
| 
 | 
 | ||||||
|                 print u"{0} v{1}: Failed to decrypt with key {2:s} after {3:.1f} seconds".format(PLUGIN_NAME, PLUGIN_VERSION,keyname,time.time()-self.starttime) |                 print u"{0} v{1}: Failed to decrypt with key {2:s} after {3:.1f} seconds".format(PLUGIN_NAME, PLUGIN_VERSION,keyname,time.time()-self.starttime) | ||||||
|  | @ -360,6 +365,7 @@ class DeDRM(FileTypePlugin): | ||||||
|                             except: |                             except: | ||||||
|                                 print u"{0} v{1}: Exception when saving a new default key after {2:.1f} seconds".format(PLUGIN_NAME, PLUGIN_VERSION, time.time()-self.starttime) |                                 print u"{0} v{1}: Exception when saving a new default key after {2:.1f} seconds".format(PLUGIN_NAME, PLUGIN_VERSION, time.time()-self.starttime) | ||||||
|                                 traceback.print_exc() |                                 traceback.print_exc() | ||||||
|  |                             print u"{0} v{1}: Decrypted with new default key after {3:.1f} seconds".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime) | ||||||
|                             # Return the modified PersistentTemporary file to calibre. |                             # Return the modified PersistentTemporary file to calibre. | ||||||
|                             return of.name |                             return of.name | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -3,18 +3,19 @@ | ||||||
| 
 | 
 | ||||||
| from __future__ import with_statement | from __future__ import with_statement | ||||||
| 
 | 
 | ||||||
| # ineptepub.pyw, version 6.1 | # ineptepub.pyw, version 6.3 | ||||||
| # Copyright © 2009-2010 by i♥cabbages | # Copyright © 2009-2010 by i♥cabbages | ||||||
| 
 | 
 | ||||||
| # Released under the terms of the GNU General Public Licence, version 3 | # Released under the terms of the GNU General Public Licence, version 3 | ||||||
| # <http://www.gnu.org/licenses/> | # <http://www.gnu.org/licenses/> | ||||||
| 
 | 
 | ||||||
| # Modified 2010–2013 by some_updates, DiapDealer and Apprentice Alf | # Modified 2010–2013 by some_updates, DiapDealer and Apprentice Alf | ||||||
|  | # Modified 2015–2016 by Apprentice Harper | ||||||
| 
 | 
 | ||||||
| # Windows users: Before running this program, you must first install Python 2.6 | # Windows users: Before running this program, you must first install Python 2.7 | ||||||
| #   from <http://www.python.org/download/> and PyCrypto from | #   from <http://www.python.org/download/> and PyCrypto from | ||||||
| #   <http://www.voidspace.org.uk/python/modules.shtml#pycrypto> (make sure to | #   <http://www.voidspace.org.uk/python/modules.shtml#pycrypto> (make sure to | ||||||
| #   install the version for Python 2.6).  Save this script file as | #   install the version for Python 2.7).  Save this script file as | ||||||
| #   ineptepub.pyw and double-click on it to run it. | #   ineptepub.pyw and double-click on it to run it. | ||||||
| # | # | ||||||
| # Mac OS X users: Save this script file as ineptepub.pyw.  You can run this | # Mac OS X users: Save this script file as ineptepub.pyw.  You can run this | ||||||
|  | @ -38,13 +39,14 @@ from __future__ import with_statement | ||||||
| #   6.0 - moved unicode_argv call inside main for Windows DeDRM compatibility | #   6.0 - moved unicode_argv call inside main for Windows DeDRM compatibility | ||||||
| #   6.1 - Work if TkInter is missing | #   6.1 - Work if TkInter is missing | ||||||
| #   6.2 - Handle UTF-8 file names inside an ePub, fix by Jose Luis | #   6.2 - Handle UTF-8 file names inside an ePub, fix by Jose Luis | ||||||
|  | #   6.3 - Add additional check on DER file sanity | ||||||
| 
 | 
 | ||||||
| """ | """ | ||||||
| Decrypt Adobe Digital Editions encrypted ePub books. | Decrypt Adobe Digital Editions encrypted ePub books. | ||||||
| """ | """ | ||||||
| 
 | 
 | ||||||
| __license__ = 'GPL v3' | __license__ = 'GPL v3' | ||||||
| __version__ = "6.2" | __version__ = "6.3" | ||||||
| 
 | 
 | ||||||
| import sys | import sys | ||||||
| import os | import os | ||||||
|  | @ -172,6 +174,11 @@ def _load_crypto_libcrypto(): | ||||||
|             rsa = self._rsa = d2i_RSAPrivateKey(None, pp, len(der))  |             rsa = self._rsa = d2i_RSAPrivateKey(None, pp, len(der))  | ||||||
|             if rsa is None: |             if rsa is None: | ||||||
|                 raise ADEPTError('Error parsing ADEPT user key DER') |                 raise ADEPTError('Error parsing ADEPT user key DER') | ||||||
|  |             # check if pointer is not NULL | ||||||
|  |             try: | ||||||
|  |                 c = self._rsa.contents | ||||||
|  |             except ValueError:    | ||||||
|  |                 raise ADEPTError('Error parsing ADEPT user key DER') | ||||||
| 
 | 
 | ||||||
|         def decrypt(self, from_): |         def decrypt(self, from_): | ||||||
|             rsa = self._rsa |             rsa = self._rsa | ||||||
|  | @ -313,6 +320,12 @@ def _load_crypto_pycrypto(): | ||||||
|             key = [key.getChild(x).value for x in xrange(1, 4)] |             key = [key.getChild(x).value for x in xrange(1, 4)] | ||||||
|             key = [self.bytesToNumber(v) for v in key] |             key = [self.bytesToNumber(v) for v in key] | ||||||
|             self._rsa = _RSA.construct(key) |             self._rsa = _RSA.construct(key) | ||||||
|  |             # check if pointer is not NULL | ||||||
|  |             try: | ||||||
|  |                 c = self._rsa.contents | ||||||
|  |             except ValueError:    | ||||||
|  |                 raise ADEPTError('Error parsing ADEPT user key DER') | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
|         def bytesToNumber(self, bytes): |         def bytesToNumber(self, bytes): | ||||||
|             total = 0L |             total = 0L | ||||||
|  |  | ||||||
|  | @ -3,18 +3,19 @@ | ||||||
| 
 | 
 | ||||||
| from __future__ import with_statement | from __future__ import with_statement | ||||||
| 
 | 
 | ||||||
| # ineptpdf.pyw, version 7.11 | # ineptpdf.pyw, version 8.0.2 | ||||||
| # Copyright © 2009-2010 by i♥cabbages | # Copyright © 2009-2010 by i♥cabbages | ||||||
| 
 | 
 | ||||||
| # Released under the terms of the GNU General Public Licence, version 3 | # Released under the terms of the GNU General Public Licence, version 3 | ||||||
| # <http://www.gnu.org/licenses/> | # <http://www.gnu.org/licenses/> | ||||||
| 
 | 
 | ||||||
| # Modified 2010–2012 by some_updates, DiapDealer and Apprentice Alf | # Modified 2010–2012 by some_updates, DiapDealer and Apprentice Alf | ||||||
|  | # Modified 2015-2016 by Apprentice Harper | ||||||
| 
 | 
 | ||||||
| # Windows users: Before running this program, you must first install Python 2.6 | # Windows users: Before running this program, you must first install Python 2.7 | ||||||
| #   from <http://www.python.org/download/> and PyCrypto from | #   from <http://www.python.org/download/> and PyCrypto from | ||||||
| #   <http://www.voidspace.org.uk/python/modules.shtml#pycrypto> (make sure to | #   <http://www.voidspace.org.uk/python/modules.shtml#pycrypto> (make sure to | ||||||
| #   install the version for Python 2.6).  Save this script file as | #   install the version for Python 2.7).  Save this script file as | ||||||
| #   ineptpdf.pyw and double-click on it to run it. | #   ineptpdf.pyw and double-click on it to run it. | ||||||
| # | # | ||||||
| # Mac OS X users: Save this script file as ineptpdf.pyw.  You can run this | # Mac OS X users: Save this script file as ineptpdf.pyw.  You can run this | ||||||
|  | @ -53,13 +54,15 @@ from __future__ import with_statement | ||||||
| #   7.14 - moved unicode_argv call inside main for Windows DeDRM compatibility | #   7.14 - moved unicode_argv call inside main for Windows DeDRM compatibility | ||||||
| #   8.0  - Work if TkInter is missing | #   8.0  - Work if TkInter is missing | ||||||
| #   8.0.1 - Broken Metadata fix. | #   8.0.1 - Broken Metadata fix. | ||||||
|  | #   8.0.2 - Add additional check on DER file sanity | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| """ | """ | ||||||
| Decrypts Adobe ADEPT-encrypted PDF files. | Decrypts Adobe ADEPT-encrypted PDF files. | ||||||
| """ | """ | ||||||
| 
 | 
 | ||||||
| __license__ = 'GPL v3' | __license__ = 'GPL v3' | ||||||
| __version__ = "8.0.1" | __version__ = "8.0.2" | ||||||
| 
 | 
 | ||||||
| import sys | import sys | ||||||
| import os | import os | ||||||
|  | @ -198,6 +201,11 @@ def _load_crypto_libcrypto(): | ||||||
|             rsa = self._rsa = d2i_RSAPrivateKey(None, pp, len(der)) |             rsa = self._rsa = d2i_RSAPrivateKey(None, pp, len(der)) | ||||||
|             if rsa is None: |             if rsa is None: | ||||||
|                 raise ADEPTError('Error parsing ADEPT user key DER') |                 raise ADEPTError('Error parsing ADEPT user key DER') | ||||||
|  |             # check if pointer is not NULL | ||||||
|  |             try: | ||||||
|  |                 c = self._rsa.contents | ||||||
|  |             except ValueError:    | ||||||
|  |                 raise ADEPTError('Error parsing ADEPT user key DER') | ||||||
| 
 | 
 | ||||||
|         def decrypt(self, from_): |         def decrypt(self, from_): | ||||||
|             rsa = self._rsa |             rsa = self._rsa | ||||||
|  | @ -383,6 +391,11 @@ def _load_crypto_pycrypto(): | ||||||
|             key = [key.getChild(x).value for x in xrange(1, 4)] |             key = [key.getChild(x).value for x in xrange(1, 4)] | ||||||
|             key = [self.bytesToNumber(v) for v in key] |             key = [self.bytesToNumber(v) for v in key] | ||||||
|             self._rsa = _RSA.construct(key) |             self._rsa = _RSA.construct(key) | ||||||
|  |             # check if pointer is not NULL | ||||||
|  |             try: | ||||||
|  |                 c = self._rsa.contents | ||||||
|  |             except ValueError:    | ||||||
|  |                 raise ADEPTError('Error parsing ADEPT user key DER') | ||||||
| 
 | 
 | ||||||
|         def bytesToNumber(self, bytes): |         def bytesToNumber(self, bytes): | ||||||
|             total = 0L |             total = 0L | ||||||
|  |  | ||||||
|  | @ -26,6 +26,7 @@ def WineGetKeys(scriptpath, extension, wineprefix=""): | ||||||
|     if not os.path.exists(outdirpath): |     if not os.path.exists(outdirpath): | ||||||
|         os.makedirs(outdirpath) |         os.makedirs(outdirpath) | ||||||
| 
 | 
 | ||||||
|  |     wineprefix = os.path.abspath(os.path.expanduser(os.path.expandvars(wineprefix))) | ||||||
|     if wineprefix != "" and os.path.exists(wineprefix): |     if wineprefix != "" and os.path.exists(wineprefix): | ||||||
|          cmdline = u"WINEPREFIX=\"{2}\" wine python.exe \"{0}\" \"{1}\"".format(scriptpath,outdirpath,wineprefix) |          cmdline = u"WINEPREFIX=\"{2}\" wine python.exe \"{0}\" \"{1}\"".format(scriptpath,outdirpath,wineprefix) | ||||||
|     else: |     else: | ||||||
|  | @ -38,8 +39,20 @@ def WineGetKeys(scriptpath, extension, wineprefix=""): | ||||||
|         result = p2.wait("wait") |         result = p2.wait("wait") | ||||||
|     except Exception, e: |     except Exception, e: | ||||||
|         print u"{0} v{1}: Wine subprocess call error: {2}".format(PLUGIN_NAME, PLUGIN_VERSION, e.args[0]) |         print u"{0} v{1}: Wine subprocess call error: {2}".format(PLUGIN_NAME, PLUGIN_VERSION, e.args[0]) | ||||||
|         return [] |         if wineprefix != "" and os.path.exists(wineprefix): | ||||||
|  |             cmdline = u"WINEPREFIX=\"{2}\" wine C:\\Python27\\python.exe \"{0}\" \"{1}\"".format(scriptpath,outdirpath,wineprefix) | ||||||
|  |        else: | ||||||
|  |            cmdline = u"wine C:\\Python27\\python.exe \"{0}\" \"{1}\"".format(scriptpath,outdirpath) | ||||||
|  |        print u"{0} v{1}: Command line: “{2}”".format(PLUGIN_NAME, PLUGIN_VERSION, cmdline) | ||||||
| 
 | 
 | ||||||
|  |        try: | ||||||
|  |            cmdline = cmdline.encode(sys.getfilesystemencoding()) | ||||||
|  |            p2 = Process(cmdline, shell=True, bufsize=1, stdin=None, stdout=sys.stdout, stderr=STDOUT, close_fds=False) | ||||||
|  |            result = p2.wait("wait") | ||||||
|  |        except Exception, e: | ||||||
|  |            print u"{0} v{1}: Wine subprocess call error: {2}".format(PLUGIN_NAME, PLUGIN_VERSION, e.args[0]) | ||||||
|  | 
 | ||||||
|  |     # try finding winekeys anyway, even if above code errored | ||||||
|     winekeys = [] |     winekeys = [] | ||||||
|     # get any files with extension in the output dir |     # get any files with extension in the output dir | ||||||
|     files = [f for f in os.listdir(outdirpath) if f.endswith(extension)] |     files = [f for f in os.listdir(outdirpath) if f.endswith(extension)] | ||||||
|  |  | ||||||
|  | @ -2,7 +2,7 @@ | ||||||
| # -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- | ||||||
| 
 | 
 | ||||||
| # DeDRM.pyw | # DeDRM.pyw | ||||||
| # Copyright 2010-2015 some_updates, Apprentice Alf and Apprentice Harper | # Copyright 2010-2016 some_updates, Apprentice Alf and Apprentice Harper | ||||||
| 
 | 
 | ||||||
| # Revision history: | # Revision history: | ||||||
| #   6.0.0 - Release along with unified plugin | #   6.0.0 - Release along with unified plugin | ||||||
|  | @ -19,8 +19,9 @@ | ||||||
| #   6.3.2 - Version bump to match plugin | #   6.3.2 - Version bump to match plugin | ||||||
| #   6.3.3 - Version bump to match plugin | #   6.3.3 - Version bump to match plugin | ||||||
| #   6.3.4 - Version bump to match plugin | #   6.3.4 - Version bump to match plugin | ||||||
|  | #   6.3.5 - Version bump to match plugin | ||||||
| 
 | 
 | ||||||
| __version__ = '6.3.4' | __version__ = '6.3.5' | ||||||
| 
 | 
 | ||||||
| import sys | import sys | ||||||
| import os, os.path | import os, os.path | ||||||
|  |  | ||||||
|  | @ -46,6 +46,7 @@ __docformat__ = 'restructuredtext en' | ||||||
| #   6.3.2 - Fixed Kindle for Android help file | #   6.3.2 - Fixed Kindle for Android help file | ||||||
| #   6.3.3 - Bug fix for Kindle for PC support | #   6.3.3 - Bug fix for Kindle for PC support | ||||||
| #   6.3.4 - Fixes for Kindle for Android, Linux, and Kobo 3.17 | #   6.3.4 - Fixes for Kindle for Android, Linux, and Kobo 3.17 | ||||||
|  | #   6.3.5 - Fixes for Linux, and Kobo 3.19 and more logging | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| """ | """ | ||||||
|  | @ -53,7 +54,7 @@ Decrypt DRMed ebooks. | ||||||
| """ | """ | ||||||
| 
 | 
 | ||||||
| PLUGIN_NAME = u"DeDRM" | PLUGIN_NAME = u"DeDRM" | ||||||
| PLUGIN_VERSION_TUPLE = (6, 3, 4) | PLUGIN_VERSION_TUPLE = (6, 3, 5) | ||||||
| PLUGIN_VERSION = u".".join([unicode(str(x)) for x in PLUGIN_VERSION_TUPLE]) | PLUGIN_VERSION = u".".join([unicode(str(x)) for x in PLUGIN_VERSION_TUPLE]) | ||||||
| # Include an html helpfile in the plugin's zipfile with the following name. | # Include an html helpfile in the plugin's zipfile with the following name. | ||||||
| RESOURCE_NAME = PLUGIN_NAME + '_Help.htm' | RESOURCE_NAME = PLUGIN_NAME + '_Help.htm' | ||||||
|  | @ -96,7 +97,7 @@ class DeDRM(FileTypePlugin): | ||||||
|     supported_platforms     = ['linux', 'osx', 'windows'] |     supported_platforms     = ['linux', 'osx', 'windows'] | ||||||
|     author                  = u"Apprentice Alf, Aprentice Harper, The Dark Reverser and i♥cabbages" |     author                  = u"Apprentice Alf, Aprentice Harper, The Dark Reverser and i♥cabbages" | ||||||
|     version                 = PLUGIN_VERSION_TUPLE |     version                 = PLUGIN_VERSION_TUPLE | ||||||
|     minimum_calibre_version = (0, 7, 55)  # Compiled python libraries cannot be imported in earlier versions. |     minimum_calibre_version = (1, 0, 0)  # Compiled python libraries cannot be imported in earlier versions. | ||||||
|     file_types              = set(['epub','pdf','pdb','prc','mobi','pobi','azw','azw1','azw3','azw4','tpz']) |     file_types              = set(['epub','pdf','pdb','prc','mobi','pobi','azw','azw1','azw3','azw4','tpz']) | ||||||
|     on_import               = True |     on_import               = True | ||||||
|     priority                = 600 |     priority                = 600 | ||||||
|  | @ -296,11 +297,15 @@ class DeDRM(FileTypePlugin): | ||||||
|                     traceback.print_exc() |                     traceback.print_exc() | ||||||
|                     result = 1 |                     result = 1 | ||||||
| 
 | 
 | ||||||
|  |                 try: | ||||||
|                     of.close() |                     of.close() | ||||||
|  |                 except: | ||||||
|  |                     print u"{0} v{1}: Exception closing temporary file after {2:.1f} seconds. Ignored.".format(PLUGIN_NAME, PLUGIN_VERSION, time.time()-self.starttime) | ||||||
| 
 | 
 | ||||||
|                 if  result == 0: |                 if  result == 0: | ||||||
|                     # Decryption was successful. |                     # Decryption was successful. | ||||||
|                     # Return the modified PersistentTemporary file to calibre. |                     # Return the modified PersistentTemporary file to calibre. | ||||||
|  |                     print u"{0} v{1}: Decrypted with key {2:s} after {3:.1f} seconds".format(PLUGIN_NAME, PLUGIN_VERSION,keyname,time.time()-self.starttime) | ||||||
|                     return of.name |                     return of.name | ||||||
| 
 | 
 | ||||||
|                 print u"{0} v{1}: Failed to decrypt with key {2:s} after {3:.1f} seconds".format(PLUGIN_NAME, PLUGIN_VERSION,keyname,time.time()-self.starttime) |                 print u"{0} v{1}: Failed to decrypt with key {2:s} after {3:.1f} seconds".format(PLUGIN_NAME, PLUGIN_VERSION,keyname,time.time()-self.starttime) | ||||||
|  | @ -360,6 +365,7 @@ class DeDRM(FileTypePlugin): | ||||||
|                             except: |                             except: | ||||||
|                                 print u"{0} v{1}: Exception when saving a new default key after {2:.1f} seconds".format(PLUGIN_NAME, PLUGIN_VERSION, time.time()-self.starttime) |                                 print u"{0} v{1}: Exception when saving a new default key after {2:.1f} seconds".format(PLUGIN_NAME, PLUGIN_VERSION, time.time()-self.starttime) | ||||||
|                                 traceback.print_exc() |                                 traceback.print_exc() | ||||||
|  |                             print u"{0} v{1}: Decrypted with new default key after {3:.1f} seconds".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime) | ||||||
|                             # Return the modified PersistentTemporary file to calibre. |                             # Return the modified PersistentTemporary file to calibre. | ||||||
|                             return of.name |                             return of.name | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -3,18 +3,19 @@ | ||||||
| 
 | 
 | ||||||
| from __future__ import with_statement | from __future__ import with_statement | ||||||
| 
 | 
 | ||||||
| # ineptepub.pyw, version 6.1 | # ineptepub.pyw, version 6.3 | ||||||
| # Copyright © 2009-2010 by i♥cabbages | # Copyright © 2009-2010 by i♥cabbages | ||||||
| 
 | 
 | ||||||
| # Released under the terms of the GNU General Public Licence, version 3 | # Released under the terms of the GNU General Public Licence, version 3 | ||||||
| # <http://www.gnu.org/licenses/> | # <http://www.gnu.org/licenses/> | ||||||
| 
 | 
 | ||||||
| # Modified 2010–2013 by some_updates, DiapDealer and Apprentice Alf | # Modified 2010–2013 by some_updates, DiapDealer and Apprentice Alf | ||||||
|  | # Modified 2015–2016 by Apprentice Harper | ||||||
| 
 | 
 | ||||||
| # Windows users: Before running this program, you must first install Python 2.6 | # Windows users: Before running this program, you must first install Python 2.7 | ||||||
| #   from <http://www.python.org/download/> and PyCrypto from | #   from <http://www.python.org/download/> and PyCrypto from | ||||||
| #   <http://www.voidspace.org.uk/python/modules.shtml#pycrypto> (make sure to | #   <http://www.voidspace.org.uk/python/modules.shtml#pycrypto> (make sure to | ||||||
| #   install the version for Python 2.6).  Save this script file as | #   install the version for Python 2.7).  Save this script file as | ||||||
| #   ineptepub.pyw and double-click on it to run it. | #   ineptepub.pyw and double-click on it to run it. | ||||||
| # | # | ||||||
| # Mac OS X users: Save this script file as ineptepub.pyw.  You can run this | # Mac OS X users: Save this script file as ineptepub.pyw.  You can run this | ||||||
|  | @ -38,13 +39,14 @@ from __future__ import with_statement | ||||||
| #   6.0 - moved unicode_argv call inside main for Windows DeDRM compatibility | #   6.0 - moved unicode_argv call inside main for Windows DeDRM compatibility | ||||||
| #   6.1 - Work if TkInter is missing | #   6.1 - Work if TkInter is missing | ||||||
| #   6.2 - Handle UTF-8 file names inside an ePub, fix by Jose Luis | #   6.2 - Handle UTF-8 file names inside an ePub, fix by Jose Luis | ||||||
|  | #   6.3 - Add additional check on DER file sanity | ||||||
| 
 | 
 | ||||||
| """ | """ | ||||||
| Decrypt Adobe Digital Editions encrypted ePub books. | Decrypt Adobe Digital Editions encrypted ePub books. | ||||||
| """ | """ | ||||||
| 
 | 
 | ||||||
| __license__ = 'GPL v3' | __license__ = 'GPL v3' | ||||||
| __version__ = "6.2" | __version__ = "6.3" | ||||||
| 
 | 
 | ||||||
| import sys | import sys | ||||||
| import os | import os | ||||||
|  | @ -172,6 +174,11 @@ def _load_crypto_libcrypto(): | ||||||
|             rsa = self._rsa = d2i_RSAPrivateKey(None, pp, len(der))  |             rsa = self._rsa = d2i_RSAPrivateKey(None, pp, len(der))  | ||||||
|             if rsa is None: |             if rsa is None: | ||||||
|                 raise ADEPTError('Error parsing ADEPT user key DER') |                 raise ADEPTError('Error parsing ADEPT user key DER') | ||||||
|  |             # check if pointer is not NULL | ||||||
|  |             try: | ||||||
|  |                 c = self._rsa.contents | ||||||
|  |             except ValueError:    | ||||||
|  |                 raise ADEPTError('Error parsing ADEPT user key DER') | ||||||
| 
 | 
 | ||||||
|         def decrypt(self, from_): |         def decrypt(self, from_): | ||||||
|             rsa = self._rsa |             rsa = self._rsa | ||||||
|  | @ -313,6 +320,12 @@ def _load_crypto_pycrypto(): | ||||||
|             key = [key.getChild(x).value for x in xrange(1, 4)] |             key = [key.getChild(x).value for x in xrange(1, 4)] | ||||||
|             key = [self.bytesToNumber(v) for v in key] |             key = [self.bytesToNumber(v) for v in key] | ||||||
|             self._rsa = _RSA.construct(key) |             self._rsa = _RSA.construct(key) | ||||||
|  |             # check if pointer is not NULL | ||||||
|  |             try: | ||||||
|  |                 c = self._rsa.contents | ||||||
|  |             except ValueError:    | ||||||
|  |                 raise ADEPTError('Error parsing ADEPT user key DER') | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
|         def bytesToNumber(self, bytes): |         def bytesToNumber(self, bytes): | ||||||
|             total = 0L |             total = 0L | ||||||
|  |  | ||||||
|  | @ -3,18 +3,19 @@ | ||||||
| 
 | 
 | ||||||
| from __future__ import with_statement | from __future__ import with_statement | ||||||
| 
 | 
 | ||||||
| # ineptpdf.pyw, version 7.11 | # ineptpdf.pyw, version 8.0.2 | ||||||
| # Copyright © 2009-2010 by i♥cabbages | # Copyright © 2009-2010 by i♥cabbages | ||||||
| 
 | 
 | ||||||
| # Released under the terms of the GNU General Public Licence, version 3 | # Released under the terms of the GNU General Public Licence, version 3 | ||||||
| # <http://www.gnu.org/licenses/> | # <http://www.gnu.org/licenses/> | ||||||
| 
 | 
 | ||||||
| # Modified 2010–2012 by some_updates, DiapDealer and Apprentice Alf | # Modified 2010–2012 by some_updates, DiapDealer and Apprentice Alf | ||||||
|  | # Modified 2015-2016 by Apprentice Harper | ||||||
| 
 | 
 | ||||||
| # Windows users: Before running this program, you must first install Python 2.6 | # Windows users: Before running this program, you must first install Python 2.7 | ||||||
| #   from <http://www.python.org/download/> and PyCrypto from | #   from <http://www.python.org/download/> and PyCrypto from | ||||||
| #   <http://www.voidspace.org.uk/python/modules.shtml#pycrypto> (make sure to | #   <http://www.voidspace.org.uk/python/modules.shtml#pycrypto> (make sure to | ||||||
| #   install the version for Python 2.6).  Save this script file as | #   install the version for Python 2.7).  Save this script file as | ||||||
| #   ineptpdf.pyw and double-click on it to run it. | #   ineptpdf.pyw and double-click on it to run it. | ||||||
| # | # | ||||||
| # Mac OS X users: Save this script file as ineptpdf.pyw.  You can run this | # Mac OS X users: Save this script file as ineptpdf.pyw.  You can run this | ||||||
|  | @ -53,13 +54,15 @@ from __future__ import with_statement | ||||||
| #   7.14 - moved unicode_argv call inside main for Windows DeDRM compatibility | #   7.14 - moved unicode_argv call inside main for Windows DeDRM compatibility | ||||||
| #   8.0  - Work if TkInter is missing | #   8.0  - Work if TkInter is missing | ||||||
| #   8.0.1 - Broken Metadata fix. | #   8.0.1 - Broken Metadata fix. | ||||||
|  | #   8.0.2 - Add additional check on DER file sanity | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| """ | """ | ||||||
| Decrypts Adobe ADEPT-encrypted PDF files. | Decrypts Adobe ADEPT-encrypted PDF files. | ||||||
| """ | """ | ||||||
| 
 | 
 | ||||||
| __license__ = 'GPL v3' | __license__ = 'GPL v3' | ||||||
| __version__ = "8.0.1" | __version__ = "8.0.2" | ||||||
| 
 | 
 | ||||||
| import sys | import sys | ||||||
| import os | import os | ||||||
|  | @ -198,6 +201,11 @@ def _load_crypto_libcrypto(): | ||||||
|             rsa = self._rsa = d2i_RSAPrivateKey(None, pp, len(der)) |             rsa = self._rsa = d2i_RSAPrivateKey(None, pp, len(der)) | ||||||
|             if rsa is None: |             if rsa is None: | ||||||
|                 raise ADEPTError('Error parsing ADEPT user key DER') |                 raise ADEPTError('Error parsing ADEPT user key DER') | ||||||
|  |             # check if pointer is not NULL | ||||||
|  |             try: | ||||||
|  |                 c = self._rsa.contents | ||||||
|  |             except ValueError:    | ||||||
|  |                 raise ADEPTError('Error parsing ADEPT user key DER') | ||||||
| 
 | 
 | ||||||
|         def decrypt(self, from_): |         def decrypt(self, from_): | ||||||
|             rsa = self._rsa |             rsa = self._rsa | ||||||
|  | @ -383,6 +391,11 @@ def _load_crypto_pycrypto(): | ||||||
|             key = [key.getChild(x).value for x in xrange(1, 4)] |             key = [key.getChild(x).value for x in xrange(1, 4)] | ||||||
|             key = [self.bytesToNumber(v) for v in key] |             key = [self.bytesToNumber(v) for v in key] | ||||||
|             self._rsa = _RSA.construct(key) |             self._rsa = _RSA.construct(key) | ||||||
|  |             # check if pointer is not NULL | ||||||
|  |             try: | ||||||
|  |                 c = self._rsa.contents | ||||||
|  |             except ValueError:    | ||||||
|  |                 raise ADEPTError('Error parsing ADEPT user key DER') | ||||||
| 
 | 
 | ||||||
|         def bytesToNumber(self, bytes): |         def bytesToNumber(self, bytes): | ||||||
|             total = 0L |             total = 0L | ||||||
|  |  | ||||||
|  | @ -26,6 +26,7 @@ def WineGetKeys(scriptpath, extension, wineprefix=""): | ||||||
|     if not os.path.exists(outdirpath): |     if not os.path.exists(outdirpath): | ||||||
|         os.makedirs(outdirpath) |         os.makedirs(outdirpath) | ||||||
| 
 | 
 | ||||||
|  |     wineprefix = os.path.abspath(os.path.expanduser(os.path.expandvars(wineprefix))) | ||||||
|     if wineprefix != "" and os.path.exists(wineprefix): |     if wineprefix != "" and os.path.exists(wineprefix): | ||||||
|          cmdline = u"WINEPREFIX=\"{2}\" wine python.exe \"{0}\" \"{1}\"".format(scriptpath,outdirpath,wineprefix) |          cmdline = u"WINEPREFIX=\"{2}\" wine python.exe \"{0}\" \"{1}\"".format(scriptpath,outdirpath,wineprefix) | ||||||
|     else: |     else: | ||||||
|  | @ -38,8 +39,20 @@ def WineGetKeys(scriptpath, extension, wineprefix=""): | ||||||
|         result = p2.wait("wait") |         result = p2.wait("wait") | ||||||
|     except Exception, e: |     except Exception, e: | ||||||
|         print u"{0} v{1}: Wine subprocess call error: {2}".format(PLUGIN_NAME, PLUGIN_VERSION, e.args[0]) |         print u"{0} v{1}: Wine subprocess call error: {2}".format(PLUGIN_NAME, PLUGIN_VERSION, e.args[0]) | ||||||
|         return [] |         if wineprefix != "" and os.path.exists(wineprefix): | ||||||
|  |             cmdline = u"WINEPREFIX=\"{2}\" wine C:\\Python27\\python.exe \"{0}\" \"{1}\"".format(scriptpath,outdirpath,wineprefix) | ||||||
|  |        else: | ||||||
|  |            cmdline = u"wine C:\\Python27\\python.exe \"{0}\" \"{1}\"".format(scriptpath,outdirpath) | ||||||
|  |        print u"{0} v{1}: Command line: “{2}”".format(PLUGIN_NAME, PLUGIN_VERSION, cmdline) | ||||||
| 
 | 
 | ||||||
|  |        try: | ||||||
|  |            cmdline = cmdline.encode(sys.getfilesystemencoding()) | ||||||
|  |            p2 = Process(cmdline, shell=True, bufsize=1, stdin=None, stdout=sys.stdout, stderr=STDOUT, close_fds=False) | ||||||
|  |            result = p2.wait("wait") | ||||||
|  |        except Exception, e: | ||||||
|  |            print u"{0} v{1}: Wine subprocess call error: {2}".format(PLUGIN_NAME, PLUGIN_VERSION, e.args[0]) | ||||||
|  | 
 | ||||||
|  |     # try finding winekeys anyway, even if above code errored | ||||||
|     winekeys = [] |     winekeys = [] | ||||||
|     # get any files with extension in the output dir |     # get any files with extension in the output dir | ||||||
|     files = [f for f in os.listdir(outdirpath) if f.endswith(extension)] |     files = [f for f in os.listdir(outdirpath) if f.endswith(extension)] | ||||||
|  |  | ||||||
										
											Binary file not shown.
										
									
								
							|  | @ -46,6 +46,7 @@ __docformat__ = 'restructuredtext en' | ||||||
| #   6.3.2 - Fixed Kindle for Android help file | #   6.3.2 - Fixed Kindle for Android help file | ||||||
| #   6.3.3 - Bug fix for Kindle for PC support | #   6.3.3 - Bug fix for Kindle for PC support | ||||||
| #   6.3.4 - Fixes for Kindle for Android, Linux, and Kobo 3.17 | #   6.3.4 - Fixes for Kindle for Android, Linux, and Kobo 3.17 | ||||||
|  | #   6.3.5 - Fixes for Linux, and Kobo 3.19 and more logging | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| """ | """ | ||||||
|  | @ -53,7 +54,7 @@ Decrypt DRMed ebooks. | ||||||
| """ | """ | ||||||
| 
 | 
 | ||||||
| PLUGIN_NAME = u"DeDRM" | PLUGIN_NAME = u"DeDRM" | ||||||
| PLUGIN_VERSION_TUPLE = (6, 3, 4) | PLUGIN_VERSION_TUPLE = (6, 3, 5) | ||||||
| PLUGIN_VERSION = u".".join([unicode(str(x)) for x in PLUGIN_VERSION_TUPLE]) | PLUGIN_VERSION = u".".join([unicode(str(x)) for x in PLUGIN_VERSION_TUPLE]) | ||||||
| # Include an html helpfile in the plugin's zipfile with the following name. | # Include an html helpfile in the plugin's zipfile with the following name. | ||||||
| RESOURCE_NAME = PLUGIN_NAME + '_Help.htm' | RESOURCE_NAME = PLUGIN_NAME + '_Help.htm' | ||||||
|  | @ -96,7 +97,7 @@ class DeDRM(FileTypePlugin): | ||||||
|     supported_platforms     = ['linux', 'osx', 'windows'] |     supported_platforms     = ['linux', 'osx', 'windows'] | ||||||
|     author                  = u"Apprentice Alf, Aprentice Harper, The Dark Reverser and i♥cabbages" |     author                  = u"Apprentice Alf, Aprentice Harper, The Dark Reverser and i♥cabbages" | ||||||
|     version                 = PLUGIN_VERSION_TUPLE |     version                 = PLUGIN_VERSION_TUPLE | ||||||
|     minimum_calibre_version = (0, 7, 55)  # Compiled python libraries cannot be imported in earlier versions. |     minimum_calibre_version = (1, 0, 0)  # Compiled python libraries cannot be imported in earlier versions. | ||||||
|     file_types              = set(['epub','pdf','pdb','prc','mobi','pobi','azw','azw1','azw3','azw4','tpz']) |     file_types              = set(['epub','pdf','pdb','prc','mobi','pobi','azw','azw1','azw3','azw4','tpz']) | ||||||
|     on_import               = True |     on_import               = True | ||||||
|     priority                = 600 |     priority                = 600 | ||||||
|  | @ -296,11 +297,15 @@ class DeDRM(FileTypePlugin): | ||||||
|                     traceback.print_exc() |                     traceback.print_exc() | ||||||
|                     result = 1 |                     result = 1 | ||||||
| 
 | 
 | ||||||
|  |                 try: | ||||||
|                     of.close() |                     of.close() | ||||||
|  |                 except: | ||||||
|  |                     print u"{0} v{1}: Exception closing temporary file after {2:.1f} seconds. Ignored.".format(PLUGIN_NAME, PLUGIN_VERSION, time.time()-self.starttime) | ||||||
| 
 | 
 | ||||||
|                 if  result == 0: |                 if  result == 0: | ||||||
|                     # Decryption was successful. |                     # Decryption was successful. | ||||||
|                     # Return the modified PersistentTemporary file to calibre. |                     # Return the modified PersistentTemporary file to calibre. | ||||||
|  |                     print u"{0} v{1}: Decrypted with key {2:s} after {3:.1f} seconds".format(PLUGIN_NAME, PLUGIN_VERSION,keyname,time.time()-self.starttime) | ||||||
|                     return of.name |                     return of.name | ||||||
| 
 | 
 | ||||||
|                 print u"{0} v{1}: Failed to decrypt with key {2:s} after {3:.1f} seconds".format(PLUGIN_NAME, PLUGIN_VERSION,keyname,time.time()-self.starttime) |                 print u"{0} v{1}: Failed to decrypt with key {2:s} after {3:.1f} seconds".format(PLUGIN_NAME, PLUGIN_VERSION,keyname,time.time()-self.starttime) | ||||||
|  | @ -360,6 +365,7 @@ class DeDRM(FileTypePlugin): | ||||||
|                             except: |                             except: | ||||||
|                                 print u"{0} v{1}: Exception when saving a new default key after {2:.1f} seconds".format(PLUGIN_NAME, PLUGIN_VERSION, time.time()-self.starttime) |                                 print u"{0} v{1}: Exception when saving a new default key after {2:.1f} seconds".format(PLUGIN_NAME, PLUGIN_VERSION, time.time()-self.starttime) | ||||||
|                                 traceback.print_exc() |                                 traceback.print_exc() | ||||||
|  |                             print u"{0} v{1}: Decrypted with new default key after {3:.1f} seconds".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime) | ||||||
|                             # Return the modified PersistentTemporary file to calibre. |                             # Return the modified PersistentTemporary file to calibre. | ||||||
|                             return of.name |                             return of.name | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -3,18 +3,19 @@ | ||||||
| 
 | 
 | ||||||
| from __future__ import with_statement | from __future__ import with_statement | ||||||
| 
 | 
 | ||||||
| # ineptepub.pyw, version 6.1 | # ineptepub.pyw, version 6.3 | ||||||
| # Copyright © 2009-2010 by i♥cabbages | # Copyright © 2009-2010 by i♥cabbages | ||||||
| 
 | 
 | ||||||
| # Released under the terms of the GNU General Public Licence, version 3 | # Released under the terms of the GNU General Public Licence, version 3 | ||||||
| # <http://www.gnu.org/licenses/> | # <http://www.gnu.org/licenses/> | ||||||
| 
 | 
 | ||||||
| # Modified 2010–2013 by some_updates, DiapDealer and Apprentice Alf | # Modified 2010–2013 by some_updates, DiapDealer and Apprentice Alf | ||||||
|  | # Modified 2015–2016 by Apprentice Harper | ||||||
| 
 | 
 | ||||||
| # Windows users: Before running this program, you must first install Python 2.6 | # Windows users: Before running this program, you must first install Python 2.7 | ||||||
| #   from <http://www.python.org/download/> and PyCrypto from | #   from <http://www.python.org/download/> and PyCrypto from | ||||||
| #   <http://www.voidspace.org.uk/python/modules.shtml#pycrypto> (make sure to | #   <http://www.voidspace.org.uk/python/modules.shtml#pycrypto> (make sure to | ||||||
| #   install the version for Python 2.6).  Save this script file as | #   install the version for Python 2.7).  Save this script file as | ||||||
| #   ineptepub.pyw and double-click on it to run it. | #   ineptepub.pyw and double-click on it to run it. | ||||||
| # | # | ||||||
| # Mac OS X users: Save this script file as ineptepub.pyw.  You can run this | # Mac OS X users: Save this script file as ineptepub.pyw.  You can run this | ||||||
|  | @ -38,13 +39,14 @@ from __future__ import with_statement | ||||||
| #   6.0 - moved unicode_argv call inside main for Windows DeDRM compatibility | #   6.0 - moved unicode_argv call inside main for Windows DeDRM compatibility | ||||||
| #   6.1 - Work if TkInter is missing | #   6.1 - Work if TkInter is missing | ||||||
| #   6.2 - Handle UTF-8 file names inside an ePub, fix by Jose Luis | #   6.2 - Handle UTF-8 file names inside an ePub, fix by Jose Luis | ||||||
|  | #   6.3 - Add additional check on DER file sanity | ||||||
| 
 | 
 | ||||||
| """ | """ | ||||||
| Decrypt Adobe Digital Editions encrypted ePub books. | Decrypt Adobe Digital Editions encrypted ePub books. | ||||||
| """ | """ | ||||||
| 
 | 
 | ||||||
| __license__ = 'GPL v3' | __license__ = 'GPL v3' | ||||||
| __version__ = "6.2" | __version__ = "6.3" | ||||||
| 
 | 
 | ||||||
| import sys | import sys | ||||||
| import os | import os | ||||||
|  | @ -172,6 +174,11 @@ def _load_crypto_libcrypto(): | ||||||
|             rsa = self._rsa = d2i_RSAPrivateKey(None, pp, len(der))  |             rsa = self._rsa = d2i_RSAPrivateKey(None, pp, len(der))  | ||||||
|             if rsa is None: |             if rsa is None: | ||||||
|                 raise ADEPTError('Error parsing ADEPT user key DER') |                 raise ADEPTError('Error parsing ADEPT user key DER') | ||||||
|  |             # check if pointer is not NULL | ||||||
|  |             try: | ||||||
|  |                 c = self._rsa.contents | ||||||
|  |             except ValueError:    | ||||||
|  |                 raise ADEPTError('Error parsing ADEPT user key DER') | ||||||
| 
 | 
 | ||||||
|         def decrypt(self, from_): |         def decrypt(self, from_): | ||||||
|             rsa = self._rsa |             rsa = self._rsa | ||||||
|  | @ -313,6 +320,12 @@ def _load_crypto_pycrypto(): | ||||||
|             key = [key.getChild(x).value for x in xrange(1, 4)] |             key = [key.getChild(x).value for x in xrange(1, 4)] | ||||||
|             key = [self.bytesToNumber(v) for v in key] |             key = [self.bytesToNumber(v) for v in key] | ||||||
|             self._rsa = _RSA.construct(key) |             self._rsa = _RSA.construct(key) | ||||||
|  |             # check if pointer is not NULL | ||||||
|  |             try: | ||||||
|  |                 c = self._rsa.contents | ||||||
|  |             except ValueError:    | ||||||
|  |                 raise ADEPTError('Error parsing ADEPT user key DER') | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
|         def bytesToNumber(self, bytes): |         def bytesToNumber(self, bytes): | ||||||
|             total = 0L |             total = 0L | ||||||
|  |  | ||||||
|  | @ -3,18 +3,19 @@ | ||||||
| 
 | 
 | ||||||
| from __future__ import with_statement | from __future__ import with_statement | ||||||
| 
 | 
 | ||||||
| # ineptpdf.pyw, version 7.11 | # ineptpdf.pyw, version 8.0.2 | ||||||
| # Copyright © 2009-2010 by i♥cabbages | # Copyright © 2009-2010 by i♥cabbages | ||||||
| 
 | 
 | ||||||
| # Released under the terms of the GNU General Public Licence, version 3 | # Released under the terms of the GNU General Public Licence, version 3 | ||||||
| # <http://www.gnu.org/licenses/> | # <http://www.gnu.org/licenses/> | ||||||
| 
 | 
 | ||||||
| # Modified 2010–2012 by some_updates, DiapDealer and Apprentice Alf | # Modified 2010–2012 by some_updates, DiapDealer and Apprentice Alf | ||||||
|  | # Modified 2015-2016 by Apprentice Harper | ||||||
| 
 | 
 | ||||||
| # Windows users: Before running this program, you must first install Python 2.6 | # Windows users: Before running this program, you must first install Python 2.7 | ||||||
| #   from <http://www.python.org/download/> and PyCrypto from | #   from <http://www.python.org/download/> and PyCrypto from | ||||||
| #   <http://www.voidspace.org.uk/python/modules.shtml#pycrypto> (make sure to | #   <http://www.voidspace.org.uk/python/modules.shtml#pycrypto> (make sure to | ||||||
| #   install the version for Python 2.6).  Save this script file as | #   install the version for Python 2.7).  Save this script file as | ||||||
| #   ineptpdf.pyw and double-click on it to run it. | #   ineptpdf.pyw and double-click on it to run it. | ||||||
| # | # | ||||||
| # Mac OS X users: Save this script file as ineptpdf.pyw.  You can run this | # Mac OS X users: Save this script file as ineptpdf.pyw.  You can run this | ||||||
|  | @ -53,13 +54,15 @@ from __future__ import with_statement | ||||||
| #   7.14 - moved unicode_argv call inside main for Windows DeDRM compatibility | #   7.14 - moved unicode_argv call inside main for Windows DeDRM compatibility | ||||||
| #   8.0  - Work if TkInter is missing | #   8.0  - Work if TkInter is missing | ||||||
| #   8.0.1 - Broken Metadata fix. | #   8.0.1 - Broken Metadata fix. | ||||||
|  | #   8.0.2 - Add additional check on DER file sanity | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| """ | """ | ||||||
| Decrypts Adobe ADEPT-encrypted PDF files. | Decrypts Adobe ADEPT-encrypted PDF files. | ||||||
| """ | """ | ||||||
| 
 | 
 | ||||||
| __license__ = 'GPL v3' | __license__ = 'GPL v3' | ||||||
| __version__ = "8.0.1" | __version__ = "8.0.2" | ||||||
| 
 | 
 | ||||||
| import sys | import sys | ||||||
| import os | import os | ||||||
|  | @ -198,6 +201,11 @@ def _load_crypto_libcrypto(): | ||||||
|             rsa = self._rsa = d2i_RSAPrivateKey(None, pp, len(der)) |             rsa = self._rsa = d2i_RSAPrivateKey(None, pp, len(der)) | ||||||
|             if rsa is None: |             if rsa is None: | ||||||
|                 raise ADEPTError('Error parsing ADEPT user key DER') |                 raise ADEPTError('Error parsing ADEPT user key DER') | ||||||
|  |             # check if pointer is not NULL | ||||||
|  |             try: | ||||||
|  |                 c = self._rsa.contents | ||||||
|  |             except ValueError:    | ||||||
|  |                 raise ADEPTError('Error parsing ADEPT user key DER') | ||||||
| 
 | 
 | ||||||
|         def decrypt(self, from_): |         def decrypt(self, from_): | ||||||
|             rsa = self._rsa |             rsa = self._rsa | ||||||
|  | @ -383,6 +391,11 @@ def _load_crypto_pycrypto(): | ||||||
|             key = [key.getChild(x).value for x in xrange(1, 4)] |             key = [key.getChild(x).value for x in xrange(1, 4)] | ||||||
|             key = [self.bytesToNumber(v) for v in key] |             key = [self.bytesToNumber(v) for v in key] | ||||||
|             self._rsa = _RSA.construct(key) |             self._rsa = _RSA.construct(key) | ||||||
|  |             # check if pointer is not NULL | ||||||
|  |             try: | ||||||
|  |                 c = self._rsa.contents | ||||||
|  |             except ValueError:    | ||||||
|  |                 raise ADEPTError('Error parsing ADEPT user key DER') | ||||||
| 
 | 
 | ||||||
|         def bytesToNumber(self, bytes): |         def bytesToNumber(self, bytes): | ||||||
|             total = 0L |             total = 0L | ||||||
|  |  | ||||||
|  | @ -39,8 +39,20 @@ def WineGetKeys(scriptpath, extension, wineprefix=""): | ||||||
|         result = p2.wait("wait") |         result = p2.wait("wait") | ||||||
|     except Exception, e: |     except Exception, e: | ||||||
|         print u"{0} v{1}: Wine subprocess call error: {2}".format(PLUGIN_NAME, PLUGIN_VERSION, e.args[0]) |         print u"{0} v{1}: Wine subprocess call error: {2}".format(PLUGIN_NAME, PLUGIN_VERSION, e.args[0]) | ||||||
|         return [] |         if wineprefix != "" and os.path.exists(wineprefix): | ||||||
|  |             cmdline = u"WINEPREFIX=\"{2}\" wine C:\\Python27\\python.exe \"{0}\" \"{1}\"".format(scriptpath,outdirpath,wineprefix) | ||||||
|  |        else: | ||||||
|  |            cmdline = u"wine C:\\Python27\\python.exe \"{0}\" \"{1}\"".format(scriptpath,outdirpath) | ||||||
|  |        print u"{0} v{1}: Command line: “{2}”".format(PLUGIN_NAME, PLUGIN_VERSION, cmdline) | ||||||
| 
 | 
 | ||||||
|  |        try: | ||||||
|  |            cmdline = cmdline.encode(sys.getfilesystemencoding()) | ||||||
|  |            p2 = Process(cmdline, shell=True, bufsize=1, stdin=None, stdout=sys.stdout, stderr=STDOUT, close_fds=False) | ||||||
|  |            result = p2.wait("wait") | ||||||
|  |        except Exception, e: | ||||||
|  |            print u"{0} v{1}: Wine subprocess call error: {2}".format(PLUGIN_NAME, PLUGIN_VERSION, e.args[0]) | ||||||
|  | 
 | ||||||
|  |     # try finding winekeys anyway, even if above code errored | ||||||
|     winekeys = [] |     winekeys = [] | ||||||
|     # get any files with extension in the output dir |     # get any files with extension in the output dir | ||||||
|     files = [f for f in os.listdir(outdirpath) if f.endswith(extension)] |     files = [f for f in os.listdir(outdirpath) if f.endswith(extension)] | ||||||
|  |  | ||||||
|  | @ -12,7 +12,7 @@ The is archive includes tools to remove DRM from: | ||||||
|  - Adobe Digital Editions PDFs |  - Adobe Digital Editions PDFs | ||||||
|  - Mobipocket ebooks |  - Mobipocket ebooks | ||||||
|  - eReader PDB books |  - eReader PDB books | ||||||
|  - Scuolabooks (Windows only solution by Hex) |  - Scuolabooks (Link to solution by Hex) | ||||||
| 
 | 
 | ||||||
| These tools do NOT work with Apple's iBooks FairPlay DRM (see end of this file.) | These tools do NOT work with Apple's iBooks FairPlay DRM (see end of this file.) | ||||||
| 
 | 
 | ||||||
|  | @ -78,7 +78,7 @@ Rocket_ebooks | ||||||
| Information about the now-obsolete Rocket ebook format and DRM, along with source for a tool to remove the DRM. | Information about the now-obsolete Rocket ebook format and DRM, along with source for a tool to remove the DRM. | ||||||
| 
 | 
 | ||||||
| Scuolabook_DRM | Scuolabook_DRM | ||||||
| A windows-only application (including source code) for removing DRM from ScuolaBooks PDFs, created by "Hex" and included with permission. | A link to the tool for removing DRM from ScuolaBooks PDFs, created by "Hex". | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| Windows and Python | Windows and Python | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 apprenticeharper
						apprenticeharper