Browse Source

tau: remove ring crate and use darkfi-sdk

dasman 1 năm trước cách đây
mục cha
commit
a4334bb53f

+ 1 - 1
Cargo.lock

@@ -7490,13 +7490,13 @@ dependencies = [
  "chrono",
  "crypto_box",
  "darkfi",
+ "darkfi-sdk",
  "darkfi-serial",
  "easy-parallel",
  "futures",
  "libc",
  "log",
  "rand 0.8.5",
- "ring 0.17.8",
  "serde",
  "signal-hook",
  "signal-hook-async-std",

+ 1 - 1
bin/tau/taud/Cargo.toml

@@ -24,6 +24,7 @@ darkfi = { path = "../../../", features = [
     "rpc",
 ] }
 
+darkfi-sdk = {path = "../../../src/sdk", features = ["async"]}
 darkfi-serial = "0.4.2"
 
 # Event Graph DB
@@ -33,7 +34,6 @@ sled-overlay = "0.1.6"
 blake3 = "1.5.5"
 crypto_box = { version = "0.9.1", features = ["std", "chacha20"] }
 rand = "0.8.5"
-ring = "0.17.8"
 
 # Encoding and parsing
 bs58 = "0.5.1"

+ 31 - 32
bin/tau/taud/src/main.rs

@@ -22,6 +22,7 @@ use std::{
     ffi::CString,
     fs::{create_dir_all, remove_dir_all},
     io::{stdin, Write},
+    str::FromStr,
     sync::{Arc, OnceLock},
 };
 
@@ -37,10 +38,6 @@ use futures::{select, FutureExt};
 use libc::mkfifo;
 use log::{debug, error, info};
 use rand::rngs::OsRng;
-use ring::{
-    rand::SystemRandom,
-    signature::{Ed25519KeyPair, KeyPair, Signature, UnparsedPublicKey, ED25519},
-};
 use sled_overlay::sled;
 use smol::{fs, stream::StreamExt};
 use structopt_toml::StructOptToml;
@@ -62,6 +59,11 @@ use darkfi::{
     Error, Result,
 };
 
+use darkfi_sdk::crypto::{
+    schnorr::{SchnorrPublic, SchnorrSecret, Signature},
+    Keypair, PublicKey,
+};
+
 mod jsonrpc;
 mod settings;
 
@@ -78,17 +80,18 @@ use crate::{
 
 struct Workspace {
     read_key: ChaChaBox,
-    write_key: Option<Ed25519KeyPair>,
-    write_pubkey: UnparsedPublicKey<Vec<u8>>,
+    write_key: Option<darkfi_sdk::crypto::SecretKey>,
+    write_pubkey: PublicKey,
 }
 
 impl Workspace {
     fn new() -> Self {
         let secret_key = SecretKey::generate(&mut OsRng);
+        let keypair = Keypair::default();
         Self {
             read_key: ChaChaBox::new(&secret_key.public_key(), &secret_key),
             write_key: None,
-            write_pubkey: UnparsedPublicKey::new(&ED25519, vec![0]),
+            write_pubkey: keypair.public,
         }
     }
 }
@@ -101,12 +104,12 @@ pub struct EncryptedTask {
 #[derive(SerialEncodable, SerialDecodable)]
 struct SignedTask {
     task: Vec<u8>,
-    signature: Vec<u8>,
+    signature: Signature,
 }
 
 impl SignedTask {
     fn new(task: &TaskInfo, signature: Signature) -> Self {
-        Self { task: serialize(task), signature: signature.as_ref().to_vec() }
+        Self { task: serialize(task), signature }
     }
 }
 
@@ -198,9 +201,10 @@ fn parse_configured_workspaces(data: &toml::Value) -> Result<HashMap<String, Wor
             if let Some(write_pubkey) = write_pubkey.as_str() {
                 if !write_pubkey.is_empty() {
                     info!(target: "taud", "Found configured write_public_key for {} workspace", name);
-                    let write_pubkey = write_pubkey.to_string();
-                    let decoded_write_pubkey = bs58::decode(write_pubkey).into_vec().unwrap();
-                    ws.write_pubkey = UnparsedPublicKey::new(&ED25519, decoded_write_pubkey);
+                    let write_key = PublicKey::from_str(write_pubkey).unwrap();
+                    // let write_pubkey = write_pubkey.to_string();
+                    // let decoded_write_pubkey = bs58::decode(write_pubkey).into_vec().unwrap();
+                    ws.write_pubkey = write_key;
                 }
             } else {
                 return Err(Error::ParseFailed("Workspace write_public_key not a string"))
@@ -214,15 +218,17 @@ fn parse_configured_workspaces(data: &toml::Value) -> Result<HashMap<String, Wor
                 if !write_key.is_empty() {
                     info!(target: "taud", "Found configured write_key for {} workspace", name);
                     let write_key = write_key.to_string();
-                    let pkcs8_bytes = bs58::decode(write_key).into_vec().unwrap();
-                    let ed25519 = match Ed25519KeyPair::from_pkcs8(pkcs8_bytes.as_ref()) {
+                    let write_key_bytes = bs58::decode(write_key).into_vec().unwrap();
+                    let secret = match darkfi_sdk::crypto::SecretKey::from_bytes(
+                        write_key_bytes.try_into().unwrap(),
+                    ) {
                         Ok(key) => key,
                         Err(e) => {
                             error!(target: "taud", "Failed parsing write_key: {}", e);
                             return Err(Error::ParseFailed("Failed parsing write_key"))
                         }
                     };
-                    ws.write_key = Some(ed25519);
+                    ws.write_key = Some(secret);
                 }
             } else {
                 return Err(Error::ParseFailed("Workspace write_key not a string"))
@@ -230,7 +236,8 @@ fn parse_configured_workspaces(data: &toml::Value) -> Result<HashMap<String, Wor
         }
 
         if let Some(wrt_key) = ws.write_key.as_ref() {
-            if wrt_key.public_key().as_ref() != ws.write_pubkey.as_ref() {
+            let pk = PublicKey::from_secret(*wrt_key);
+            if pk != ws.write_pubkey {
                 error!(target: "taud", "Wrong keypair for {} workspace, the workspace is not added!", name);
                 continue
             }
@@ -359,19 +366,14 @@ async fn on_receive_task(
             continue
         }
 
-        if workspace
+        if !workspace
             .write_pubkey
             .verify(&signed_task.as_ref().unwrap().task, &signed_task.as_ref().unwrap().signature)
-            .is_err()
         {
-            // *verified.lock().await = false;
             error!(target: "taud", "Task is not verified: wrong write_public_key");
             error!(target: "taud", "Task is not saved");
             continue
         }
-        // else {
-        //     *verified.lock().await = true;
-        // }
 
         let mut task: TaskInfo = deserialize(&signed_task.unwrap().task)?;
         info!(target: "taud", "Save the task: ref: {}", task.ref_id);
@@ -473,20 +475,17 @@ async fn realmain(settings: Args, executor: Arc<smol::Executor<'static>>) -> Res
                 continue
             }
 
+            // Encryption
             // Chachabox secret key (read_key) used for encrypting tasks.
             let secret_key = SecretKey::generate(&mut OsRng);
             let encoded = bs58::encode(secret_key.to_bytes());
 
-            // Ed25519 secret key (write_key) used for signing tasks.
-            let rng = SystemRandom::new();
-            let pkcs8_bytes = Ed25519KeyPair::generate_pkcs8(&rng).unwrap();
-            // openssl genpkey -algorithm ED25519
-            let kp = Ed25519KeyPair::from_pkcs8(pkcs8_bytes.as_ref()).unwrap();
-            let sk = bs58::encode(pkcs8_bytes).into_string();
-
-            // Ed25519 public key (write_public_key) used for verifying tasks.
-            let peer_public_key_bytes = kp.public_key().as_ref();
-            let pk = bs58::encode(peer_public_key_bytes).into_string();
+            // Signature
+            // Secret key (write_key) used for signing tasks.
+            let keypair = Keypair::random(&mut OsRng);
+            let sk = format!("{}", keypair.secret);
+            // Public key (write_public_key) used for verifying tasks.
+            let pk = format!("{}", keypair.public);
 
             println!("Please add the following to the config file:");
             println!("[workspace.\"{}\"]", workspace);

+ 3 - 3
contrib/localnet/taud-four-nodes/seed.toml

@@ -42,9 +42,9 @@ nickname = "seed"
 #write_key = ""
 
 [workspace."test"]
-read_key = "DDEza5ifrphkKTvMSP1c8dR5RyUgn1WQHBvnAJKNzDRK"
-write_public_key = "CAX5qCXCTGwqT27ixzdgm4H54kbh2HtrXbzj9odAyjxh"
-# write_key = "nGpVmGTNjfvJ9ojqijQwUMsbjrzaqHK5RniGAx9LTJfm49QcGY48RCaJ6riePvtr7xwUCyfvrwjxS8oqnDgpiZhS8KCQrykRYAwuFoHb41PSEMALu"
+read_key = "AXApLyi8id3T1MwKkrgdYZtkpUag5qMmambDHGkdFiY2"
+# write_key = "7jvrj4Rxnm1UcAjz5Y1CNFEfZiGMg9F1ekfbbEakkicA"
+write_public_key = "2LW4qXxR5QSybtMeRtX69GdqNWxgAbDVyMT6aWe37MT7"
 
 # P2P network settings
 [net]

+ 4 - 4
contrib/localnet/taud-four-nodes/taud_full_node1.toml

@@ -41,10 +41,10 @@ nickname = "node1"
 #write_public_key = "Fgsc8tep4KX3Rb2drq8RxMyrHFWQ7wZaZPpF9F3GQYFG"
 #write_key = ""
 
-[workspace."test"]
-read_key = "DDEza5ifrphkKTvMSP1c8dR5RyUgn1WQHBvnAJKNzDRK"
-write_public_key = "CAX5qCXCTGwqT27ixzdgm4H54kbh2HtrXbzj9odAyjxh"
-write_key = "nGpVmGTNjfvJ9ojqijQwUMsbjrzaqHK5RniGAx9LTJfm49QcGY48RCaJ6riePvtr7xwUCyfvrwjxS8oqnDgpiZhS8KCQrykRYAwuFoHb41PSEMALu"
+[workspace."darkfi-dev"]
+read_key = "AXApLyi8id3T1MwKkrgdYZtkpUag5qMmambDHGkdFiY2"
+write_key = "7jvrj4Rxnm1UcAjz5Y1CNFEfZiGMg9F1ekfbbEakkicA"
+write_public_key = "2LW4qXxR5QSybtMeRtX69GdqNWxgAbDVyMT6aWe37MT7"
 
 # P2P network settings
 [net]

+ 3 - 3
contrib/localnet/taud-four-nodes/taud_full_node2.toml

@@ -42,9 +42,9 @@ nickname = "node2"
 #write_key = ""
 
 [workspace."test"]
-read_key = "DDEza5ifrphkKTvMSP1c8dR5RyUgn1WQHBvnAJKNzDRK"
-write_public_key = "CAX5qCXCTGwqT27ixzdgm4H54kbh2HtrXbzj9odAyjxh"
-write_key = "nGpVmGTNjfvJ9ojqijQwUMsbjrzaqHK5RniGAx9LTJfm49QcGY48RCaJ6riePvtr7xwUCyfvrwjxS8oqnDgpiZhS8KCQrykRYAwuFoHb41PSEMALu"
+read_key = "AXApLyi8id3T1MwKkrgdYZtkpUag5qMmambDHGkdFiY2"
+write_key = "7jvrj4Rxnm1UcAjz5Y1CNFEfZiGMg9F1ekfbbEakkicA"
+write_public_key = "2LW4qXxR5QSybtMeRtX69GdqNWxgAbDVyMT6aWe37MT7"
 
 # P2P network settings
 [net]

+ 3 - 3
contrib/localnet/taud-four-nodes/taud_full_node3.toml

@@ -42,9 +42,9 @@ nickname = "node3"
 #write_key = ""
 
 [workspace."test"]
-read_key = "DDEza5ifrphkKTvMSP1c8dR5RyUgn1WQHBvnAJKNzDRK"
-write_public_key = "CAX5qCXCTGwqT27ixzdgm4H54kbh2HtrXbzj9odAyjxh"
-write_key = "nGpVmGTNjfvJ9ojqijQwUMsbjrzaqHK5RniGAx9LTJfm49QcGY48RCaJ6riePvtr7xwUCyfvrwjxS8oqnDgpiZhS8KCQrykRYAwuFoHb41PSEMALu"
+read_key = "AXApLyi8id3T1MwKkrgdYZtkpUag5qMmambDHGkdFiY2"
+write_key = "7jvrj4Rxnm1UcAjz5Y1CNFEfZiGMg9F1ekfbbEakkicA"
+write_public_key = "2LW4qXxR5QSybtMeRtX69GdqNWxgAbDVyMT6aWe37MT7"
 
 # P2P network settings
 [net]

+ 3 - 3
contrib/localnet/taud-four-nodes/taud_full_node4.toml

@@ -42,9 +42,9 @@ nickname = "node4"
 #write_key = ""
 
 [workspace."test"]
-read_key = "DDEza5ifrphkKTvMSP1c8dR5RyUgn1WQHBvnAJKNzDRK"
-write_public_key = "CAX5qCXCTGwqT27ixzdgm4H54kbh2HtrXbzj9odAyjxh"
-# write_key = "nGpVmGTNjfvJ9ojqijQwUMsbjrzaqHK5RniGAx9LTJfm49QcGY48RCaJ6riePvtr7xwUCyfvrwjxS8oqnDgpiZhS8KCQrykRYAwuFoHb41PSEMALu"
+read_key = "AXApLyi8id3T1MwKkrgdYZtkpUag5qMmambDHGkdFiY2"
+# write_key = "7jvrj4Rxnm1UcAjz5Y1CNFEfZiGMg9F1ekfbbEakkicA"
+write_public_key = "2LW4qXxR5QSybtMeRtX69GdqNWxgAbDVyMT6aWe37MT7"
 
 # P2P network settings
 [net]