#!/usr/bin/env python
import sys
import re
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-c', '--crypted', metavar="FILE", dest="encfile", required=True, help="File with encrypted text")
parser.add_argument('-p', '--plain', metavar="FILE", dest="txtfile", required=True, help="File with plaintext")
parser.add_argument('fname', nargs=1, help="Main input file")
args = parser.parse_args()

enc = None
txt = None

with open(args.encfile, 'rb') as f:
    enc = f.read()

with open(args.txtfile, 'rb') as f:
    txt = f.read()

padtable = [(a-b)%256 for a,b in zip(enc, txt)]

with open(args.fname[0], 'rb') as f:
    msg = f.read()
    dec = [chr((a-b)%256) for a,b in zip(msg, padtable[:len(msg)])]
    print (''.join(dec))

    m = re.findall(r'(.*\*)(here)(.*)', ''.join(dec), re.S)
    l = len(m[0][0])
    for i in range(1,len(padtable)-l):
        dec = [chr((a-b)%256) for a,b in zip(msg[l:], padtable[l+i:l+i+len(msg)])]
        if dec[0:4] == ['h','e','r','e']:
            print("\n\nfound solution at offset",i,":")
            print(m[0][0]+''.join(dec))
