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!("30dae603fcd283331d01105ea129ce43a0957a59b4f0013359a5642dfda0ba26"), // rv32im po2=13
25    digest!("2afea6024b79430b49f60518f27d7262f2ec5b1306a9030cc2e4d955e5dc5964"), // rv32im po2=14
26    digest!("8dc2760e1e24082cb66c83470c24a8017e95ce4d5eab170522f783418d545e72"), // rv32im po2=15
27    digest!("35feaa4eebbefd45b0a36a350671c82154f90c660389ed3a8ff7bd2a30805973"), // rv32im po2=16
28    digest!("7436486fdf9a7d3a3f8a03263bc7541a3c173c2ab5d2eb2c53939d0243dc0d16"), // rv32im po2=17
29    digest!("3abdc115ddf6af1977863c29c0f2b91f8c0c2a1c35e82158104b651f6a07a816"), // rv32im po2=18
30    digest!("17d75c070f373f333bbbaf33a688bb74fc05670435cd5d6378d37b608448e300"), // rv32im po2=19
31    digest!("f3cf1217485c403cea526b1e52e70835c31bdc6e3016ee12916f6c6561fc0977"), // rv32im po2=20
32    digest!("4043ce1426811d4f0e6a9c27256d052513c95739e9b80c74f628f313c739b75c"), // rv32im po2=21
33    digest!("b4edfc3f2c49f10285bcdc7493eb81063959820a59569356fb73b62c1586e01f"), // rv32im po2=22
34    digest!("0d79bc33b4760b4783cbb96fdc87724c7e0c463eb0ba1b2705d39f43c698bd2d"), // recursion identity.zkr
35    digest!("7a8f24092c34ed3eb81b3d0a0b796c588c615d3488ef9e61c21dbd1e4b83ea6e"), // recursion join.zkr
36    digest!("2f609032975d7931e9d569484cdb5c1e8758af6f6d24c91968e8171b4e48652a"), // recursion lift_14.zkr
37    digest!("53b94f649b8fef3283c730425bf9be1618b82a76e270bd44b351f16eda68d00d"), // recursion lift_15.zkr
38    digest!("919c664b394f6b3e7500d151204ede5e6afd4d1a3724925ca341971e93cffc46"), // recursion lift_16.zkr
39    digest!("bc52395cbfbbdc6783e19443161c0a559496a017aeb6370232a5313125032175"), // recursion lift_17.zkr
40    digest!("442f0a4cef957609ab5ee447a279351e6dc212734cbc6e3e5bbf8b086f1a7818"), // recursion lift_18.zkr
41    digest!("d621555070b62e383b8e16511aa8b244cb442656c5c396302fe75816c477b902"), // recursion lift_19.zkr
42    digest!("66f12c252c978962a100976c69ea6a4dfb2b4a2a504d6d5c60fb8e2fff6f4b61"), // recursion lift_20.zkr
43    digest!("88a6322eccb8f141087c48174211df1d0e071603ebfefb69f0099836569e384a"), // recursion lift_21.zkr
44    digest!("bb71f46d8931c80fbcf10f3b5314b93cb7b8061d4658c55000c2c26967b58a0c"), // recursion lift_22.zkr
45    digest!("53a7b23d07f99e5d5685e85874f5181e8486aa267a0ae607ffe9ba47c8bdda4a"), // recursion resolve.zkr
46    digest!("7771415b778fea1923440e2eb22c4a1e1d7ada2d42cbe03d13402743c0988a31"), // recursion union.zkr
47];
48
49/// Root of the Merkle tree constructed from [ALLOWED_CONTROL_IDS], using Poseidon2.
50pub const ALLOWED_CONTROL_ROOT: Digest =
51    digest!("6fcbfc564e08874a235c181e75bb53547402b116957f700497bf482e08060a15");
52
53/// Control ID for the identity recursion programs (ZKR), using Poseidon over the BN254 scalar field.
54pub const BN254_IDENTITY_CONTROL_ID: Digest =
55    digest!("c07a65145c3cb48b6101962ea607a4dd93c753bb26975cb47feb00d3666e4404");
56
57/// Control IDs for included recursion programs (ZKRs), using Poseidon2 over BabyBear.
58pub const POSEIDON2_CONTROL_IDS: [(&str, Digest); 16] = [
59    (
60        "identity.zkr",
61        digest!("0d79bc33b4760b4783cbb96fdc87724c7e0c463eb0ba1b2705d39f43c698bd2d"),
62    ),
63    (
64        "join.zkr",
65        digest!("7a8f24092c34ed3eb81b3d0a0b796c588c615d3488ef9e61c21dbd1e4b83ea6e"),
66    ),
67    (
68        "lift_14.zkr",
69        digest!("2f609032975d7931e9d569484cdb5c1e8758af6f6d24c91968e8171b4e48652a"),
70    ),
71    (
72        "lift_15.zkr",
73        digest!("53b94f649b8fef3283c730425bf9be1618b82a76e270bd44b351f16eda68d00d"),
74    ),
75    (
76        "lift_16.zkr",
77        digest!("919c664b394f6b3e7500d151204ede5e6afd4d1a3724925ca341971e93cffc46"),
78    ),
79    (
80        "lift_17.zkr",
81        digest!("bc52395cbfbbdc6783e19443161c0a559496a017aeb6370232a5313125032175"),
82    ),
83    (
84        "lift_18.zkr",
85        digest!("442f0a4cef957609ab5ee447a279351e6dc212734cbc6e3e5bbf8b086f1a7818"),
86    ),
87    (
88        "lift_19.zkr",
89        digest!("d621555070b62e383b8e16511aa8b244cb442656c5c396302fe75816c477b902"),
90    ),
91    (
92        "lift_20.zkr",
93        digest!("66f12c252c978962a100976c69ea6a4dfb2b4a2a504d6d5c60fb8e2fff6f4b61"),
94    ),
95    (
96        "lift_21.zkr",
97        digest!("88a6322eccb8f141087c48174211df1d0e071603ebfefb69f0099836569e384a"),
98    ),
99    (
100        "lift_22.zkr",
101        digest!("bb71f46d8931c80fbcf10f3b5314b93cb7b8061d4658c55000c2c26967b58a0c"),
102    ),
103    (
104        "lift_23.zkr",
105        digest!("34a4dd0eb8f410674c09c0419c8bf62ef768a476ccd8e84f5809534e0b0e0065"),
106    ),
107    (
108        "lift_24.zkr",
109        digest!("d8c1dd073822ac1da582bd52bed7ee35f106326dcb7a191d66df420016339571"),
110    ),
111    (
112        "resolve.zkr",
113        digest!("53a7b23d07f99e5d5685e85874f5181e8486aa267a0ae607ffe9ba47c8bdda4a"),
114    ),
115    (
116        "test_recursion_circuit.zkr",
117        digest!("6d55102aa73086602f7039412200124bdec91f0c497c606f9aa09040403e030b"),
118    ),
119    (
120        "union.zkr",
121        digest!("7771415b778fea1923440e2eb22c4a1e1d7ada2d42cbe03d13402743c0988a31"),
122    ),
123];
124
125/// Control IDs for included recursion programs (ZKRs), using SHA-256.
126pub const SHA256_CONTROL_IDS: [(&str, Digest); 16] = [
127    (
128        "identity.zkr",
129        digest!("d7ecd18c7d06fc468166147cf20869aa10f32e097a0c166146a5a62dd2d975ea"),
130    ),
131    (
132        "join.zkr",
133        digest!("dc44002689aa7852410ad1c840388d66b8b9a2f6d0c4fb6b3ac6ec2ea17d9855"),
134    ),
135    (
136        "lift_14.zkr",
137        digest!("d164a42f8bb7c70049e4873871fab98d88d04f1914b25a1370a7a877b7ff2ca3"),
138    ),
139    (
140        "lift_15.zkr",
141        digest!("f2ffb9a1c43b01741e01a2d07d5f65ffe0ce231c70ddb128094f2a22f073c33c"),
142    ),
143    (
144        "lift_16.zkr",
145        digest!("8843478fd585afc7cf84c8905ce16ed8cadbb61c45248619f9b252900e5167c8"),
146    ),
147    (
148        "lift_17.zkr",
149        digest!("4a54533e7ef8b620ca102ed763ebc94e969fd608d669623d466d43775dbec7a1"),
150    ),
151    (
152        "lift_18.zkr",
153        digest!("954ffa89a80c010191f3ade9ca63c1f4f9689410df02faa801dc1b98ac557cfb"),
154    ),
155    (
156        "lift_19.zkr",
157        digest!("87150aa1b6b0fc92b68d9238d0c2a83a17da3d5d3775fd23b2517e0d7fd7697b"),
158    ),
159    (
160        "lift_20.zkr",
161        digest!("00676bedc32cc1e0dd7e490be83f4be39f379beedc35983ace0782061d65d73d"),
162    ),
163    (
164        "lift_21.zkr",
165        digest!("10d8d3a1eee1dec7c6cc0553222ab8ac9b6bfeb0bd1553e097fb29a3ef22a606"),
166    ),
167    (
168        "lift_22.zkr",
169        digest!("fcbe182cb5a235fc28d43ba1137908609958587e18060aa712be08d5833a8af3"),
170    ),
171    (
172        "lift_23.zkr",
173        digest!("f3f8278b8f56e0c2292cf7d0b395405dcf67760638e4ad901b3df406303c90b9"),
174    ),
175    (
176        "lift_24.zkr",
177        digest!("a827fd3663ab862331c47b1ba985fde346c13851535b1d80693b6367771644a7"),
178    ),
179    (
180        "resolve.zkr",
181        digest!("ecc34946284eb02d1e119ef0878ae65ba5e855d6e0b5db4e462a694007b2a0f4"),
182    ),
183    (
184        "test_recursion_circuit.zkr",
185        digest!("3c7b9195e051f01d9dc21d96a1dd26c7035bc225511a715cf8c7ba83f8df7687"),
186    ),
187    (
188        "union.zkr",
189        digest!("44bfa51c5030508d7eddc1b1489145a6e519842f7283098a17f13fe9113497dc"),
190    ),
191];