diff --git a/Cargo.toml b/Cargo.toml index 127f1e9..80d3323 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,5 @@ [workspace] resolver = "2" members = [ - "guest", - "host", + "encryption-demo", ] diff --git a/encryption-demo/Cargo.toml b/encryption-demo/Cargo.toml index 26a793e..cefdc78 100644 --- a/encryption-demo/Cargo.toml +++ b/encryption-demo/Cargo.toml @@ -1,3 +1,17 @@ -[workspace] -resolver = "2" -members = ["guest", "host"] +[package] +name = "encryption-demo" +version = "0.1.0" +edition = "2021" +build = "build.rs" + +[dependencies] +risc0-zkvm = { version = "2.3.1", features = ["std", "prove"] } +anyhow = "1.0" +hex = "0.4" + +[build-dependencies] +risc0-build = "2.3.1" + +[package.metadata.risc0] +methods = ["methods/guest"] + diff --git a/encryption-demo/host/build.rs b/encryption-demo/build.rs similarity index 97% rename from encryption-demo/host/build.rs rename to encryption-demo/build.rs index 08a8a4e..aa600df 100644 --- a/encryption-demo/host/build.rs +++ b/encryption-demo/build.rs @@ -1,3 +1,4 @@ fn main() { risc0_build::embed_methods(); } + diff --git a/encryption-demo/guest/src/main.rs b/encryption-demo/guest/src/main.rs deleted file mode 100644 index f328e4d..0000000 --- a/encryption-demo/guest/src/main.rs +++ /dev/null @@ -1 +0,0 @@ -fn main() {} diff --git a/encryption-demo/host/Cargo.toml b/encryption-demo/host/Cargo.toml deleted file mode 100644 index 35aef02..0000000 --- a/encryption-demo/host/Cargo.toml +++ /dev/null @@ -1,15 +0,0 @@ -[package] -name = "host" -version = "0.1.0" -edition = "2021" -build = "build.rs" - -[dependencies] -risc0-zkvm = { version = "2.3.1", features = ["std"] } -hex = "0.4" - -[build-dependencies] -risc0-build = "2.3.1" - -[package.metadata.risc0] -methods = ["/Users/mellaz/Documents/nssa-zkvms/nescience-zkvm-testing/encryption-demo/guest"] diff --git a/encryption-demo/host/src/main.rs b/encryption-demo/host/src/main.rs deleted file mode 100644 index 3da01f8..0000000 --- a/encryption-demo/host/src/main.rs +++ /dev/null @@ -1,32 +0,0 @@ -include!(concat!(env!("OUT_DIR"), "/methods.rs")); - -use risc0_zkvm::{Prover, Receipt}; -use hex::encode; - -fn main() -> anyhow::Result<()> { - // Example inputs - let key = [0x42u8; 32]; - let nonce = [0x24u8; 12]; - let plaintext = b"Hello, RISC Zero ChaCha20 demo!"; - - // 1) Create the prover with the embedded guest code - let mut prover = Prover::new(&GUEST_ELF, &GUEST_ID)?; - - // 2) Supply inputs - prover.add_input_u8_slice(&key); - prover.add_input_u8_slice(&nonce); - prover.add_input_u8_slice(plaintext); - - // 3) Run, getting a Receipt (proof + journal) - let receipt: Receipt = prover.run()?; - - // 4) (Optionally) verify the proof - receipt.verify(&GUEST_ID)?; - - // 5) Extract and print the ciphertext - let ct: &[u8] = receipt.get_journal_bytes(); - println!("Ciphertext: {}", encode(ct)); - - Ok(()) -} - diff --git a/encryption-demo/methods/Cargo.toml b/encryption-demo/methods/Cargo.toml new file mode 100644 index 0000000..9ab59da --- /dev/null +++ b/encryption-demo/methods/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "methods" +version = "0.1.0" +edition = "2021" + +[build-dependencies] +risc0-build = { version = "2.3.1" } + +[package.metadata.risc0] +methods = ["methods/guest"] diff --git a/encryption-demo/guest/Cargo.toml b/encryption-demo/methods/guest/Cargo.toml similarity index 50% rename from encryption-demo/guest/Cargo.toml rename to encryption-demo/methods/guest/Cargo.toml index 59cefb5..ed8fc71 100644 --- a/encryption-demo/guest/Cargo.toml +++ b/encryption-demo/methods/guest/Cargo.toml @@ -1,13 +1,12 @@ [package] -name = "guest" +name = "guest" version = "0.1.0" edition = "2021" +[workspace] + [dependencies] -risc0-zkvm = { version = "2.3.1", default-features = false } -chacha20 = "0.9" +risc0-zkvm = { version = "2.3.1", default-features = false} +chacha20 = { version = "0.9", default-features = false } cipher = { version = "0.4", default-features = false } -[[bin]] -name = "guest" -path = "src/main.rs" \ No newline at end of file diff --git a/encryption-demo/methods/guest/src/lib.rs b/encryption-demo/methods/guest/src/lib.rs new file mode 100644 index 0000000..cf0f528 --- /dev/null +++ b/encryption-demo/methods/guest/src/lib.rs @@ -0,0 +1,22 @@ +#![no_std] +#![no_main] + +extern crate alloc; +use alloc::vec::Vec; + +use risc0_zkvm::guest::env; +risc0_zkvm::entry!(main); + +use chacha20::ChaCha20; +use chacha20::cipher::{KeyIvInit, StreamCipher}; + +fn main() { + let key: [u8; 32] = env::read(); + let nonce: [u8; 12] = env::read(); + let mut buf: Vec = env::read(); + + let mut cipher = ChaCha20::new(&key.into(), &nonce.into()); + cipher.apply_keystream(&mut buf); + + env::commit_slice(&buf); +} diff --git a/encryption-demo/methods/guest/src/main.rs b/encryption-demo/methods/guest/src/main.rs new file mode 100644 index 0000000..71a7f39 --- /dev/null +++ b/encryption-demo/methods/guest/src/main.rs @@ -0,0 +1,22 @@ +#![no_std] +#![no_main] + +extern crate alloc; +use alloc::vec::Vec; + +use risc0_zkvm::guest::env; +risc0_zkvm::guest::entry!(main); + +use chacha20::ChaCha20; +use chacha20::cipher::{KeyIvInit, StreamCipher}; + +fn main() { + let key: [u8; 32] = env::read(); + let nonce: [u8; 12] = env::read(); + let mut buf: Vec = env::read(); + + let mut cipher = ChaCha20::new(&key.into(), &nonce.into()); + cipher.apply_keystream(&mut buf); + + env::commit_slice(&buf); +} diff --git a/encryption-demo/methods/lib.rs b/encryption-demo/methods/lib.rs new file mode 100644 index 0000000..1bdb308 --- /dev/null +++ b/encryption-demo/methods/lib.rs @@ -0,0 +1 @@ +include!(concat!(env!("OUT_DIR"), "/methods.rs")); diff --git a/encryption-demo/src/main.rs b/encryption-demo/src/main.rs new file mode 100644 index 0000000..a02f3de --- /dev/null +++ b/encryption-demo/src/main.rs @@ -0,0 +1,54 @@ +#[cfg(not(rust_analyzer))] +include!(concat!(env!("OUT_DIR"), "/methods.rs")); + +#[cfg(rust_analyzer)] +mod methods { + pub const GUEST_ELF: &[u8] = &[]; + pub const GUEST_ID: [u32; 8] = [0; 8]; +} +#[cfg(rust_analyzer)] +use methods::*; + + +use anyhow::Result; +use hex::encode; +use risc0_zkvm::ExecutorEnv; +use risc0_zkvm::prove::{Prover, default_prover}; + +fn main() -> Result<()> { + // Example inputs + let key = [0x42u8; 32]; + let nonce = [0x24u8; 12]; + let plaintext = b"Hello, RISC Zero ChaCha20 demo!"; + + /* + 1) Create the prover with the embedded guest code + let mut prover: ! = Prover::new(&GUEST_ELF, &GUEST_ID)?; + 2) Supply inputs + prover.add_input_u8_slice(&key); + prover.add_input_u8_slice(&nonce); + prover.add_input_u8_slice(plaintext); + */ + let env = ExecutorEnv::builder() + .write(&key)? + .write(&nonce)? + .write_slice(plaintext) + .build()?; + + + let prover = default_prover(); + let receipt: ! = prover.prove_elf(env, GUEST_ELF)?; + // 3) Run, getting a Receipt (proof + journal) + //let receipt: Receipt = prover.run()?; + + // 4) (Optionally) verify the proof + receipt.verify(&GUEST_ID)?; + + // 5) Extract and print the ciphertext + let ct: &[u8] = receipt.get_journal_bytes(); + println!("Ciphertext: {}", encode(ct)); + + Ok(()) +} + +