Browse Source

Addressing code review feedback

sshsshy 2 years ago
parent
commit
15693f8dfe
4 changed files with 126 additions and 136 deletions
  1. 103 110
      avl.cpp
  2. 1 1
      avl.hpp
  3. 21 24
      bst.cpp
  4. 1 1
      bst.hpp

+ 103 - 110
avl.cpp

@@ -170,8 +170,10 @@ bool AVL::check_avl(MPCTIO &tio, yield_t &yield) {
     RegXS rec_root = this->root;
     RegXS rec_root = this->root;
     if (tio.player() == 1) {
     if (tio.player() == 1) {
         tio.queue_peer(&(this->root), sizeof(this->root));
         tio.queue_peer(&(this->root), sizeof(this->root));
+        yield();
     } else {
     } else {
         RegXS peer_root;
         RegXS peer_root;
+        yield();
         tio.recv_peer(&peer_root, sizeof(peer_root));
         tio.recv_peer(&peer_root, sizeof(peer_root));
         rec_root+= peer_root;
         rec_root+= peer_root;
     }
     }
@@ -182,7 +184,7 @@ bool AVL::check_avl(MPCTIO &tio, yield_t &yield) {
         return (bst_ok && avl_ok && bb_ok);
         return (bst_ok && avl_ok && bb_ok);
     }
     }
     else {
     else {
-        return 0;
+        return false;
     }
     }
 }
 }
 
 
