diff --git a/Cargo.toml b/Cargo.toml index e74accef7..f80915268 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,8 +29,8 @@ blake2b_simd = "1" ff = "0.12" fpe = "0.5" group = "0.12" -halo2_gadgets = { version = "0.2", git = "https://github.com/QED-it/halo2", branch = "sinsemilla-hash-blind" } -halo2_proofs = { version = "0.2", git = "https://github.com/QED-it/halo2", branch = "sinsemilla-hash-blind" } +halo2_gadgets = { version = "0.2", git = "https://github.com/QED-it/halo2", branch = "ecc-mul-short" } +halo2_proofs = { version = "0.2", git = "https://github.com/QED-it/halo2", branch = "ecc-mul-short" } #halo2_gadgets = { version = "0.2", path = "../halo2/halo2_gadgets" } #halo2_proofs = { version = "0.2", path = "../halo2/halo2_proofs" } hex = "0.4" @@ -54,7 +54,7 @@ plotters = { version = "0.3.0", optional = true } [dev-dependencies] criterion = "0.3" -halo2_gadgets = { version = "0.2", git = "https://github.com/QED-it/halo2", branch = "sinsemilla-hash-blind", features = ["test-dependencies"] } +halo2_gadgets = { version = "0.2", git = "https://github.com/QED-it/halo2", branch = "ecc-mul-short", features = ["test-dependencies"] } #halo2_gadgets = { version = "0.2", path = "../halo2/halo2_gadgets", features = ["test-dependencies"] } hex = "0.4" proptest = "1.0.0" diff --git a/src/circuit.rs b/src/circuit.rs index 735e75d75..ca26b93ee 100644 --- a/src/circuit.rs +++ b/src/circuit.rs @@ -514,6 +514,7 @@ impl plonk::Circuit for Circuit { layouter.namespace(|| "cv_net = ValueCommit^Orchard_rcv(v_net)"), ecc_chip.clone(), v_net, + note_type.clone(), rcv, )?; diff --git a/src/circuit/gadget.rs b/src/circuit/gadget.rs index 55c368510..b4c226482 100644 --- a/src/circuit/gadget.rs +++ b/src/circuit/gadget.rs @@ -6,11 +6,10 @@ use pasta_curves::pallas; use super::{commit_ivk::CommitIvkChip, note_commit::NoteCommitChip}; use crate::constants::{ NullifierK, OrchardCommitDomains, OrchardFixedBases, OrchardFixedBasesFull, OrchardHashDomains, - ValueCommitV, }; use halo2_gadgets::{ ecc::{ - chip::EccChip, EccInstructions, FixedPoint, FixedPointBaseField, FixedPointShort, Point, + chip::EccChip, EccInstructions, FixedPoint, FixedPointBaseField, Point, ScalarFixed, ScalarFixedShort, X, }, poseidon::{ @@ -125,14 +124,19 @@ pub(in crate::circuit) fn value_commit_orchard< mut layouter: impl Layouter, ecc_chip: EccChip, v: ScalarFixedShort, + note_type: NonIdentityPoint, rcv: ScalarFixed, ) -> Result, plonk::Error> { + let (commitment, _) = note_type.mul_short(layouter.namespace(|| "[v] NoteType"), v)?; + + /* TODO: remove. // commitment = [v] ValueCommitV let (commitment, _) = { let value_commit_v = ValueCommitV; let value_commit_v = FixedPointShort::from_inner(ecc_chip.clone(), value_commit_v); value_commit_v.mul(layouter.namespace(|| "[v] ValueCommitV"), v)? }; + */ // blind = [rcv] ValueCommitR let (blind, _rcv) = { @@ -207,3 +211,4 @@ pub(in crate::circuit) fn derive_nullifier< pub(in crate::circuit) use crate::circuit::commit_ivk::gadgets::commit_ivk; pub(in crate::circuit) use crate::circuit::note_commit::gadgets::note_commit; +use halo2_gadgets::ecc::NonIdentityPoint; diff --git a/src/circuit/gadget/mux_chip.rs b/src/circuit/gadget/mux_chip.rs index c532e9873..9171a5135 100644 --- a/src/circuit/gadget/mux_chip.rs +++ b/src/circuit/gadget/mux_chip.rs @@ -141,6 +141,14 @@ pub(crate) trait MuxInstructions { advice: &AssignedCell, constant: &C::Base, ) -> Result<(), plonk::Error>; + + // TODO: remove if not used? + fn mul( + &self, + layouter: impl Layouter, + a: &AssignedCell, + b: &AssignedCell, + ) -> Result, plonk::Error>; } impl MuxInstructions for MuxChip { @@ -214,12 +222,7 @@ impl MuxInstructions for MuxChip { || "witness 1/value", self.config.right, 0, - || { - value.map(|v| { - let inverse = v.invert().unwrap(); - inverse - }) - }, + || value.map(|v| v.invert().unwrap()), )?; // Set the "left" and "output" constants. @@ -333,7 +336,7 @@ impl MuxInstructions for MuxChip { else_constant: &pallas::Base, ) -> Result<(), plonk::Error> { layouter.assign_region( - || "equal_or_anything", + || "equal_or_any_value", |mut region| { // Enable the multiplexer gate. self.config.q_mux.enable(&mut region, 0)?; @@ -398,13 +401,13 @@ impl MuxInstructions for MuxChip { // Prepare a cell that is definitely different than the advice cell. let different_than_advice = - add_chip.add(layouter.namespace(|| "different cell"), &advice, &non_zero)?; + add_chip.add(layouter.namespace(|| "different cell"), advice, &non_zero)?; // Prepare a cell whose value equals the given constant. let advice_or_different = self.mux( layouter.namespace(|| "advice or different"), is_different, - &advice, // switch == 0, constant == advice + advice, // switch == 0, constant == advice &different_than_advice, // switch == 1, constant != advice )?; @@ -415,6 +418,48 @@ impl MuxInstructions for MuxChip { )?; Ok(()) } + + fn mul( + &self, + mut layouter: impl Layouter, + a: &AssignedCell, + b: &AssignedCell, + ) -> Result, plonk::Error> { + layouter.assign_region( + || "mul", + |mut region| { + // This is a multiplication implemented with the mux gate. + // Set switch=a, right=b, output=product, left=0, giving: + // a * b == product + + // Enable the multiplexer gate. + self.config.q_mux.enable(&mut region, 0)?; + + // Copy the inputs into the multiplexer row. + a.copy_advice(|| "copy a", &mut region, self.config.switch, 0)?; + b.copy_advice(|| "copy b", &mut region, self.config.right, 0)?; + + let product_value = a.value().zip(b.value()).map(|(a, b)| a * b); + + let product = region.assign_advice( + || "witness product", + self.config.out, + 0, + || product_value, + )?; + + // Set the "left" constant. + region.assign_advice_from_constant( + || "left=0", + self.config.left, + 0, + pallas::Base::zero(), + )?; + + Ok(product) + }, + ) + } } fn compute_mux( diff --git a/src/circuit/note_commit.rs b/src/circuit/note_commit.rs index 004efcc3f..a92b776cf 100644 --- a/src/circuit/note_commit.rs +++ b/src/circuit/note_commit.rs @@ -1065,7 +1065,7 @@ impl NoteTypeCanonicity { // x(note_type) = h_2 + (2^4)i + (2^254)j_0 let decomposition_check = { - let sum = h_2.clone() + i.clone() * two_pow_4 + j_0.clone() * two_pow_254; + let sum = h_2 + i * two_pow_4 + j_0 * two_pow_254; sum - note_type_x }; @@ -1692,15 +1692,8 @@ impl NoteCommitChip { t_p.clone(), ); - let note_type = NoteTypeCanonicity::configure( - meta, - col_l, - col_m, - col_r, - col_z, - two_pow_4, - two_pow_254, - ); + let note_type = + NoteTypeCanonicity::configure(meta, col_l, col_m, col_r, col_z, two_pow_4, two_pow_254); let value = ValueCanonicity::configure(meta, col_l, col_m, col_r, col_z, two_pow_8, two_pow_58); @@ -1848,7 +1841,7 @@ pub(in crate::circuit) mod gadgets { layouter.namespace(|| "h_2 = 0 or start of note_type"), &is_zsa, &pallas::Base::zero(), - &h_2_zsa.inner(), + h_2_zsa.inner(), )?; let h_2 = RangeConstrained::unsound_unchecked(h_2, h_2_zsa.num_bits()); let (h, h_0, h_1) = @@ -1952,7 +1945,7 @@ pub(in crate::circuit) mod gadgets { &(hash_native.inner().clone().into()), &(hash_zsa.inner().clone().into()), )?; - let hash = Point::from_inner(ecc_chip.clone(), hash); + let hash = Point::from_inner(ecc_chip, hash); let cm = domain.blind(layouter.namespace(|| "NoteCommit blind"), hash, rcm)?; diff --git a/src/circuit_description b/src/circuit_description index 1b91ed0dd..5835d4c07 100644 --- a/src/circuit_description +++ b/src/circuit_description @@ -27343,48 +27343,48 @@ PinnedVerificationKey { (0x3a83a8e762ebade712aa5cf3c41c730a79369475085bf1155579f7f7682408e2, 0x25b00d3ee1da9a6bbd36b35ba461da45abd931c767b863ec4a604f8ce094e4eb), (0x1caeb4d7ebb44a717f83ee5afd35446a5e2124f6a4075342ba4eff589523fb57, 0x3a8c431a13632a5b5f035eb4b804d37f2591e84d05d765ba3f70a3d61b907ebb), (0x107d95a6361fc98df9042f32451faa4fd48c1381653be7847d97cf997a55a4ad, 0x31ebf6a2e352108bb180c3278e72d88bb5bab723d3b38aa47c144fc37fb8a962), - (0x12989292e551ed3193d571e1526c40af52f6fd2f98a780d98c4a3eb09013c85f, 0x0ad253a6663a036bc9d5309e9c025b814ac12aaeb9591e2792c320e837dd87fb), - (0x245d1e936d96e5dc31d10b40aee84f1e575815ddb7c733b1c83e047d85df0364, 0x157aaddb3f93bb3944a3ca9baa1e7dca4fe2b1bbb0082b9b2dc9e9766ceefe3d), - (0x1b10cd2f6d9bc469bb707562df5e942466c7e6fc9e901045e7d1ab84dd51fdfd, 0x2a3222a0ef3632c4f4f48cd184610474428676adef5da58a398fe21e5e6c6807), - (0x0e711c0eca6339d6a77dc43c1678b2e4510e962c60df1824027573702b9d078a, 0x22445473f884ee380e29ffa2071952825d6572b6cc49609da12ec6b5d6143904), - (0x061b3ba398bc5776b9d3d2895f6ce383175b3f523fe6e05f7abd0af2d28ab8a4, 0x11a5b2cba6dac838fadaf7472646bb9946e3c88b1d76f859cc3f911c390a11db), - (0x2e7b87cda4f4dc42615997eb222b15fc4c446cac1873435b04e638e37ac7534d, 0x366c034cf3bfe3dd3852bb2c989ec5d114f2a4c4ac2b0ad32bd1414c38451edb), - (0x1f564dbcec3cb8f25ed135c6dcfe590435942ea2077cfc099cca65ce772484ed, 0x2fd99b8aca4966cfcd61af45d58ac8c16bfefb3a100b3ca75207ed7b8dbfd739), - (0x324ed65e5a31fecf544bbf129494c22fd2fc63593b069a5122335612da4936c2, 0x1e1d1b67f1abe6fb1d4223550dd9c5b0115d9184ddb42ff16dbfd362839e6247), - (0x198cd9f2ba739c52175e88e16bc5c586ed3568854d63b21b04726bd634ff3893, 0x0c29eb5c2d40da02a1d51b4eceeb2b9fcd8aadf66e908e3bbc6603839551492d), - (0x32e7d49a13fa029301c2aad4ebce53ec557b35f28519d2f91e2794f8960bce7f, 0x11467882a4a6b1c9fc269e92508827c6998b00f7f1836bcd1d432e1a5698debd), - (0x1500d4d77b3756b26280f9e6480db9477018ac1da90d8d1960eb5b1bc375c8db, 0x37de8b6d934c01f1651f13e477cea460fbc89eaf3f46c04ed7de3969e6c58df3), - (0x0945790e964f31066952a416b3f90e31099d9c52b693e40bbfe75379b2427b41, 0x12b87f63601422ff30b1d1488f56e8f360eaa728e21d361359172ce787885141), - (0x1e4295e95ea39b0a7529af6dca726ebf04321f255b6165197612b7cf9aacb340, 0x2af05f82ab47b9026a4d223bd344e84f079253deeea8e1ea05dce64972bce0da), - (0x1c7568f53e385a5a0db8a130ca49a95653f158e2b63c009142cec4787f7d17ee, 0x32dc8a00fe923957fe616afe44f4fe9a22948375b6b5305ae1d77b3af71abfac), - (0x0642adfd67cf4e81d8d749f0af7899cdfcadf626a7fc5ecf899df335637b1116, 0x3eaa3318136345491412d73cea3e4d32617138fed5ac07964148c416684c829d), - (0x3f1186a8a7ac49117f112774c46640f6787862d6b229f8b635d113bc7983bcd0, 0x360dcfdaae55345c62f3e9e35b8bcde535f49fd0f110035a0cab82e6d01eae67), - (0x0c11eb743169fb6ec53a5a3f488222f384d4b511a1351aaa90232e2de324bf04, 0x20dddc311971f50cd06f208f789c5134fb3c46e03bace128037e494a7b356d3b), - (0x1bbb5fecec25e1e692befb07f5fd3aca9a4bf99a48c5f81ddaebcdb4c848fa7c, 0x2efeabdd7c0dea8d34113e8c9bd6c099b308e765eb7648cdf3ba90a8195eb80e), - (0x22af4db15dceb16bbdd902d6b33a73f1c6463eb8f5ed88007dcf02081da3441c, 0x0f61a96580c8413a434f2643c87b36e359e46d08344fc474249592045d44c0af), - (0x1659e9b11ad8f8870c01ac69329f9b3589cac2bcbfc11aefa249f794ac2383e8, 0x17b197bade60bdd892acbea2d8570f8b68dc6967d41ad53353d80590615922cc), - (0x1fc683b4aa3aaa5d507db074437cb44eba22ccf691587a00d6b8e35b1db84295, 0x0016e5d1926deb58820360a975067e64fc830c77af0b58d431576c882d753688), - (0x0128bdf9f501f3776e3309e37ecdbb877c58347b3e81fde35c64929dec5a2df8, 0x0227030614551c33ac265b16821c7f61df912dff99deec74bc9eb81a925a2528), - (0x2205ed69d5614ddd2cfdfbde79aa4c7fca1a98c575c9263daea197807202f8cb, 0x3802574753e08a3be43c69e563d1eb994faa9e79ecaf64353ea0856011915887), - (0x048a44df2e9961d4fbe1657063d7ebef88a565230604e0866f6a333402ff81a1, 0x3781c462ab5b6b3fef07d1588a380da0913a0f5385f523a74cf6ee5d4fd7a38b), - (0x26a8ec0b689abd96b1d70ee271fb66ce2cf15cde24594bba08eebb2ec3dc271d, 0x33678b7dbb336a22160bfb90ead3391b881b57623086c13d939d81f51f4e94d2), - (0x01d25441a7869906f2e5b4b9be5ea291307887ef14676792e83ee88df5eaa139, 0x04b2900c7a337c328df30759321de78e8c1e63ace4d968301b73bc3667b8a9e4), - (0x18537b71cfe44057d6b24509e41af27c9250f97948ee509bd2b3249b3d936363, 0x1572f094bbab66327882c906a8d12976b9e740c755d31852527efe0b3ad8d110), + (0x377d8307e74ba594bd87992a5082f5e4593f0a44812c229020d0b530d48dc263, 0x2ac645dbc4f2bcccbdb9d161dd20717f040963c4aa12740d7d23da35cec277aa), + (0x194f734cfaecc262709059f6a20fe8046f9fa6783a4f992e6bf553a8ee2e2db6, 0x10398942b3fbff2ac23eabd6b1bcde4834e815e503e05d89c12d3e8db88b7152), + (0x1e2a3e50c11d2ad7d1fb01b7e6b973587cbc6c7d0056881763a0bbb40c1a97e7, 0x1ad440f343a4ee0d813a99b737639f7a9e8806820d98abc417181bf4c67b05f9), + (0x3f2b6df65af1680b4aceb05e5325e39a029890591cfde38f435bb454556e3519, 0x1d58a54f3830d3a36fef5cdd67d063fc27be558b5e5276dcdc33eafd53f7b504), + (0x271e5684fc02c08124f29b0db4660c9c9fc05d577b272d6981cb9dccc49172bc, 0x3c4a909efb961eabf3b49b09d939d2557d337d158ee210cc9ce6e04349dc3476), + (0x36c548b5dcf223b2e067f4c57ba60c0473e2a13bf51f1433c7f806b0a43a7fff, 0x2d6819244edb66f621bf988221cd7a83a4b335855306eee7cf36def0b8a683c5), + (0x3e6408d01305aa6f330c6f5ae0d41de7c4d7b9b3cb3b39346818d290af2a7719, 0x363c35d0ec50092e51b9d8ef3e9e5e003845455f11d186d054a1a02232c80b55), + (0x21e9030c474d44aff396f4752f42c0a24a2ae2c5d752763ded6b021894fa4695, 0x00c62116dff45b996fdcbc72bc07711d3c0784c69eaaf4a0b0150fd46492318d), + (0x0bec6302688748ce221fbd727a770b2cd361ec562dff5729cec26dbd6bdacdc8, 0x3777911ae8417b065d6b5e766b83cbf587f1f53db0469bef43379e72bae6e14f), + (0x3c0f3f0d7b2306490dac7d578d4846c63adcc76988ce322d8691c3b8b5b0f623, 0x12d81ca672a1c18f6e0d9b7eb8fbabdbe450fae6667cf349c1a0e63ca9a0824e), + (0x27d13b33003ffddcd36efb731fe94db93d181bd994e0c057e945402bc8501789, 0x0e1dde94ea3b35e0d0a66350163ba2ff9dd5070500912b7d076747816965ffd2), + (0x0f42cc805e9820305e230a192581349d875f70b3d1a150bb963d130c734b2019, 0x26796ba8d223909a3e19072bf35a245dca28f7ea39d00a13a95005e96f39ec79), + (0x12e9e3f6996e5fb5e7e2329dea3c5d7270bee992c354021aa0e277c6b90a2873, 0x30d3e2a6db803a08dc714bc9ae6acae036055aa54087617138372fec38ba9fe2), + (0x1751912a19fa0009ece61b686342d6b4385415e942159e8db3f174ad24d612b9, 0x0f31114ef566211d46914d0bc2d1a27a0e34eeda04dab53a0af7a37024f057a1), + (0x091c6c4854fa5d9ed8a966f2a1c4946b41f6872de6c19fa8b521a0a8eb2bd899, 0x29100b4e15344d750fae4a81c82faca1e8e0573336b1f54b394946e95e7baad0), + (0x1026fab3cc04bf890fb9a534840f6f3a2794cfcfca7844c543a5084f10bc4117, 0x11e36601556524e952b74bef3c3e1547ffbbdd5604f573a77950e2684c54baaf), + (0x0ab778967dad4011266292fbd47fcf76f382aeaa594aa099612ebda6baa9acd0, 0x082e94551f63c2ccf846071db9dfc17088701e8f465ee378edb4f38de169d444), + (0x134724383593bbf8d976abbc459b6bebda120b20c151a47450ed1a483b310b7c, 0x105198552ee9030011b7dad4610795fc828b54837f78cce220844c86ba94301a), + (0x14cfaec3b875d00b70a852df6de81f6f23df6cf759666cc8d72a8933a662012a, 0x3e9931cbc1529d7276360d61141f0bb2c1dfc98eeb35821e29146b9e94e2ba39), + (0x3bb657ca32617e6242b6c6a0b166a1db205024d0441d091b8d45fb478cd4782c, 0x3189ce1b97103345fc0eafd287eed80ab186151171f22af2c9befc71a0957529), + (0x25578b0a6d546cf38dc84329fad41e59690a2bd94a0db5fddb42e0db8c267827, 0x03448e4552625dda62a96318bcafcc305deafd6a028f8379d8c8d9ffa0f86e64), + (0x0d47490e7fe366bf942dda8e8ec51c11ba252d75b912228a896cebb7ebe8129f, 0x2f682797d0229c5f759c6d94cf6d58e874c26d92034e0be48aedf32ce4aa13a9), + (0x2de01c5e9de3f2f9936dd4a33eaaf19cf3576ab1a39667ac5571aae1a3f3d44c, 0x3bdd5f14ca20a74258be75e8c41fdce7046c0649e5d962e12d09a0edd802e7f0), + (0x227a4b713562e09e0fcb27c9e12076af5594d7d0d7fa64cfb2519a919f7f8f72, 0x275501d90bf2254bfe5c7f6df58b926f3a976bbd86f0f63c66a6e6dd78a0a381), + (0x36e4b8f841f11cbcc6c29b1e5f8d3124bd7fe64758e4b134b0c6d9b9ff6322f7, 0x39adba84bb0d8513000b5c9531156f34c532eabc57b16d8672d829584cfb4230), + (0x170340ed2f2998d16ed23be89480c764c31d9d3a156fd7260cba193c00c0f831, 0x258a163d76cc75176c5a230601c7a9677c7f5eca02cede507aebba0557e6e4a6), + (0x1502df1fb7cea3ee223662f67dddd8ff31e1b3db351d816e131615ac4ad84c90, 0x2cd99ab47c24e43bceccc9dafd9d26d39182e6987aca5d87c6545c47a7dc6845), ], permutation: VerifyingKey { commitments: [ - (0x321650742388b891a2ca628c0253fe51fd9aff372ec60676190b2a3c41c369f6, 0x23b66038d92f713c7d2fc8fc19338ebb97246c6050014c5d38c3b9ef373b850c), - (0x0a7f15e2ac106d916cb0688d02f1460075988d6cc8c0ea4d2f963af14b9d4631, 0x3e1e658ea0785c3ad0eff5a1ca7f87d21f2a6b32c9a6493ab6b4f9a4abe4f9ee), - (0x12f4019cda957299d1a58bee5ffb2f53b1dc882f585caca399d42ee5efd58815, 0x38b6fe17f8f60f392006eb775534590732a503b66597839dfa0d6215469833ab), - (0x1fffe339d22f6eed361d89e1359d096384a5f6608e3a84de6c1e97546a2a41e3, 0x2efe0b6111fa51fe57b2b06f0de775a12f6710c186e0674b57ad653996f03570), - (0x3726961370f01f191b656369d7dc0e955492767d727d4a7fcb979684b377cc0a, 0x0d0351054f9093cf753c3dd43a06d169c68e4ef6405c840c6229b3fa0e5d4414), - (0x3fd1dd4fe8b1ead80b99dc1d031677c8e7ad85634f06c688fad6699f0a0e6e15, 0x020c7044b7c18fef50b895c09ccb4da421a1ee09f8cc13186568fb69a2cb633d), - (0x32cd28779d03eec0679aecaabdbe5900845ef9c5e380b818477cc77f515bb2dc, 0x0b9d0a72bd11e28ebc703269ec2b6012087df6952d0af7d58e6e70a9b08522e1), - (0x201986289b84e1488747a8938a53be0d8f2f17f124b31195e484285ae8153932, 0x0247c54df701728c1059e261fa20ada6b8c051de765fb0027af13dae2ac6f881), - (0x13df85822ee7b71378063bf11be41575c2269aeaec57385ff13bbeab571201f0, 0x29283330f93b4d539ddba9fb3f6ddef9b469eba692a9145cb428c5ab284b0e3b), - (0x286e3e4c7fb8af45ba94c95f4b4e5da9e81a200cdfb4a73f841bc6c36bc5bfb1, 0x253f1a3c6c353a73a2eefa7006130e59b365bdd0f40fa0ba93dc1c102783c63a), - (0x0ca0a21843a98e7d4234bf9814cce587ce3302fca2c06e1e69dbfda60a155282, 0x3372fac97d59919ae4763c5cea8d51b8c865a27418b444fecc67e2b095f7bf96), - (0x30e217c091b12a70d5340429c1653fbcae051feaced85660658a0c644888c691, 0x2c1dbf782f2042e5170d2bdcfc2ac8fbdf19a81ac3973ac3ba264ab274583caf), + (0x25dffebe32d1ba90cc96326410b0ed810fde2a0ecc5d15657387fed7b2e78a70, 0x0c11c24c258b0f664e75bff98239b037d38b9cbe126134919bb7f085d3d855ef), + (0x314c18b81fd516d4ade3a5c51db844d81f55aba5c0ede1a0e9d48e3af5a4e665, 0x12ff40f320cb5e2dc1a3bfee1e72b697de5016e70098d9b631ed0383464af7a7), + (0x08d585a40dcd4933126d908b748dafaf097e3f82bfb589c4ccbf82580870b3e2, 0x0eb6c92f7dd8ea7c8416e93631a5a786c5369fdb72381ccefa7ef92cabcd87d6), + (0x11c5b0ae8c1355cd616537de9c932bf38cfb02d0913c00ec75293bc143cd087b, 0x1146e1c6e2ce4f1f3e8e5f7dc77e60b32828af4c8b53dfaf071bd0d6e9a11aa3), + (0x065af801a53bcb8dd642135515a76e2b1bbff3269da0dcd30e2be4754d136f84, 0x1d373994aed05f7d6fd7dbec15a67d3204dbb92589f35b558c9c5f8c9c6feca8), + (0x3b6f3f88592ee9006a61097f5c97bec49872772f793cec605546aeace15049f4, 0x1114322f7e5ab6815f1ac03563abcbf929229c2a2ca9a6f6d8788da8f36ed283), + (0x234a0d329cbe11ac606bccc1f8ebf553209339194b04ffdd55841211116de9b9, 0x2268b1dde1ab5dc533ee2da719b7f285644065fe05eb7d6d62c06e5e71438b28), + (0x3a4aaf96ad529fe96e24aab76027d66e6d9b77499306127a2372aecf27ae598a, 0x39b05f54e41f4a29dda4f0b1f23fc3a91f1c70bb33251bcbe7996f95a7a150e4), + (0x3f7c5c40263af4beb42fa7d89da7beb7df5a79b7496f8e6cd638f2c76d0ce298, 0x3dd685aef34248a0716748f2e5fa91135066680b9d6f4b377dbae80b18f14687), + (0x0d2ab73ecbe97d1d3498c85e9e591c8ea527f7cf722aba69b567d71ceefe3a90, 0x2a3931744853546ca118b7a400840d2044376dfc3721334e0f03f559d2b889b6), + (0x0feff23ce279b5321319c62e3ff7d6932f60271de14843784e3fbfa30655dd35, 0x363c53c3de75ac7de29da7b154ea6dc59adf5f541834ea7062053c78908078e2), + (0x2c7b2b38dd595b33e76d9868648199db0cd3191b11cc2023518d44512bb4a1d7, 0x358fc1f04ea9ff304d4eb171ea170d3ea25f1b5b327899d75a93eb6bb5de0adc), (0x21d210b41675a1eae44cbd0f3fd27d69e30716c71873f6089cee61acacd403ab, 0x2275e97c7e84f68bfaa528a9d8be4e059f7abefd80d03fbfca774e8414a9b7c1), (0x0f9e7de28e0f650d99d99d95c0fcd39c9dac9db5aa1973319f66922d6eb9f7d5, 0x1ba644ecc18ad711ddd33af7f695f6834e9f35c93d47a6a5273dabbe800fc7e6), (0x0aab3ab73afac76277cd94a891de15e42ceb09f3a9865dab5c814bebfbb4453f, 0x27119fec3736d99abeeef1ad7b857db7e754e0c158780ed3dd0cdd4dc2453e10), diff --git a/src/circuit_proof_test_case.bin b/src/circuit_proof_test_case.bin index b83b2cf9f..58d811abb 100644 Binary files a/src/circuit_proof_test_case.bin and b/src/circuit_proof_test_case.bin differ