from optparse import OptionParser
from hfs.emf import EMFVolume
from util.bdev import FileBlockDevice
import plistlib

def main():
    parser = OptionParser(usage="emf_decrypter.py disk_image.bin")
    parser.add_option("-w", "--nowrite", dest="write", action="store_false", default=True,
                  help="disable modifications of input file, for testing")
    (options, args) = parser.parse_args()
    if len(args) < 1:
        parser.print_help()
        return
    device_infos = None
    if len(args) >= 2: device_infos = plistlib.readPlist(args[1])
    
    p = FileBlockDevice(args[0], 0, options.write)
    v = EMFVolume(p, device_infos)
    if not v.keybag.unlocked:
        print "Keybag locked, protected files won't be decrypted, continue anyway ?"
        if raw_input() == "n":
            return
    if options.write:
        print "WARNING ! This tool will modify the hfs image and possibly wreck it if something goes wrong !"
        print "Make sure to backup the image before proceeding"
        print "You can use the --nowrite option to do a dry run instead"
    else:
        print "Test mode : the input file will not be modified"
    print "Press a key to continue or CTRL-C to abort"
    raw_input()
    v.decryptAllFiles()

if __name__ == "__main__": 
    main()
