#!/usr/bin/env python
# -'- coding: utf-8 -*.
"""
authored by:  RaNaN

script only for socket testing

"""
import base64
import cPickle
import random
import string
from Crypto.Cipher import AES
from Crypto.Hash import SHA
from Crypto.Hash import MD5
from module.remote.RequestObject import RequestObject


class Handler:
    def __init__(self):
        key = SHA.new("pwhere")
        key = MD5.new(key.hexdigest())
        self.aes = AES.new(key.hexdigest(), AES.MODE_ECB)

    def proceed(self, data):

        return self.decrypt(self.encrypt(str(("lol","mehrlol","pff"))))

    def decrypt(self, dec_str):
        try:
            dec_str = base64.standard_b64decode(dec_str)
            dec_str = self.aes.decrypt(dec_str)

            dec_str = dec_str[:-(int(dec_str[-1],16)+1)]
            obj = cPickle.loads(dec_str)
        except:
            obj = None
        return obj

    def encrypt(self, obj):
        enc_str = cPickle.dumps(obj, 1)
        padding = len(enc_str) % 16
        padding = 16 - padding

        p_str = ""
        for i in range(padding - 1):
            p_str += random.choice(string.letters+string.digits)
        p_str += hex(len(p_str)).replace("0x","")
        enc_str += p_str

        enc_str = self.aes.encrypt(enc_str)
        enc_str = base64.standard_b64encode(enc_str)
        return enc_str



import socket

handler = Handler()
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost', 7272))
print "Connected to server"

obj = RequestObject()
obj.command = "exec"
obj.function = "get_downloads"

sock.sendall(handler.encrypt(obj)+"\n")

response = sock.recv(8192)

print "Received:", handler.decrypt(response).response
sock.close()