Просмотр исходного кода

[example/lead] create_coins_sk as PRF derived from previous sks

mohab 4 лет назад
Родитель
Сommit
3ea82ee8a3
1 измененных файлов с 48 добавлено и 7 удалено
  1. 48 7
      example/lead.rs

+ 48 - 7
example/lead.rs

@@ -57,19 +57,60 @@ pub struct Coin {
     opening2: Option<pallas::Base>,
     opening2: Option<pallas::Base>,
 }
 }
 
 
+fn create_coins_sks(len : usize) ->
+    (Vec<MerkleNode>, Vec<[MerkleNode; MERKLE_DEPTH_ORCHARD]>)
+{
+    /*
+    at the onset of an epoch, the first slot's coin's secret key
+    is sampled at random, and the reset of the secret keys are derived,
+    for sk (secret key) at time i+1 is derived from secret key at time i.
+     */
+    let mut rng = thread_rng();
+    let sk: u64 = rng.gen();
+    let mut tree = BridgeTree::<MerkleNode, 32>::new(len);
+    let mut root_sks: Vec<MerkleNode> = vec![];
+    let mut path_sks: Vec<[MerkleNode; MERKLE_DEPTH_ORCHARD]> = vec![];
+    for i in 0..len {
+        //TODO (research) why the conversion between point and base is panicing?
+        // is the endianess different?
+        let base = pedersen_commitment_scalar(pallas::Scalar::one(), pallas::Scalar::from(sk));
+        let coord = base.to_affine().coordinates().unwrap();
+        let coord_prod =  coord.x() * coord.y();
+        let node = MerkleNode(coord_prod);
+        tree.append(&node.clone());
+        let leaf_position = tree.witness();
+        //let (leaf_pos, path) = tree.authentication_path(leaf_position.unwrap()).unwrap();
+        let path = tree.authentication_path(leaf_position.unwrap()).unwrap();
+        root_sks.push(tree.root().clone());
+        path_sks.push(path.as_slice().try_into().unwrap());
+    }
+    (root_sks, path_sks)
+}
+
+/*
+fn create_coins(...)
+{
+
+}
+
+fn build_commit_tree(cms : Vec<Coin>)
+{
+    //
+}
+
+*/
 fn main() {
 fn main() {
     let k = 13;
     let k = 13;
     //
     //
     const LEN: usize = 10;
     const LEN: usize = 10;
     let mut rng = thread_rng();
     let mut rng = thread_rng();
-    let mut sks: Vec<u64> = vec![];
     let mut root_sks: Vec<MerkleNode> = vec![];
     let mut root_sks: Vec<MerkleNode> = vec![];
     let mut path_sks: Vec<[MerkleNode; MERKLE_DEPTH_ORCHARD]> = vec![];
     let mut path_sks: Vec<[MerkleNode; MERKLE_DEPTH_ORCHARD]> = vec![];
-    let mut tree = BridgeTree::<MerkleNode, 32>::new(LEN);
+    (root_sks, path_sks) = create_coins_sks(LEN);
+    /*
+
     for i in 0..LEN {
     for i in 0..LEN {
-        let tmp: u64 = rng.gen();
-        let mut sk: u64 = tmp;
-        sks.push(sk.clone());
+        let sk: u64 = rng.gen();
         let node = MerkleNode(pallas::Base::from(sk));
         let node = MerkleNode(pallas::Base::from(sk));
         tree.append(&node.clone());
         tree.append(&node.clone());
         let leaf_position = tree.witness();
         let leaf_position = tree.witness();
@@ -78,6 +119,7 @@ fn main() {
         root_sks.push(tree.root().clone());
         root_sks.push(tree.root().clone());
         path_sks.push(path.as_slice().try_into().unwrap());
         path_sks.push(path.as_slice().try_into().unwrap());
     }
     }
+    */
     let mut seeds: Vec<u64> = vec![];
     let mut seeds: Vec<u64> = vec![];
     for i in 0..LEN {
     for i in 0..LEN {
         let rho: u64 = rng.gen();
         let rho: u64 = rng.gen();
@@ -100,7 +142,7 @@ fn main() {
         let c_v = pallas::Base::from(u64::try_from(i * 2).unwrap());
         let c_v = pallas::Base::from(u64::try_from(i * 2).unwrap());
         //random sampling of the same size of prf,
         //random sampling of the same size of prf,
         //pseudo random sampling that is the size of pederson commitment
         //pseudo random sampling that is the size of pederson commitment
-        let c_sk: u64 = sks[i];
+
         let iu64: u64 = u64::try_from(i).unwrap();
         let iu64: u64 = u64::try_from(i).unwrap();
         let c_sl = pallas::Base::from(iu64);
         let c_sl = pallas::Base::from(iu64);
 
 
@@ -163,7 +205,6 @@ fn main() {
             nonce: Some(c_seed),
             nonce: Some(c_seed),
             nonce_cm: Some(c_seed2),
             nonce_cm: Some(c_seed2),
             sn: Some(c_sn),
             sn: Some(c_sn),
-            //sk: Some(c_sk),
             pk: Some(c_pk),
             pk: Some(c_pk),
             pk_x: Some(c_pk_pt_x),
             pk_x: Some(c_pk_pt_x),
             pk_y: Some(c_pk_pt_y),
             pk_y: Some(c_pk_pt_y),