예제 #1
0
    def reserve_slot(self):
        while True:
            self.ust_lock.acquire()
            self.ust.prepare()

            slot_id = random.getrandbits(128)
            delete_nonce = (slot_id << 128) + random.getrandbits(128)
            ust_delete = UST(self.server_pk_n, self.server_pk_e)
            ust_delete.prepare(delete_nonce)

            args = {
                "nonce": self.ust.nonce,
                "signature": self.ust.signature,
                "blinded_nonce": self.ust.blinded_nonce,
                "slot_id": slot_id,
                "blinded_deletion_nonce": ust_delete.blinded_nonce
            }

            r = send_request(RESERVE, args)

            self.ust.receive(r['blinded_sign'])
            self.ust_lock.release()

            if r['success'] == True:
                ust_delete.receive(r['blinded_deletion_sign'])
                sig = ust_delete.signature
                return slot_id, delete_nonce, sig
예제 #2
0
    def add_new_server(self, server):
        # Check if the server table does not have identifcal server under url
        if server.url in self.server_table:
            if self.server_table[server.url].equals(server):
                return

        self.server_table[server.url] = server
        slave_ust = UST(self.server_table[server.url])
        self.ust_table[server.url] = slave_ust
        slave_ust.lock.acquire()
        slave_ust.prepare()

        ust = self.ust_table[MASTER_URL]
        ust.lock.acquire()
        ust.prepare()

        args = {
            "nonce": ust.nonce,
            "signature": ust.signature,
            "blinded_nonce": ust.blinded_nonce,
            "blinded_slave_nonce": slave_ust.blinded_nonce,
            "slave_url": server.url
        }

        r = send_request(MASTER_URL, CONNECT_TO_SLAVE, args)

        ust.receive(r['blinded_sign'])
        ust.lock.release()

        slave_ust.receive(r['blinded_slave_sign'])
        slave_ust.lock.release()
예제 #3
0
    def reserve_slot(self):
        while True:
            # Consider who to resever from, master is default
            ust = self.ust_table[MASTER_URL]
            ust.lock.acquire()
            ust.prepare()

            slot_id = random.getrandbits(128)
            delete_nonce = (slot_id << 128) + random.getrandbits(128)
            ust_delete = UST(self.server_table[MASTER_URL])
            ust_delete.prepare(delete_nonce)

            args = {
                "nonce": ust.nonce,
                "signature": ust.signature,
                "blinded_nonce": ust.blinded_nonce,
                "slot_id": slot_id,
                "blinded_deletion_nonce": ust_delete.blinded_nonce
            }

            r = send_request(MASTER_URL, RESERVE, args)

            ust.receive(r['blinded_sign'])
            ust.lock.release()

            if r['success'] == True:
                ust_delete.receive(r['blinded_deletion_sign'])
                sig = ust_delete.signature
                return slot_id, delete_nonce, sig
예제 #4
0
    def subscribe(self):
        print "Subscribing please wait..."
        self.rsa = RSA_gen(4096)
        self.n, self.e, self.d = RSA_keys(self.rsa)
        self.ElGkey = ElGamal.generate(256, Random.new().read)

        self.rsa_sign = RSA_gen(1024)
        self.n_sign, self.e_sign, self.d_sign = RSA_keys(self.rsa_sign)

        self.ust = UST(self.server_pk_n, self.server_pk_e)
        self.ust_lock.acquire()
        self.ust.prepare()

        args = {
            "blinded_nonce": self.ust.blinded_nonce,
            "client_username": self.username,
            "client_pk_n": self.n,
            "client_pk_e": self.e,
            "client_sign_pk_n": self.n_sign,
            "client_sign_pk_e": self.e_sign
        }

        r = send_request(SUBSCRIBE, args)

        if r == ERROR:
            print "ERROR: could not subscribe"
            sys.exit(0)

        self.ust.receive(r['blinded_sign'])
        self.ust_lock.release()

        user = r['user']

        if user['client_pk_n'] == self.n and user['client_pk_e'] == self.e \
            and user['client_sign_pk_n'] == self.n_sign \
            and user['client_sign_pk_e'] == self.e_sign:
            pass
        else:
            print "Username is taken, please try again"
            sys.exit(0)

        self.user_id = user['client_user_id']
        self.user_table_ptr = 0
        self.client_new_conversations_table_ptr = 0

        return
예제 #5
0
    def subscribe(self):
        print "Subscribing please wait..."
        self.gen_keys()

        self.ust_table[MASTER_URL] = UST(self.server_table[MASTER_URL])

        ust = self.ust_table[MASTER_URL]
        ust.lock.acquire()
        ust.prepare()

        args = {
            "blinded_nonce": ust.blinded_nonce,
            "client_username": self.username,
            "client_pk_n": self.n,
            "client_pk_e": self.e,
            "client_sign_pk_n": self.n_sign,
            "client_sign_pk_e": self.e_sign
        }

        r = send_request(MASTER_URL, SUBSCRIBE, args)

        if r == ERROR:
            print "ERROR: could not subscribe"
            sys.exit(0)

        ust.receive(r['blinded_sign'])
        ust.lock.release()

        user = r['user']

        if user['client_pk_n'] == self.n and user['client_pk_e'] == self.e \
            and user['client_sign_pk_n'] == self.n_sign \
            and user['client_sign_pk_e'] == self.e_sign:
            pass
        else:
            print "Username is taken, please try again"
            sys.exit(0)

        self.user_id = user['client_user_id']
        self.user_table_ptr = 0
        self.conversations_table_ptr = 0

        print "Hello " + self.username + ", welcome to Traceless!"
        return