Example #1
0
class Connection(object):
    def __init__(self, server_ip, server_port, private_key, server_pubkey=None):
        self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self._socket.connect((server_ip, server_port))
        if server_pubkey:
            self._crypt = Crypt(private_key, server_pubkey)
        else:
            self._crypt = Crypt(private_key, get_server_public_key())
        self._sendPublicKey(private_key)

    def __del__(self):
        self.close()

    def _sendPublicKey(self, private_key):
        self._socket.sendall(private_key.publickey().exportKey(format='DER'))

    def send(self, data):
        data = self._crypt.sign_and_encrypt(data)
        self._socket.sendall(data)

    def receive(self, size=1024):
        data = self._crypt.decrypt_and_auth(self._socket.recv(size))
        return data

    def close(self):
        if not self._socket is None:
            self.send(MSG_TYPES.CLOSE)
            self._socket.close()
            self._socket = None
Example #2
0
    def get_route(self):
        route = []
        # print self.routers
        for r in self.routers[:3]:
            ip, port, pk = r
            c = Crypt(public_key=pk, private_key=self.private_key)
            sid = urandom(8)
            sym_key = urandom(16)
            enc_pkt = c.sign_and_encrypt("ESTB" + self.rid + sid + sym_key)
            route.append((enc_pkt, ip, port, pk, sid, sym_key))

        return route
Example #3
0
File: main.py Project: wtglover/TOR
    def _test_connection(self, request):
        router_id = request
        to_router_id = self._determine_test_router(router_id)

        if to_router_id is None:
            self._send("NONE")
            return

        to_router = self.server.tor_routers[to_router_id]
        c = Crypt(public_key=self.server.private_key.publickey(),
                  private_key=self.server.private_key)
        now = now_as_str()
        payload = c.sign_and_encrypt(now + router_id + to_router_id)

        self._send(
            struct.pack("!4sI", socket.inet_aton(to_router["ip_addr"]),
                        to_router["daemon_port"]) + payload)
Example #4
0
File: main.py Project: wtglover/TOR
    def _create_route(self):
        route = ""
        shuffled_keys = self.server.tor_routers.keys()
        shuffle(shuffled_keys)

        for i in range(min(len(shuffled_keys), MAX_PATH_LENGTH)):
            details = self.server.tor_routers[shuffled_keys[i]]
            c = Crypt(public_key=RSA.import_key(details["pub_key"]),
                      private_key=self.server.private_key)
            sid = get_random_bytes(8)
            sym_key = get_random_bytes(16)
            enc_pkt = c.sign_and_encrypt("ESTB" + self.server.rid + sid +
                                         sym_key)
            route += struct.pack(ROUTE_STRUCT_FMT, enc_pkt,
                                 socket.inet_aton(details["ip_addr"]),
                                 details["port"], details["pub_key"], sid,
                                 sym_key)

        self._send(route)
Example #5
0
def append_current_time(payload, private_key, server_pubey=None):
    if server_pubey:
        c = Crypt(public_key=server_pubey, private_key=private_key)
    else:
        c = Crypt(public_key=get_server_public_key(), private_key=private_key)
    return payload + c.sign_and_encrypt(now_as_str())
Example #6
0
        cid = circ.cid.encode("hex")
        if circ.is_pf:
            self.cur.execute("DELETE FROM pfs WHERE id = (?);", (cid, ))
        else:
            self.cur.execute("DELETE FROM circuits WHERE id = (?);", (cid, ))
        cdb_logger.debug("Removed circuit " + repr(circ.name))


if __name__ == "__main__":
    cid = urandom(8)
    symkey = Crypt().generate_key()
    k1 = Crypt().generate_key()
    k2 = Crypt().generate_key()
    c_client = Crypt(public_key=k1.publickey(), private_key=k2)
    c_router = Crypt(public_key=k2.publickey(), private_key=k1)
    pkt = c_client.sign_and_encrypt("CLNT" + cid + symkey)
    data, hash = c_router.decrypt(pkt)

    cd = CircuitDatabase(db_path="circuitdb_1234.db")
    c = ClientCircuit(cid, cid, c_router)
    cd.add(c)
    # cd.get(data, hash, c_router)
    # cd.remove(c)
    # cd.remove(c)
    # try:
    #     cd.get('ABCD')
    #     print "BAD"
    # except:
    #     print "GOOD"
    # cd.add(c)