瀏覽代碼

fast

master
Your Name 3 週之前
父節點
當前提交
6b872a58f7
共有 2 個文件被更改,包括 25 次插入20 次删除
  1. 9
    16
      src/circuit.rs
  2. 16
    4
      src/main.rs

+ 9
- 16
src/circuit.rs 查看文件

@@ -1,5 +1,3 @@
1
-use std::collections::HashMap;
2
-
3 1
 use crate::{gate::Gate, gate_type::GateType};
4 2
 
5 3
 
@@ -82,10 +80,12 @@ impl Circuit {
82 80
 
83 81
 
84 82
 fn create_n_bit_comparator_gates(n: usize) -> Vec<Gate>{
85
-    let mut indices = HashMap::<String, usize>::new();
83
+    let mut indices: Vec<usize> = vec![0; n];
86 84
     let mut all_gates: Vec<Gate> = vec!();
87 85
     let mut and_gate_indices: Vec<usize> = vec!();
88 86
     
87
+    
88
+
89 89
     rec_n_bit_comperator_gates(0, n, &mut all_gates, &mut and_gate_indices, &mut indices, );
90 90
 
91 91
     // the OR spanning all ANDs
@@ -96,7 +96,7 @@ fn create_n_bit_comparator_gates(n: usize) -> Vec<Gate>{
96 96
     return all_gates;
97 97
 }
98 98
 
99
-fn rec_n_bit_comperator_gates(curr: usize, max: usize, all_gates: &mut Vec<Gate>, and_gate_incides: &mut Vec<usize>, indices: &mut HashMap<String, usize>){
99
+fn rec_n_bit_comperator_gates(curr: usize, max: usize, all_gates: &mut Vec<Gate>, and_gate_incides: &mut Vec<usize>, indices: &mut Vec<usize>){
100 100
     // Incrementing gate index
101 101
     let a_curr_gt_b_curr_gate_index = all_gates.len();
102 102
 
@@ -111,27 +111,20 @@ fn rec_n_bit_comperator_gates(curr: usize, max: usize, all_gates: &mut Vec<Gate>
111 111
     let mut this_recursion_gate_indices: Vec<usize> = vec!(a_curr_gt_b_curr_gate_index);
112 112
 
113 113
     for i in 0..curr {
114
-        // A_i
115
-        let a_i = format!("A{}", max-1-i);
116
-        //B_i
117
-        let b_i = format!("B{}", max-1-i);
118
-
119
-        // A_i=B_i
120
-        let a_i_eq_b_i = format!("{} = {}", a_i, b_i);
121
-        // The curr-1'th equality gate is the only one that doesn't exist yet
114
+        let key = max-1-i;
122 115
         if i == curr-1 {
123 116
             // Gate(A_current > B_current)
124 117
             let a_i_eq_b_i_gate = Gate::new(GateType::Equal, vec!(), vec!(i, i+max));
125 118
             let a_curr_gt_b_curr_gate_index = all_gates.len();
126
-            indices.insert(a_i_eq_b_i.clone(), a_curr_gt_b_curr_gate_index);
119
+            indices[key] = a_curr_gt_b_curr_gate_index;
127 120
             all_gates.push(a_i_eq_b_i_gate);
128 121
         }
129
-        let eq_gate_index = indices.get(&a_i_eq_b_i).unwrap();
122
+        let eq_gate_index = indices[key];
130 123
 
131
-        //print!("&& ({}) ", a_i_eq_b_i);
124
+        //print!("&& ({}) ", format!("{} = {}", format!("A{}", key), format!("B{}", key)));
132 125
 
133 126
         // Index of this equality gate
134
-        this_recursion_gate_indices.push(*eq_gate_index);
127
+        this_recursion_gate_indices.push(eq_gate_index);
135 128
     }
136 129
 
137 130
     let and_curr_index = all_gates.len(); 

+ 16
- 4
src/main.rs 查看文件

@@ -1,9 +1,20 @@
1
-use apet_ex1::{circuit::Circuit, scalar_to_bits::scalar_to_bits};
2
-use curve25519_dalek::Scalar;
3
-use num_bigint::BigUint;
4
-use rand::rngs::OsRng;
1
+use apet_ex1::circuit::Circuit;
5 2
 
6 3
 fn main() {
4
+    let input_bits = vec![
5
+//         A2     A1    A0
6
+//          0      1     2
7
+        false, false, true,
8
+//         B2     B1    B0
9
+//          3      4     5
10
+        false, true, false
11
+    ];
12
+
13
+
14
+    let c = Circuit::compare_n_bit_numbers(input_bits, 3);
15
+    let res = c.eval();
16
+    println!("1 > 2 ? {}", res);
17
+/* 
7 18
     let a = Scalar::random(&mut OsRng);
8 19
     let b = Scalar::random(&mut OsRng);
9 20
     // Convert to bit representation
@@ -23,4 +34,5 @@ fn main() {
23 34
     let b_int = BigUint::from_bytes_le(&b.to_bytes());
24 35
 
25 36
     println!("{}", circuit_result == (a_int > b_int))
37
+*/
26 38
 }

Loading…
取消
儲存