@ -36,8 +36,11 @@ class KFXZipBook:
def processBook ( self , totalpids ) :
with zipfile . ZipFile ( self . infile , ' r ' ) as zf :
for filename in zf . namelist ( ) :
data = zf . read ( filename )
if data . startswith ( ' \xea DRMION \xee ' ) :
with zf . open ( filename ) as fh :
data = fh . read ( 8 )
if data != ' \xea DRMION \xee ' :
continue
data + = fh . read ( )
if self . voucher is None :
self . decrypt_voucher ( totalpids )
print u ' Decrypting KFX DRMION: {0} ' . format ( filename )
@ -51,9 +54,13 @@ class KFXZipBook:
def decrypt_voucher ( self , totalpids ) :
with zipfile . ZipFile ( self . infile , ' r ' ) as zf :
for info in zf . infolist ( ) :
if info . file_size < 0x10000 :
data = zf . read ( info . filename )
if data . startswith ( ' \xe0 \x01 \x00 \xea ' ) and ' ProtectedData ' in data :
with zf . open ( info . filename ) as fh :
data = fh . read ( 4 )
if data != ' \xe0 \x01 \x00 \xea ' :
continue
data + = fh . read ( )
if ' ProtectedData ' in data :
break # found DRM voucher
else :
raise Exception ( u ' The .kfx-zip archive contains an encrypted DRMION file without a DRM voucher ' )