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
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()
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
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
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