risc0_circuit_recursion/
control_id.rs

1// Copyright 2025 RISC Zero, Inc.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15use risc0_zkp::core::digest::Digest;
16use risc0_zkp::digest;
17
18/// Smallest cycle limit, as a power of two (po2), supported as a lift program.
19pub const MIN_LIFT_PO2: usize = 14;
20
21/// Control IDs allowed in the default set of recursion programs. Includes control IDs for the base
22/// set of recursion programs, and each power-of-two of the rv32im circuit, using Poseidon2.
23pub const ALLOWED_CONTROL_IDS: &[Digest] = &[
24    digest!("0d79bc33b4760b4783cbb96fdc87724c7e0c463eb0ba1b2705d39f43c698bd2d"), // recursion identity.zkr
25    digest!("7a8f24092c34ed3eb81b3d0a0b796c588c615d3488ef9e61c21dbd1e4b83ea6e"), // recursion join.zkr
26    digest!("96cdf605f755f175a5661812810f2d491507c05f2ea4a83e4c3cad693d26651e"), // recursion join_povw.zkr
27    digest!("f74a894ff593584f65847630ead1a23af78c5f5fed2b61090866e01fa5767f12"), // recursion join_unwrap_povw.zkr
28    digest!("411fa636f2d364648f035174d3778d6340d9ae1dd648fc35657c173f01e27e5f"), // recursion lift_rv32im_v2_14.zkr
29    digest!("1ca3ca03030719064ba61b3125bdd326fc57f74e799ef860bdea6f3227381e16"), // recursion lift_rv32im_v2_15.zkr
30    digest!("c32b3627d2b3d60c64adf523a98bd16c0ff607471f3d6630d1f26d5e9406d841"), // recursion lift_rv32im_v2_16.zkr
31    digest!("c9b08054994f542a6310b00d9b6fc6528ed7bb6f4ca5476a686847127cdfdc5b"), // recursion lift_rv32im_v2_17.zkr
32    digest!("e7934a23ddce1423b425cf32aa23be29f48cd40e0b6ff9376dce6f3bf9d0bc35"), // recursion lift_rv32im_v2_18.zkr
33    digest!("8c2fdd36ede09a4b9d316a43c51f1160cbd8876659c5f35810c3a119c60d3843"), // recursion lift_rv32im_v2_19.zkr
34    digest!("34530b42028fb631c90e1226bb0e750d4b9b593840d45216f75dca449dac7734"), // recursion lift_rv32im_v2_20.zkr
35    digest!("fd84d83092a1e1244d423a26d89c892ab098b467c6d82229912deb26e37d2562"), // recursion lift_rv32im_v2_21.zkr
36    digest!("9d9dbf33535ab11f52a93839dfd23b352b7626009e81d9459fd04e488898ec6a"), // recursion lift_rv32im_v2_22.zkr
37    digest!("c6972402cc81bc6c1122e65aa7cf463f3ac3f477c7dd860582ca7420fc7b8b02"), // recursion lift_rv32im_v2_povw_14.zkr
38    digest!("2f6ea1104bdd5955faa135611e8f803e7b4461703b937e704da70955ec115467"), // recursion lift_rv32im_v2_povw_15.zkr
39    digest!("a7b55654228123448cd67c400d9bf80b4e54eb3997ee92103e900903b6578862"), // recursion lift_rv32im_v2_povw_16.zkr
40    digest!("2adab2445391035b21f255606a1ba060a7d5a64db5cdf13d9fda7f22a2853270"), // recursion lift_rv32im_v2_povw_17.zkr
41    digest!("58b27422240db834c08b8e6c12000c093efce8613263f05825c380009c41da48"), // recursion lift_rv32im_v2_povw_18.zkr
42    digest!("26c84437d3e26875b259880d0f29da47ed5ca869133637701d33fb15a83dce4b"), // recursion lift_rv32im_v2_povw_19.zkr
43    digest!("177fde1441dc735dbd6a58245d82b2036623ac41547dc345f1fd7c486ac51462"), // recursion lift_rv32im_v2_povw_20.zkr
44    digest!("eac3fb487080a62e6ff85d331dd72a4706e50e55c9cb842dea48d71e3e119a04"), // recursion lift_rv32im_v2_povw_21.zkr
45    digest!("0344cd54d62d2a1b6538b674d5aa141250ff4c5be08c6e3d16cb5e1de632252d"), // recursion lift_rv32im_v2_povw_22.zkr
46    digest!("53a7b23d07f99e5d5685e85874f5181e8486aa267a0ae607ffe9ba47c8bdda4a"), // recursion resolve.zkr
47    digest!("20ac6e29b1806a143b508414140e2e15e461f93e04e3830af39cca362b8f005d"), // recursion resolve_povw.zkr
48    digest!("ba1d7275d5840e4f998e2c5120810c0eb197e90219696e2a64dec7662aa3cb06"), // recursion resolve_unwrap_povw.zkr
49    digest!("7771415b778fea1923440e2eb22c4a1e1d7ada2d42cbe03d13402743c0988a31"), // recursion union.zkr
50    digest!("1688f04cca489638862dba455c1d5c561513f975c885a3491f0fe12df761c847"), // recursion unwrap_povw.zkr
51];
52
53/// Root of the Merkle tree constructed from [ALLOWED_CONTROL_IDS], using Poseidon2.
54pub const ALLOWED_CONTROL_ROOT: Digest =
55    digest!("a54dc85ac99f851c92d7c96d7318af41dbe7c0194edfcc37eb4d422a998c1f56");
56
57/// Control ID for the identity recursion programs (ZKR), using Poseidon over the BN254 scalar field.
58pub const BN254_IDENTITY_CONTROL_ID: Digest =
59    digest!("c07a65145c3cb48b6101962ea607a4dd93c753bb26975cb47feb00d3666e4404");
60
61/// Control IDs for included recursion programs (ZKRs), using Poseidon2 over BabyBear.
62pub const POSEIDON2_CONTROL_IDS: [(&str, Digest); 32] = [
63    (
64        "identity.zkr",
65        digest!("0d79bc33b4760b4783cbb96fdc87724c7e0c463eb0ba1b2705d39f43c698bd2d"),
66    ),
67    (
68        "join.zkr",
69        digest!("7a8f24092c34ed3eb81b3d0a0b796c588c615d3488ef9e61c21dbd1e4b83ea6e"),
70    ),
71    (
72        "join_povw.zkr",
73        digest!("96cdf605f755f175a5661812810f2d491507c05f2ea4a83e4c3cad693d26651e"),
74    ),
75    (
76        "join_unwrap_povw.zkr",
77        digest!("f74a894ff593584f65847630ead1a23af78c5f5fed2b61090866e01fa5767f12"),
78    ),
79    (
80        "lift_rv32im_v2_14.zkr",
81        digest!("411fa636f2d364648f035174d3778d6340d9ae1dd648fc35657c173f01e27e5f"),
82    ),
83    (
84        "lift_rv32im_v2_15.zkr",
85        digest!("1ca3ca03030719064ba61b3125bdd326fc57f74e799ef860bdea6f3227381e16"),
86    ),
87    (
88        "lift_rv32im_v2_16.zkr",
89        digest!("c32b3627d2b3d60c64adf523a98bd16c0ff607471f3d6630d1f26d5e9406d841"),
90    ),
91    (
92        "lift_rv32im_v2_17.zkr",
93        digest!("c9b08054994f542a6310b00d9b6fc6528ed7bb6f4ca5476a686847127cdfdc5b"),
94    ),
95    (
96        "lift_rv32im_v2_18.zkr",
97        digest!("e7934a23ddce1423b425cf32aa23be29f48cd40e0b6ff9376dce6f3bf9d0bc35"),
98    ),
99    (
100        "lift_rv32im_v2_19.zkr",
101        digest!("8c2fdd36ede09a4b9d316a43c51f1160cbd8876659c5f35810c3a119c60d3843"),
102    ),
103    (
104        "lift_rv32im_v2_20.zkr",
105        digest!("34530b42028fb631c90e1226bb0e750d4b9b593840d45216f75dca449dac7734"),
106    ),
107    (
108        "lift_rv32im_v2_21.zkr",
109        digest!("fd84d83092a1e1244d423a26d89c892ab098b467c6d82229912deb26e37d2562"),
110    ),
111    (
112        "lift_rv32im_v2_22.zkr",
113        digest!("9d9dbf33535ab11f52a93839dfd23b352b7626009e81d9459fd04e488898ec6a"),
114    ),
115    (
116        "lift_rv32im_v2_23.zkr",
117        digest!("817a4b13453eac5a4e67ea1bdcc0677681faa94e386bdd4b510429363685f067"),
118    ),
119    (
120        "lift_rv32im_v2_24.zkr",
121        digest!("6c4f9e2ae5d3d5375956f608a54112418333ad2008052b059f3b500ba8df9d63"),
122    ),
123    (
124        "lift_rv32im_v2_povw_14.zkr",
125        digest!("c6972402cc81bc6c1122e65aa7cf463f3ac3f477c7dd860582ca7420fc7b8b02"),
126    ),
127    (
128        "lift_rv32im_v2_povw_15.zkr",
129        digest!("2f6ea1104bdd5955faa135611e8f803e7b4461703b937e704da70955ec115467"),
130    ),
131    (
132        "lift_rv32im_v2_povw_16.zkr",
133        digest!("a7b55654228123448cd67c400d9bf80b4e54eb3997ee92103e900903b6578862"),
134    ),
135    (
136        "lift_rv32im_v2_povw_17.zkr",
137        digest!("2adab2445391035b21f255606a1ba060a7d5a64db5cdf13d9fda7f22a2853270"),
138    ),
139    (
140        "lift_rv32im_v2_povw_18.zkr",
141        digest!("58b27422240db834c08b8e6c12000c093efce8613263f05825c380009c41da48"),
142    ),
143    (
144        "lift_rv32im_v2_povw_19.zkr",
145        digest!("26c84437d3e26875b259880d0f29da47ed5ca869133637701d33fb15a83dce4b"),
146    ),
147    (
148        "lift_rv32im_v2_povw_20.zkr",
149        digest!("177fde1441dc735dbd6a58245d82b2036623ac41547dc345f1fd7c486ac51462"),
150    ),
151    (
152        "lift_rv32im_v2_povw_21.zkr",
153        digest!("eac3fb487080a62e6ff85d331dd72a4706e50e55c9cb842dea48d71e3e119a04"),
154    ),
155    (
156        "lift_rv32im_v2_povw_22.zkr",
157        digest!("0344cd54d62d2a1b6538b674d5aa141250ff4c5be08c6e3d16cb5e1de632252d"),
158    ),
159    (
160        "lift_rv32im_v2_povw_23.zkr",
161        digest!("bd19f156d23811155241e10f7d03ab483949e5039a512d75b7e3da40fcb5490e"),
162    ),
163    (
164        "lift_rv32im_v2_povw_24.zkr",
165        digest!("7898f8140d13c04781c2073b2b28541dfa40f23fa824c30228b80b2601d7114a"),
166    ),
167    (
168        "resolve.zkr",
169        digest!("53a7b23d07f99e5d5685e85874f5181e8486aa267a0ae607ffe9ba47c8bdda4a"),
170    ),
171    (
172        "resolve_povw.zkr",
173        digest!("20ac6e29b1806a143b508414140e2e15e461f93e04e3830af39cca362b8f005d"),
174    ),
175    (
176        "resolve_unwrap_povw.zkr",
177        digest!("ba1d7275d5840e4f998e2c5120810c0eb197e90219696e2a64dec7662aa3cb06"),
178    ),
179    (
180        "test_recursion_circuit.zkr",
181        digest!("6d55102aa73086602f7039412200124bdec91f0c497c606f9aa09040403e030b"),
182    ),
183    (
184        "union.zkr",
185        digest!("7771415b778fea1923440e2eb22c4a1e1d7ada2d42cbe03d13402743c0988a31"),
186    ),
187    (
188        "unwrap_povw.zkr",
189        digest!("1688f04cca489638862dba455c1d5c561513f975c885a3491f0fe12df761c847"),
190    ),
191];
192
193/// Control IDs for included recursion programs (ZKRs), using SHA-256.
194pub const SHA256_CONTROL_IDS: [(&str, Digest); 32] = [
195    (
196        "identity.zkr",
197        digest!("d7ecd18c7d06fc468166147cf20869aa10f32e097a0c166146a5a62dd2d975ea"),
198    ),
199    (
200        "join.zkr",
201        digest!("dc44002689aa7852410ad1c840388d66b8b9a2f6d0c4fb6b3ac6ec2ea17d9855"),
202    ),
203    (
204        "join_povw.zkr",
205        digest!("9e97b7ba610dc00ec2628d53274c303eb0d78e6e5c33ef118cf60a5135efa97f"),
206    ),
207    (
208        "join_unwrap_povw.zkr",
209        digest!("8cae4f60f8b44780351ec5740118fcc348d8fa0d029f07d2c77a3f9239165319"),
210    ),
211    (
212        "lift_rv32im_v2_14.zkr",
213        digest!("52d814fea0ff156f2b8b34f7c47d7bfb5c09c527d7907a8664bd95f104633852"),
214    ),
215    (
216        "lift_rv32im_v2_15.zkr",
217        digest!("ca0c7e2ffb7cc226f544dfbebd420a898ba1ec42cb6da27c1446f7dafc41c534"),
218    ),
219    (
220        "lift_rv32im_v2_16.zkr",
221        digest!("b20d5da6ac0f4bface80e6f902cd0f77e3f5e3a8174379595ac74d6f052acae5"),
222    ),
223    (
224        "lift_rv32im_v2_17.zkr",
225        digest!("7e81c18847d0693f69eaffe6a43e3883f81f57ecea2b740a682870d9d810faaf"),
226    ),
227    (
228        "lift_rv32im_v2_18.zkr",
229        digest!("b8f1d3b165d1a9eab7c6c37d3e9583b9907af5ef847c90ca2e4d18c689897a95"),
230    ),
231    (
232        "lift_rv32im_v2_19.zkr",
233        digest!("9385cfb4c04bb8a7afca8b2d1bf083cb5d7d975d8a47b92f02710a81cd49d2cb"),
234    ),
235    (
236        "lift_rv32im_v2_20.zkr",
237        digest!("771619915ed607e737578315c855ba70c322ac02cfdd01da0e4d1bed4c51cb0d"),
238    ),
239    (
240        "lift_rv32im_v2_21.zkr",
241        digest!("c662b29a03a3475a3dae43ef30b0e4234a9e00d99b49d1f61d8ae91c7957a148"),
242    ),
243    (
244        "lift_rv32im_v2_22.zkr",
245        digest!("5d68f47ef1f5ab04588c370a79d1216eeec96c5d75fcf73af3a2a59b76bd2879"),
246    ),
247    (
248        "lift_rv32im_v2_23.zkr",
249        digest!("bb5ced4a8480a2347cfa43125a9c5b165e2ff3bc99b42927d43f49d23d8b3208"),
250    ),
251    (
252        "lift_rv32im_v2_24.zkr",
253        digest!("3e6ac6e4ca5d76858edae7a4f080a2a34649ea6ce0870d0d77ec18b7299b1dbd"),
254    ),
255    (
256        "lift_rv32im_v2_povw_14.zkr",
257        digest!("e5e64a61ebe66ad5361417b2c5b879f555567b8b27f24263b285fd2a44e9d879"),
258    ),
259    (
260        "lift_rv32im_v2_povw_15.zkr",
261        digest!("058a1436c07037e4b02856b51a09a4b8b81f0653dacde6efbead574d2ccc877c"),
262    ),
263    (
264        "lift_rv32im_v2_povw_16.zkr",
265        digest!("39ac8603e8fdd8b1571546cf21afc4fecbd763abdc83c6f556f865f1639cf793"),
266    ),
267    (
268        "lift_rv32im_v2_povw_17.zkr",
269        digest!("2f83f136dff007043e04c793946ec7b1d6fc85aa80fd56b3cddfd41e5b5e80cd"),
270    ),
271    (
272        "lift_rv32im_v2_povw_18.zkr",
273        digest!("8fc29c56e18387c39b45a6ad5efe70c4b05f4755dafe79ceb503f00d99711171"),
274    ),
275    (
276        "lift_rv32im_v2_povw_19.zkr",
277        digest!("a6e06036f3b4c84aac96b2c43b18fba7328a0f1c6d0a1a92f6601ceb7f136a23"),
278    ),
279    (
280        "lift_rv32im_v2_povw_20.zkr",
281        digest!("97a1d6b0d9c7cbc754a24b76a068c43a3dd0a194708e88b5ba061617c3bff7b4"),
282    ),
283    (
284        "lift_rv32im_v2_povw_21.zkr",
285        digest!("268d25ef3fa8fc664c1a9629870be677b66e537d8b56fceddf4e55cea3ec8167"),
286    ),
287    (
288        "lift_rv32im_v2_povw_22.zkr",
289        digest!("e836234e551bf0404665c68a6489527e0f38d77e058a702911298912d4fdfee0"),
290    ),
291    (
292        "lift_rv32im_v2_povw_23.zkr",
293        digest!("5544f519c4d65a1546475b23860e26ff7299059e24cacb3b10854cc2872e7736"),
294    ),
295    (
296        "lift_rv32im_v2_povw_24.zkr",
297        digest!("ae43f6e6b2565ef910c9736eb616a1d045ff049571c37ac728ad70d8cca2d66d"),
298    ),
299    (
300        "resolve.zkr",
301        digest!("ecc34946284eb02d1e119ef0878ae65ba5e855d6e0b5db4e462a694007b2a0f4"),
302    ),
303    (
304        "resolve_povw.zkr",
305        digest!("51fe537675d705e759c0cb0862f0cb7c5d70ce3dc483efc3cb1646c2b6f0cba3"),
306    ),
307    (
308        "resolve_unwrap_povw.zkr",
309        digest!("1332cc7a1cb90467d849db4ebc4fcc201f81fe0a2ab06d6a398d76b7dd8aa694"),
310    ),
311    (
312        "test_recursion_circuit.zkr",
313        digest!("3c7b9195e051f01d9dc21d96a1dd26c7035bc225511a715cf8c7ba83f8df7687"),
314    ),
315    (
316        "union.zkr",
317        digest!("44bfa51c5030508d7eddc1b1489145a6e519842f7283098a17f13fe9113497dc"),
318    ),
319    (
320        "unwrap_povw.zkr",
321        digest!("3b5de70ddecc2fabcd3b9b9150ff64e7fc084ecb80f97cac2f9ee11e326087d1"),
322    ),
323];