def GetDecryptedBook(infile, kDatabases, serials, pids, starttime=time.time()): # handle the obvious cases at the beginning if not os.path.isfile(infile): raise DrmException(u"Input file does not exist.") mobi = True magic3 = open(infile, 'rb').read(3) if magic3 == 'TPZ': mobi = False if mobi: mb = mobidedrm.MobiBook(infile) else: mb = topazextract.TopazBook(infile) bookname = unescape(mb.getBookTitle()) print u"Decrypting {1} ebook: {0}".format(bookname, mb.getBookType()) # copy list of pids totalpids = list(pids) # extend PID list with book-specific PIDs md1, md2 = mb.getPIDMetaInfo() totalpids.extend(kgenpids.getPidList(md1, md2, serials, kDatabases)) print u"Found {1:d} keys to try after {0:.1f} seconds".format( time.time() - starttime, len(totalpids)) try: mb.processBook(totalpids) except: mb.cleanup raise print u"Decryption succeeded after {0:.1f} seconds".format(time.time() - starttime) return mb
def GetDecryptedBook(infile, kDatabases, androidFiles, serials, pids, starttime=time.time()): # handle the obvious cases at the beginning if not os.path.isfile(infile): raise DrmException(u"Input file does not exist.") mobi = True magic8 = open(infile, 'rb').read(8) if magic8 == '\xeaDRMION\xee': raise DrmException( u"The .kfx DRMION file cannot be decrypted by itself. A .kfx-zip archive containing a DRM voucher is required." ) magic3 = magic8[:3] if magic3 == 'TPZ': mobi = False if magic8[:4] == 'PK\x03\x04': mb = kfxdedrm.KFXZipBook(infile) elif mobi: mb = mobidedrm.MobiBook(infile) else: mb = topazextract.TopazBook(infile) bookname = unescape(mb.getBookTitle()) print u"Decrypting {1} ebook: {0}".format(bookname, mb.getBookType()) # copy list of pids totalpids = list(pids) # extend list of serials with serials from android databases for aFile in androidFiles: serials.extend(androidkindlekey.get_serials(aFile)) # extend PID list with book-specific PIDs from seriala and kDatabases md1, md2 = mb.getPIDMetaInfo() totalpids.extend(kgenpids.getPidList(md1, md2, serials, kDatabases)) # remove any duplicates totalpids = list(set(totalpids)) print u"Found {1:d} keys to try after {0:.1f} seconds".format( time.time() - starttime, len(totalpids)) #print totalpids try: mb.processBook(totalpids) except: mb.cleanup raise print u"Decryption succeeded after {0:.1f} seconds".format(time.time() - starttime) return mb