diff --git a/program/Cargo.lock b/program/Cargo.lock index d0c729e..e360ef6 100644 --- a/program/Cargo.lock +++ b/program/Cargo.lock @@ -41,6 +41,15 @@ dependencies = [ "wyz", ] +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array", +] + [[package]] name = "block-buffer" version = "0.10.4" @@ -50,6 +59,12 @@ dependencies = [ "generic-array", ] +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + [[package]] name = "cfg-if" version = "1.0.0" @@ -93,6 +108,19 @@ dependencies = [ "typenum", ] +[[package]] +name = "curve25519-dalek-ng" +version = "4.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c359b7249347e46fb28804470d071c921156ad62b3eef5d34e2ba867533dec8" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core", + "subtle-ng", + "zeroize", +] + [[package]] name = "der" version = "0.7.9" @@ -103,13 +131,22 @@ dependencies = [ "zeroize", ] +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + [[package]] name = "digest" version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer", + "block-buffer 0.10.4", "const-oid", "crypto-common", "subtle", @@ -122,13 +159,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ "der", - "digest", + "digest 0.10.7", "elliptic-curve", "rfc6979", "signature", "spki", ] +[[package]] +name = "ed25519-consensus" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c8465edc8ee7436ffea81d21a019b16676ee3db267aa8d5a8d729581ecf998b" +dependencies = [ + "curve25519-dalek-ng", + "hex", + "rand_core", + "serde", + "sha2 0.9.9", + "thiserror", + "zeroize", +] + [[package]] name = "elliptic-curve" version = "0.13.8" @@ -137,7 +189,7 @@ checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ "base16ct", "crypto-bigint", - "digest", + "digest 0.10.7", "ff", "generic-array", "group", @@ -199,13 +251,19 @@ dependencies = [ "subtle", ] +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + [[package]] name = "hmac" version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest", + "digest 0.10.7", ] [[package]] @@ -218,7 +276,7 @@ dependencies = [ "ecdsa", "elliptic-curve", "once_cell", - "sha2", + "sha2 0.10.8", "signature", ] @@ -246,7 +304,9 @@ name = "mtcs-sp1-program" version = "0.1.0" dependencies = [ "bincode", + "ed25519-consensus", "mtcs-core", + "rand", "rs_merkle", "sp1-zkvm", ] @@ -257,6 +317,12 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + [[package]] name = "pkcs8" version = "0.10.2" @@ -343,7 +409,7 @@ version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b241d2e59b74ef9e98d94c78c47623d04c8392abaf82014dfd372a16041128f" dependencies = [ - "sha2", + "sha2 0.10.8", ] [[package]] @@ -380,6 +446,19 @@ dependencies = [ "syn", ] +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + [[package]] name = "sha2" version = "0.10.8" @@ -387,7 +466,7 @@ source = "git+https://github.com/sp1-patches/RustCrypto-hashes?branch=patch-v0.1 dependencies = [ "cfg-if", "cpufeatures", - "digest", + "digest 0.10.7", ] [[package]] @@ -396,7 +475,7 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ - "digest", + "digest 0.10.7", "rand_core", ] @@ -427,7 +506,7 @@ dependencies = [ "once_cell", "rand", "serde", - "sha2", + "sha2 0.10.8", "sp1-precompiles", ] @@ -447,6 +526,12 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +[[package]] +name = "subtle-ng" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" + [[package]] name = "syn" version = "2.0.58" @@ -464,6 +549,26 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" +[[package]] +name = "thiserror" +version = "1.0.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "typenum" version = "1.17.0" diff --git a/program/Cargo.toml b/program/Cargo.toml index 265476a..16e13f3 100644 --- a/program/Cargo.toml +++ b/program/Cargo.toml @@ -9,6 +9,8 @@ sp1-zkvm = { git = "https://github.com/succinctlabs/sp1.git" } mtcs-core = {path = "../core"} rs_merkle = "1.4.2" bincode = "1.3.3" +ed25519-consensus = "2.1" +rand = "0.8.5" [patch.crates-io] sha2-v0-10-8 = { git = "https://github.com/sp1-patches/RustCrypto-hashes", package = "sha2", branch = "patch-v0.10.8" } diff --git a/program/src/main.rs b/program/src/main.rs index 405bac9..eddc3c4 100644 --- a/program/src/main.rs +++ b/program/src/main.rs @@ -1,9 +1,10 @@ #![no_main] use bincode::serialize; +use ed25519_consensus::*; use mtcs_core::*; +use rand::thread_rng; use rs_merkle::{algorithms::Sha256 as MerkleSha256, Hasher, MerkleProof}; - sp1_zkvm::entrypoint!(main); pub fn main() { @@ -49,7 +50,18 @@ pub fn main() { merkle_data.len )); println!("creating commitments for public data"); - sp1_zkvm::io::commit(&cycle); + + let (vk_bytes, sig) = { + // Generate a signing key and sign the message + let sk = SigningKey::new(thread_rng()); + let sig = sk.sign(&bincode::serialize(&cycle).unwrap()[..]); + + let vk_bytes: [u8; 32] = VerificationKey::from(&sk).into(); + + (vk_bytes, sig) + }; + sp1_zkvm::io::commit(&vk_bytes); + sp1_zkvm::io::commit(&sig); } // TODO: for every edge involved in clearing, the total offsets of all cycles // passing through that edge should be less than the value of that edge diff --git a/script/src/main.rs b/script/src/main.rs index f818ab7..919603f 100644 --- a/script/src/main.rs +++ b/script/src/main.rs @@ -2,29 +2,29 @@ // The ELF is used for proving and the ID is used for verification. use bincode::serialize; use mtcs_core::*; -use std::fs; +//use std::fs; use rs_merkle::{algorithms::Sha256 as MerkleSha256, Hasher, MerkleTree}; use std::time::SystemTime; -use sp1_sdk::{SP1Prover, SP1Stdin, SP1Verifier, utils}; +use sp1_sdk::{utils, SP1Prover, SP1Stdin, SP1Verifier}; const ELF: &[u8] = include_bytes!("../../program/elf/riscv32im-succinct-zkvm-elf"); fn main() { utils::setup_logger(); let start_time = SystemTime::now(); - + println!("generating guest inputs..."); // For example: let key: Vec = "passw0rdpassw0rdpassw0rdpassw0rd".as_bytes().to_vec(); let secret = PrivateKey { key }; - // let cycle_data: String = fs::read_to_string("../cycle.json").unwrap(); - - // let cycle: Cycle = serde_json::from_str(&cycle_file.to_owned()).expect("JSON not well formatted"); -// let all_obligations: Vec = serde_json::from_str("obligations.json").expect("JSON was not well-formatted"); - + // let cycle_data: String = fs::read_to_string("../cycle.json").unwrap(); + + // let cycle: Cycle = serde_json::from_str(&cycle_file.to_owned()).expect("JSON not well formatted"); + // let all_obligations: Vec = serde_json::from_str("obligations.json").expect("JSON was not well-formatted"); + let cycle: Cycle = Cycle { setoff: 103, size: 3,