@@ -227,26 +229,30 @@ void AVL::rotate(MPCTIO &tio, yield_t &yield, RegXS &gp_pointers, RegXS p_ptr,
     // We care about !F_gp. If !F_gp, then we do the gp->p link updates.
     // We care about !F_gp. If !F_gp, then we do the gp->p link updates.
     // Otherwise, we do NOT do any updates to gp-> p link;
     // Otherwise, we do NOT do any updates to gp-> p link;
     // since F_gp==1, implies gp does not exist and parent is root.
     // since F_gp==1, implies gp does not exist and parent is root.
-    if(player0)
+    if(player0) {
         F_gp^=1;
         F_gp^=1;
+    }
     mpc_and(tio, yield, F_gpp, F_gp, isReal);
     mpc_and(tio, yield, F_gpp, F_gp, isReal);
 
 
     // i) gp[dir_gpp] <-- c_ptr
     // i) gp[dir_gpp] <-- c_ptr
     RegBS not_dir_gpp = dir_gpp;
     RegBS not_dir_gpp = dir_gpp;
-    if(player0)
+    if(player0) {
         not_dir_gpp^=1;
         not_dir_gpp^=1;
+    }
     mpc_select(tio, yield, ptr_upd, F_gpp, p_ptr, c_ptr);
     mpc_select(tio, yield, ptr_upd, F_gpp, p_ptr, c_ptr);
 
 
     RegBS not_dir_pc_l = dir_pc, not_dir_pc_r = dir_pc;
     RegBS not_dir_pc_l = dir_pc, not_dir_pc_r = dir_pc;
-    if(player0)
+    if(player0) {
         not_dir_pc_r^=1;
         not_dir_pc_r^=1;
+    }
     RegXS c_not_dir_pc; //c[!dir_pc]
     RegXS c_not_dir_pc; //c[!dir_pc]
     // ndpc_right: if not_dir_pc is right
     // ndpc_right: if not_dir_pc is right
     // ndpc_left: if not_dir_pc is left
     // ndpc_left: if not_dir_pc is left
     RegBS F_ndpc_right, F_ndpc_left;
     RegBS F_ndpc_right, F_ndpc_left;
     RegBS nt_dir_pc = dir_pc;
     RegBS nt_dir_pc = dir_pc;
-    if(player0)
+    if(player0) {
         nt_dir_pc^=1;
         nt_dir_pc^=1;
+    }
 
 
     std::vector<coro_t> coroutines;
     std::vector<coro_t> coroutines;
     coroutines.emplace_back(
     coroutines.emplace_back(
@@ -509,7 +515,7 @@ std::tuple<RegBS, RegBS, RegXS, RegBS> AVL::insert(MPCTIO &tio, yield_t &yield,
     /*
     /*
     size_t rec_left = mpc_reconstruct(tio, yield, left, AVL_PTR_SIZE);
     size_t rec_left = mpc_reconstruct(tio, yield, left, AVL_PTR_SIZE);
     size_t rec_right = mpc_reconstruct(tio, yield, right, AVL_PTR_SIZE);
     size_t rec_right = mpc_reconstruct(tio, yield, right, AVL_PTR_SIZE);
-    size_t rec_key = mpc_reconstruct(tio, yield, cnode.key, 64);
+    size_t rec_key = mpc_reconstruct(tio, yield, cnode.key);
     printf("\n\n(Before recursing) Key = %ld\n", rec_key);
     printf("\n\n(Before recursing) Key = %ld\n", rec_key);
     printf("rec_left = %ld, rec_right = %ld\n", rec_left, rec_right);
     printf("rec_left = %ld, rec_right = %ld\n", rec_left, rec_right);
     */
     */
@@ -968,8 +974,9 @@ void AVL::updateChildPointers(MPCTIO &tio, yield_t &yield, RegXS &left, RegXS &r
     RegBS F_rr; // Flag to resolve F_r by updating right child ptr
     RegBS F_rr; // Flag to resolve F_r by updating right child ptr
     RegBS F_rl; // Flag to resolve F_r by updating left child ptr
     RegBS F_rl; // Flag to resolve F_r by updating left child ptr
     RegBS nt_c_prime = c_prime;
     RegBS nt_c_prime = c_prime;
-    if(player0)
+    if(player0) {
         nt_c_prime^=1;
         nt_c_prime^=1;
+    }
 
 
     run_coroutines(tio, [&tio, &F_rr, c_prime, ret_struct](yield_t &yield)
     run_coroutines(tio, [&tio, &F_rr, c_prime, ret_struct](yield_t &yield)
         { mpc_and(tio, yield, F_rr, c_prime, ret_struct.F_r);},
         { mpc_and(tio, yield, F_rr, c_prime, ret_struct.F_r);},
@@ -1430,8 +1437,9 @@ std::tuple<bool, RegBS> AVL::del(MPCTIO &tio, yield_t &yield, RegXS ptr, RegAS d
         // F_2 = !(F_0 ^ F_1) (Exactly 1 of F_0, F_1, and F_2 is true)
         // F_2 = !(F_0 ^ F_1) (Exactly 1 of F_0, F_1, and F_2 is true)
         F_n2 = F_0 ^ F_1;
         F_n2 = F_0 ^ F_1;
         F_2 = F_n2;
         F_2 = F_n2;
-        if(player0)
+        if(player0) {
             F_2^=1;
             F_2^=1;
+        }
         // s1: shares of 1 bit, s0: shares of 0 bit
         // s1: shares of 1 bit, s0: shares of 0 bit
         RegBS s1, s0;
         RegBS s1, s0;
         s1.set(tio.player()==1);
         s1.set(tio.player()==1);
@@ -1524,7 +1532,7 @@ std::tuple<bool, RegBS> AVL::del(MPCTIO &tio, yield_t &yield, RegXS ptr, RegAS d
         p_bal_r = getRightBal(node.pointers);
         p_bal_r = getRightBal(node.pointers);
 
 
         #ifdef AVL_DEBUG
         #ifdef AVL_DEBUG
-          size_t rec_key = mpc_reconstruct(tio, yield, node.key, 64);
+          size_t rec_key = mpc_reconstruct(tio, yield, node.key);
           bool rec_bal_upd = mpc_reconstruct(tio, yield, bal_upd);
           bool rec_bal_upd = mpc_reconstruct(tio, yield, bal_upd);
           printf("current_key = %ld, bal_upd (before updateBalanceDel) = %d\n", rec_key, rec_bal_upd);
           printf("current_key = %ld, bal_upd (before updateBalanceDel) = %d\n", rec_key, rec_bal_upd);
         #endif
         #endif
@@ -1566,8 +1574,9 @@ std::tuple<bool, RegBS> AVL::del(MPCTIO &tio, yield_t &yield, RegXS ptr, RegAS d
     an explicit (non-oblivious) failure.
     an explicit (non-oblivious) failure.
 */
 */
 bool AVL::del(MPCTIO &tio, yield_t &yield, RegAS del_key) {
 bool AVL::del(MPCTIO &tio, yield_t &yield, RegAS del_key) {
-    if(num_items==0)
+    if(num_items==0) {
         return false;
         return false;
+    }
 
 
     auto A = oram.flat(tio, yield, 0, cur_max_index+1);
     auto A = oram.flat(tio, yield, 0, cur_max_index+1);
     if(num_items==1) {
     if(num_items==1) {
@@ -1637,8 +1646,8 @@ bool AVL::del(MPCTIO &tio, yield_t &yield, RegAS del_key) {
 
 
             /*
             /*
             bool rec_F_ss = mpc_reconstruct(tio, yield, ret_struct.F_ss);
             bool rec_F_ss = mpc_reconstruct(tio, yield, ret_struct.F_ss);
-            size_t rec_del_key = mpc_reconstruct(tio, yield, del_node.key, 64);
-            size_t rec_suc_key = mpc_reconstruct(tio, yield, suc_node.key, 64);
+            size_t rec_del_key = mpc_reconstruct(tio, yield, del_node.key);
+            size_t rec_suc_key = mpc_reconstruct(tio, yield, suc_node.key);
             printf("rec_F_ss = %d, del_node.key = %lu, suc_nod.key = %lu\n",
             printf("rec_F_ss = %d, del_node.key = %lu, suc_nod.key = %lu\n",
                 rec_F_ss, rec_del_key, rec_suc_key);
                 rec_F_ss, rec_del_key, rec_suc_key);
             */
             */
@@ -1806,7 +1815,7 @@ void avl(MPCIO &mpcio,
         for(size_t i = 1; i<=n_deletes; i++) {
         for(size_t i = 1; i<=n_deletes; i++) {
             RegAS del_key;
             RegAS del_key;
             size_t dkey;
             size_t dkey;
-            #ifdef RANDOMIZE
+            #ifdef AVL_RANDOMIZE_INSERTS
                 dkey = 1 + (rand()%init_size);
                 dkey = 1 + (rand()%init_size);
             #else
             #else
                 dkey = i + 0;
                 dkey = i + 0;
@@ -1852,16 +1861,16 @@ void avl_tests(MPCIO &mpcio,
             - 5 and 9 have no children and 0 balances
             - 5 and 9 have no children and 0 balances
         */
         */
         {
         {
-            bool success = 1, check_avl;
+            bool success = true;
             int insert_array[] = {5, 7, 9};
             int insert_array[] = {5, 7, 9};
-            size_t insert_array_size = 2;
+            size_t insert_array_size = 3;
             Node node;
             Node node;
 
 
-            for(size_t i = 0; i<=insert_array_size; i++) {
+            for(size_t i = 0; i<insert_array_size; i++) {
               randomize_node(node);
               randomize_node(node);
               node.key.set(insert_array[i] * tio.player());
               node.key.set(insert_array[i] * tio.player());
               tree.insert(tio, yield, node);
               tree.insert(tio, yield, node);
-              check_avl = tree.check_avl(tio, yield);
+              success &= tree.check_avl(tio, yield);
             }
             }
             Duoram<Node>* oram = tree.get_oram();
             Duoram<Node>* oram = tree.get_oram();
             RegXS root_xs = tree.get_root();
             RegXS root_xs = tree.get_root();
@@ -1890,7 +1899,6 @@ void avl_tests(MPCIO &mpcio,
                 success = false;
                 success = false;
             }
             }
             if(player0) {
             if(player0) {
-                success &= check_avl;
                 if(success) {
                 if(success) {
                     print_green("T1 : SUCCESS\n");
                     print_green("T1 : SUCCESS\n");
                 } else {
                 } else {
@@ -1921,15 +1929,15 @@ void avl_tests(MPCIO &mpcio,
 
 
         */
         */
         {
         {
-            bool success = 1, check_avl;
+            bool success = true;
             int insert_array[] = {5, 3, 7, 9, 12};
             int insert_array[] = {5, 3, 7, 9, 12};
-            size_t insert_array_size = 4;
+            size_t insert_array_size = 5;
             Node node;
             Node node;
-            for(size_t i = 0; i<=insert_array_size; i++) {
+            for(size_t i = 0; i<insert_array_size; i++) {
               randomize_node(node);
               randomize_node(node);
               node.key.set(insert_array[i] * tio.player());
               node.key.set(insert_array[i] * tio.player());
               tree.insert(tio, yield, node);
               tree.insert(tio, yield, node);
-              check_avl = tree.check_avl(tio, yield);
+              success &= tree.check_avl(tio, yield);
             }
             }
 
 
             Duoram<Node>* oram = tree.get_oram();
             Duoram<Node>* oram = tree.get_oram();
@@ -1977,7 +1985,6 @@ void avl_tests(MPCIO &mpcio,
             }
             }
 
 
             if(player0) {
             if(player0) {
-                success &= check_avl;
                 if(success) {
                 if(success) {
                     print_green("T2 : SUCCESS\n");
                     print_green("T2 : SUCCESS\n");
                 } else {
                 } else {
@@ -2006,15 +2013,15 @@ void avl_tests(MPCIO &mpcio,
 
 
         */
         */
         {
         {
-            bool success = 1, check_avl;
+            bool success = true;
             int insert_array[] = {9, 7, 5};
             int insert_array[] = {9, 7, 5};
-            size_t insert_array_size = 2;
+            size_t insert_array_size = 3;
             Node node;
             Node node;
-            for(size_t i = 0; i<=insert_array_size; i++) {
+            for(size_t i = 0; i<insert_array_size; i++) {
               randomize_node(node);
               randomize_node(node);
               node.key.set(insert_array[i] * tio.player());
               node.key.set(insert_array[i] * tio.player());
               tree.insert(tio, yield, node);
               tree.insert(tio, yield, node);
-              check_avl = tree.check_avl(tio, yield);
+              success &= tree.check_avl(tio, yield);
             }
             }
 
 
             Duoram<Node>* oram = tree.get_oram();
             Duoram<Node>* oram = tree.get_oram();
@@ -2044,7 +2051,6 @@ void avl_tests(MPCIO &mpcio,
                 success = false;
                 success = false;
             }
             }
             if(player0) {
             if(player0) {
-                success &= check_avl;
                 if(success) {
                 if(success) {
                     print_green("T3 : SUCCESS\n");
                     print_green("T3 : SUCCESS\n");
                 } else{
                 } else{
@@ -2077,15 +2083,15 @@ void avl_tests(MPCIO &mpcio,
 
 
         */
         */
         {
         {
-            bool success = 1, check_avl;
+            bool success = true;
             int insert_array[] = {9, 12, 7, 5, 3};
             int insert_array[] = {9, 12, 7, 5, 3};
-            size_t insert_array_size = 4;
+            size_t insert_array_size = 5;
             Node node;
             Node node;
-            for(size_t i = 0; i<=insert_array_size; i++) {
+            for(size_t i = 0; i<insert_array_size; i++) {
               randomize_node(node);
               randomize_node(node);
               node.key.set(insert_array[i] * tio.player());
               node.key.set(insert_array[i] * tio.player());
               tree.insert(tio, yield, node);
               tree.insert(tio, yield, node);
-              check_avl = tree.check_avl(tio, yield);
+              success &= tree.check_avl(tio, yield);
             }
             }
 
 
             Duoram<Node>* oram = tree.get_oram();
             Duoram<Node>* oram = tree.get_oram();
@@ -2132,7 +2138,6 @@ void avl_tests(MPCIO &mpcio,
                 success = false;
                 success = false;
             }
             }
             if(player0) {
             if(player0) {
-                success &= check_avl;
                 if(success) {
                 if(success) {
                     print_green("T4 : SUCCESS\n");
                     print_green("T4 : SUCCESS\n");
                 } else {
                 } else {
@@ -2162,15 +2167,15 @@ void avl_tests(MPCIO &mpcio,
         */
         */
 
 
         {
         {
-            bool success = 1, check_avl;
+            bool success = true;
             int insert_array[] = {9, 5, 7};
             int insert_array[] = {9, 5, 7};
-            size_t insert_array_size = 2;
+            size_t insert_array_size = 3;
             Node node;
             Node node;
-            for(size_t i = 0; i<=insert_array_size; i++) {
+            for(size_t i = 0; i<insert_array_size; i++) {
               randomize_node(node);
               randomize_node(node);
               node.key.set(insert_array[i] * tio.player());
               node.key.set(insert_array[i] * tio.player());
               tree.insert(tio, yield, node);
               tree.insert(tio, yield, node);
-              check_avl = tree.check_avl(tio, yield);
+              success &= tree.check_avl(tio, yield);
             }
             }
 
 
             Duoram<Node>* oram = tree.get_oram();
             Duoram<Node>* oram = tree.get_oram();
@@ -2209,7 +2214,6 @@ void avl_tests(MPCIO &mpcio,
                 success = false;
                 success = false;
             }
             }
             if(player0) {
             if(player0) {
-                success &= check_avl;
                 if(success) {
                 if(success) {
                     print_green("T5 : SUCCESS\n");
                     print_green("T5 : SUCCESS\n");
                 } else {
                 } else {
@@ -2243,15 +2247,15 @@ void avl_tests(MPCIO &mpcio,
 
 
         */
         */
         {
         {
-            bool success = 1, check_avl;
+            bool success = true;
             int insert_array[] = {9, 12, 7, 3, 5};
             int insert_array[] = {9, 12, 7, 3, 5};
-            size_t insert_array_size = 4;
+            size_t insert_array_size = 5;
             Node node;
             Node node;
-            for(size_t i = 0; i<=insert_array_size; i++) {
+            for(size_t i = 0; i<insert_array_size; i++) {
               randomize_node(node);
               randomize_node(node);
               node.key.set(insert_array[i] * tio.player());
               node.key.set(insert_array[i] * tio.player());
               tree.insert(tio, yield, node);
               tree.insert(tio, yield, node);
-              check_avl = tree.check_avl(tio, yield);
+              success &= tree.check_avl(tio, yield);
             }
             }
 
 
             Duoram<Node>* oram = tree.get_oram();
             Duoram<Node>* oram = tree.get_oram();
@@ -2298,7 +2302,6 @@ void avl_tests(MPCIO &mpcio,
                 success = false;
                 success = false;
             }
             }
             if(player0) {
             if(player0) {
-                success &= check_avl;
                 if(success) {
                 if(success) {
                     print_green("T6 : SUCCESS\n");
                     print_green("T6 : SUCCESS\n");
                 } else {
                 } else {
@@ -2328,15 +2331,15 @@ void avl_tests(MPCIO &mpcio,
         */
         */
 
 
         {
         {
-            bool success = 1;
+            bool success = true;
             int insert_array[] = {5, 9, 7};
             int insert_array[] = {5, 9, 7};
-            size_t insert_array_size = 2;
+            size_t insert_array_size = 3;
             Node node;
             Node node;
-            for(size_t i = 0; i<=insert_array_size; i++) {
+            for(size_t i = 0; i<insert_array_size; i++) {
               randomize_node(node);
               randomize_node(node);
               node.key.set(insert_array[i] * tio.player());
               node.key.set(insert_array[i] * tio.player());
               tree.insert(tio, yield, node);
               tree.insert(tio, yield, node);
-              tree.check_avl(tio, yield);
+             success &= tree.check_avl(tio, yield);
             }
             }
 
 
             Duoram<Node>* oram = tree.get_oram();
             Duoram<Node>* oram = tree.get_oram();
@@ -2406,15 +2409,15 @@ void avl_tests(MPCIO &mpcio,
 
 
         */
         */
         {
         {
-            bool success = 1, check_avl;
+            bool success = true;
             int insert_array[] = {5, 3, 12, 7, 9};
             int insert_array[] = {5, 3, 12, 7, 9};
-            size_t insert_array_size = 4;
+            size_t insert_array_size = 5;
             Node node;
             Node node;
-            for(size_t i = 0; i<=insert_array_size; i++) {
+            for(size_t i = 0; i<insert_array_size; i++) {
               randomize_node(node);
               randomize_node(node);
               node.key.set(insert_array[i] * tio.player());
               node.key.set(insert_array[i] * tio.player());
               tree.insert(tio, yield, node);
               tree.insert(tio, yield, node);
-              check_avl = tree.check_avl(tio, yield);
+              success &= tree.check_avl(tio, yield);
             }
             }
 
 
             Duoram<Node>* oram = tree.get_oram();
             Duoram<Node>* oram = tree.get_oram();
@@ -2461,7 +2464,6 @@ void avl_tests(MPCIO &mpcio,
                 success = false;
                 success = false;
             }
             }
             if(player0) {
             if(player0) {
-                success &= check_avl;
                 if(success) {
                 if(success) {
                     print_green("T8 : SUCCESS\n");
                     print_green("T8 : SUCCESS\n");
                 } else {
                 } else {
@@ -2491,22 +2493,22 @@ void avl_tests(MPCIO &mpcio,
             - 7 has 0 balances
             - 7 has 0 balances
         */
         */
         {
         {
-            bool success = 1, check_avl;
+            bool success = true;
             int insert_array[] = {5, 3, 7, 9};
             int insert_array[] = {5, 3, 7, 9};
-            size_t insert_array_size = 3;
+            size_t insert_array_size = 4;
             Node node;
             Node node;
-            for(size_t i = 0; i<=insert_array_size; i++) {
+            for(size_t i = 0; i<insert_array_size; i++) {
               randomize_node(node);
               randomize_node(node);
               node.key.set(insert_array[i] * tio.player());
               node.key.set(insert_array[i] * tio.player());
               tree.insert(tio, yield, node);
               tree.insert(tio, yield, node);
-              check_avl = tree.check_avl(tio, yield);
+              success &= tree.check_avl(tio, yield);
             }
             }
 
 
             RegAS del_key;
             RegAS del_key;
             del_key.set(3 * tio.player());
             del_key.set(3 * tio.player());
             bool del_ret;
             bool del_ret;
             del_ret = tree.del(tio, yield, del_key);
             del_ret = tree.del(tio, yield, del_key);
-            tree.check_avl(tio, yield);
+            success &= tree.check_avl(tio, yield);
 
 
             Duoram<Node>* oram = tree.get_oram();
             Duoram<Node>* oram = tree.get_oram();
             RegXS root_xs = tree.get_root();
             RegXS root_xs = tree.get_root();
@@ -2538,7 +2540,6 @@ void avl_tests(MPCIO &mpcio,
             success &= del_ret;
             success &= del_ret;
 
 
             if(player0) {
             if(player0) {
-                success &= check_avl;
                 if(success) {
                 if(success) {
                     print_green("T9 : SUCCESS\n");
                     print_green("T9 : SUCCESS\n");
                 } else {
                 } else {
@@ -2570,22 +2571,22 @@ void avl_tests(MPCIO &mpcio,
 
 
         */
         */
         {
         {
-            bool success = 1, check_avl;
+            bool success = true;
             int insert_array[] = {5, 3, 7, 9, 6, 1, 12};
             int insert_array[] = {5, 3, 7, 9, 6, 1, 12};
-            size_t insert_array_size = 6;
+            size_t insert_array_size = 7;
             Node node;
             Node node;
-            for(size_t i = 0; i<=insert_array_size; i++) {
+            for(size_t i = 0; i<insert_array_size; i++) {
               randomize_node(node);
               randomize_node(node);
               node.key.set(insert_array[i] * tio.player());
               node.key.set(insert_array[i] * tio.player());
               tree.insert(tio, yield, node);
               tree.insert(tio, yield, node);
-              check_avl = tree.check_avl(tio, yield);
+              success &= tree.check_avl(tio, yield);
             }
             }
 
 
             RegAS del_key;
             RegAS del_key;
             del_key.set(6 * tio.player());
             del_key.set(6 * tio.player());
             bool del_ret;
             bool del_ret;
             del_ret = tree.del(tio, yield, del_key);
             del_ret = tree.del(tio, yield, del_key);
-            tree.check_avl(tio, yield);
+            success &= tree.check_avl(tio, yield);
 
 
             Duoram<Node>* oram = tree.get_oram();
             Duoram<Node>* oram = tree.get_oram();
             RegXS root_xs = tree.get_root();
             RegXS root_xs = tree.get_root();
@@ -2637,7 +2638,6 @@ void avl_tests(MPCIO &mpcio,
             success &= del_ret;
             success &= del_ret;
 
 
             if(player0) {
             if(player0) {
-                success &= check_avl;
                 if(success) {
                 if(success) {
                     print_green("T10 : SUCCESS\n");
                     print_green("T10 : SUCCESS\n");
                 } else {
                 } else {
@@ -2665,22 +2665,22 @@ void avl_tests(MPCIO &mpcio,
 
 
         */
         */
         {
         {
-            bool success = 1, check_avl;
+            bool success = true;
             int insert_array[] = {9, 7, 12, 5};
             int insert_array[] = {9, 7, 12, 5};
-            size_t insert_array_size = 3;
+            size_t insert_array_size = 4;
             Node node;
             Node node;
-            for(size_t i = 0; i<=insert_array_size; i++) {
+            for(size_t i = 0; i<insert_array_size; i++) {
               randomize_node(node);
               randomize_node(node);
               node.key.set(insert_array[i] * tio.player());
               node.key.set(insert_array[i] * tio.player());
               tree.insert(tio, yield, node);
               tree.insert(tio, yield, node);
-              check_avl = tree.check_avl(tio, yield);
+              success &= tree.check_avl(tio, yield);
             }
             }
 
 
             RegAS del_key;
             RegAS del_key;
             del_key.set(12 * tio.player());
             del_key.set(12 * tio.player());
             bool del_ret;
             bool del_ret;
             del_ret = tree.del(tio, yield, del_key);
             del_ret = tree.del(tio, yield, del_key);
-            tree.check_avl(tio, yield);
+            success &= tree.check_avl(tio, yield);
 
 
             Duoram<Node>* oram = tree.get_oram();
             Duoram<Node>* oram = tree.get_oram();
             RegXS root_xs = tree.get_root();
             RegXS root_xs = tree.get_root();
@@ -2715,7 +2715,6 @@ void avl_tests(MPCIO &mpcio,
             success &= del_ret;
             success &= del_ret;
 
 
             if(player0) {
             if(player0) {
-                success &= check_avl;
                 if(success) {
                 if(success) {
                     print_green("T11 : SUCCESS\n");
                     print_green("T11 : SUCCESS\n");
                 } else{
                 } else{
@@ -2739,7 +2738,7 @@ void avl_tests(MPCIO &mpcio,
               3
               3
 
 
 
 
-            T4 checks:
+            T12 checks:
             - root is 9
             - root is 9
             - 3,5,7,12,15 are in correct positions
             - 3,5,7,12,15 are in correct positions
             - Nodes 3,7,15 have 0 balance
             - Nodes 3,7,15 have 0 balance
@@ -2748,22 +2747,22 @@ void avl_tests(MPCIO &mpcio,
             - 12 bal = 0 1
             - 12 bal = 0 1
         */
         */
         {
         {
-            bool success = 1, check_avl;
+            bool success = true;
             int insert_array[] = {9, 12, 7, 5, 8, 15, 3};
             int insert_array[] = {9, 12, 7, 5, 8, 15, 3};
-            size_t insert_array_size = 6;
+            size_t insert_array_size = 7;
             Node node;
             Node node;
-            for(size_t i = 0; i<=insert_array_size; i++) {
+            for(size_t i = 0; i<insert_array_size; i++) {
               randomize_node(node);
               randomize_node(node);
               node.key.set(insert_array[i] * tio.player());
               node.key.set(insert_array[i] * tio.player());
               tree.insert(tio, yield, node);
               tree.insert(tio, yield, node);
-              check_avl = tree.check_avl(tio, yield);
+              success &= tree.check_avl(tio, yield);
             }
             }
 
 
             RegAS del_key;
             RegAS del_key;
             del_key.set(8 * tio.player());
             del_key.set(8 * tio.player());
             bool del_ret;
             bool del_ret;
             del_ret = tree.del(tio, yield, del_key);
             del_ret = tree.del(tio, yield, del_key);
-            tree.check_avl(tio, yield);
+            success &= tree.check_avl(tio, yield);
 
 
             Duoram<Node>* oram = tree.get_oram();
             Duoram<Node>* oram = tree.get_oram();
             RegXS root_xs = tree.get_root();
             RegXS root_xs = tree.get_root();
@@ -2814,7 +2813,6 @@ void avl_tests(MPCIO &mpcio,
             success &= del_ret;
             success &= del_ret;
 
 
             if(player0) {
             if(player0) {
-                success &= check_avl;
                 if(success) {
                 if(success) {
                     print_green("T12 : SUCCESS\n");
                     print_green("T12 : SUCCESS\n");
                 } else {
                 } else {
@@ -2836,7 +2834,7 @@ void avl_tests(MPCIO &mpcio,
                     7               5
                     7               5
 
 
 
 
-            T5 checks:
+            T13 checks:
             - root is 7
             - root is 7
             - 9,5,7 are in correct positions
             - 9,5,7 are in correct positions
             - Nodes 5,7,9 have 0 balance
             - Nodes 5,7,9 have 0 balance
@@ -2844,22 +2842,22 @@ void avl_tests(MPCIO &mpcio,
         */
         */
 
 
         {
         {
-            bool success = 1, check_avl;
+            bool success = true;
             int insert_array[] = {9, 5, 12, 7};
             int insert_array[] = {9, 5, 12, 7};
-            size_t insert_array_size = 3;
+            size_t insert_array_size = 4;
             Node node;
             Node node;
-            for(size_t i = 0; i<=insert_array_size; i++) {
+            for(size_t i = 0; i<insert_array_size; i++) {
               randomize_node(node);
               randomize_node(node);
               node.key.set(insert_array[i] * tio.player());
               node.key.set(insert_array[i] * tio.player());
               tree.insert(tio, yield, node);
               tree.insert(tio, yield, node);
-              check_avl = tree.check_avl(tio, yield);
+              success &= tree.check_avl(tio, yield);
             }
             }
 
 
             RegAS del_key;
             RegAS del_key;
             del_key.set(12 * tio.player());
             del_key.set(12 * tio.player());
             bool del_ret;
             bool del_ret;
             del_ret = tree.del(tio, yield, del_key);
             del_ret = tree.del(tio, yield, del_key);
-            tree.check_avl(tio, yield);
+            success &= tree.check_avl(tio, yield);
 
 
             Duoram<Node>* oram = tree.get_oram();
             Duoram<Node>* oram = tree.get_oram();
             RegXS root_xs = tree.get_root();
             RegXS root_xs = tree.get_root();
@@ -2898,7 +2896,6 @@ void avl_tests(MPCIO &mpcio,
             success &= del_ret;
             success &= del_ret;
 
 
             if(player0) {
             if(player0) {
-                success &= check_avl;
                 if(success) {
                 if(success) {
                     print_green("T13 : SUCCESS\n");
                     print_green("T13 : SUCCESS\n");
                 } else {
                 } else {
@@ -2921,7 +2918,7 @@ void avl_tests(MPCIO &mpcio,
             3   7         (No-op)   3   7
             3   7         (No-op)   3   7
 
 
 
 
-            T6 checks:
+            T14 checks:
             - root is 9
             - root is 9
             - 3,5,7,12 are in correct positions
             - 3,5,7,12 are in correct positions
             - Nodes 3,7,12 have 0 balance
             - Nodes 3,7,12 have 0 balance
@@ -2930,22 +2927,22 @@ void avl_tests(MPCIO &mpcio,
 
 
         */
         */
         {
         {
-            bool success = 1, check_avl;
+            bool success = true;
             int insert_array[] = {9, 12, 7, 3, 5};
             int insert_array[] = {9, 12, 7, 3, 5};
-            size_t insert_array_size = 4;
+            size_t insert_array_size = 5;
             Node node;
             Node node;
-            for(size_t i = 0; i<=insert_array_size; i++) {
+            for(size_t i = 0; i<insert_array_size; i++) {
               randomize_node(node);
               randomize_node(node);
               node.key.set(insert_array[i] * tio.player());
               node.key.set(insert_array[i] * tio.player());
               tree.insert(tio, yield, node);
               tree.insert(tio, yield, node);
-              check_avl = tree.check_avl(tio, yield);
+              success &= tree.check_avl(tio, yield);
             }
             }
 
 
             RegAS del_key;
             RegAS del_key;
             del_key.set(8 * tio.player());
             del_key.set(8 * tio.player());
             bool del_ret;
             bool del_ret;
             del_ret = tree.del(tio, yield, del_key);
             del_ret = tree.del(tio, yield, del_key);
-            tree.check_avl(tio, yield);
+            success &= tree.check_avl(tio, yield);
 
 
             Duoram<Node>* oram = tree.get_oram();
             Duoram<Node>* oram = tree.get_oram();
             RegXS root_xs = tree.get_root();
             RegXS root_xs = tree.get_root();
@@ -2993,7 +2990,6 @@ void avl_tests(MPCIO &mpcio,
             success &=(!del_ret);
             success &=(!del_ret);
 
 
             if(player0) {
             if(player0) {
-                success &= check_avl;
                 if(success) {
                 if(success) {
                     print_green("T14 : SUCCESS\n");
                     print_green("T14 : SUCCESS\n");
                 } else {
                 } else {
@@ -3022,22 +3018,22 @@ void avl_tests(MPCIO &mpcio,
         */
         */
 
 
         {
         {
-            bool success = 1, check_avl;
+            bool success = true;
             int insert_array[] = {5, 9, 3, 7};
             int insert_array[] = {5, 9, 3, 7};
-            size_t insert_array_size = 3;
+            size_t insert_array_size = 4;
             Node node;
             Node node;
-            for(size_t i = 0; i<=insert_array_size; i++) {
+            for(size_t i = 0; i<insert_array_size; i++) {
               randomize_node(node);
               randomize_node(node);
               node.key.set(insert_array[i] * tio.player());
               node.key.set(insert_array[i] * tio.player());
               tree.insert(tio, yield, node);
               tree.insert(tio, yield, node);
-              check_avl = tree.check_avl(tio, yield);
+              success &= tree.check_avl(tio, yield);
             }
             }
 
 
             RegAS del_key;
             RegAS del_key;
             del_key.set(3 * tio.player());
             del_key.set(3 * tio.player());
             bool del_ret;
             bool del_ret;
             del_ret = tree.del(tio, yield, del_key);
             del_ret = tree.del(tio, yield, del_key);
-            tree.check_avl(tio, yield);
+            success &= tree.check_avl(tio, yield);
 
 
             Duoram<Node>* oram = tree.get_oram();
             Duoram<Node>* oram = tree.get_oram();
             RegXS root_xs = tree.get_root();
             RegXS root_xs = tree.get_root();
@@ -3076,7 +3072,6 @@ void avl_tests(MPCIO &mpcio,
             success &= del_ret;
             success &= del_ret;
 
 
             if(player0) {
             if(player0) {
-                success &= check_avl;
                 if(success) {
                 if(success) {
                     print_green("T15 : SUCCESS\n");
                     print_green("T15 : SUCCESS\n");
                 } else {
                 } else {
@@ -3100,7 +3095,7 @@ void avl_tests(MPCIO &mpcio,
                      9                        12
                      9                        12
 
 
 
 
-            T8 checks:
+            T16 checks:
             - root is 5
             - root is 5
             - 3,9,8,12 are in correct positions
             - 3,9,8,12 are in correct positions
             - Nodes 1,5,8,9,12 have 0 balance
             - Nodes 1,5,8,9,12 have 0 balance
@@ -3109,22 +3104,22 @@ void avl_tests(MPCIO &mpcio,
 
 
         */
         */
         {
         {
-            bool success = 1, check_avl;
+            bool success = true;
             int insert_array[] = {5, 3, 8, 7, 1, 12, 9};
             int insert_array[] = {5, 3, 8, 7, 1, 12, 9};
-            size_t insert_array_size = 6;
+            size_t insert_array_size = 7;
             Node node;
             Node node;
-            for(size_t i = 0; i<=insert_array_size; i++) {
+            for(size_t i = 0; i<insert_array_size; i++) {
               randomize_node(node);
               randomize_node(node);
               node.key.set(insert_array[i] * tio.player());
               node.key.set(insert_array[i] * tio.player());
               tree.insert(tio, yield, node);
               tree.insert(tio, yield, node);
-              check_avl = tree.check_avl(tio, yield);
+              success &= tree.check_avl(tio, yield);
             }
             }
 
 
             RegAS del_key;
             RegAS del_key;
             del_key.set(7 * tio.player());
             del_key.set(7 * tio.player());
             bool del_ret;
             bool del_ret;
             del_ret = tree.del(tio, yield, del_key);
             del_ret = tree.del(tio, yield, del_key);
-            tree.check_avl(tio, yield);
+            success &= tree.check_avl(tio, yield);
 
 
             Duoram<Node>* oram = tree.get_oram();
             Duoram<Node>* oram = tree.get_oram();
             RegXS root_xs = tree.get_root();
             RegXS root_xs = tree.get_root();
@@ -3175,7 +3170,6 @@ void avl_tests(MPCIO &mpcio,
             success &= del_ret;
             success &= del_ret;
 
 
             if(player0) {
             if(player0) {
-                success &= check_avl;
                 if(success) {
                 if(success) {
                     print_green("T16 : SUCCESS\n");
                     print_green("T16 : SUCCESS\n");
                 } else {
                 } else {
@@ -3219,22 +3213,22 @@ void avl_tests(MPCIO &mpcio,
             - balances and children are correct
             - balances and children are correct
         */
         */
         {
         {
-            bool success = 1, check_avl;
+            bool success = true;
             int insert_array[] = {9, 5, 12, 7, 3, 10, 15, 2, 4, 6, 8, 20, 1};
             int insert_array[] = {9, 5, 12, 7, 3, 10, 15, 2, 4, 6, 8, 20, 1};
-            size_t insert_array_size = 12;
+            size_t insert_array_size = 13;
             Node node;
             Node node;
-            for(size_t i = 0; i<=insert_array_size; i++) {
+            for(size_t i = 0; i<insert_array_size; i++) {
               randomize_node(node);
               randomize_node(node);
               node.key.set(insert_array[i] * tio.player());
               node.key.set(insert_array[i] * tio.player());
               tree.insert(tio, yield, node);
               tree.insert(tio, yield, node);
-              check_avl = tree.check_avl(tio, yield);
+              success &= tree.check_avl(tio, yield);
             }
             }
 
 
             RegAS del_key;
             RegAS del_key;
             del_key.set(10 * tio.player());
             del_key.set(10 * tio.player());
             bool del_ret;
             bool del_ret;
             del_ret = tree.del(tio, yield, del_key);
             del_ret = tree.del(tio, yield, del_key);
-            tree.check_avl(tio, yield);
+            success &= tree.check_avl(tio, yield);
 
 
             Duoram<Node>* oram = tree.get_oram();
             Duoram<Node>* oram = tree.get_oram();
             RegXS root_xs = tree.get_root();
             RegXS root_xs = tree.get_root();
@@ -3318,7 +3312,6 @@ void avl_tests(MPCIO &mpcio,
             }
             }
             success &= del_ret;
             success &= del_ret;
             if(player0) {
             if(player0) {
-                success &= check_avl;
                 if(success) {
                 if(success) {
                     print_green("T17 : SUCCESS\n");
                     print_green("T17 : SUCCESS\n");
                 } else {
                 } else {

+ 1 - 1
avl.hpp

@@ -205,7 +205,7 @@ class AVL {
 
 
     // Deletes the first node that matches del_key. If an item with del_key
     // Deletes the first node that matches del_key. If an item with del_key
     // does not exist in the tree, it results in an explicit (non-oblivious)
     // does not exist in the tree, it results in an explicit (non-oblivious)
-    //  failure.
+    // failure.
     bool del(MPCTIO &tio, yield_t &yield, RegAS del_key);
     bool del(MPCTIO &tio, yield_t &yield, RegAS del_key);
 
 
     // Returns the first node that matches key
     // Returns the first node that matches key

+ 21 - 24
bst.cpp

@@ -209,13 +209,15 @@ void BST::check_bst(MPCTIO &tio, yield_t &yield) {
     The recursive insert() call, invoked by the wrapper insert() function.
     The recursive insert() call, invoked by the wrapper insert() function.
 
 
     Takes as input the pointer to the current node in tree traversal (ptr),
     Takes as input the pointer to the current node in tree traversal (ptr),
-    the new node to be inserted (new_node), the underlying Duoram as a
+    the key to be inserted (insertion_key), the underlying Duoram as a
     flat (A), and the Time-To_live TTL, and a shared flag (isDummy) which
     flat (A), and the Time-To_live TTL, and a shared flag (isDummy) which
     tracks if the operation is dummy/real.
     tracks if the operation is dummy/real.
 
 
+    Returns a tuple <ptr, dir>,  
+    
 */
 */
 std::tuple<RegXS, RegBS> BST::insert(MPCTIO &tio, yield_t &yield, RegXS ptr,
 std::tuple<RegXS, RegBS> BST::insert(MPCTIO &tio, yield_t &yield, RegXS ptr,
-    const Node &new_node, Duoram<Node>::Flat &A, int TTL, RegBS isDummy) {
+    RegAS insertion_key, Duoram<Node>::Flat &A, int TTL, RegBS isDummy) {
     if(TTL==0) {
     if(TTL==0) {
         RegBS zero;
         RegBS zero;
         return {ptr, zero};
         return {ptr, zero};
@@ -224,7 +226,7 @@ std::tuple<RegXS, RegBS> BST::insert(MPCTIO &tio, yield_t &yield, RegXS ptr,
     RegBS isNotDummy = isDummy ^ (!tio.player());
     RegBS isNotDummy = isDummy ^ (!tio.player());
     Node cnode = A[ptr];
     Node cnode = A[ptr];
     // Compare key
     // Compare key
-    auto [lteq, gt] = compare_keys(tio, yield, cnode.key, new_node.key);
+    auto [lteq, gt] = compare_keys(tio, yield, cnode.key, insertion_key);
 
 
     // Depending on [lteq, gt] select the next ptr/index as
     // Depending on [lteq, gt] select the next ptr/index as
     // upper 32 bits of cnode.pointers if lteq
     // upper 32 bits of cnode.pointers if lteq
@@ -246,7 +248,7 @@ std::tuple<RegXS, RegBS> BST::insert(MPCTIO &tio, yield_t &yield, RegXS ptr,
     mpc_and(tio, yield, F_i, (isNotDummy), F_z);
     mpc_and(tio, yield, F_i, (isNotDummy), F_z);
 
 
     isDummy^=F_i;
     isDummy^=F_i;
-    auto [wptr, direction] = insert(tio, yield, next_ptr, new_node, A, TTL-1, isDummy);
+    auto [wptr, direction] = insert(tio, yield, next_ptr, insertion_key, A, TTL-1, isDummy);
 
 
     RegXS ret_ptr;
     RegXS ret_ptr;
     RegBS ret_direction;
     RegBS ret_direction;
@@ -298,7 +300,7 @@ void BST::insert(MPCTIO &tio, yield_t &yield, const Node &node, Duoram<Node>::Fl
 
 
         RegBS isDummy;
         RegBS isDummy;
         //Do a recursive insert
         //Do a recursive insert
-        auto [wptr, direction] = insert(tio, yield, root, node, A, TTL, isDummy);
+        auto [wptr, direction] = insert(tio, yield, root, node.key, A, TTL, isDummy);
 
 
         //Complete the insertion by reading wptr and updating its pointers
         //Complete the insertion by reading wptr and updating its pointers
         RegXS pointers = A[wptr].NODE_POINTERS;
         RegXS pointers = A[wptr].NODE_POINTERS;
@@ -392,8 +394,8 @@ RegBS BST::lookup(MPCTIO &tio, yield_t &yield, RegXS ptr, RegAS key, Duoram<Node
     run_coroutines(tio, coroutines);
     run_coroutines(tio, coroutines);
 
 
     #ifdef BST_DEBUG
     #ifdef BST_DEBUG
-        size_t ckey = mpc_reconstruct(tio, yield, cnode.key, 64);
-        size_t lkey = mpc_reconstruct(tio, yield, key, 64);
+        size_t ckey = mpc_reconstruct(tio, yield, cnode.key);
+        size_t lkey = mpc_reconstruct(tio, yield, key);
         bool rec_lt = mpc_reconstruct(tio, yield, lt);
         bool rec_lt = mpc_reconstruct(tio, yield, lt);
         bool rec_eq = mpc_reconstruct(tio, yield, eq);
         bool rec_eq = mpc_reconstruct(tio, yield, eq);
         bool rec_gt = mpc_reconstruct(tio, yield, gt);
         bool rec_gt = mpc_reconstruct(tio, yield, gt);
@@ -437,10 +439,10 @@ RegBS BST::lookup(MPCTIO &tio, yield_t &yield, RegAS key, Node *ret_node) {
     the key to be deleted (del_key), the underlying Duoram as a
     the key to be deleted (del_key), the underlying Duoram as a
     flat (A), Flags af (already found) and fs (find successor), the
     flat (A), Flags af (already found) and fs (find successor), the
     Time-To_live TTL. Finally, a return structure ret_struct that tracks
     Time-To_live TTL. Finally, a return structure ret_struct that tracks
-    the location of the successor node and the node to delete to perform
-    the actual deletion after the recursive traversal; which is required in
-    the case of a deletion that requires a successor swap (,i.e., when node
-    to delete has both children).
+    the location of the successor node and the node to delete, in order to 
+    perform the actual deletion after the recursive traversal. This is required
+    in the case of a deletion that requires a successor swap (,i.e., when the 
+    node to delete has both children).
 
 
     Returns success/fail bit.
     Returns success/fail bit.
 */
 */
@@ -489,8 +491,8 @@ bool BST::del(MPCTIO &tio, yield_t &yield, RegXS ptr, RegAS del_key,
         eq_rec = mpc_reconstruct(tio, yield, eq);
         eq_rec = mpc_reconstruct(tio, yield, eq);
         gt_rec = mpc_reconstruct(tio, yield, gt);
         gt_rec = mpc_reconstruct(tio, yield, gt);
         size_t del_key_rec, node_key_rec;
         size_t del_key_rec, node_key_rec;
-        del_key_rec = mpc_reconstruct(tio, yield, del_key, 64);
-        node_key_rec = mpc_reconstruct(tio, yield, node.key, 64);
+        del_key_rec = mpc_reconstruct(tio, yield, del_key);
+        node_key_rec = mpc_reconstruct(tio, yield, node.key);
         printf("node.key = %ld, del_key= %ld\n", node_key_rec, del_key_rec);
         printf("node.key = %ld, del_key= %ld\n", node_key_rec, del_key_rec);
         printf("cdpf.compare results: lt = %d, eq = %d, gt = %d\n", lt_rec, eq_rec, gt_rec);
         printf("cdpf.compare results: lt = %d, eq = %d, gt = %d\n", lt_rec, eq_rec, gt_rec);
         */
         */
@@ -622,7 +624,7 @@ bool BST::del(MPCTIO &tio, yield_t &yield, RegXS ptr, RegAS del_key,
         size_t ret_ptr_rec;
         size_t ret_ptr_rec;
         F_rs_rec = mpc_reconstruct(tio, yield, F_rs);
         F_rs_rec = mpc_reconstruct(tio, yield, F_rs);
         F_ls_rec = mpc_reconstruct(tio, yield, F_rs);
         F_ls_rec = mpc_reconstruct(tio, yield, F_rs);
-        ret_ptr_rec = mpc_reconstruct(tio, yield, ret_struct.ret_ptr, 64);
+        ret_ptr_rec = mpc_reconstruct(tio, yield, ret_struct.ret_ptr);
         printf("F_rs_rec = %d, F_ls_rec = %d, ret_ptr_rec = %ld\n", F_rs_rec, F_ls_rec, ret_ptr_rec);
         printf("F_rs_rec = %d, F_ls_rec = %d, ret_ptr_rec = %ld\n", F_rs_rec, F_ls_rec, ret_ptr_rec);
         */
         */
         RegXS new_ptr;
         RegXS new_ptr;
@@ -696,7 +698,7 @@ bool BST::del(MPCTIO &tio, yield_t &yield, RegAS del_key) {
         del_return ret_struct;
         del_return ret_struct;
         auto A = oram.flat(tio, yield);
         auto A = oram.flat(tio, yield);
         int success = del(tio, yield, root, del_key, A, af, fs, TTL, ret_struct);
         int success = del(tio, yield, root, del_key, A, af, fs, TTL, ret_struct);
-        printf ("Success =  %d\n", success);
+        //printf ("Success =  %d\n", success);
         if(!success){
         if(!success){
             return 0;
             return 0;
         }
         }
@@ -758,15 +760,10 @@ void bst(MPCIO &mpcio,
     if (*args) {
     if (*args) {
         depth = atoi(*args);
         depth = atoi(*args);
         ++args;
         ++args;
-    }
-    size_t items = (size_t(1)<<depth)-1;
-    if (*args) {
-        items = atoi(*args);
-        ++args;
-    }
+    } 
 
 
     MPCTIO tio(mpcio, 0, opts.num_threads);
     MPCTIO tio(mpcio, 0, opts.num_threads);
-    run_coroutines(tio, [&tio, depth, items] (yield_t &yield) {
+    run_coroutines(tio, [&tio, depth] (yield_t &yield) {
         size_t size = size_t(1)<<depth;
         size_t size = size_t(1)<<depth;
         BST tree(tio.player(), size);
         BST tree(tio.player(), size);
 
 
@@ -847,7 +844,7 @@ void bst(MPCIO &mpcio,
         if(tio.player()!=2) {
         if(tio.player()!=2) {
             if(rec_found) {
             if(rec_found) {
                 printf("Lookup Success\n");
                 printf("Lookup Success\n");
-                size_t value = mpc_reconstruct(tio, yield, node.value, 64);
+                size_t value = mpc_reconstruct(tio, yield, node.value);
                 printf("value = %lx\n", value);
                 printf("value = %lx\n", value);
             } else {
             } else {
                 printf("Lookup Failed\n");
                 printf("Lookup Failed\n");
@@ -864,7 +861,7 @@ void bst(MPCIO &mpcio,
         if(tio.player()!=2) {
         if(tio.player()!=2) {
             if(rec_found) {
             if(rec_found) {
                 printf("Lookup Success\n");
                 printf("Lookup Success\n");
-                size_t value = mpc_reconstruct(tio, yield, node.value, 64);
+                size_t value = mpc_reconstruct(tio, yield, node.value);
                 printf("value = %lx\n", value);
                 printf("value = %lx\n", value);
             } else {
             } else {
                 printf("Lookup Failed\n");
                 printf("Lookup Failed\n");

+ 1 - 1
bst.hpp

@@ -171,7 +171,7 @@ class BST {
     std::vector<RegXS> empty_locations;
     std::vector<RegXS> empty_locations;
 
 
     std::tuple<RegXS, RegBS> insert(MPCTIO &tio, yield_t &yield, RegXS ptr,
     std::tuple<RegXS, RegBS> insert(MPCTIO &tio, yield_t &yield, RegXS ptr,
-        const Node &new_node, Duoram<Node>::Flat &A, int TTL, RegBS isDummy);
+        RegAS insertion_key, Duoram<Node>::Flat &A, int TTL, RegBS isDummy);
     void insert(MPCTIO &tio, yield_t &yield, const Node &node, Duoram<Node>::Flat &A);
     void insert(MPCTIO &tio, yield_t &yield, const Node &node, Duoram<Node>::Flat &A);
 
 
     bool del(MPCTIO &tio, yield_t &yield, RegXS ptr, RegAS del_key,
     bool del(MPCTIO &tio, yield_t &yield, RegXS ptr, RegAS del_key,