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!("85da7a229d849c2df4b4981b7832d454aafe861565c09077dfe3b370a0df6e58"), // recursion lift_rv32im_v2_14.zkr
27    digest!("e898f63e57c60550cf8a4538ac128b459205bf1932ad8626cf8d3a69a643de3a"), // recursion lift_rv32im_v2_15.zkr
28    digest!("1200206540c0875eda6a093da5f95f3ae39876110b5a2a13bb78122414cd4c47"), // recursion lift_rv32im_v2_16.zkr
29    digest!("65886d687ac8776f3174295d0cf6382d24fdfd6040070d05eeadb604325b1d0d"), // recursion lift_rv32im_v2_17.zkr
30    digest!("2e92d814ded6f733640e8f499cc8ec4446d0b51ae5410964e0cefa278bab3176"), // recursion lift_rv32im_v2_18.zkr
31    digest!("6defb6501a5dd05d6858733427d61010d59201341cc93c1138345137c55a372c"), // recursion lift_rv32im_v2_19.zkr
32    digest!("a207f7229e901538c003ed4a05c7895fb2b22611de5add35ba988450b2537b5d"), // recursion lift_rv32im_v2_20.zkr
33    digest!("5ab2507285106c5b3485a61a36dea7127ba29528ccca18040c6ba05da61a8d1f"), // recursion lift_rv32im_v2_21.zkr
34    digest!("00bba10ac0db121f677243735a888162e909c14b3567a11d5e5b2961080d1b2b"), // recursion lift_rv32im_v2_22.zkr
35    digest!("53a7b23d07f99e5d5685e85874f5181e8486aa267a0ae607ffe9ba47c8bdda4a"), // recursion resolve.zkr
36    digest!("7771415b778fea1923440e2eb22c4a1e1d7ada2d42cbe03d13402743c0988a31"), // recursion union.zkr
37];
38
39/// Root of the Merkle tree constructed from [ALLOWED_CONTROL_IDS], using Poseidon2.
40pub const ALLOWED_CONTROL_ROOT: Digest =
41    digest!("ce52bf56033842021af3cf6db8a50d1b7535c125a34f1a22c6fdcf002c5a1529");
42
43/// Control ID for the identity recursion programs (ZKR), using Poseidon over the BN254 scalar field.
44pub const BN254_IDENTITY_CONTROL_ID: Digest =
45    digest!("c07a65145c3cb48b6101962ea607a4dd93c753bb26975cb47feb00d3666e4404");
46
47/// Control IDs for included recursion programs (ZKRs), using Poseidon2 over BabyBear.
48pub const POSEIDON2_CONTROL_IDS: [(&str, Digest); 27] = [
49    (
50        "identity.zkr",
51        digest!("0d79bc33b4760b4783cbb96fdc87724c7e0c463eb0ba1b2705d39f43c698bd2d"),
52    ),
53    (
54        "join.zkr",
55        digest!("7a8f24092c34ed3eb81b3d0a0b796c588c615d3488ef9e61c21dbd1e4b83ea6e"),
56    ),
57    (
58        "lift_14.zkr",
59        digest!("2f609032975d7931e9d569484cdb5c1e8758af6f6d24c91968e8171b4e48652a"),
60    ),
61    (
62        "lift_15.zkr",
63        digest!("53b94f649b8fef3283c730425bf9be1618b82a76e270bd44b351f16eda68d00d"),
64    ),
65    (
66        "lift_16.zkr",
67        digest!("919c664b394f6b3e7500d151204ede5e6afd4d1a3724925ca341971e93cffc46"),
68    ),
69    (
70        "lift_17.zkr",
71        digest!("bc52395cbfbbdc6783e19443161c0a559496a017aeb6370232a5313125032175"),
72    ),
73    (
74        "lift_18.zkr",
75        digest!("442f0a4cef957609ab5ee447a279351e6dc212734cbc6e3e5bbf8b086f1a7818"),
76    ),
77    (
78        "lift_19.zkr",
79        digest!("d621555070b62e383b8e16511aa8b244cb442656c5c396302fe75816c477b902"),
80    ),
81    (
82        "lift_20.zkr",
83        digest!("66f12c252c978962a100976c69ea6a4dfb2b4a2a504d6d5c60fb8e2fff6f4b61"),
84    ),
85    (
86        "lift_21.zkr",
87        digest!("88a6322eccb8f141087c48174211df1d0e071603ebfefb69f0099836569e384a"),
88    ),
89    (
90        "lift_22.zkr",
91        digest!("bb71f46d8931c80fbcf10f3b5314b93cb7b8061d4658c55000c2c26967b58a0c"),
92    ),
93    (
94        "lift_23.zkr",
95        digest!("34a4dd0eb8f410674c09c0419c8bf62ef768a476ccd8e84f5809534e0b0e0065"),
96    ),
97    (
98        "lift_24.zkr",
99        digest!("d8c1dd073822ac1da582bd52bed7ee35f106326dcb7a191d66df420016339571"),
100    ),
101    (
102        "lift_rv32im_v2_14.zkr",
103        digest!("85da7a229d849c2df4b4981b7832d454aafe861565c09077dfe3b370a0df6e58"),
104    ),
105    (
106        "lift_rv32im_v2_15.zkr",
107        digest!("e898f63e57c60550cf8a4538ac128b459205bf1932ad8626cf8d3a69a643de3a"),
108    ),
109    (
110        "lift_rv32im_v2_16.zkr",
111        digest!("1200206540c0875eda6a093da5f95f3ae39876110b5a2a13bb78122414cd4c47"),
112    ),
113    (
114        "lift_rv32im_v2_17.zkr",
115        digest!("65886d687ac8776f3174295d0cf6382d24fdfd6040070d05eeadb604325b1d0d"),
116    ),
117    (
118        "lift_rv32im_v2_18.zkr",
119        digest!("2e92d814ded6f733640e8f499cc8ec4446d0b51ae5410964e0cefa278bab3176"),
120    ),
121    (
122        "lift_rv32im_v2_19.zkr",
123        digest!("6defb6501a5dd05d6858733427d61010d59201341cc93c1138345137c55a372c"),
124    ),
125    (
126        "lift_rv32im_v2_20.zkr",
127        digest!("a207f7229e901538c003ed4a05c7895fb2b22611de5add35ba988450b2537b5d"),
128    ),
129    (
130        "lift_rv32im_v2_21.zkr",
131        digest!("5ab2507285106c5b3485a61a36dea7127ba29528ccca18040c6ba05da61a8d1f"),
132    ),
133    (
134        "lift_rv32im_v2_22.zkr",
135        digest!("00bba10ac0db121f677243735a888162e909c14b3567a11d5e5b2961080d1b2b"),
136    ),
137    (
138        "lift_rv32im_v2_23.zkr",
139        digest!("b0ff641317b165613645116689599952631ed33ed94de72217e8ca2ec271b853"),
140    ),
141    (
142        "lift_rv32im_v2_24.zkr",
143        digest!("3b3a722b8e6fd90cc0649d17e05744175afbe60fe3543f77a947e9678418bc29"),
144    ),
145    (
146        "resolve.zkr",
147        digest!("53a7b23d07f99e5d5685e85874f5181e8486aa267a0ae607ffe9ba47c8bdda4a"),
148    ),
149    (
150        "test_recursion_circuit.zkr",
151        digest!("6d55102aa73086602f7039412200124bdec91f0c497c606f9aa09040403e030b"),
152    ),
153    (
154        "union.zkr",
155        digest!("7771415b778fea1923440e2eb22c4a1e1d7ada2d42cbe03d13402743c0988a31"),
156    ),
157];
158
159/// Control IDs for included recursion programs (ZKRs), using SHA-256.
160pub const SHA256_CONTROL_IDS: [(&str, Digest); 27] = [
161    (
162        "identity.zkr",
163        digest!("d7ecd18c7d06fc468166147cf20869aa10f32e097a0c166146a5a62dd2d975ea"),
164    ),
165    (
166        "join.zkr",
167        digest!("dc44002689aa7852410ad1c840388d66b8b9a2f6d0c4fb6b3ac6ec2ea17d9855"),
168    ),
169    (
170        "lift_14.zkr",
171        digest!("d164a42f8bb7c70049e4873871fab98d88d04f1914b25a1370a7a877b7ff2ca3"),
172    ),
173    (
174        "lift_15.zkr",
175        digest!("f2ffb9a1c43b01741e01a2d07d5f65ffe0ce231c70ddb128094f2a22f073c33c"),
176    ),
177    (
178        "lift_16.zkr",
179        digest!("8843478fd585afc7cf84c8905ce16ed8cadbb61c45248619f9b252900e5167c8"),
180    ),
181    (
182        "lift_17.zkr",
183        digest!("4a54533e7ef8b620ca102ed763ebc94e969fd608d669623d466d43775dbec7a1"),
184    ),
185    (
186        "lift_18.zkr",
187        digest!("954ffa89a80c010191f3ade9ca63c1f4f9689410df02faa801dc1b98ac557cfb"),
188    ),
189    (
190        "lift_19.zkr",
191        digest!("87150aa1b6b0fc92b68d9238d0c2a83a17da3d5d3775fd23b2517e0d7fd7697b"),
192    ),
193    (
194        "lift_20.zkr",
195        digest!("00676bedc32cc1e0dd7e490be83f4be39f379beedc35983ace0782061d65d73d"),
196    ),
197    (
198        "lift_21.zkr",
199        digest!("10d8d3a1eee1dec7c6cc0553222ab8ac9b6bfeb0bd1553e097fb29a3ef22a606"),
200    ),
201    (
202        "lift_22.zkr",
203        digest!("fcbe182cb5a235fc28d43ba1137908609958587e18060aa712be08d5833a8af3"),
204    ),
205    (
206        "lift_23.zkr",
207        digest!("f3f8278b8f56e0c2292cf7d0b395405dcf67760638e4ad901b3df406303c90b9"),
208    ),
209    (
210        "lift_24.zkr",
211        digest!("a827fd3663ab862331c47b1ba985fde346c13851535b1d80693b6367771644a7"),
212    ),
213    (
214        "lift_rv32im_v2_14.zkr",
215        digest!("8fdb6632219b902a4e290590a6b5d18cba98aca1eb1dc9d51afaf233024fa716"),
216    ),
217    (
218        "lift_rv32im_v2_15.zkr",
219        digest!("d1c5699afe0dbf843cd750ba8adce426700afe6322cc9f795339f55803fd5f1b"),
220    ),
221    (
222        "lift_rv32im_v2_16.zkr",
223        digest!("ac56de3ed1f29daddd44698b8ce4f6024db0ac0abdf391a7dcfbab7e4ff687d9"),
224    ),
225    (
226        "lift_rv32im_v2_17.zkr",
227        digest!("7bac7a1f161c8789ee0653422ec6b791e9303a925a9754af9496582c3fa4e11c"),
228    ),
229    (
230        "lift_rv32im_v2_18.zkr",
231        digest!("d7c7f79fe812bdec12e27795d892825dbb307036bc6296326bc38b029af89945"),
232    ),
233    (
234        "lift_rv32im_v2_19.zkr",
235        digest!("550660dec08c81a8b076f2fcd9bf92a3ac5e2943562f96922be27bbecc48674c"),
236    ),
237    (
238        "lift_rv32im_v2_20.zkr",
239        digest!("9871771f56c6bea04adfe958c7d66aae8e81427b6719d5ee00b2f309d8a3f8ef"),
240    ),
241    (
242        "lift_rv32im_v2_21.zkr",
243        digest!("32b412915501d9df535e3de25e3f4b5cca78efc647d288a914b752955c27489a"),
244    ),
245    (
246        "lift_rv32im_v2_22.zkr",
247        digest!("1956d254dd700164d267aee2c55f4e953a34834ca37c0f7b2e345403371a9fc7"),
248    ),
249    (
250        "lift_rv32im_v2_23.zkr",
251        digest!("11c481d4ec58516eed75460dd44717905f5a338668cd72a52d7987a3f7710fd8"),
252    ),
253    (
254        "lift_rv32im_v2_24.zkr",
255        digest!("5a52b5f66d844a23c33d1e3e0eb3273470d574e813694792ec1138d37065415d"),
256    ),
257    (
258        "resolve.zkr",
259        digest!("ecc34946284eb02d1e119ef0878ae65ba5e855d6e0b5db4e462a694007b2a0f4"),
260    ),
261    (
262        "test_recursion_circuit.zkr",
263        digest!("3c7b9195e051f01d9dc21d96a1dd26c7035bc225511a715cf8c7ba83f8df7687"),
264    ),
265    (
266        "union.zkr",
267        digest!("44bfa51c5030508d7eddc1b1489145a6e519842f7283098a17f13fe9113497dc"),
268    ),
269];