add signature to program

This commit is contained in:
Ajinkya Kulkarni 2024-04-18 15:59:46 +02:00
parent dc4f9eb80f
commit 0cbe93246b
4 changed files with 138 additions and 19 deletions

123
program/Cargo.lock generated
View file

@ -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"

View file

@ -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" }

View file

@ -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

View file

@ -2,12 +2,12 @@
// 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");
@ -20,10 +20,10 @@ fn main() {
let key: Vec<u8> = "passw0rdpassw0rdpassw0rdpassw0rd".as_bytes().to_vec();
let secret = PrivateKey { key };
// let cycle_data: String = fs::read_to_string("../cycle.json").unwrap();
// 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<Obligation> = serde_json::from_str("obligations.json").expect("JSON was not well-formatted");
// let cycle: Cycle = serde_json::from_str(&cycle_file.to_owned()).expect("JSON not well formatted");
// let all_obligations: Vec<Obligation> = serde_json::from_str("obligations.json").expect("JSON was not well-formatted");
let cycle: Cycle = Cycle {
setoff: 103,