1
0
Fork 0
mirror of synced 2025-09-24 04:40:05 +00:00

Merge branch 'develop' of github.com:Zokrates/ZoKrates into greedy-reducer

This commit is contained in:
schaeff 2023-02-22 21:54:37 +01:00
commit ea74d512bf
4 changed files with 53 additions and 10 deletions

View file

@ -0,0 +1 @@
Fix a potential crash in `zokrates-js` due to inefficient serialization of a setup keypair

View file

@ -68,13 +68,25 @@ const initialize = async () => {
return result;
},
setup: (program, entropy, options) => {
return wasmExports.setup(program, entropy, options);
const ptr = wasmExports.setup(program, entropy, options);
const result = {
vk: ptr.vk(),
pk: ptr.pk(),
};
ptr.free();
return result;
},
universalSetup: (curve, size, entropy) => {
return wasmExports.universal_setup(curve, size, entropy);
},
setupWithSrs: (srs, program, options) => {
return wasmExports.setup_with_srs(srs, program, options);
const ptr = wasmExports.setup_with_srs(srs, program, options);
const result = {
vk: ptr.vk(),
pk: ptr.pk(),
};
ptr.free();
return result;
},
generateProof: (program, witness, provingKey, entropy, options) => {
return wasmExports.generate_proof(

View file

@ -1,12 +1,12 @@
{
"name": "zokrates-js",
"version": "1.1.4",
"version": "1.1.5",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "zokrates-js",
"version": "1.1.4",
"version": "1.1.5",
"license": "GPLv3",
"dependencies": {
"pako": "^2.1.0"

View file

@ -53,6 +53,7 @@ impl CompilationResult {
arr.copy_from(&self.program);
arr
}
pub fn abi(&self) -> JsValue {
JsValue::from_serde(&self.abi).unwrap()
}
@ -88,9 +89,11 @@ impl ComputationResult {
pub fn witness(&self) -> JsValue {
JsValue::from_str(&self.witness)
}
pub fn output(&self) -> JsValue {
JsValue::from_str(&self.output)
}
pub fn snarkjs_witness(&self) -> Option<js_sys::Uint8Array> {
self.snarkjs_witness.as_ref().map(|w| {
let arr = js_sys::Uint8Array::new_with_length(w.len() as u32);
@ -100,6 +103,25 @@ impl ComputationResult {
}
}
#[wasm_bindgen]
pub struct Keypair {
vk: JsValue,
pk: Vec<u8>,
}
#[wasm_bindgen]
impl Keypair {
pub fn vk(&self) -> JsValue {
self.vk.to_owned()
}
pub fn pk(&self) -> js_sys::Uint8Array {
let arr = js_sys::Uint8Array::new_with_length(self.pk.len() as u32);
arr.copy_from(&self.pk);
arr
}
}
pub struct JsResolver<'a> {
callback: &'a js_sys::Function,
}
@ -204,6 +226,7 @@ impl<'a> Write for LogWriter<'a> {
fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
self.buf.write(buf)
}
fn flush(&mut self) -> std::io::Result<()> {
self.callback
.call1(
@ -352,10 +375,13 @@ mod internal {
>(
program: ir::Prog<T>,
rng: &mut R,
) -> JsValue {
) -> Keypair {
let keypair = B::setup(program, rng);
let tagged_keypair = TaggedKeypair::<T, S>::new(keypair);
JsValue::from_serde(&tagged_keypair).unwrap()
Keypair {
vk: JsValue::from_serde(&tagged_keypair.vk).unwrap(),
pk: tagged_keypair.pk,
}
}
pub fn setup_universal<
@ -367,9 +393,13 @@ mod internal {
>(
srs: &[u8],
program: ir::ProgIterator<'a, T, I>,
) -> Result<JsValue, JsValue> {
) -> Result<Keypair, JsValue> {
let keypair = B::setup(srs.to_vec(), program).map_err(|e| JsValue::from_str(&e))?;
Ok(JsValue::from_serde(&TaggedKeypair::<T, S>::new(keypair)).unwrap())
let tagged_keypair = TaggedKeypair::<T, S>::new(keypair);
Ok(Keypair {
vk: JsValue::from_serde(&tagged_keypair.vk).unwrap(),
pk: tagged_keypair.pk,
})
}
pub fn universal_setup_of_size<
@ -528,7 +558,7 @@ pub fn export_solidity_verifier(vk: JsValue) -> Result<JsValue, JsValue> {
}
#[wasm_bindgen]
pub fn setup(program: &[u8], entropy: JsValue, options: JsValue) -> Result<JsValue, JsValue> {
pub fn setup(program: &[u8], entropy: JsValue, options: JsValue) -> Result<Keypair, JsValue> {
let options: serde_json::Value = options.into_serde().unwrap();
let backend = BackendParameter::try_from(
@ -597,7 +627,7 @@ pub fn setup(program: &[u8], entropy: JsValue, options: JsValue) -> Result<JsVal
}
#[wasm_bindgen]
pub fn setup_with_srs(srs: &[u8], program: &[u8], options: JsValue) -> Result<JsValue, JsValue> {
pub fn setup_with_srs(srs: &[u8], program: &[u8], options: JsValue) -> Result<Keypair, JsValue> {
let options: serde_json::Value = options.into_serde().unwrap();
let scheme = SchemeParameter::try_from(