Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 26 additions & 8 deletions halo2_gadgets/src/ecc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -794,13 +794,15 @@ pub(crate) mod tests {

struct MyEccCircuit<Lookup: PallasLookupRangeCheck> {
test_errors: bool,
test_zsa_additions: bool,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe test_witness_constant: bool,

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Daira suggested test_zsa_additions in the zcash halo2 PR

_lookup_marker: PhantomData<Lookup>,
}

impl<Lookup: PallasLookupRangeCheck> MyEccCircuit<Lookup> {
fn new(test_errors: bool) -> Self {
fn new(test_errors: bool, test_zsa_additions: bool) -> Self {
Self {
test_errors,
test_zsa_additions,
_lookup_marker: PhantomData,
}
}
Expand All @@ -812,7 +814,7 @@ pub(crate) mod tests {
type FloorPlanner = SimpleFloorPlanner;

fn without_witnesses(&self) -> Self {
MyEccCircuit::new(false)
MyEccCircuit::new(false, false)
}

fn configure(meta: &mut ConstraintSystem<pallas::Base>) -> Self::Config {
Expand Down Expand Up @@ -912,6 +914,14 @@ pub(crate) mod tests {
)
}

// Test constant witness
if self.test_zsa_additions {
super::chip::witness_point::tests::test_witness_constant(
chip.clone(),
layouter.namespace(|| "witness constant"),
)
}

// Test complete addition
{
super::chip::add::tests::test_add(
Expand Down Expand Up @@ -988,17 +998,25 @@ pub(crate) mod tests {
#[test]
fn ecc_chip() {
let k = 13;
let circuit = MyEccCircuit::<PallasLookupRangeCheckConfig>::new(true);
let circuit = MyEccCircuit::<PallasLookupRangeCheckConfig>::new(true, false);
let prover = MockProver::run(k, &circuit, vec![]).unwrap();
assert_eq!(prover.verify(), Ok(()))
}

#[test]
fn test_ecc_chip_against_stored_circuit() {
let circuit = MyEccCircuit::<PallasLookupRangeCheckConfig>::new(false);
let circuit = MyEccCircuit::<PallasLookupRangeCheckConfig>::new(false, false);
test_against_stored_circuit(circuit, "ecc_chip", 3872);
}

#[test]
fn ecc_chip_with_zsa_additions() {
let k = 13;
let circuit = MyEccCircuit::<PallasLookupRangeCheckConfig>::new(true, true);
let prover = MockProver::run(k, &circuit, vec![]).unwrap();
assert_eq!(prover.verify(), Ok(()))
}

#[cfg(feature = "test-dev-graph")]
#[test]
fn print_ecc_chip() {
Expand All @@ -1008,7 +1026,7 @@ pub(crate) mod tests {
root.fill(&WHITE).unwrap();
let root = root.titled("Ecc Chip Layout", ("sans-serif", 60)).unwrap();

let circuit = MyEccCircuit::<PallasLookupRangeCheckConfig>::new(false);
let circuit = MyEccCircuit::<PallasLookupRangeCheckConfig>::new(false, false);
halo2_proofs::dev::CircuitLayout::default()
.render(13, &circuit, &root)
.unwrap();
Expand All @@ -1017,15 +1035,15 @@ pub(crate) mod tests {
#[test]
fn ecc_chip_4_5b() {
let k = 13;
let circuit = MyEccCircuit::<PallasLookupRangeCheck4_5BConfig>::new(true);
let circuit = MyEccCircuit::<PallasLookupRangeCheck4_5BConfig>::new(true, false);
let prover = MockProver::run(k, &circuit, vec![]).unwrap();

assert_eq!(prover.verify(), Ok(()))
}

#[test]
fn test_against_stored_ecc_chip_4_5b() {
let circuit = MyEccCircuit::<PallasLookupRangeCheck4_5BConfig>::new(false);
let circuit = MyEccCircuit::<PallasLookupRangeCheck4_5BConfig>::new(false, false);
test_against_stored_circuit(circuit, "ecc_chip_4_5b", 3968);
}

Expand All @@ -1038,7 +1056,7 @@ pub(crate) mod tests {
root.fill(&WHITE).unwrap();
let root = root.titled("Ecc Chip Layout", ("sans-serif", 60)).unwrap();

let circuit = MyEccCircuit::<PallasLookupRangeCheck4_5BConfig>::new(false);
let circuit = MyEccCircuit::<PallasLookupRangeCheck4_5BConfig>::new(false, false);
halo2_proofs::dev::CircuitLayout::default()
.render(13, &circuit, &root)
.unwrap();
Expand Down
39 changes: 11 additions & 28 deletions halo2_gadgets/src/ecc/chip/witness_point.rs
Original file line number Diff line number Diff line change
Expand Up @@ -225,22 +225,21 @@ pub mod tests {
chip: EccChip,
mut layouter: impl Layouter<pallas::Base>,
) {
// `NonIdentityPoint::new` must reject the identity point.
// Witnessing the identity should return an error.
NonIdentityPoint::new(
chip.clone(),
chip,
layouter.namespace(|| "witness identity"),
Value::known(pallas::Affine::identity()),
)
.expect_err("witnessing 𝒪 should return an error");
}

// `NonIdentityPoint::new` must accept a non-identity point.
let _ = NonIdentityPoint::new(
chip.clone(),
layouter.namespace(|| "witness a non-identity point"),
Value::known(pallas::Point::generator().to_affine()),
)
.unwrap();

pub fn test_witness_constant<
EccChip: EccInstructions<pallas::Affine> + Clone + Eq + std::fmt::Debug,
>(
chip: EccChip,
mut layouter: impl Layouter<pallas::Base>,
) {
// `NonIdentityPoint::new_from_constant` must reject the identity point.
NonIdentityPoint::new_from_constant(
chip.clone(),
Expand All @@ -252,27 +251,11 @@ pub mod tests {
// `NonIdentityPoint::new_from_constant` must accept a non-identity point.
let _ = NonIdentityPoint::new_from_constant(
chip.clone(),
layouter.namespace(|| "witness constant non-identity point"),
layouter.namespace(|| "witness a constant non-identity point"),
pallas::Point::generator().to_affine(),
)
.unwrap();

// `Point::new` must accept the identity point.
let _ = Point::new(
chip.clone(),
layouter.namespace(|| "witness identity"),
Value::known(pallas::Affine::identity()),
)
.unwrap();

// `Point::new` must accept a non-identity point.
let _ = Point::new(
chip.clone(),
layouter.namespace(|| "witness a non-identity point"),
Value::known(pallas::Point::generator().to_affine()),
)
.unwrap();

// `Point::new_from_constant` must accept the identity point.
let _ = Point::new_from_constant(
chip.clone(),
Expand All @@ -284,7 +267,7 @@ pub mod tests {
// `Point::new_from_constant` must accept a non-identity point.
let _ = Point::new_from_constant(
chip,
layouter.namespace(|| "witness constant non-identity point"),
layouter.namespace(|| "witness a constant non-identity point"),
pallas::Point::generator().to_affine(),
)
.unwrap();
Expand Down
Binary file modified halo2_gadgets/src/test_circuits/circuit_data/proof_ecc_chip.bin
Binary file not shown.
Binary file not shown.
58 changes: 29 additions & 29 deletions halo2_gadgets/src/test_circuits/circuit_data/vk_ecc_chip.rdata
Original file line number Diff line number Diff line change
Expand Up @@ -9878,38 +9878,38 @@ PinnedVerificationKey {
},
fixed_commitments: [
(0x05f5862cad2888855bc3c1843a9eff57b11b592d9eb0e13354256661387f5231, 0x32236b14df85bf5f532a930232cb23a5c56ef7d67aaeed8bcb8fc10ea132cbd6),
(0x2394cc47e81f8e8831d02cc2367ac1b03fbd0127b729bd49a881c005a145e74f, 0x2c39a8643c6f4b17ded8320dc5575aaaff5eb9fbcfd464724b53f5c1e86f4cd8),
(0x3fbd2e5c90027a06df0badba624846f2c9049f7527eae952268f81b0508ac875, 0x15025b3794e03a5e70ba1a191c4d59d5490e9fa1ef3ab1a450d683b910d39497),
(0x18fc21a195e47a13b73a3745b8b75cc34de69c105fa88c94d7f58206e16c6c45, 0x29616f1bbae4c2a8fbe9fd0ac07cab9ba5b67656ee4b1aadcb02c99d76d6c349),
(0x03435039337e09f17a39729d66bbc95f298b7d20f156f7f6a6fd4a6acb7723b0, 0x095dd7b848cbe25dbf9095693e075745785bbd96585a648957094f7406abd4ff),
(0x2c32f93d8852fa9142677d3f030a8f98f3465128a031d3cd05be7f4208c3b5f1, 0x0ce8d199346cf4b248b43f776d7efac9c56b488d749831ffaab390a03043c27b),
(0x2a4dfca070e723d48fa35cff494634cdef40a80cfffd70ae9dda3cd83ca33ae6, 0x3df5111b8b29aaf7f51a11d997cf69e11e9ada0167d989322183db17de5f9b3a),
(0x3e02d44d8a73c029704928beecf66059b236033e75dac0668e22658127ebfd0d, 0x0071df0f55b575283ef968e1630a7bd4d3b00a410a1798f3b41a028b80d3d2af),
(0x1f9dd9f4c58b73ef0ffe3c32f21326f6a04b9f293eb7755693cdc4238043c9ef, 0x11b7c145f01913ea4dd6d5e685e0ab00165cef5bc107d749ad12e1655b7fee85),
(0x303187e23e18a02f6cdd865fa944a07113646567eb524735eaf5ed693b5e8b46, 0x303fdda8ba4575c924b51b6defbd2a54a899be335fd8a32925c23ed3a8f116c9),
(0x07444a2044655ba3eba7dd35c40cbedc881bbc4a3caedf912d21b13b01fa2a06, 0x3751d94759db457903bd30a152af69c353ab221a29049604d902160428fbc26c),
(0x1708b4d2bcee40fbe76b280406136ab90ba58cd67c87df1e7eb16924db3f008d, 0x2bc8003ebb965a00e76edd986abe9c5b37a0101bd513e9aec2f98874b7a22fed),
(0x1708b4d2bcee40fbe76b280406136ab90ba58cd67c87df1e7eb16924db3f008d, 0x2bc8003ebb965a00e76edd986abe9c5b37a0101bd513e9aec2f98874b7a22fed),
(0x250f054714eb645283089f14adfa558a8c334ce0298185a85084b9d963eb4697, 0x0f368f3747cee6178abe0f824f372d3545003ee1495a648096a0eb8823411802),
(0x3a55c2cbd9b7a6cb384625ab96c30bb1b0d21ed9efc6a2a511868c6c590d8e69, 0x29991b50b06fd0639f52fa71e74c2d3ede23b9ba5b5de68ec32c4bf5a9313216),
(0x197489d2338a7d1f004a38dda24972ad51dfcae3fdb07183b9cca252a027f04d, 0x0bc2ad1d856cc9982fe6205d906dc43772bde26c1d984aa81141eca7f61fd03d),
(0x38b0c80ae8752a881c4fe5e95a1eefe9e63b8c43e88240085cf5f216ef527eb6, 0x396476e96e6d9748bbb60bbd432037c7b171737f81835abfb2a63d90c42a7eab),
(0x0579f11dfd4f54b445f2af880a08868e3770b77fbf250d01b4a84672caf04d2d, 0x31c55b070e37fc7af5ef9f5083e64a551ff8c9f2a83e3653a1dc914613d15542),
(0x24174233f5b8b6af4654df1292bd64a06569f1a6dd398e7b11f4f8bc8fe8364c, 0x396b9f53650b51ab7f7084d0324a8e9d2627a20691dd84069171a9783898f32b),
(0x0b70f6f89e88131bb5ab28571ca837a4160b51998c6ced04328991a5c3bdcae9, 0x2cee3ef6523c2d36e01981c4794271d53fb47e9c5480b982a2ff3a869144d648),
(0x0299c2272092ebe4e08c73d7261afea742a7dc29ddf73ffb941a1c9c19dcf4a1, 0x1f002552d6af287e66e3e9706ecc2a5523f256bf2c6eeb995b4233f80c8c4eeb),
(0x28fb28941b09f9878eab1ce7923578b332ca794e3036789016fc6f832e820a37, 0x0e1fa37a3b4298c8df50b830e32ed5ff0ea40a0f8fbb1f9bb4620b8cfdcacf12),
(0x37de994248cd221c19cc8a5f354769ecc7e3ac253a4387dbdb8a25934d602225, 0x1c3d47b5ba1cc80af1666afaa42c97043c2b793e48a9c362a398adbf4cbfea78),
(0x0f2ff7cc3b300b9e92d481dfc01b84968a21937691ef5bb84cf7b7ac4bb56f8c, 0x010616d33ce6482c9958f2678cea622493de8477527fea737feb8fad11fc2ad6),
(0x2c40aa103ee1123360d1e47947f6ebc13ecddfc679514202b33f02a45ede862f, 0x2988d36fc6be72b80ac26c8253f72452e0db13387ab35c86d97cc03991cd9bb2),
(0x02fb26d5aa81b4fd2ba3324ae48a27a3e89a90005e4daebfb8004697379f235d, 0x0b484b92ea252f7a58c5bd41cbcdcd9efb932482c902abb4ae3ccb2c90912173),
(0x22e2076fb8f40364e7c733c89be2039af2d0976a5a240ef6f05d9b67f5861b8a, 0x1b9f2382c80f971341343fbfd1cfa3a3fa84d70310e7a8fda21a21e20fe9b0a2),
(0x2bbc94ef7b22aebef24f9a4b0cc1831882548b605171366017d45c3e6fd92075, 0x082b801a6e176239943bfb759fb02138f47a5c8cc4aa7fa0af559fde4e3abd97),
(0x2cec31b1d071d872bd6b1e0660840e27bc6247398c917d5dcb09354d3175fd68, 0x0812dfd78e8ec30827f658cfb64f4f253458d0fcac102af2639295659aaa75a6),
(0x2e0cad5df5c23f42086784fd79c09b1dff1718dd1700e5157a1592dec21306a8, 0x01cd2a585d4dacd1c4ebb7eccc804a7284792641900d383e9f6f496482c01144),
(0x2e0cad5df5c23f42086784fd79c09b1dff1718dd1700e5157a1592dec21306a8, 0x01cd2a585d4dacd1c4ebb7eccc804a7284792641900d383e9f6f496482c01144),
(0x0a7b6a62e3771fea1024172f8fa5ae0a8b6b63d96dc2cd5794a0d61be93c5230, 0x2664583fab5a71ea152a5dc10512917a6b927ca607008db40abdd06dbbb0aedf),
(0x149ab89afd559c4dab808f183828cac2c3c20ce9311ecf7280e03bc9881fd783, 0x2ffd5de1303205066fd7a1540ed79a47baad27532dfc1de2fb708cfde51be867),
(0x11c136f6ea303c5630240788e7a4db6c3aa321aaeaebecbd473af5ace4d05248, 0x0afe33d04a38bae95c2ec4c4372b2d766369c4c5b10f82dcbd4375a41f838d79),
(0x3e360352e498a60f895216359624fcb58372ea0c8acf99c7ffd5678eb018fbec, 0x2821347d5fbae5e9ef8ea16c9b1014b44916bb73ad287ba747ade3c636dcc4e5),
(0x0a3b507e0fe0189f45a2eff60e8fc488da60ce3550391e82f7ec7a1941898c24, 0x3bf48f50d5987b0740eba87e833abb6327c3017dfa065777f3a4f06a555fd12b),
(0x11d043ef781774cb85fa85951ad4acfc4e8de1f4c551cfc677e3f8ac6490224c, 0x239a09984bfe5441f05d454b7da0cacc0797978b17bab820cfe538e748053022),
],
permutation: VerifyingKey {
commitments: [
(0x13a7fd3169c46c9c3bd106368e5dc3a8e7a4b6bd4aadf5fda0f71b83ab297a09, 0x1c3ef9a91b2848056d520f205ea0c98f0fbb69c845830b42811ebdb9adf88afe),
(0x05c7a39a4a93ac3add5a086fc1c41c2949ca8cc3fdcb4900c1931ea49588c3d2, 0x20bd155a2b62dc9e79bb924ecf8d2f991c0d37610a120b80519aa77992a5a31c),
(0x21bf82a2cc0ff4d278ebfef6a422ca3fdf9c79f5e0489d2c9a72b7dc7565b831, 0x26e245eedee7f9507e93ce050fa94dd5f1972ad1733e2a30f3518e701aaf964a),
(0x04a851cd021e368ae628d0a6bddf6f8104684e9881244b06c12c011f97ae10a3, 0x08d7d8315ce9b3f3fdb1ce2f1435188108c7b463039a81d39c4ac6c07a7e5c3c),
(0x39fd0ffea58928cc84ce26ec441b9a5b83f17737a76a4c4f824c4e13d1cea055, 0x0129ec9bd7d5cd7dd679b79e33941521b77239f91bdce6d3ea4e92c2bff6dfa7),
(0x0e15b109c2fe5eeb5266559a0bd3416fd7bce914c00bcf76b44421adc8aa1948, 0x0a033cdb6f602db7dd4fa384788d26cf0c61cc791b030a82b4d29f22175d54ec),
(0x387de49f41c1a760959f315f423b2eb7d5e13cb1ff4d68a06868ea7d44132bf7, 0x2413cca947d0d4cd34dbcc1a58be7fb2220f59840018f6dbf3a0aa9b86fe6cd9),
(0x18fe72524df383d9101c78e8ac564e0f3b4f87ca258fc6a52a8ef18c02abb774, 0x051e411c4928132979202fd170747f75317bee98b8b6b88c61717ba49e89778c),
(0x200a3e36d07f7a7e38d8f9250472ab2bb8515667064de650c168a21183081a88, 0x03d9809449623a8bcdc516ed6ba80266be4f12c730e44c952d8382926877e877),
(0x2451f6728db63db449267894eda89be0764845c42ce9fc8d04308edf6115f009, 0x1b945cd9c5d70a00987d10160b7b002a8a7ab19b1ce1ca9b30863ff0f784a6fe),
(0x1623b33058bd23a5f0459ff8ee9c2b0d8a86230817efd63c58ddf9073aba8251, 0x26ce87f4e49d7909bfdaef46ef6081b092ffd3e9d76109d8c927de4ef18d2c42),
(0x207caa09d3dac116acbb172db321e7f61bc484712e630410052c9065265e2fea, 0x01e1f679fed31ace260648de20aa1fecfa49a86883d7816da5610ce877af90e8),
(0x116b8a5b5779b94dc005494d7149a52fb7335e33109c0ffd2592ce36d8eb05ab, 0x2d8fbe17a8f044ae2e1f96c23ee266dc573afd0f57e51c0099510a81c7092e3e),
(0x2bcf89c0aad7686c3d2fe6941cca5ef1618ba5782b318fa03c2d0ded11e1562f, 0x199ddac71a22d6d0ee7ce48d81f22c97bd5e457e0a943424f190d961a978a929),
(0x2a25812521943a2e1efabfbc6c25673444ef448672695083ff756fcd208038b4, 0x2995c0e58a1158e6a36829ebe87e80adbe76e2393e0df579b623a3a247d533d8),
(0x29b4d4a14eb4471725dca90eb7867a1dec10f8942529b5cc1416e574bd9a9ab5, 0x14989bc5b00b80d38bbddae6513a8af3b4eeb2cc329db76cddec618b23df3289),
(0x32df58319d2d09dbb1fee48d3527d363073cd64c83bbde5b03c8fcb4ce911b31, 0x3b90f39ea943accfa63415c093154f964b63abfa2b0e7858f1b4cf64025600ed),
(0x023eb33622c0edabcb91ddf416ae92d24c7cb92507ca21a8b1402aaf528186ec, 0x2ca49fd21b69c9bc981e5fe64896fc237c501cca77cd2cbd843337084738e0c6),
(0x1c26136061e77adca28c3cbba70a24e47b8a3927a5756fc5dbfed16bde4908f4, 0x3e6d79c18b45835803e8a30aa51dae0ee615a0727d902afa11ac144459902641),
(0x1d140d091fff23e0d54048c8ba62096aba0bc38ac86ae071c54f09186ea22686, 0x19aebca6f2256d1e7f412a00f2bfbfda587e39c49baaac1cc61ff4672f51930d),
(0x1ab03409dc7f5fb7f1f8b5e3c54859db1b8a61eba30de1196145b07243170034, 0x2f139218f6fa6a266e846721b4c6f2ac03ebfefa35cdcdd2ba7f713677e58d74),
(0x07d62e5d650fddae400848ae7eec6073f5a9a032d163f5f24603460404197d4b, 0x0cce86359cc5e284c1427c2c8d65e4f93a26f8757746943497a4dcaaa7e8459c),
],
},
}
Loading
Loading