From 9514ef43a8f786af3011b6a27e78bb4d810c2c61 Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Mon, 25 May 2020 11:50:33 +0100 Subject: [PATCH] benchmark: add bls12 example Source: https://github.com/ewasm/scout.ts/blob/81ad848fd41a3a20e59571376b80bfea3c555d05/assembly/bls12-pairing/out/main_with_websnark.wasm Co-authored-by: cdetrio --- test/benchmarks/bls12_websnark.inputs | 8 ++++++++ test/benchmarks/bls12_websnark.md | 1 + test/benchmarks/bls12_websnark.wasm | Bin 0 -> 86324 bytes 3 files changed, 9 insertions(+) create mode 100644 test/benchmarks/bls12_websnark.inputs create mode 100644 test/benchmarks/bls12_websnark.md create mode 100644 test/benchmarks/bls12_websnark.wasm diff --git a/test/benchmarks/bls12_websnark.inputs b/test/benchmarks/bls12_websnark.inputs new file mode 100644 index 000000000..da9eaf64b --- /dev/null +++ b/test/benchmarks/bls12_websnark.inputs @@ -0,0 +1,8 @@ +synth +main +: + + + + + diff --git a/test/benchmarks/bls12_websnark.md b/test/benchmarks/bls12_websnark.md new file mode 100644 index 000000000..aa96cbe11 --- /dev/null +++ b/test/benchmarks/bls12_websnark.md @@ -0,0 +1 @@ +This is from [cdetrio's bls12 test](https://github.com/ewasm/scout.ts/blob/f6m_mul_loop-standalone/assembly/bls12-pairing/out/main_with_websnark.wasm), based on [websnark](https://github.com/iden3/websnark), which is licensed under GPL-3.0. diff --git a/test/benchmarks/bls12_websnark.wasm b/test/benchmarks/bls12_websnark.wasm new file mode 100644 index 0000000000000000000000000000000000000000..edffd44209d1a159b59f396c9bfafeed23c807ab GIT binary patch literal 86324 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