Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
acir.hpp
Go to the documentation of this file.
1#pragma once
2
4#include "serde.hpp"
5
6namespace Acir {
7struct Helpers {
8 static std::map<std::string, msgpack::object const*> make_kvmap(msgpack::object const& o, std::string const& name)
9 {
10 if (o.type != msgpack::type::MAP) {
11 std::cerr << o << std::endl;
12 throw_or_abort("expected MAP for " + name);
13 }
15 for (uint32_t i = 0; i < o.via.map.size; ++i) {
16 if (o.via.map.ptr[i].key.type != msgpack::type::STR) {
17 std::cerr << o << std::endl;
18 throw_or_abort("expected STR for keys of " + name);
19 }
20 kvmap.emplace(std::string(o.via.map.ptr[i].key.via.str.ptr, o.via.map.ptr[i].key.via.str.size),
21 &o.via.map.ptr[i].val);
22 }
23 return kvmap;
24 }
25
26 template <typename T>
28 std::string const& struct_name,
29 std::string const& field_name,
30 T& field,
31 bool is_optional)
32 {
33 auto it = kvmap.find(field_name);
34 if (it != kvmap.end()) {
35 if (!is_optional && it->second->type == msgpack::type::NIL) {
36 throw_or_abort("nil value for required field: " + struct_name + "::" + field_name);
37 }
38 try {
39 it->second->convert(field);
40 } catch (const msgpack::type_error&) {
41 std::cerr << *it->second << std::endl;
42 throw_or_abort("error converting into field " + struct_name + "::" + field_name);
43 }
44 } else if (!is_optional) {
45 throw_or_abort("missing field: " + struct_name + "::" + field_name);
46 }
47 }
48
49 template <typename T>
50 static void conv_fld_from_array(msgpack::object_array const& array,
51 std::string const& struct_name,
52 std::string const& field_name,
53 T& field,
54 uint32_t index)
55 {
56 if (index >= array.size) {
57 throw_or_abort("index out of bounds: " + struct_name + "::" + field_name + " at " + std::to_string(index));
58 }
59 auto element = array.ptr[index];
60 if (element.type == msgpack::type::NIL) {
61 throw_or_abort("nil value for required field: " + struct_name + "::" + field_name);
62 }
63 try {
64 element.convert(field);
65 } catch (const msgpack::type_error&) {
66 std::cerr << element << std::endl;
67 throw_or_abort("error converting into field " + struct_name + "::" + field_name);
68 }
69 }
70};
71} // namespace Acir
72
73namespace Acir {
74
76
77 struct Add {
78 friend bool operator==(const Add&, const Add&);
79
80 void msgpack_pack(auto& packer) const {}
81 void msgpack_unpack(msgpack::object const& o) {}
82 };
83
84 struct Sub {
85 friend bool operator==(const Sub&, const Sub&);
86
87 void msgpack_pack(auto& packer) const {}
88 void msgpack_unpack(msgpack::object const& o) {}
89 };
90
91 struct Mul {
92 friend bool operator==(const Mul&, const Mul&);
93
94 void msgpack_pack(auto& packer) const {}
95 void msgpack_unpack(msgpack::object const& o) {}
96 };
97
98 struct Div {
99 friend bool operator==(const Div&, const Div&);
100
101 void msgpack_pack(auto& packer) const {}
102 void msgpack_unpack(msgpack::object const& o) {}
103 };
104
105 struct IntegerDiv {
106 friend bool operator==(const IntegerDiv&, const IntegerDiv&);
107
108 void msgpack_pack(auto& packer) const {}
109 void msgpack_unpack(msgpack::object const& o) {}
110 };
111
112 struct Equals {
113 friend bool operator==(const Equals&, const Equals&);
114
115 void msgpack_pack(auto& packer) const {}
116 void msgpack_unpack(msgpack::object const& o) {}
117 };
118
119 struct LessThan {
120 friend bool operator==(const LessThan&, const LessThan&);
121
122 void msgpack_pack(auto& packer) const {}
123 void msgpack_unpack(msgpack::object const& o) {}
124 };
125
127 friend bool operator==(const LessThanEquals&, const LessThanEquals&);
128
129 void msgpack_pack(auto& packer) const {}
130 void msgpack_unpack(msgpack::object const& o) {}
131 };
132
134
135 friend bool operator==(const BinaryFieldOp&, const BinaryFieldOp&);
136
137 void msgpack_pack(auto& packer) const
138 {
139 std::string tag;
140 bool is_unit;
141 switch (value.index()) {
142
143 case 0:
144 tag = "Add";
145 is_unit = true;
146 break;
147 case 1:
148 tag = "Sub";
149 is_unit = true;
150 break;
151 case 2:
152 tag = "Mul";
153 is_unit = true;
154 break;
155 case 3:
156 tag = "Div";
157 is_unit = true;
158 break;
159 case 4:
160 tag = "IntegerDiv";
161 is_unit = true;
162 break;
163 case 5:
164 tag = "Equals";
165 is_unit = true;
166 break;
167 case 6:
168 tag = "LessThan";
169 is_unit = true;
170 break;
171 case 7:
172 tag = "LessThanEquals";
173 is_unit = true;
174 break;
175 default:
176 throw_or_abort("unknown enum 'BinaryFieldOp' variant index: " + std::to_string(value.index()));
177 }
178 if (is_unit) {
179 packer.pack(tag);
180 } else {
181 std::visit(
182 [&packer, tag](const auto& arg) {
183 packer.pack_map(1);
184 packer.pack(tag);
185 packer.pack(arg);
186 },
187 value);
188 }
189 }
190
191 void msgpack_unpack(msgpack::object const& o)
192 {
193
194 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
195 std::cerr << o << std::endl;
196 throw_or_abort("expected MAP or STR for enum 'BinaryFieldOp'; got type " + std::to_string(o.type));
197 }
198 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
199 throw_or_abort("expected 1 entry for enum 'BinaryFieldOp'; got " + std::to_string(o.via.map.size));
200 }
201 std::string tag;
202 try {
203 if (o.type == msgpack::type::object_type::MAP) {
204 o.via.map.ptr[0].key.convert(tag);
205 } else {
206 o.convert(tag);
207 }
208 } catch (const msgpack::type_error&) {
209 std::cerr << o << std::endl;
210 throw_or_abort("error converting tag to string for enum 'BinaryFieldOp'");
211 }
212 if (tag == "Add") {
213 Add v;
214 value = v;
215 } else if (tag == "Sub") {
216 Sub v;
217 value = v;
218 } else if (tag == "Mul") {
219 Mul v;
220 value = v;
221 } else if (tag == "Div") {
222 Div v;
223 value = v;
224 } else if (tag == "IntegerDiv") {
225 IntegerDiv v;
226 value = v;
227 } else if (tag == "Equals") {
228 Equals v;
229 value = v;
230 } else if (tag == "LessThan") {
231 LessThan v;
232 value = v;
233 } else if (tag == "LessThanEquals") {
235 value = v;
236 } else {
237 std::cerr << o << std::endl;
238 throw_or_abort("unknown 'BinaryFieldOp' enum variant: " + tag);
239 }
240 }
241};
242
244
245 struct Add {
246 friend bool operator==(const Add&, const Add&);
247
248 void msgpack_pack(auto& packer) const {}
249 void msgpack_unpack(msgpack::object const& o) {}
250 };
251
252 struct Sub {
253 friend bool operator==(const Sub&, const Sub&);
254
255 void msgpack_pack(auto& packer) const {}
256 void msgpack_unpack(msgpack::object const& o) {}
257 };
258
259 struct Mul {
260 friend bool operator==(const Mul&, const Mul&);
261
262 void msgpack_pack(auto& packer) const {}
263 void msgpack_unpack(msgpack::object const& o) {}
264 };
265
266 struct Div {
267 friend bool operator==(const Div&, const Div&);
268
269 void msgpack_pack(auto& packer) const {}
270 void msgpack_unpack(msgpack::object const& o) {}
271 };
272
273 struct Equals {
274 friend bool operator==(const Equals&, const Equals&);
275
276 void msgpack_pack(auto& packer) const {}
277 void msgpack_unpack(msgpack::object const& o) {}
278 };
279
280 struct LessThan {
281 friend bool operator==(const LessThan&, const LessThan&);
282
283 void msgpack_pack(auto& packer) const {}
284 void msgpack_unpack(msgpack::object const& o) {}
285 };
286
288 friend bool operator==(const LessThanEquals&, const LessThanEquals&);
289
290 void msgpack_pack(auto& packer) const {}
291 void msgpack_unpack(msgpack::object const& o) {}
292 };
293
294 struct And {
295 friend bool operator==(const And&, const And&);
296
297 void msgpack_pack(auto& packer) const {}
298 void msgpack_unpack(msgpack::object const& o) {}
299 };
300
301 struct Or {
302 friend bool operator==(const Or&, const Or&);
303
304 void msgpack_pack(auto& packer) const {}
305 void msgpack_unpack(msgpack::object const& o) {}
306 };
307
308 struct Xor {
309 friend bool operator==(const Xor&, const Xor&);
310
311 void msgpack_pack(auto& packer) const {}
312 void msgpack_unpack(msgpack::object const& o) {}
313 };
314
315 struct Shl {
316 friend bool operator==(const Shl&, const Shl&);
317
318 void msgpack_pack(auto& packer) const {}
319 void msgpack_unpack(msgpack::object const& o) {}
320 };
321
322 struct Shr {
323 friend bool operator==(const Shr&, const Shr&);
324
325 void msgpack_pack(auto& packer) const {}
326 void msgpack_unpack(msgpack::object const& o) {}
327 };
328
330
331 friend bool operator==(const BinaryIntOp&, const BinaryIntOp&);
332
333 void msgpack_pack(auto& packer) const
334 {
335 std::string tag;
336 bool is_unit;
337 switch (value.index()) {
338
339 case 0:
340 tag = "Add";
341 is_unit = true;
342 break;
343 case 1:
344 tag = "Sub";
345 is_unit = true;
346 break;
347 case 2:
348 tag = "Mul";
349 is_unit = true;
350 break;
351 case 3:
352 tag = "Div";
353 is_unit = true;
354 break;
355 case 4:
356 tag = "Equals";
357 is_unit = true;
358 break;
359 case 5:
360 tag = "LessThan";
361 is_unit = true;
362 break;
363 case 6:
364 tag = "LessThanEquals";
365 is_unit = true;
366 break;
367 case 7:
368 tag = "And";
369 is_unit = true;
370 break;
371 case 8:
372 tag = "Or";
373 is_unit = true;
374 break;
375 case 9:
376 tag = "Xor";
377 is_unit = true;
378 break;
379 case 10:
380 tag = "Shl";
381 is_unit = true;
382 break;
383 case 11:
384 tag = "Shr";
385 is_unit = true;
386 break;
387 default:
388 throw_or_abort("unknown enum 'BinaryIntOp' variant index: " + std::to_string(value.index()));
389 }
390 if (is_unit) {
391 packer.pack(tag);
392 } else {
393 std::visit(
394 [&packer, tag](const auto& arg) {
395 packer.pack_map(1);
396 packer.pack(tag);
397 packer.pack(arg);
398 },
399 value);
400 }
401 }
402
403 void msgpack_unpack(msgpack::object const& o)
404 {
405
406 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
407 std::cerr << o << std::endl;
408 throw_or_abort("expected MAP or STR for enum 'BinaryIntOp'; got type " + std::to_string(o.type));
409 }
410 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
411 throw_or_abort("expected 1 entry for enum 'BinaryIntOp'; got " + std::to_string(o.via.map.size));
412 }
413 std::string tag;
414 try {
415 if (o.type == msgpack::type::object_type::MAP) {
416 o.via.map.ptr[0].key.convert(tag);
417 } else {
418 o.convert(tag);
419 }
420 } catch (const msgpack::type_error&) {
421 std::cerr << o << std::endl;
422 throw_or_abort("error converting tag to string for enum 'BinaryIntOp'");
423 }
424 if (tag == "Add") {
425 Add v;
426 value = v;
427 } else if (tag == "Sub") {
428 Sub v;
429 value = v;
430 } else if (tag == "Mul") {
431 Mul v;
432 value = v;
433 } else if (tag == "Div") {
434 Div v;
435 value = v;
436 } else if (tag == "Equals") {
437 Equals v;
438 value = v;
439 } else if (tag == "LessThan") {
440 LessThan v;
441 value = v;
442 } else if (tag == "LessThanEquals") {
444 value = v;
445 } else if (tag == "And") {
446 And v;
447 value = v;
448 } else if (tag == "Or") {
449 Or v;
450 value = v;
451 } else if (tag == "Xor") {
452 Xor v;
453 value = v;
454 } else if (tag == "Shl") {
455 Shl v;
456 value = v;
457 } else if (tag == "Shr") {
458 Shr v;
459 value = v;
460 } else {
461 std::cerr << o << std::endl;
462 throw_or_abort("unknown 'BinaryIntOp' enum variant: " + tag);
463 }
464 }
465};
466
468
469 struct U1 {
470 friend bool operator==(const U1&, const U1&);
471
472 void msgpack_pack(auto& packer) const {}
473 void msgpack_unpack(msgpack::object const& o) {}
474 };
475
476 struct U8 {
477 friend bool operator==(const U8&, const U8&);
478
479 void msgpack_pack(auto& packer) const {}
480 void msgpack_unpack(msgpack::object const& o) {}
481 };
482
483 struct U16 {
484 friend bool operator==(const U16&, const U16&);
485
486 void msgpack_pack(auto& packer) const {}
487 void msgpack_unpack(msgpack::object const& o) {}
488 };
489
490 struct U32 {
491 friend bool operator==(const U32&, const U32&);
492
493 void msgpack_pack(auto& packer) const {}
494 void msgpack_unpack(msgpack::object const& o) {}
495 };
496
497 struct U64 {
498 friend bool operator==(const U64&, const U64&);
499
500 void msgpack_pack(auto& packer) const {}
501 void msgpack_unpack(msgpack::object const& o) {}
502 };
503
504 struct U128 {
505 friend bool operator==(const U128&, const U128&);
506
507 void msgpack_pack(auto& packer) const {}
508 void msgpack_unpack(msgpack::object const& o) {}
509 };
510
512
513 friend bool operator==(const IntegerBitSize&, const IntegerBitSize&);
514
515 void msgpack_pack(auto& packer) const
516 {
517 std::string tag;
518 bool is_unit;
519 switch (value.index()) {
520
521 case 0:
522 tag = "U1";
523 is_unit = true;
524 break;
525 case 1:
526 tag = "U8";
527 is_unit = true;
528 break;
529 case 2:
530 tag = "U16";
531 is_unit = true;
532 break;
533 case 3:
534 tag = "U32";
535 is_unit = true;
536 break;
537 case 4:
538 tag = "U64";
539 is_unit = true;
540 break;
541 case 5:
542 tag = "U128";
543 is_unit = true;
544 break;
545 default:
546 throw_or_abort("unknown enum 'IntegerBitSize' variant index: " + std::to_string(value.index()));
547 }
548 if (is_unit) {
549 packer.pack(tag);
550 } else {
551 std::visit(
552 [&packer, tag](const auto& arg) {
553 packer.pack_map(1);
554 packer.pack(tag);
555 packer.pack(arg);
556 },
557 value);
558 }
559 }
560
561 void msgpack_unpack(msgpack::object const& o)
562 {
563
564 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
565 std::cerr << o << std::endl;
566 throw_or_abort("expected MAP or STR for enum 'IntegerBitSize'; got type " + std::to_string(o.type));
567 }
568 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
569 throw_or_abort("expected 1 entry for enum 'IntegerBitSize'; got " + std::to_string(o.via.map.size));
570 }
571 std::string tag;
572 try {
573 if (o.type == msgpack::type::object_type::MAP) {
574 o.via.map.ptr[0].key.convert(tag);
575 } else {
576 o.convert(tag);
577 }
578 } catch (const msgpack::type_error&) {
579 std::cerr << o << std::endl;
580 throw_or_abort("error converting tag to string for enum 'IntegerBitSize'");
581 }
582 if (tag == "U1") {
583 U1 v;
584 value = v;
585 } else if (tag == "U8") {
586 U8 v;
587 value = v;
588 } else if (tag == "U16") {
589 U16 v;
590 value = v;
591 } else if (tag == "U32") {
592 U32 v;
593 value = v;
594 } else if (tag == "U64") {
595 U64 v;
596 value = v;
597 } else if (tag == "U128") {
598 U128 v;
599 value = v;
600 } else {
601 std::cerr << o << std::endl;
602 throw_or_abort("unknown 'IntegerBitSize' enum variant: " + tag);
603 }
604 }
605};
606
607struct BitSize {
608
609 struct Field {
610 friend bool operator==(const Field&, const Field&);
611
612 void msgpack_pack(auto& packer) const {}
613 void msgpack_unpack(msgpack::object const& o) {}
614 };
615
616 struct Integer {
618
619 friend bool operator==(const Integer&, const Integer&);
620
621 void msgpack_pack(auto& packer) const { packer.pack(value); }
622
623 void msgpack_unpack(msgpack::object const& o)
624 {
625 try {
626 o.convert(value);
627 } catch (const msgpack::type_error&) {
628 std::cerr << o << std::endl;
629 throw_or_abort("error converting into newtype 'Integer'");
630 }
631 }
632 };
633
635
636 friend bool operator==(const BitSize&, const BitSize&);
637
638 void msgpack_pack(auto& packer) const
639 {
640 std::string tag;
641 bool is_unit;
642 switch (value.index()) {
643
644 case 0:
645 tag = "Field";
646 is_unit = true;
647 break;
648 case 1:
649 tag = "Integer";
650 is_unit = false;
651 break;
652 default:
653 throw_or_abort("unknown enum 'BitSize' variant index: " + std::to_string(value.index()));
654 }
655 if (is_unit) {
656 packer.pack(tag);
657 } else {
658 std::visit(
659 [&packer, tag](const auto& arg) {
660 packer.pack_map(1);
661 packer.pack(tag);
662 packer.pack(arg);
663 },
664 value);
665 }
666 }
667
668 void msgpack_unpack(msgpack::object const& o)
669 {
670
671 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
672 std::cerr << o << std::endl;
673 throw_or_abort("expected MAP or STR for enum 'BitSize'; got type " + std::to_string(o.type));
674 }
675 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
676 throw_or_abort("expected 1 entry for enum 'BitSize'; got " + std::to_string(o.via.map.size));
677 }
678 std::string tag;
679 try {
680 if (o.type == msgpack::type::object_type::MAP) {
681 o.via.map.ptr[0].key.convert(tag);
682 } else {
683 o.convert(tag);
684 }
685 } catch (const msgpack::type_error&) {
686 std::cerr << o << std::endl;
687 throw_or_abort("error converting tag to string for enum 'BitSize'");
688 }
689 if (tag == "Field") {
690 Field v;
691 value = v;
692 } else if (tag == "Integer") {
693 Integer v;
694 try {
695 o.via.map.ptr[0].val.convert(v);
696 } catch (const msgpack::type_error&) {
697 std::cerr << o << std::endl;
698 throw_or_abort("error converting into enum variant 'BitSize::Integer'");
699 }
700
701 value = v;
702 } else {
703 std::cerr << o << std::endl;
704 throw_or_abort("unknown 'BitSize' enum variant: " + tag);
705 }
706 }
707};
708
710
711 struct Direct {
712 uint32_t value;
713
714 friend bool operator==(const Direct&, const Direct&);
715
716 void msgpack_pack(auto& packer) const { packer.pack(value); }
717
718 void msgpack_unpack(msgpack::object const& o)
719 {
720 try {
721 o.convert(value);
722 } catch (const msgpack::type_error&) {
723 std::cerr << o << std::endl;
724 throw_or_abort("error converting into newtype 'Direct'");
725 }
726 }
727 };
728
729 struct Relative {
730 uint32_t value;
731
732 friend bool operator==(const Relative&, const Relative&);
733
734 void msgpack_pack(auto& packer) const { packer.pack(value); }
735
736 void msgpack_unpack(msgpack::object const& o)
737 {
738 try {
739 o.convert(value);
740 } catch (const msgpack::type_error&) {
741 std::cerr << o << std::endl;
742 throw_or_abort("error converting into newtype 'Relative'");
743 }
744 }
745 };
746
748
749 friend bool operator==(const MemoryAddress&, const MemoryAddress&);
750
751 void msgpack_pack(auto& packer) const
752 {
753 std::string tag;
754 bool is_unit;
755 switch (value.index()) {
756
757 case 0:
758 tag = "Direct";
759 is_unit = false;
760 break;
761 case 1:
762 tag = "Relative";
763 is_unit = false;
764 break;
765 default:
766 throw_or_abort("unknown enum 'MemoryAddress' variant index: " + std::to_string(value.index()));
767 }
768 if (is_unit) {
769 packer.pack(tag);
770 } else {
771 std::visit(
772 [&packer, tag](const auto& arg) {
773 packer.pack_map(1);
774 packer.pack(tag);
775 packer.pack(arg);
776 },
777 value);
778 }
779 }
780
781 void msgpack_unpack(msgpack::object const& o)
782 {
783
784 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
785 std::cerr << o << std::endl;
786 throw_or_abort("expected MAP or STR for enum 'MemoryAddress'; got type " + std::to_string(o.type));
787 }
788 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
789 throw_or_abort("expected 1 entry for enum 'MemoryAddress'; got " + std::to_string(o.via.map.size));
790 }
791 std::string tag;
792 try {
793 if (o.type == msgpack::type::object_type::MAP) {
794 o.via.map.ptr[0].key.convert(tag);
795 } else {
796 o.convert(tag);
797 }
798 } catch (const msgpack::type_error&) {
799 std::cerr << o << std::endl;
800 throw_or_abort("error converting tag to string for enum 'MemoryAddress'");
801 }
802 if (tag == "Direct") {
803 Direct v;
804 try {
805 o.via.map.ptr[0].val.convert(v);
806 } catch (const msgpack::type_error&) {
807 std::cerr << o << std::endl;
808 throw_or_abort("error converting into enum variant 'MemoryAddress::Direct'");
809 }
810
811 value = v;
812 } else if (tag == "Relative") {
813 Relative v;
814 try {
815 o.via.map.ptr[0].val.convert(v);
816 } catch (const msgpack::type_error&) {
817 std::cerr << o << std::endl;
818 throw_or_abort("error converting into enum variant 'MemoryAddress::Relative'");
819 }
820
821 value = v;
822 } else {
823 std::cerr << o << std::endl;
824 throw_or_abort("unknown 'MemoryAddress' enum variant: " + tag);
825 }
826 }
827};
828
830 uint32_t value;
831
832 friend bool operator==(const SemiFlattenedLength&, const SemiFlattenedLength&);
833
834 void msgpack_pack(auto& packer) const { packer.pack(value); }
835
836 void msgpack_unpack(msgpack::object const& o)
837 {
838 try {
839 o.convert(value);
840 } catch (const msgpack::type_error&) {
841 std::cerr << o << std::endl;
842 throw_or_abort("error converting into newtype 'SemiFlattenedLength'");
843 }
844 }
845};
846
847struct HeapArray {
850
851 friend bool operator==(const HeapArray&, const HeapArray&);
852
853 void msgpack_pack(auto& packer) const
854 {
855 packer.pack_array(2);
856 packer.pack(pointer);
857 packer.pack(size);
858 }
859
860 void msgpack_unpack(msgpack::object const& o)
861 {
862 std::string name = "HeapArray";
863 if (o.type == msgpack::type::MAP) {
864 auto kvmap = Helpers::make_kvmap(o, name);
865 Helpers::conv_fld_from_kvmap(kvmap, name, "pointer", pointer, false);
866 Helpers::conv_fld_from_kvmap(kvmap, name, "size", size, false);
867 } else if (o.type == msgpack::type::ARRAY) {
868 auto array = o.via.array;
869 Helpers::conv_fld_from_array(array, name, "pointer", pointer, 0);
870 Helpers::conv_fld_from_array(array, name, "size", size, 1);
871 } else {
872 throw_or_abort("expected MAP or ARRAY for " + name);
873 }
874 }
875};
876
878
884
885 friend bool operator==(const AES128Encrypt&, const AES128Encrypt&);
886
887 void msgpack_pack(auto& packer) const
888 {
889 packer.pack_array(4);
890 packer.pack(inputs);
891 packer.pack(iv);
892 packer.pack(key);
893 packer.pack(outputs);
894 }
895
896 void msgpack_unpack(msgpack::object const& o)
897 {
898 std::string name = "AES128Encrypt";
899 if (o.type == msgpack::type::MAP) {
900 auto kvmap = Helpers::make_kvmap(o, name);
901 Helpers::conv_fld_from_kvmap(kvmap, name, "inputs", inputs, false);
902 Helpers::conv_fld_from_kvmap(kvmap, name, "iv", iv, false);
903 Helpers::conv_fld_from_kvmap(kvmap, name, "key", key, false);
904 Helpers::conv_fld_from_kvmap(kvmap, name, "outputs", outputs, false);
905 } else if (o.type == msgpack::type::ARRAY) {
906 auto array = o.via.array;
907 Helpers::conv_fld_from_array(array, name, "inputs", inputs, 0);
908 Helpers::conv_fld_from_array(array, name, "iv", iv, 1);
909 Helpers::conv_fld_from_array(array, name, "key", key, 2);
910 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 3);
911 } else {
912 throw_or_abort("expected MAP or ARRAY for " + name);
913 }
914 }
915 };
916
917 struct Blake2s {
920
921 friend bool operator==(const Blake2s&, const Blake2s&);
922
923 void msgpack_pack(auto& packer) const
924 {
925 packer.pack_array(2);
926 packer.pack(message);
927 packer.pack(output);
928 }
929
930 void msgpack_unpack(msgpack::object const& o)
931 {
932 std::string name = "Blake2s";
933 if (o.type == msgpack::type::MAP) {
934 auto kvmap = Helpers::make_kvmap(o, name);
935 Helpers::conv_fld_from_kvmap(kvmap, name, "message", message, false);
936 Helpers::conv_fld_from_kvmap(kvmap, name, "output", output, false);
937 } else if (o.type == msgpack::type::ARRAY) {
938 auto array = o.via.array;
939 Helpers::conv_fld_from_array(array, name, "message", message, 0);
940 Helpers::conv_fld_from_array(array, name, "output", output, 1);
941 } else {
942 throw_or_abort("expected MAP or ARRAY for " + name);
943 }
944 }
945 };
946
947 struct Blake3 {
950
951 friend bool operator==(const Blake3&, const Blake3&);
952
953 void msgpack_pack(auto& packer) const
954 {
955 packer.pack_array(2);
956 packer.pack(message);
957 packer.pack(output);
958 }
959
960 void msgpack_unpack(msgpack::object const& o)
961 {
962 std::string name = "Blake3";
963 if (o.type == msgpack::type::MAP) {
964 auto kvmap = Helpers::make_kvmap(o, name);
965 Helpers::conv_fld_from_kvmap(kvmap, name, "message", message, false);
966 Helpers::conv_fld_from_kvmap(kvmap, name, "output", output, false);
967 } else if (o.type == msgpack::type::ARRAY) {
968 auto array = o.via.array;
969 Helpers::conv_fld_from_array(array, name, "message", message, 0);
970 Helpers::conv_fld_from_array(array, name, "output", output, 1);
971 } else {
972 throw_or_abort("expected MAP or ARRAY for " + name);
973 }
974 }
975 };
976
977 struct Keccakf1600 {
980
981 friend bool operator==(const Keccakf1600&, const Keccakf1600&);
982
983 void msgpack_pack(auto& packer) const
984 {
985 packer.pack_array(2);
986 packer.pack(input);
987 packer.pack(output);
988 }
989
990 void msgpack_unpack(msgpack::object const& o)
991 {
992 std::string name = "Keccakf1600";
993 if (o.type == msgpack::type::MAP) {
994 auto kvmap = Helpers::make_kvmap(o, name);
995 Helpers::conv_fld_from_kvmap(kvmap, name, "input", input, false);
996 Helpers::conv_fld_from_kvmap(kvmap, name, "output", output, false);
997 } else if (o.type == msgpack::type::ARRAY) {
998 auto array = o.via.array;
999 Helpers::conv_fld_from_array(array, name, "input", input, 0);
1000 Helpers::conv_fld_from_array(array, name, "output", output, 1);
1001 } else {
1002 throw_or_abort("expected MAP or ARRAY for " + name);
1003 }
1004 }
1005 };
1006
1013
1014 friend bool operator==(const EcdsaSecp256k1&, const EcdsaSecp256k1&);
1015
1016 void msgpack_pack(auto& packer) const
1017 {
1018 packer.pack_array(5);
1019 packer.pack(hashed_msg);
1020 packer.pack(public_key_x);
1021 packer.pack(public_key_y);
1022 packer.pack(signature);
1023 packer.pack(result);
1024 }
1025
1026 void msgpack_unpack(msgpack::object const& o)
1027 {
1028 std::string name = "EcdsaSecp256k1";
1029 if (o.type == msgpack::type::MAP) {
1030 auto kvmap = Helpers::make_kvmap(o, name);
1031 Helpers::conv_fld_from_kvmap(kvmap, name, "hashed_msg", hashed_msg, false);
1032 Helpers::conv_fld_from_kvmap(kvmap, name, "public_key_x", public_key_x, false);
1033 Helpers::conv_fld_from_kvmap(kvmap, name, "public_key_y", public_key_y, false);
1034 Helpers::conv_fld_from_kvmap(kvmap, name, "signature", signature, false);
1035 Helpers::conv_fld_from_kvmap(kvmap, name, "result", result, false);
1036 } else if (o.type == msgpack::type::ARRAY) {
1037 auto array = o.via.array;
1038 Helpers::conv_fld_from_array(array, name, "hashed_msg", hashed_msg, 0);
1039 Helpers::conv_fld_from_array(array, name, "public_key_x", public_key_x, 1);
1040 Helpers::conv_fld_from_array(array, name, "public_key_y", public_key_y, 2);
1041 Helpers::conv_fld_from_array(array, name, "signature", signature, 3);
1042 Helpers::conv_fld_from_array(array, name, "result", result, 4);
1043 } else {
1044 throw_or_abort("expected MAP or ARRAY for " + name);
1045 }
1046 }
1047 };
1048
1055
1056 friend bool operator==(const EcdsaSecp256r1&, const EcdsaSecp256r1&);
1057
1058 void msgpack_pack(auto& packer) const
1059 {
1060 packer.pack_array(5);
1061 packer.pack(hashed_msg);
1062 packer.pack(public_key_x);
1063 packer.pack(public_key_y);
1064 packer.pack(signature);
1065 packer.pack(result);
1066 }
1067
1068 void msgpack_unpack(msgpack::object const& o)
1069 {
1070 std::string name = "EcdsaSecp256r1";
1071 if (o.type == msgpack::type::MAP) {
1072 auto kvmap = Helpers::make_kvmap(o, name);
1073 Helpers::conv_fld_from_kvmap(kvmap, name, "hashed_msg", hashed_msg, false);
1074 Helpers::conv_fld_from_kvmap(kvmap, name, "public_key_x", public_key_x, false);
1075 Helpers::conv_fld_from_kvmap(kvmap, name, "public_key_y", public_key_y, false);
1076 Helpers::conv_fld_from_kvmap(kvmap, name, "signature", signature, false);
1077 Helpers::conv_fld_from_kvmap(kvmap, name, "result", result, false);
1078 } else if (o.type == msgpack::type::ARRAY) {
1079 auto array = o.via.array;
1080 Helpers::conv_fld_from_array(array, name, "hashed_msg", hashed_msg, 0);
1081 Helpers::conv_fld_from_array(array, name, "public_key_x", public_key_x, 1);
1082 Helpers::conv_fld_from_array(array, name, "public_key_y", public_key_y, 2);
1083 Helpers::conv_fld_from_array(array, name, "signature", signature, 3);
1084 Helpers::conv_fld_from_array(array, name, "result", result, 4);
1085 } else {
1086 throw_or_abort("expected MAP or ARRAY for " + name);
1087 }
1088 }
1089 };
1090
1095
1096 friend bool operator==(const MultiScalarMul&, const MultiScalarMul&);
1097
1098 void msgpack_pack(auto& packer) const
1099 {
1100 packer.pack_array(3);
1101 packer.pack(points);
1102 packer.pack(scalars);
1103 packer.pack(outputs);
1104 }
1105
1106 void msgpack_unpack(msgpack::object const& o)
1107 {
1108 std::string name = "MultiScalarMul";
1109 if (o.type == msgpack::type::MAP) {
1110 auto kvmap = Helpers::make_kvmap(o, name);
1111 Helpers::conv_fld_from_kvmap(kvmap, name, "points", points, false);
1112 Helpers::conv_fld_from_kvmap(kvmap, name, "scalars", scalars, false);
1113 Helpers::conv_fld_from_kvmap(kvmap, name, "outputs", outputs, false);
1114 } else if (o.type == msgpack::type::ARRAY) {
1115 auto array = o.via.array;
1116 Helpers::conv_fld_from_array(array, name, "points", points, 0);
1117 Helpers::conv_fld_from_array(array, name, "scalars", scalars, 1);
1118 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 2);
1119 } else {
1120 throw_or_abort("expected MAP or ARRAY for " + name);
1121 }
1122 }
1123 };
1124
1133
1134 friend bool operator==(const EmbeddedCurveAdd&, const EmbeddedCurveAdd&);
1135
1136 void msgpack_pack(auto& packer) const
1137 {
1138 packer.pack_array(7);
1139 packer.pack(input1_x);
1140 packer.pack(input1_y);
1141 packer.pack(input1_infinite);
1142 packer.pack(input2_x);
1143 packer.pack(input2_y);
1144 packer.pack(input2_infinite);
1145 packer.pack(result);
1146 }
1147
1148 void msgpack_unpack(msgpack::object const& o)
1149 {
1150 std::string name = "EmbeddedCurveAdd";
1151 if (o.type == msgpack::type::MAP) {
1152 auto kvmap = Helpers::make_kvmap(o, name);
1153 Helpers::conv_fld_from_kvmap(kvmap, name, "input1_x", input1_x, false);
1154 Helpers::conv_fld_from_kvmap(kvmap, name, "input1_y", input1_y, false);
1155 Helpers::conv_fld_from_kvmap(kvmap, name, "input1_infinite", input1_infinite, false);
1156 Helpers::conv_fld_from_kvmap(kvmap, name, "input2_x", input2_x, false);
1157 Helpers::conv_fld_from_kvmap(kvmap, name, "input2_y", input2_y, false);
1158 Helpers::conv_fld_from_kvmap(kvmap, name, "input2_infinite", input2_infinite, false);
1159 Helpers::conv_fld_from_kvmap(kvmap, name, "result", result, false);
1160 } else if (o.type == msgpack::type::ARRAY) {
1161 auto array = o.via.array;
1162 Helpers::conv_fld_from_array(array, name, "input1_x", input1_x, 0);
1163 Helpers::conv_fld_from_array(array, name, "input1_y", input1_y, 1);
1164 Helpers::conv_fld_from_array(array, name, "input1_infinite", input1_infinite, 2);
1165 Helpers::conv_fld_from_array(array, name, "input2_x", input2_x, 3);
1166 Helpers::conv_fld_from_array(array, name, "input2_y", input2_y, 4);
1167 Helpers::conv_fld_from_array(array, name, "input2_infinite", input2_infinite, 5);
1168 Helpers::conv_fld_from_array(array, name, "result", result, 6);
1169 } else {
1170 throw_or_abort("expected MAP or ARRAY for " + name);
1171 }
1172 }
1173 };
1174
1178
1179 friend bool operator==(const Poseidon2Permutation&, const Poseidon2Permutation&);
1180
1181 void msgpack_pack(auto& packer) const
1182 {
1183 packer.pack_array(2);
1184 packer.pack(message);
1185 packer.pack(output);
1186 }
1187
1188 void msgpack_unpack(msgpack::object const& o)
1189 {
1190 std::string name = "Poseidon2Permutation";
1191 if (o.type == msgpack::type::MAP) {
1192 auto kvmap = Helpers::make_kvmap(o, name);
1193 Helpers::conv_fld_from_kvmap(kvmap, name, "message", message, false);
1194 Helpers::conv_fld_from_kvmap(kvmap, name, "output", output, false);
1195 } else if (o.type == msgpack::type::ARRAY) {
1196 auto array = o.via.array;
1197 Helpers::conv_fld_from_array(array, name, "message", message, 0);
1198 Helpers::conv_fld_from_array(array, name, "output", output, 1);
1199 } else {
1200 throw_or_abort("expected MAP or ARRAY for " + name);
1201 }
1202 }
1203 };
1204
1209
1210 friend bool operator==(const Sha256Compression&, const Sha256Compression&);
1211
1212 void msgpack_pack(auto& packer) const
1213 {
1214 packer.pack_array(3);
1215 packer.pack(input);
1216 packer.pack(hash_values);
1217 packer.pack(output);
1218 }
1219
1220 void msgpack_unpack(msgpack::object const& o)
1221 {
1222 std::string name = "Sha256Compression";
1223 if (o.type == msgpack::type::MAP) {
1224 auto kvmap = Helpers::make_kvmap(o, name);
1225 Helpers::conv_fld_from_kvmap(kvmap, name, "input", input, false);
1226 Helpers::conv_fld_from_kvmap(kvmap, name, "hash_values", hash_values, false);
1227 Helpers::conv_fld_from_kvmap(kvmap, name, "output", output, false);
1228 } else if (o.type == msgpack::type::ARRAY) {
1229 auto array = o.via.array;
1230 Helpers::conv_fld_from_array(array, name, "input", input, 0);
1231 Helpers::conv_fld_from_array(array, name, "hash_values", hash_values, 1);
1232 Helpers::conv_fld_from_array(array, name, "output", output, 2);
1233 } else {
1234 throw_or_abort("expected MAP or ARRAY for " + name);
1235 }
1236 }
1237 };
1238
1239 struct ToRadix {
1245
1246 friend bool operator==(const ToRadix&, const ToRadix&);
1247
1248 void msgpack_pack(auto& packer) const
1249 {
1250 packer.pack_array(5);
1251 packer.pack(input);
1252 packer.pack(radix);
1253 packer.pack(output_pointer);
1254 packer.pack(num_limbs);
1255 packer.pack(output_bits);
1256 }
1257
1258 void msgpack_unpack(msgpack::object const& o)
1259 {
1260 std::string name = "ToRadix";
1261 if (o.type == msgpack::type::MAP) {
1262 auto kvmap = Helpers::make_kvmap(o, name);
1263 Helpers::conv_fld_from_kvmap(kvmap, name, "input", input, false);
1264 Helpers::conv_fld_from_kvmap(kvmap, name, "radix", radix, false);
1265 Helpers::conv_fld_from_kvmap(kvmap, name, "output_pointer", output_pointer, false);
1266 Helpers::conv_fld_from_kvmap(kvmap, name, "num_limbs", num_limbs, false);
1267 Helpers::conv_fld_from_kvmap(kvmap, name, "output_bits", output_bits, false);
1268 } else if (o.type == msgpack::type::ARRAY) {
1269 auto array = o.via.array;
1270 Helpers::conv_fld_from_array(array, name, "input", input, 0);
1271 Helpers::conv_fld_from_array(array, name, "radix", radix, 1);
1272 Helpers::conv_fld_from_array(array, name, "output_pointer", output_pointer, 2);
1273 Helpers::conv_fld_from_array(array, name, "num_limbs", num_limbs, 3);
1274 Helpers::conv_fld_from_array(array, name, "output_bits", output_bits, 4);
1275 } else {
1276 throw_or_abort("expected MAP or ARRAY for " + name);
1277 }
1278 }
1279 };
1280
1281 std::variant<AES128Encrypt,
1282 Blake2s,
1283 Blake3,
1284 Keccakf1600,
1285 EcdsaSecp256k1,
1286 EcdsaSecp256r1,
1287 MultiScalarMul,
1288 EmbeddedCurveAdd,
1289 Poseidon2Permutation,
1290 Sha256Compression,
1291 ToRadix>
1293
1294 friend bool operator==(const BlackBoxOp&, const BlackBoxOp&);
1295
1296 void msgpack_pack(auto& packer) const
1297 {
1298 std::string tag;
1299 bool is_unit;
1300 switch (value.index()) {
1301
1302 case 0:
1303 tag = "AES128Encrypt";
1304 is_unit = false;
1305 break;
1306 case 1:
1307 tag = "Blake2s";
1308 is_unit = false;
1309 break;
1310 case 2:
1311 tag = "Blake3";
1312 is_unit = false;
1313 break;
1314 case 3:
1315 tag = "Keccakf1600";
1316 is_unit = false;
1317 break;
1318 case 4:
1319 tag = "EcdsaSecp256k1";
1320 is_unit = false;
1321 break;
1322 case 5:
1323 tag = "EcdsaSecp256r1";
1324 is_unit = false;
1325 break;
1326 case 6:
1327 tag = "MultiScalarMul";
1328 is_unit = false;
1329 break;
1330 case 7:
1331 tag = "EmbeddedCurveAdd";
1332 is_unit = false;
1333 break;
1334 case 8:
1335 tag = "Poseidon2Permutation";
1336 is_unit = false;
1337 break;
1338 case 9:
1339 tag = "Sha256Compression";
1340 is_unit = false;
1341 break;
1342 case 10:
1343 tag = "ToRadix";
1344 is_unit = false;
1345 break;
1346 default:
1347 throw_or_abort("unknown enum 'BlackBoxOp' variant index: " + std::to_string(value.index()));
1348 }
1349 if (is_unit) {
1350 packer.pack(tag);
1351 } else {
1352 std::visit(
1353 [&packer, tag](const auto& arg) {
1354 packer.pack_map(1);
1355 packer.pack(tag);
1356 packer.pack(arg);
1357 },
1358 value);
1359 }
1360 }
1361
1362 void msgpack_unpack(msgpack::object const& o)
1363 {
1364
1365 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
1366 std::cerr << o << std::endl;
1367 throw_or_abort("expected MAP or STR for enum 'BlackBoxOp'; got type " + std::to_string(o.type));
1368 }
1369 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
1370 throw_or_abort("expected 1 entry for enum 'BlackBoxOp'; got " + std::to_string(o.via.map.size));
1371 }
1372 std::string tag;
1373 try {
1374 if (o.type == msgpack::type::object_type::MAP) {
1375 o.via.map.ptr[0].key.convert(tag);
1376 } else {
1377 o.convert(tag);
1378 }
1379 } catch (const msgpack::type_error&) {
1380 std::cerr << o << std::endl;
1381 throw_or_abort("error converting tag to string for enum 'BlackBoxOp'");
1382 }
1383 if (tag == "AES128Encrypt") {
1384 AES128Encrypt v;
1385 try {
1386 o.via.map.ptr[0].val.convert(v);
1387 } catch (const msgpack::type_error&) {
1388 std::cerr << o << std::endl;
1389 throw_or_abort("error converting into enum variant 'BlackBoxOp::AES128Encrypt'");
1390 }
1391
1392 value = v;
1393 } else if (tag == "Blake2s") {
1394 Blake2s v;
1395 try {
1396 o.via.map.ptr[0].val.convert(v);
1397 } catch (const msgpack::type_error&) {
1398 std::cerr << o << std::endl;
1399 throw_or_abort("error converting into enum variant 'BlackBoxOp::Blake2s'");
1400 }
1401
1402 value = v;
1403 } else if (tag == "Blake3") {
1404 Blake3 v;
1405 try {
1406 o.via.map.ptr[0].val.convert(v);
1407 } catch (const msgpack::type_error&) {
1408 std::cerr << o << std::endl;
1409 throw_or_abort("error converting into enum variant 'BlackBoxOp::Blake3'");
1410 }
1411
1412 value = v;
1413 } else if (tag == "Keccakf1600") {
1414 Keccakf1600 v;
1415 try {
1416 o.via.map.ptr[0].val.convert(v);
1417 } catch (const msgpack::type_error&) {
1418 std::cerr << o << std::endl;
1419 throw_or_abort("error converting into enum variant 'BlackBoxOp::Keccakf1600'");
1420 }
1421
1422 value = v;
1423 } else if (tag == "EcdsaSecp256k1") {
1425 try {
1426 o.via.map.ptr[0].val.convert(v);
1427 } catch (const msgpack::type_error&) {
1428 std::cerr << o << std::endl;
1429 throw_or_abort("error converting into enum variant 'BlackBoxOp::EcdsaSecp256k1'");
1430 }
1431
1432 value = v;
1433 } else if (tag == "EcdsaSecp256r1") {
1435 try {
1436 o.via.map.ptr[0].val.convert(v);
1437 } catch (const msgpack::type_error&) {
1438 std::cerr << o << std::endl;
1439 throw_or_abort("error converting into enum variant 'BlackBoxOp::EcdsaSecp256r1'");
1440 }
1441
1442 value = v;
1443 } else if (tag == "MultiScalarMul") {
1445 try {
1446 o.via.map.ptr[0].val.convert(v);
1447 } catch (const msgpack::type_error&) {
1448 std::cerr << o << std::endl;
1449 throw_or_abort("error converting into enum variant 'BlackBoxOp::MultiScalarMul'");
1450 }
1451
1452 value = v;
1453 } else if (tag == "EmbeddedCurveAdd") {
1455 try {
1456 o.via.map.ptr[0].val.convert(v);
1457 } catch (const msgpack::type_error&) {
1458 std::cerr << o << std::endl;
1459 throw_or_abort("error converting into enum variant 'BlackBoxOp::EmbeddedCurveAdd'");
1460 }
1461
1462 value = v;
1463 } else if (tag == "Poseidon2Permutation") {
1465 try {
1466 o.via.map.ptr[0].val.convert(v);
1467 } catch (const msgpack::type_error&) {
1468 std::cerr << o << std::endl;
1469 throw_or_abort("error converting into enum variant 'BlackBoxOp::Poseidon2Permutation'");
1470 }
1471
1472 value = v;
1473 } else if (tag == "Sha256Compression") {
1475 try {
1476 o.via.map.ptr[0].val.convert(v);
1477 } catch (const msgpack::type_error&) {
1478 std::cerr << o << std::endl;
1479 throw_or_abort("error converting into enum variant 'BlackBoxOp::Sha256Compression'");
1480 }
1481
1482 value = v;
1483 } else if (tag == "ToRadix") {
1484 ToRadix v;
1485 try {
1486 o.via.map.ptr[0].val.convert(v);
1487 } catch (const msgpack::type_error&) {
1488 std::cerr << o << std::endl;
1489 throw_or_abort("error converting into enum variant 'BlackBoxOp::ToRadix'");
1490 }
1491
1492 value = v;
1493 } else {
1494 std::cerr << o << std::endl;
1495 throw_or_abort("unknown 'BlackBoxOp' enum variant: " + tag);
1496 }
1497 }
1498};
1499
1501 uint32_t value;
1502
1503 friend bool operator==(const SemanticLength&, const SemanticLength&);
1504
1505 void msgpack_pack(auto& packer) const { packer.pack(value); }
1506
1507 void msgpack_unpack(msgpack::object const& o)
1508 {
1509 try {
1510 o.convert(value);
1511 } catch (const msgpack::type_error&) {
1512 std::cerr << o << std::endl;
1513 throw_or_abort("error converting into newtype 'SemanticLength'");
1514 }
1515 }
1516};
1517
1518struct HeapValueType;
1519
1521
1522 struct Simple {
1524
1525 friend bool operator==(const Simple&, const Simple&);
1526
1527 void msgpack_pack(auto& packer) const { packer.pack(value); }
1528
1529 void msgpack_unpack(msgpack::object const& o)
1530 {
1531 try {
1532 o.convert(value);
1533 } catch (const msgpack::type_error&) {
1534 std::cerr << o << std::endl;
1535 throw_or_abort("error converting into newtype 'Simple'");
1536 }
1537 }
1538 };
1539
1540 struct Array {
1541 std::vector<Acir::HeapValueType> value_types;
1543
1544 friend bool operator==(const Array&, const Array&);
1545
1546 void msgpack_pack(auto& packer) const
1547 {
1548 packer.pack_array(2);
1549 packer.pack(value_types);
1550 packer.pack(size);
1551 }
1552
1553 void msgpack_unpack(msgpack::object const& o)
1554 {
1555 std::string name = "Array";
1556 if (o.type == msgpack::type::MAP) {
1557 auto kvmap = Helpers::make_kvmap(o, name);
1558 Helpers::conv_fld_from_kvmap(kvmap, name, "value_types", value_types, false);
1559 Helpers::conv_fld_from_kvmap(kvmap, name, "size", size, false);
1560 } else if (o.type == msgpack::type::ARRAY) {
1561 auto array = o.via.array;
1562 Helpers::conv_fld_from_array(array, name, "value_types", value_types, 0);
1563 Helpers::conv_fld_from_array(array, name, "size", size, 1);
1564 } else {
1565 throw_or_abort("expected MAP or ARRAY for " + name);
1566 }
1567 }
1568 };
1569
1570 struct Vector {
1571 std::vector<Acir::HeapValueType> value_types;
1572
1573 friend bool operator==(const Vector&, const Vector&);
1574
1575 void msgpack_pack(auto& packer) const
1576 {
1577 packer.pack_array(1);
1578 packer.pack(value_types);
1579 }
1580
1581 void msgpack_unpack(msgpack::object const& o)
1582 {
1583 std::string name = "Vector";
1584 if (o.type == msgpack::type::MAP) {
1585 auto kvmap = Helpers::make_kvmap(o, name);
1586 Helpers::conv_fld_from_kvmap(kvmap, name, "value_types", value_types, false);
1587 } else if (o.type == msgpack::type::ARRAY) {
1588 auto array = o.via.array;
1589 Helpers::conv_fld_from_array(array, name, "value_types", value_types, 0);
1590 } else {
1591 throw_or_abort("expected MAP or ARRAY for " + name);
1592 }
1593 }
1594 };
1595
1597
1598 friend bool operator==(const HeapValueType&, const HeapValueType&);
1599
1600 void msgpack_pack(auto& packer) const
1601 {
1602 std::string tag;
1603 bool is_unit;
1604 switch (value.index()) {
1605
1606 case 0:
1607 tag = "Simple";
1608 is_unit = false;
1609 break;
1610 case 1:
1611 tag = "Array";
1612 is_unit = false;
1613 break;
1614 case 2:
1615 tag = "Vector";
1616 is_unit = false;
1617 break;
1618 default:
1619 throw_or_abort("unknown enum 'HeapValueType' variant index: " + std::to_string(value.index()));
1620 }
1621 if (is_unit) {
1622 packer.pack(tag);
1623 } else {
1624 std::visit(
1625 [&packer, tag](const auto& arg) {
1626 packer.pack_map(1);
1627 packer.pack(tag);
1628 packer.pack(arg);
1629 },
1630 value);
1631 }
1632 }
1633
1634 void msgpack_unpack(msgpack::object const& o)
1635 {
1636
1637 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
1638 std::cerr << o << std::endl;
1639 throw_or_abort("expected MAP or STR for enum 'HeapValueType'; got type " + std::to_string(o.type));
1640 }
1641 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
1642 throw_or_abort("expected 1 entry for enum 'HeapValueType'; got " + std::to_string(o.via.map.size));
1643 }
1644 std::string tag;
1645 try {
1646 if (o.type == msgpack::type::object_type::MAP) {
1647 o.via.map.ptr[0].key.convert(tag);
1648 } else {
1649 o.convert(tag);
1650 }
1651 } catch (const msgpack::type_error&) {
1652 std::cerr << o << std::endl;
1653 throw_or_abort("error converting tag to string for enum 'HeapValueType'");
1654 }
1655 if (tag == "Simple") {
1656 Simple v;
1657 try {
1658 o.via.map.ptr[0].val.convert(v);
1659 } catch (const msgpack::type_error&) {
1660 std::cerr << o << std::endl;
1661 throw_or_abort("error converting into enum variant 'HeapValueType::Simple'");
1662 }
1663
1664 value = v;
1665 } else if (tag == "Array") {
1666 Array v;
1667 try {
1668 o.via.map.ptr[0].val.convert(v);
1669 } catch (const msgpack::type_error&) {
1670 std::cerr << o << std::endl;
1671 throw_or_abort("error converting into enum variant 'HeapValueType::Array'");
1672 }
1673
1674 value = v;
1675 } else if (tag == "Vector") {
1676 Vector v;
1677 try {
1678 o.via.map.ptr[0].val.convert(v);
1679 } catch (const msgpack::type_error&) {
1680 std::cerr << o << std::endl;
1681 throw_or_abort("error converting into enum variant 'HeapValueType::Vector'");
1682 }
1683
1684 value = v;
1685 } else {
1686 std::cerr << o << std::endl;
1687 throw_or_abort("unknown 'HeapValueType' enum variant: " + tag);
1688 }
1689 }
1690};
1691
1695
1696 friend bool operator==(const HeapVector&, const HeapVector&);
1697
1698 void msgpack_pack(auto& packer) const
1699 {
1700 packer.pack_array(2);
1701 packer.pack(pointer);
1702 packer.pack(size);
1703 }
1704
1705 void msgpack_unpack(msgpack::object const& o)
1706 {
1707 std::string name = "HeapVector";
1708 if (o.type == msgpack::type::MAP) {
1709 auto kvmap = Helpers::make_kvmap(o, name);
1710 Helpers::conv_fld_from_kvmap(kvmap, name, "pointer", pointer, false);
1711 Helpers::conv_fld_from_kvmap(kvmap, name, "size", size, false);
1712 } else if (o.type == msgpack::type::ARRAY) {
1713 auto array = o.via.array;
1714 Helpers::conv_fld_from_array(array, name, "pointer", pointer, 0);
1715 Helpers::conv_fld_from_array(array, name, "size", size, 1);
1716 } else {
1717 throw_or_abort("expected MAP or ARRAY for " + name);
1718 }
1719 }
1720};
1721
1723
1726
1727 friend bool operator==(const MemoryAddress&, const MemoryAddress&);
1728
1729 void msgpack_pack(auto& packer) const { packer.pack(value); }
1730
1731 void msgpack_unpack(msgpack::object const& o)
1732 {
1733 try {
1734 o.convert(value);
1735 } catch (const msgpack::type_error&) {
1736 std::cerr << o << std::endl;
1737 throw_or_abort("error converting into newtype 'MemoryAddress'");
1738 }
1739 }
1740 };
1741
1742 struct HeapArray {
1744
1745 friend bool operator==(const HeapArray&, const HeapArray&);
1746
1747 void msgpack_pack(auto& packer) const { packer.pack(value); }
1748
1749 void msgpack_unpack(msgpack::object const& o)
1750 {
1751 try {
1752 o.convert(value);
1753 } catch (const msgpack::type_error&) {
1754 std::cerr << o << std::endl;
1755 throw_or_abort("error converting into newtype 'HeapArray'");
1756 }
1757 }
1758 };
1759
1760 struct HeapVector {
1762
1763 friend bool operator==(const HeapVector&, const HeapVector&);
1764
1765 void msgpack_pack(auto& packer) const { packer.pack(value); }
1766
1767 void msgpack_unpack(msgpack::object const& o)
1768 {
1769 try {
1770 o.convert(value);
1771 } catch (const msgpack::type_error&) {
1772 std::cerr << o << std::endl;
1773 throw_or_abort("error converting into newtype 'HeapVector'");
1774 }
1775 }
1776 };
1777
1779
1780 friend bool operator==(const ValueOrArray&, const ValueOrArray&);
1781
1782 void msgpack_pack(auto& packer) const
1783 {
1784 std::string tag;
1785 bool is_unit;
1786 switch (value.index()) {
1787
1788 case 0:
1789 tag = "MemoryAddress";
1790 is_unit = false;
1791 break;
1792 case 1:
1793 tag = "HeapArray";
1794 is_unit = false;
1795 break;
1796 case 2:
1797 tag = "HeapVector";
1798 is_unit = false;
1799 break;
1800 default:
1801 throw_or_abort("unknown enum 'ValueOrArray' variant index: " + std::to_string(value.index()));
1802 }
1803 if (is_unit) {
1804 packer.pack(tag);
1805 } else {
1806 std::visit(
1807 [&packer, tag](const auto& arg) {
1808 packer.pack_map(1);
1809 packer.pack(tag);
1810 packer.pack(arg);
1811 },
1812 value);
1813 }
1814 }
1815
1816 void msgpack_unpack(msgpack::object const& o)
1817 {
1818
1819 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
1820 std::cerr << o << std::endl;
1821 throw_or_abort("expected MAP or STR for enum 'ValueOrArray'; got type " + std::to_string(o.type));
1822 }
1823 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
1824 throw_or_abort("expected 1 entry for enum 'ValueOrArray'; got " + std::to_string(o.via.map.size));
1825 }
1826 std::string tag;
1827 try {
1828 if (o.type == msgpack::type::object_type::MAP) {
1829 o.via.map.ptr[0].key.convert(tag);
1830 } else {
1831 o.convert(tag);
1832 }
1833 } catch (const msgpack::type_error&) {
1834 std::cerr << o << std::endl;
1835 throw_or_abort("error converting tag to string for enum 'ValueOrArray'");
1836 }
1837 if (tag == "MemoryAddress") {
1838 MemoryAddress v;
1839 try {
1840 o.via.map.ptr[0].val.convert(v);
1841 } catch (const msgpack::type_error&) {
1842 std::cerr << o << std::endl;
1843 throw_or_abort("error converting into enum variant 'ValueOrArray::MemoryAddress'");
1844 }
1845
1846 value = v;
1847 } else if (tag == "HeapArray") {
1848 HeapArray v;
1849 try {
1850 o.via.map.ptr[0].val.convert(v);
1851 } catch (const msgpack::type_error&) {
1852 std::cerr << o << std::endl;
1853 throw_or_abort("error converting into enum variant 'ValueOrArray::HeapArray'");
1854 }
1855
1856 value = v;
1857 } else if (tag == "HeapVector") {
1858 HeapVector v;
1859 try {
1860 o.via.map.ptr[0].val.convert(v);
1861 } catch (const msgpack::type_error&) {
1862 std::cerr << o << std::endl;
1863 throw_or_abort("error converting into enum variant 'ValueOrArray::HeapVector'");
1864 }
1865
1866 value = v;
1867 } else {
1868 std::cerr << o << std::endl;
1869 throw_or_abort("unknown 'ValueOrArray' enum variant: " + tag);
1870 }
1871 }
1872};
1873
1875
1881
1882 friend bool operator==(const BinaryFieldOp&, const BinaryFieldOp&);
1883
1884 void msgpack_pack(auto& packer) const
1885 {
1886 packer.pack_array(4);
1887 packer.pack(destination);
1888 packer.pack(op);
1889 packer.pack(lhs);
1890 packer.pack(rhs);
1891 }
1892
1893 void msgpack_unpack(msgpack::object const& o)
1894 {
1895 std::string name = "BinaryFieldOp";
1896 if (o.type == msgpack::type::MAP) {
1897 auto kvmap = Helpers::make_kvmap(o, name);
1898 Helpers::conv_fld_from_kvmap(kvmap, name, "destination", destination, false);
1899 Helpers::conv_fld_from_kvmap(kvmap, name, "op", op, false);
1900 Helpers::conv_fld_from_kvmap(kvmap, name, "lhs", lhs, false);
1901 Helpers::conv_fld_from_kvmap(kvmap, name, "rhs", rhs, false);
1902 } else if (o.type == msgpack::type::ARRAY) {
1903 auto array = o.via.array;
1904 Helpers::conv_fld_from_array(array, name, "destination", destination, 0);
1905 Helpers::conv_fld_from_array(array, name, "op", op, 1);
1906 Helpers::conv_fld_from_array(array, name, "lhs", lhs, 2);
1907 Helpers::conv_fld_from_array(array, name, "rhs", rhs, 3);
1908 } else {
1909 throw_or_abort("expected MAP or ARRAY for " + name);
1910 }
1911 }
1912 };
1913
1920
1921 friend bool operator==(const BinaryIntOp&, const BinaryIntOp&);
1922
1923 void msgpack_pack(auto& packer) const
1924 {
1925 packer.pack_array(5);
1926 packer.pack(destination);
1927 packer.pack(op);
1928 packer.pack(bit_size);
1929 packer.pack(lhs);
1930 packer.pack(rhs);
1931 }
1932
1933 void msgpack_unpack(msgpack::object const& o)
1934 {
1935 std::string name = "BinaryIntOp";
1936 if (o.type == msgpack::type::MAP) {
1937 auto kvmap = Helpers::make_kvmap(o, name);
1938 Helpers::conv_fld_from_kvmap(kvmap, name, "destination", destination, false);
1939 Helpers::conv_fld_from_kvmap(kvmap, name, "op", op, false);
1940 Helpers::conv_fld_from_kvmap(kvmap, name, "bit_size", bit_size, false);
1941 Helpers::conv_fld_from_kvmap(kvmap, name, "lhs", lhs, false);
1942 Helpers::conv_fld_from_kvmap(kvmap, name, "rhs", rhs, false);
1943 } else if (o.type == msgpack::type::ARRAY) {
1944 auto array = o.via.array;
1945 Helpers::conv_fld_from_array(array, name, "destination", destination, 0);
1946 Helpers::conv_fld_from_array(array, name, "op", op, 1);
1947 Helpers::conv_fld_from_array(array, name, "bit_size", bit_size, 2);
1948 Helpers::conv_fld_from_array(array, name, "lhs", lhs, 3);
1949 Helpers::conv_fld_from_array(array, name, "rhs", rhs, 4);
1950 } else {
1951 throw_or_abort("expected MAP or ARRAY for " + name);
1952 }
1953 }
1954 };
1955
1956 struct Not {
1960
1961 friend bool operator==(const Not&, const Not&);
1962
1963 void msgpack_pack(auto& packer) const
1964 {
1965 packer.pack_array(3);
1966 packer.pack(destination);
1967 packer.pack(source);
1968 packer.pack(bit_size);
1969 }
1970
1971 void msgpack_unpack(msgpack::object const& o)
1972 {
1973 std::string name = "Not";
1974 if (o.type == msgpack::type::MAP) {
1975 auto kvmap = Helpers::make_kvmap(o, name);
1976 Helpers::conv_fld_from_kvmap(kvmap, name, "destination", destination, false);
1977 Helpers::conv_fld_from_kvmap(kvmap, name, "source", source, false);
1978 Helpers::conv_fld_from_kvmap(kvmap, name, "bit_size", bit_size, false);
1979 } else if (o.type == msgpack::type::ARRAY) {
1980 auto array = o.via.array;
1981 Helpers::conv_fld_from_array(array, name, "destination", destination, 0);
1982 Helpers::conv_fld_from_array(array, name, "source", source, 1);
1983 Helpers::conv_fld_from_array(array, name, "bit_size", bit_size, 2);
1984 } else {
1985 throw_or_abort("expected MAP or ARRAY for " + name);
1986 }
1987 }
1988 };
1989
1990 struct Cast {
1994
1995 friend bool operator==(const Cast&, const Cast&);
1996
1997 void msgpack_pack(auto& packer) const
1998 {
1999 packer.pack_array(3);
2000 packer.pack(destination);
2001 packer.pack(source);
2002 packer.pack(bit_size);
2003 }
2004
2005 void msgpack_unpack(msgpack::object const& o)
2006 {
2007 std::string name = "Cast";
2008 if (o.type == msgpack::type::MAP) {
2009 auto kvmap = Helpers::make_kvmap(o, name);
2010 Helpers::conv_fld_from_kvmap(kvmap, name, "destination", destination, false);
2011 Helpers::conv_fld_from_kvmap(kvmap, name, "source", source, false);
2012 Helpers::conv_fld_from_kvmap(kvmap, name, "bit_size", bit_size, false);
2013 } else if (o.type == msgpack::type::ARRAY) {
2014 auto array = o.via.array;
2015 Helpers::conv_fld_from_array(array, name, "destination", destination, 0);
2016 Helpers::conv_fld_from_array(array, name, "source", source, 1);
2017 Helpers::conv_fld_from_array(array, name, "bit_size", bit_size, 2);
2018 } else {
2019 throw_or_abort("expected MAP or ARRAY for " + name);
2020 }
2021 }
2022 };
2023
2024 struct JumpIf {
2026 uint64_t location;
2027
2028 friend bool operator==(const JumpIf&, const JumpIf&);
2029
2030 void msgpack_pack(auto& packer) const
2031 {
2032 packer.pack_array(2);
2033 packer.pack(condition);
2034 packer.pack(location);
2035 }
2036
2037 void msgpack_unpack(msgpack::object const& o)
2038 {
2039 std::string name = "JumpIf";
2040 if (o.type == msgpack::type::MAP) {
2041 auto kvmap = Helpers::make_kvmap(o, name);
2042 Helpers::conv_fld_from_kvmap(kvmap, name, "condition", condition, false);
2043 Helpers::conv_fld_from_kvmap(kvmap, name, "location", location, false);
2044 } else if (o.type == msgpack::type::ARRAY) {
2045 auto array = o.via.array;
2046 Helpers::conv_fld_from_array(array, name, "condition", condition, 0);
2047 Helpers::conv_fld_from_array(array, name, "location", location, 1);
2048 } else {
2049 throw_or_abort("expected MAP or ARRAY for " + name);
2050 }
2051 }
2052 };
2053
2054 struct Jump {
2055 uint64_t location;
2056
2057 friend bool operator==(const Jump&, const Jump&);
2058
2059 void msgpack_pack(auto& packer) const
2060 {
2061 packer.pack_array(1);
2062 packer.pack(location);
2063 }
2064
2065 void msgpack_unpack(msgpack::object const& o)
2066 {
2067 std::string name = "Jump";
2068 if (o.type == msgpack::type::MAP) {
2069 auto kvmap = Helpers::make_kvmap(o, name);
2070 Helpers::conv_fld_from_kvmap(kvmap, name, "location", location, false);
2071 } else if (o.type == msgpack::type::ARRAY) {
2072 auto array = o.via.array;
2073 Helpers::conv_fld_from_array(array, name, "location", location, 0);
2074 } else {
2075 throw_or_abort("expected MAP or ARRAY for " + name);
2076 }
2077 }
2078 };
2079
2084
2085 friend bool operator==(const CalldataCopy&, const CalldataCopy&);
2086
2087 void msgpack_pack(auto& packer) const
2088 {
2089 packer.pack_array(3);
2090 packer.pack(destination_address);
2091 packer.pack(size_address);
2092 packer.pack(offset_address);
2093 }
2094
2095 void msgpack_unpack(msgpack::object const& o)
2096 {
2097 std::string name = "CalldataCopy";
2098 if (o.type == msgpack::type::MAP) {
2099 auto kvmap = Helpers::make_kvmap(o, name);
2100 Helpers::conv_fld_from_kvmap(kvmap, name, "destination_address", destination_address, false);
2101 Helpers::conv_fld_from_kvmap(kvmap, name, "size_address", size_address, false);
2102 Helpers::conv_fld_from_kvmap(kvmap, name, "offset_address", offset_address, false);
2103 } else if (o.type == msgpack::type::ARRAY) {
2104 auto array = o.via.array;
2105 Helpers::conv_fld_from_array(array, name, "destination_address", destination_address, 0);
2106 Helpers::conv_fld_from_array(array, name, "size_address", size_address, 1);
2107 Helpers::conv_fld_from_array(array, name, "offset_address", offset_address, 2);
2108 } else {
2109 throw_or_abort("expected MAP or ARRAY for " + name);
2110 }
2111 }
2112 };
2113
2114 struct Call {
2115 uint64_t location;
2116
2117 friend bool operator==(const Call&, const Call&);
2118
2119 void msgpack_pack(auto& packer) const
2120 {
2121 packer.pack_array(1);
2122 packer.pack(location);
2123 }
2124
2125 void msgpack_unpack(msgpack::object const& o)
2126 {
2127 std::string name = "Call";
2128 if (o.type == msgpack::type::MAP) {
2129 auto kvmap = Helpers::make_kvmap(o, name);
2130 Helpers::conv_fld_from_kvmap(kvmap, name, "location", location, false);
2131 } else if (o.type == msgpack::type::ARRAY) {
2132 auto array = o.via.array;
2133 Helpers::conv_fld_from_array(array, name, "location", location, 0);
2134 } else {
2135 throw_or_abort("expected MAP or ARRAY for " + name);
2136 }
2137 }
2138 };
2139
2140 struct Const {
2143 std::vector<uint8_t> value;
2144
2145 friend bool operator==(const Const&, const Const&);
2146
2147 void msgpack_pack(auto& packer) const
2148 {
2149 packer.pack_array(3);
2150 packer.pack(destination);
2151 packer.pack(bit_size);
2152 packer.pack(value);
2153 }
2154
2155 void msgpack_unpack(msgpack::object const& o)
2156 {
2157 std::string name = "Const";
2158 if (o.type == msgpack::type::MAP) {
2159 auto kvmap = Helpers::make_kvmap(o, name);
2160 Helpers::conv_fld_from_kvmap(kvmap, name, "destination", destination, false);
2161 Helpers::conv_fld_from_kvmap(kvmap, name, "bit_size", bit_size, false);
2162 Helpers::conv_fld_from_kvmap(kvmap, name, "value", value, false);
2163 } else if (o.type == msgpack::type::ARRAY) {
2164 auto array = o.via.array;
2165 Helpers::conv_fld_from_array(array, name, "destination", destination, 0);
2166 Helpers::conv_fld_from_array(array, name, "bit_size", bit_size, 1);
2167 Helpers::conv_fld_from_array(array, name, "value", value, 2);
2168 } else {
2169 throw_or_abort("expected MAP or ARRAY for " + name);
2170 }
2171 }
2172 };
2173
2177 std::vector<uint8_t> value;
2178
2179 friend bool operator==(const IndirectConst&, const IndirectConst&);
2180
2181 void msgpack_pack(auto& packer) const
2182 {
2183 packer.pack_array(3);
2184 packer.pack(destination_pointer);
2185 packer.pack(bit_size);
2186 packer.pack(value);
2187 }
2188
2189 void msgpack_unpack(msgpack::object const& o)
2190 {
2191 std::string name = "IndirectConst";
2192 if (o.type == msgpack::type::MAP) {
2193 auto kvmap = Helpers::make_kvmap(o, name);
2194 Helpers::conv_fld_from_kvmap(kvmap, name, "destination_pointer", destination_pointer, false);
2195 Helpers::conv_fld_from_kvmap(kvmap, name, "bit_size", bit_size, false);
2196 Helpers::conv_fld_from_kvmap(kvmap, name, "value", value, false);
2197 } else if (o.type == msgpack::type::ARRAY) {
2198 auto array = o.via.array;
2199 Helpers::conv_fld_from_array(array, name, "destination_pointer", destination_pointer, 0);
2200 Helpers::conv_fld_from_array(array, name, "bit_size", bit_size, 1);
2201 Helpers::conv_fld_from_array(array, name, "value", value, 2);
2202 } else {
2203 throw_or_abort("expected MAP or ARRAY for " + name);
2204 }
2205 }
2206 };
2207
2208 struct Return {
2209 friend bool operator==(const Return&, const Return&);
2210
2211 void msgpack_pack(auto& packer) const {}
2212 void msgpack_unpack(msgpack::object const& o) {}
2213 };
2214
2216 std::string function;
2217 std::vector<Acir::ValueOrArray> destinations;
2218 std::vector<Acir::HeapValueType> destination_value_types;
2219 std::vector<Acir::ValueOrArray> inputs;
2220 std::vector<Acir::HeapValueType> input_value_types;
2221
2222 friend bool operator==(const ForeignCall&, const ForeignCall&);
2223
2224 void msgpack_pack(auto& packer) const
2225 {
2226 packer.pack_array(5);
2227 packer.pack(function);
2228 packer.pack(destinations);
2229 packer.pack(destination_value_types);
2230 packer.pack(inputs);
2231 packer.pack(input_value_types);
2232 }
2233
2234 void msgpack_unpack(msgpack::object const& o)
2235 {
2236 std::string name = "ForeignCall";
2237 if (o.type == msgpack::type::MAP) {
2238 auto kvmap = Helpers::make_kvmap(o, name);
2239 Helpers::conv_fld_from_kvmap(kvmap, name, "function", function, false);
2240 Helpers::conv_fld_from_kvmap(kvmap, name, "destinations", destinations, false);
2241 Helpers::conv_fld_from_kvmap(kvmap, name, "destination_value_types", destination_value_types, false);
2242 Helpers::conv_fld_from_kvmap(kvmap, name, "inputs", inputs, false);
2243 Helpers::conv_fld_from_kvmap(kvmap, name, "input_value_types", input_value_types, false);
2244 } else if (o.type == msgpack::type::ARRAY) {
2245 auto array = o.via.array;
2246 Helpers::conv_fld_from_array(array, name, "function", function, 0);
2247 Helpers::conv_fld_from_array(array, name, "destinations", destinations, 1);
2248 Helpers::conv_fld_from_array(array, name, "destination_value_types", destination_value_types, 2);
2249 Helpers::conv_fld_from_array(array, name, "inputs", inputs, 3);
2250 Helpers::conv_fld_from_array(array, name, "input_value_types", input_value_types, 4);
2251 } else {
2252 throw_or_abort("expected MAP or ARRAY for " + name);
2253 }
2254 }
2255 };
2256
2257 struct Mov {
2260
2261 friend bool operator==(const Mov&, const Mov&);
2262
2263 void msgpack_pack(auto& packer) const
2264 {
2265 packer.pack_array(2);
2266 packer.pack(destination);
2267 packer.pack(source);
2268 }
2269
2270 void msgpack_unpack(msgpack::object const& o)
2271 {
2272 std::string name = "Mov";
2273 if (o.type == msgpack::type::MAP) {
2274 auto kvmap = Helpers::make_kvmap(o, name);
2275 Helpers::conv_fld_from_kvmap(kvmap, name, "destination", destination, false);
2276 Helpers::conv_fld_from_kvmap(kvmap, name, "source", source, false);
2277 } else if (o.type == msgpack::type::ARRAY) {
2278 auto array = o.via.array;
2279 Helpers::conv_fld_from_array(array, name, "destination", destination, 0);
2280 Helpers::conv_fld_from_array(array, name, "source", source, 1);
2281 } else {
2282 throw_or_abort("expected MAP or ARRAY for " + name);
2283 }
2284 }
2285 };
2286
2292
2293 friend bool operator==(const ConditionalMov&, const ConditionalMov&);
2294
2295 void msgpack_pack(auto& packer) const
2296 {
2297 packer.pack_array(4);
2298 packer.pack(destination);
2299 packer.pack(source_a);
2300 packer.pack(source_b);
2301 packer.pack(condition);
2302 }
2303
2304 void msgpack_unpack(msgpack::object const& o)
2305 {
2306 std::string name = "ConditionalMov";
2307 if (o.type == msgpack::type::MAP) {
2308 auto kvmap = Helpers::make_kvmap(o, name);
2309 Helpers::conv_fld_from_kvmap(kvmap, name, "destination", destination, false);
2310 Helpers::conv_fld_from_kvmap(kvmap, name, "source_a", source_a, false);
2311 Helpers::conv_fld_from_kvmap(kvmap, name, "source_b", source_b, false);
2312 Helpers::conv_fld_from_kvmap(kvmap, name, "condition", condition, false);
2313 } else if (o.type == msgpack::type::ARRAY) {
2314 auto array = o.via.array;
2315 Helpers::conv_fld_from_array(array, name, "destination", destination, 0);
2316 Helpers::conv_fld_from_array(array, name, "source_a", source_a, 1);
2317 Helpers::conv_fld_from_array(array, name, "source_b", source_b, 2);
2318 Helpers::conv_fld_from_array(array, name, "condition", condition, 3);
2319 } else {
2320 throw_or_abort("expected MAP or ARRAY for " + name);
2321 }
2322 }
2323 };
2324
2325 struct Load {
2328
2329 friend bool operator==(const Load&, const Load&);
2330
2331 void msgpack_pack(auto& packer) const
2332 {
2333 packer.pack_array(2);
2334 packer.pack(destination);
2335 packer.pack(source_pointer);
2336 }
2337
2338 void msgpack_unpack(msgpack::object const& o)
2339 {
2340 std::string name = "Load";
2341 if (o.type == msgpack::type::MAP) {
2342 auto kvmap = Helpers::make_kvmap(o, name);
2343 Helpers::conv_fld_from_kvmap(kvmap, name, "destination", destination, false);
2344 Helpers::conv_fld_from_kvmap(kvmap, name, "source_pointer", source_pointer, false);
2345 } else if (o.type == msgpack::type::ARRAY) {
2346 auto array = o.via.array;
2347 Helpers::conv_fld_from_array(array, name, "destination", destination, 0);
2348 Helpers::conv_fld_from_array(array, name, "source_pointer", source_pointer, 1);
2349 } else {
2350 throw_or_abort("expected MAP or ARRAY for " + name);
2351 }
2352 }
2353 };
2354
2355 struct Store {
2358
2359 friend bool operator==(const Store&, const Store&);
2360
2361 void msgpack_pack(auto& packer) const
2362 {
2363 packer.pack_array(2);
2364 packer.pack(destination_pointer);
2365 packer.pack(source);
2366 }
2367
2368 void msgpack_unpack(msgpack::object const& o)
2369 {
2370 std::string name = "Store";
2371 if (o.type == msgpack::type::MAP) {
2372 auto kvmap = Helpers::make_kvmap(o, name);
2373 Helpers::conv_fld_from_kvmap(kvmap, name, "destination_pointer", destination_pointer, false);
2374 Helpers::conv_fld_from_kvmap(kvmap, name, "source", source, false);
2375 } else if (o.type == msgpack::type::ARRAY) {
2376 auto array = o.via.array;
2377 Helpers::conv_fld_from_array(array, name, "destination_pointer", destination_pointer, 0);
2378 Helpers::conv_fld_from_array(array, name, "source", source, 1);
2379 } else {
2380 throw_or_abort("expected MAP or ARRAY for " + name);
2381 }
2382 }
2383 };
2384
2385 struct BlackBox {
2387
2388 friend bool operator==(const BlackBox&, const BlackBox&);
2389
2390 void msgpack_pack(auto& packer) const { packer.pack(value); }
2391
2392 void msgpack_unpack(msgpack::object const& o)
2393 {
2394 try {
2395 o.convert(value);
2396 } catch (const msgpack::type_error&) {
2397 std::cerr << o << std::endl;
2398 throw_or_abort("error converting into newtype 'BlackBox'");
2399 }
2400 }
2401 };
2402
2403 struct Trap {
2405
2406 friend bool operator==(const Trap&, const Trap&);
2407
2408 void msgpack_pack(auto& packer) const
2409 {
2410 packer.pack_array(1);
2411 packer.pack(revert_data);
2412 }
2413
2414 void msgpack_unpack(msgpack::object const& o)
2415 {
2416 std::string name = "Trap";
2417 if (o.type == msgpack::type::MAP) {
2418 auto kvmap = Helpers::make_kvmap(o, name);
2419 Helpers::conv_fld_from_kvmap(kvmap, name, "revert_data", revert_data, false);
2420 } else if (o.type == msgpack::type::ARRAY) {
2421 auto array = o.via.array;
2422 Helpers::conv_fld_from_array(array, name, "revert_data", revert_data, 0);
2423 } else {
2424 throw_or_abort("expected MAP or ARRAY for " + name);
2425 }
2426 }
2427 };
2428
2429 struct Stop {
2431
2432 friend bool operator==(const Stop&, const Stop&);
2433
2434 void msgpack_pack(auto& packer) const
2435 {
2436 packer.pack_array(1);
2437 packer.pack(return_data);
2438 }
2439
2440 void msgpack_unpack(msgpack::object const& o)
2441 {
2442 std::string name = "Stop";
2443 if (o.type == msgpack::type::MAP) {
2444 auto kvmap = Helpers::make_kvmap(o, name);
2445 Helpers::conv_fld_from_kvmap(kvmap, name, "return_data", return_data, false);
2446 } else if (o.type == msgpack::type::ARRAY) {
2447 auto array = o.via.array;
2448 Helpers::conv_fld_from_array(array, name, "return_data", return_data, 0);
2449 } else {
2450 throw_or_abort("expected MAP or ARRAY for " + name);
2451 }
2452 }
2453 };
2454
2457 Not,
2458 Cast,
2459 JumpIf,
2460 Jump,
2461 CalldataCopy,
2462 Call,
2463 Const,
2464 IndirectConst,
2465 Return,
2466 ForeignCall,
2467 Mov,
2468 ConditionalMov,
2469 Load,
2470 Store,
2471 BlackBox,
2472 Trap,
2473 Stop>
2475
2476 friend bool operator==(const BrilligOpcode&, const BrilligOpcode&);
2477
2478 void msgpack_pack(auto& packer) const
2479 {
2480 std::string tag;
2481 bool is_unit;
2482 switch (value.index()) {
2483
2484 case 0:
2485 tag = "BinaryFieldOp";
2486 is_unit = false;
2487 break;
2488 case 1:
2489 tag = "BinaryIntOp";
2490 is_unit = false;
2491 break;
2492 case 2:
2493 tag = "Not";
2494 is_unit = false;
2495 break;
2496 case 3:
2497 tag = "Cast";
2498 is_unit = false;
2499 break;
2500 case 4:
2501 tag = "JumpIf";
2502 is_unit = false;
2503 break;
2504 case 5:
2505 tag = "Jump";
2506 is_unit = false;
2507 break;
2508 case 6:
2509 tag = "CalldataCopy";
2510 is_unit = false;
2511 break;
2512 case 7:
2513 tag = "Call";
2514 is_unit = false;
2515 break;
2516 case 8:
2517 tag = "Const";
2518 is_unit = false;
2519 break;
2520 case 9:
2521 tag = "IndirectConst";
2522 is_unit = false;
2523 break;
2524 case 10:
2525 tag = "Return";
2526 is_unit = true;
2527 break;
2528 case 11:
2529 tag = "ForeignCall";
2530 is_unit = false;
2531 break;
2532 case 12:
2533 tag = "Mov";
2534 is_unit = false;
2535 break;
2536 case 13:
2537 tag = "ConditionalMov";
2538 is_unit = false;
2539 break;
2540 case 14:
2541 tag = "Load";
2542 is_unit = false;
2543 break;
2544 case 15:
2545 tag = "Store";
2546 is_unit = false;
2547 break;
2548 case 16:
2549 tag = "BlackBox";
2550 is_unit = false;
2551 break;
2552 case 17:
2553 tag = "Trap";
2554 is_unit = false;
2555 break;
2556 case 18:
2557 tag = "Stop";
2558 is_unit = false;
2559 break;
2560 default:
2561 throw_or_abort("unknown enum 'BrilligOpcode' variant index: " + std::to_string(value.index()));
2562 }
2563 if (is_unit) {
2564 packer.pack(tag);
2565 } else {
2566 std::visit(
2567 [&packer, tag](const auto& arg) {
2568 packer.pack_map(1);
2569 packer.pack(tag);
2570 packer.pack(arg);
2571 },
2572 value);
2573 }
2574 }
2575
2576 void msgpack_unpack(msgpack::object const& o)
2577 {
2578
2579 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
2580 std::cerr << o << std::endl;
2581 throw_or_abort("expected MAP or STR for enum 'BrilligOpcode'; got type " + std::to_string(o.type));
2582 }
2583 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
2584 throw_or_abort("expected 1 entry for enum 'BrilligOpcode'; got " + std::to_string(o.via.map.size));
2585 }
2586 std::string tag;
2587 try {
2588 if (o.type == msgpack::type::object_type::MAP) {
2589 o.via.map.ptr[0].key.convert(tag);
2590 } else {
2591 o.convert(tag);
2592 }
2593 } catch (const msgpack::type_error&) {
2594 std::cerr << o << std::endl;
2595 throw_or_abort("error converting tag to string for enum 'BrilligOpcode'");
2596 }
2597 if (tag == "BinaryFieldOp") {
2598 BinaryFieldOp v;
2599 try {
2600 o.via.map.ptr[0].val.convert(v);
2601 } catch (const msgpack::type_error&) {
2602 std::cerr << o << std::endl;
2603 throw_or_abort("error converting into enum variant 'BrilligOpcode::BinaryFieldOp'");
2604 }
2605
2606 value = v;
2607 } else if (tag == "BinaryIntOp") {
2608 BinaryIntOp v;
2609 try {
2610 o.via.map.ptr[0].val.convert(v);
2611 } catch (const msgpack::type_error&) {
2612 std::cerr << o << std::endl;
2613 throw_or_abort("error converting into enum variant 'BrilligOpcode::BinaryIntOp'");
2614 }
2615
2616 value = v;
2617 } else if (tag == "Not") {
2618 Not v;
2619 try {
2620 o.via.map.ptr[0].val.convert(v);
2621 } catch (const msgpack::type_error&) {
2622 std::cerr << o << std::endl;
2623 throw_or_abort("error converting into enum variant 'BrilligOpcode::Not'");
2624 }
2625
2626 value = v;
2627 } else if (tag == "Cast") {
2628 Cast v;
2629 try {
2630 o.via.map.ptr[0].val.convert(v);
2631 } catch (const msgpack::type_error&) {
2632 std::cerr << o << std::endl;
2633 throw_or_abort("error converting into enum variant 'BrilligOpcode::Cast'");
2634 }
2635
2636 value = v;
2637 } else if (tag == "JumpIf") {
2638 JumpIf v;
2639 try {
2640 o.via.map.ptr[0].val.convert(v);
2641 } catch (const msgpack::type_error&) {
2642 std::cerr << o << std::endl;
2643 throw_or_abort("error converting into enum variant 'BrilligOpcode::JumpIf'");
2644 }
2645
2646 value = v;
2647 } else if (tag == "Jump") {
2648 Jump v;
2649 try {
2650 o.via.map.ptr[0].val.convert(v);
2651 } catch (const msgpack::type_error&) {
2652 std::cerr << o << std::endl;
2653 throw_or_abort("error converting into enum variant 'BrilligOpcode::Jump'");
2654 }
2655
2656 value = v;
2657 } else if (tag == "CalldataCopy") {
2658 CalldataCopy v;
2659 try {
2660 o.via.map.ptr[0].val.convert(v);
2661 } catch (const msgpack::type_error&) {
2662 std::cerr << o << std::endl;
2663 throw_or_abort("error converting into enum variant 'BrilligOpcode::CalldataCopy'");
2664 }
2665
2666 value = v;
2667 } else if (tag == "Call") {
2668 Call v;
2669 try {
2670 o.via.map.ptr[0].val.convert(v);
2671 } catch (const msgpack::type_error&) {
2672 std::cerr << o << std::endl;
2673 throw_or_abort("error converting into enum variant 'BrilligOpcode::Call'");
2674 }
2675
2676 value = v;
2677 } else if (tag == "Const") {
2678 Const v;
2679 try {
2680 o.via.map.ptr[0].val.convert(v);
2681 } catch (const msgpack::type_error&) {
2682 std::cerr << o << std::endl;
2683 throw_or_abort("error converting into enum variant 'BrilligOpcode::Const'");
2684 }
2685
2686 value = v;
2687 } else if (tag == "IndirectConst") {
2688 IndirectConst v;
2689 try {
2690 o.via.map.ptr[0].val.convert(v);
2691 } catch (const msgpack::type_error&) {
2692 std::cerr << o << std::endl;
2693 throw_or_abort("error converting into enum variant 'BrilligOpcode::IndirectConst'");
2694 }
2695
2696 value = v;
2697 } else if (tag == "Return") {
2698 Return v;
2699 value = v;
2700 } else if (tag == "ForeignCall") {
2701 ForeignCall v;
2702 try {
2703 o.via.map.ptr[0].val.convert(v);
2704 } catch (const msgpack::type_error&) {
2705 std::cerr << o << std::endl;
2706 throw_or_abort("error converting into enum variant 'BrilligOpcode::ForeignCall'");
2707 }
2708
2709 value = v;
2710 } else if (tag == "Mov") {
2711 Mov v;
2712 try {
2713 o.via.map.ptr[0].val.convert(v);
2714 } catch (const msgpack::type_error&) {
2715 std::cerr << o << std::endl;
2716 throw_or_abort("error converting into enum variant 'BrilligOpcode::Mov'");
2717 }
2718
2719 value = v;
2720 } else if (tag == "ConditionalMov") {
2722 try {
2723 o.via.map.ptr[0].val.convert(v);
2724 } catch (const msgpack::type_error&) {
2725 std::cerr << o << std::endl;
2726 throw_or_abort("error converting into enum variant 'BrilligOpcode::ConditionalMov'");
2727 }
2728
2729 value = v;
2730 } else if (tag == "Load") {
2731 Load v;
2732 try {
2733 o.via.map.ptr[0].val.convert(v);
2734 } catch (const msgpack::type_error&) {
2735 std::cerr << o << std::endl;
2736 throw_or_abort("error converting into enum variant 'BrilligOpcode::Load'");
2737 }
2738
2739 value = v;
2740 } else if (tag == "Store") {
2741 Store v;
2742 try {
2743 o.via.map.ptr[0].val.convert(v);
2744 } catch (const msgpack::type_error&) {
2745 std::cerr << o << std::endl;
2746 throw_or_abort("error converting into enum variant 'BrilligOpcode::Store'");
2747 }
2748
2749 value = v;
2750 } else if (tag == "BlackBox") {
2751 BlackBox v;
2752 try {
2753 o.via.map.ptr[0].val.convert(v);
2754 } catch (const msgpack::type_error&) {
2755 std::cerr << o << std::endl;
2756 throw_or_abort("error converting into enum variant 'BrilligOpcode::BlackBox'");
2757 }
2758
2759 value = v;
2760 } else if (tag == "Trap") {
2761 Trap v;
2762 try {
2763 o.via.map.ptr[0].val.convert(v);
2764 } catch (const msgpack::type_error&) {
2765 std::cerr << o << std::endl;
2766 throw_or_abort("error converting into enum variant 'BrilligOpcode::Trap'");
2767 }
2768
2769 value = v;
2770 } else if (tag == "Stop") {
2771 Stop v;
2772 try {
2773 o.via.map.ptr[0].val.convert(v);
2774 } catch (const msgpack::type_error&) {
2775 std::cerr << o << std::endl;
2776 throw_or_abort("error converting into enum variant 'BrilligOpcode::Stop'");
2777 }
2778
2779 value = v;
2780 } else {
2781 std::cerr << o << std::endl;
2782 throw_or_abort("unknown 'BrilligOpcode' enum variant: " + tag);
2783 }
2784 }
2785};
2786
2787struct Witness {
2788 uint32_t value;
2789
2790 friend bool operator==(const Witness&, const Witness&);
2791
2792 void msgpack_pack(auto& packer) const { packer.pack(value); }
2793
2794 void msgpack_unpack(msgpack::object const& o)
2795 {
2796 try {
2797 o.convert(value);
2798 } catch (const msgpack::type_error&) {
2799 std::cerr << o << std::endl;
2800 throw_or_abort("error converting into newtype 'Witness'");
2801 }
2802 }
2803};
2804
2806
2807 struct Constant {
2808 std::vector<uint8_t> value;
2809
2810 friend bool operator==(const Constant&, const Constant&);
2811
2812 void msgpack_pack(auto& packer) const { packer.pack(value); }
2813
2814 void msgpack_unpack(msgpack::object const& o)
2815 {
2816 try {
2817 o.convert(value);
2818 } catch (const msgpack::type_error&) {
2819 std::cerr << o << std::endl;
2820 throw_or_abort("error converting into newtype 'Constant'");
2821 }
2822 }
2823 };
2824
2825 struct Witness {
2827
2828 friend bool operator==(const Witness&, const Witness&);
2829
2830 void msgpack_pack(auto& packer) const { packer.pack(value); }
2831
2832 void msgpack_unpack(msgpack::object const& o)
2833 {
2834 try {
2835 o.convert(value);
2836 } catch (const msgpack::type_error&) {
2837 std::cerr << o << std::endl;
2838 throw_or_abort("error converting into newtype 'Witness'");
2839 }
2840 }
2841 };
2842
2844
2845 friend bool operator==(const FunctionInput&, const FunctionInput&);
2846
2847 void msgpack_pack(auto& packer) const
2848 {
2849 std::string tag;
2850 bool is_unit;
2851 switch (value.index()) {
2852
2853 case 0:
2854 tag = "Constant";
2855 is_unit = false;
2856 break;
2857 case 1:
2858 tag = "Witness";
2859 is_unit = false;
2860 break;
2861 default:
2862 throw_or_abort("unknown enum 'FunctionInput' variant index: " + std::to_string(value.index()));
2863 }
2864 if (is_unit) {
2865 packer.pack(tag);
2866 } else {
2867 std::visit(
2868 [&packer, tag](const auto& arg) {
2869 packer.pack_map(1);
2870 packer.pack(tag);
2871 packer.pack(arg);
2872 },
2873 value);
2874 }
2875 }
2876
2877 void msgpack_unpack(msgpack::object const& o)
2878 {
2879
2880 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
2881 std::cerr << o << std::endl;
2882 throw_or_abort("expected MAP or STR for enum 'FunctionInput'; got type " + std::to_string(o.type));
2883 }
2884 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
2885 throw_or_abort("expected 1 entry for enum 'FunctionInput'; got " + std::to_string(o.via.map.size));
2886 }
2887 std::string tag;
2888 try {
2889 if (o.type == msgpack::type::object_type::MAP) {
2890 o.via.map.ptr[0].key.convert(tag);
2891 } else {
2892 o.convert(tag);
2893 }
2894 } catch (const msgpack::type_error&) {
2895 std::cerr << o << std::endl;
2896 throw_or_abort("error converting tag to string for enum 'FunctionInput'");
2897 }
2898 if (tag == "Constant") {
2899 Constant v;
2900 try {
2901 o.via.map.ptr[0].val.convert(v);
2902 } catch (const msgpack::type_error&) {
2903 std::cerr << o << std::endl;
2904 throw_or_abort("error converting into enum variant 'FunctionInput::Constant'");
2905 }
2906
2907 value = v;
2908 } else if (tag == "Witness") {
2909 Witness v;
2910 try {
2911 o.via.map.ptr[0].val.convert(v);
2912 } catch (const msgpack::type_error&) {
2913 std::cerr << o << std::endl;
2914 throw_or_abort("error converting into enum variant 'FunctionInput::Witness'");
2915 }
2916
2917 value = v;
2918 } else {
2919 std::cerr << o << std::endl;
2920 throw_or_abort("unknown 'FunctionInput' enum variant: " + tag);
2921 }
2922 }
2923};
2924
2926
2928 std::vector<Acir::FunctionInput> inputs;
2931 std::vector<Acir::Witness> outputs;
2932
2933 friend bool operator==(const AES128Encrypt&, const AES128Encrypt&);
2934
2935 void msgpack_pack(auto& packer) const
2936 {
2937 packer.pack_array(4);
2938 packer.pack(inputs);
2939 packer.pack(iv);
2940 packer.pack(key);
2941 packer.pack(outputs);
2942 }
2943
2944 void msgpack_unpack(msgpack::object const& o)
2945 {
2946 std::string name = "AES128Encrypt";
2947 if (o.type == msgpack::type::MAP) {
2948 auto kvmap = Helpers::make_kvmap(o, name);
2949 Helpers::conv_fld_from_kvmap(kvmap, name, "inputs", inputs, false);
2950 Helpers::conv_fld_from_kvmap(kvmap, name, "iv", iv, false);
2951 Helpers::conv_fld_from_kvmap(kvmap, name, "key", key, false);
2952 Helpers::conv_fld_from_kvmap(kvmap, name, "outputs", outputs, false);
2953 } else if (o.type == msgpack::type::ARRAY) {
2954 auto array = o.via.array;
2955 Helpers::conv_fld_from_array(array, name, "inputs", inputs, 0);
2956 Helpers::conv_fld_from_array(array, name, "iv", iv, 1);
2957 Helpers::conv_fld_from_array(array, name, "key", key, 2);
2958 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 3);
2959 } else {
2960 throw_or_abort("expected MAP or ARRAY for " + name);
2961 }
2962 }
2963 };
2964
2965 struct AND {
2968 uint32_t num_bits;
2970
2971 friend bool operator==(const AND&, const AND&);
2972
2973 void msgpack_pack(auto& packer) const
2974 {
2975 packer.pack_array(4);
2976 packer.pack(lhs);
2977 packer.pack(rhs);
2978 packer.pack(num_bits);
2979 packer.pack(output);
2980 }
2981
2982 void msgpack_unpack(msgpack::object const& o)
2983 {
2984 std::string name = "AND";
2985 if (o.type == msgpack::type::MAP) {
2986 auto kvmap = Helpers::make_kvmap(o, name);
2987 Helpers::conv_fld_from_kvmap(kvmap, name, "lhs", lhs, false);
2988 Helpers::conv_fld_from_kvmap(kvmap, name, "rhs", rhs, false);
2989 Helpers::conv_fld_from_kvmap(kvmap, name, "num_bits", num_bits, false);
2990 Helpers::conv_fld_from_kvmap(kvmap, name, "output", output, false);
2991 } else if (o.type == msgpack::type::ARRAY) {
2992 auto array = o.via.array;
2993 Helpers::conv_fld_from_array(array, name, "lhs", lhs, 0);
2994 Helpers::conv_fld_from_array(array, name, "rhs", rhs, 1);
2995 Helpers::conv_fld_from_array(array, name, "num_bits", num_bits, 2);
2996 Helpers::conv_fld_from_array(array, name, "output", output, 3);
2997 } else {
2998 throw_or_abort("expected MAP or ARRAY for " + name);
2999 }
3000 }
3001 };
3002
3003 struct XOR {
3006 uint32_t num_bits;
3008
3009 friend bool operator==(const XOR&, const XOR&);
3010
3011 void msgpack_pack(auto& packer) const
3012 {
3013 packer.pack_array(4);
3014 packer.pack(lhs);
3015 packer.pack(rhs);
3016 packer.pack(num_bits);
3017 packer.pack(output);
3018 }
3019
3020 void msgpack_unpack(msgpack::object const& o)
3021 {
3022 std::string name = "XOR";
3023 if (o.type == msgpack::type::MAP) {
3024 auto kvmap = Helpers::make_kvmap(o, name);
3025 Helpers::conv_fld_from_kvmap(kvmap, name, "lhs", lhs, false);
3026 Helpers::conv_fld_from_kvmap(kvmap, name, "rhs", rhs, false);
3027 Helpers::conv_fld_from_kvmap(kvmap, name, "num_bits", num_bits, false);
3028 Helpers::conv_fld_from_kvmap(kvmap, name, "output", output, false);
3029 } else if (o.type == msgpack::type::ARRAY) {
3030 auto array = o.via.array;
3031 Helpers::conv_fld_from_array(array, name, "lhs", lhs, 0);
3032 Helpers::conv_fld_from_array(array, name, "rhs", rhs, 1);
3033 Helpers::conv_fld_from_array(array, name, "num_bits", num_bits, 2);
3034 Helpers::conv_fld_from_array(array, name, "output", output, 3);
3035 } else {
3036 throw_or_abort("expected MAP or ARRAY for " + name);
3037 }
3038 }
3039 };
3040
3041 struct RANGE {
3043 uint32_t num_bits;
3044
3045 friend bool operator==(const RANGE&, const RANGE&);
3046
3047 void msgpack_pack(auto& packer) const
3048 {
3049 packer.pack_array(2);
3050 packer.pack(input);
3051 packer.pack(num_bits);
3052 }
3053
3054 void msgpack_unpack(msgpack::object const& o)
3055 {
3056 std::string name = "RANGE";
3057 if (o.type == msgpack::type::MAP) {
3058 auto kvmap = Helpers::make_kvmap(o, name);
3059 Helpers::conv_fld_from_kvmap(kvmap, name, "input", input, false);
3060 Helpers::conv_fld_from_kvmap(kvmap, name, "num_bits", num_bits, false);
3061 } else if (o.type == msgpack::type::ARRAY) {
3062 auto array = o.via.array;
3063 Helpers::conv_fld_from_array(array, name, "input", input, 0);
3064 Helpers::conv_fld_from_array(array, name, "num_bits", num_bits, 1);
3065 } else {
3066 throw_or_abort("expected MAP or ARRAY for " + name);
3067 }
3068 }
3069 };
3070
3071 struct Blake2s {
3072 std::vector<Acir::FunctionInput> inputs;
3074
3075 friend bool operator==(const Blake2s&, const Blake2s&);
3076
3077 void msgpack_pack(auto& packer) const
3078 {
3079 packer.pack_array(2);
3080 packer.pack(inputs);
3081 packer.pack(outputs);
3082 }
3083
3084 void msgpack_unpack(msgpack::object const& o)
3085 {
3086 std::string name = "Blake2s";
3087 if (o.type == msgpack::type::MAP) {
3088 auto kvmap = Helpers::make_kvmap(o, name);
3089 Helpers::conv_fld_from_kvmap(kvmap, name, "inputs", inputs, false);
3090 Helpers::conv_fld_from_kvmap(kvmap, name, "outputs", outputs, false);
3091 } else if (o.type == msgpack::type::ARRAY) {
3092 auto array = o.via.array;
3093 Helpers::conv_fld_from_array(array, name, "inputs", inputs, 0);
3094 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 1);
3095 } else {
3096 throw_or_abort("expected MAP or ARRAY for " + name);
3097 }
3098 }
3099 };
3100
3101 struct Blake3 {
3102 std::vector<Acir::FunctionInput> inputs;
3104
3105 friend bool operator==(const Blake3&, const Blake3&);
3106
3107 void msgpack_pack(auto& packer) const
3108 {
3109 packer.pack_array(2);
3110 packer.pack(inputs);
3111 packer.pack(outputs);
3112 }
3113
3114 void msgpack_unpack(msgpack::object const& o)
3115 {
3116 std::string name = "Blake3";
3117 if (o.type == msgpack::type::MAP) {
3118 auto kvmap = Helpers::make_kvmap(o, name);
3119 Helpers::conv_fld_from_kvmap(kvmap, name, "inputs", inputs, false);
3120 Helpers::conv_fld_from_kvmap(kvmap, name, "outputs", outputs, false);
3121 } else if (o.type == msgpack::type::ARRAY) {
3122 auto array = o.via.array;
3123 Helpers::conv_fld_from_array(array, name, "inputs", inputs, 0);
3124 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 1);
3125 } else {
3126 throw_or_abort("expected MAP or ARRAY for " + name);
3127 }
3128 }
3129 };
3130
3138
3139 friend bool operator==(const EcdsaSecp256k1&, const EcdsaSecp256k1&);
3140
3141 void msgpack_pack(auto& packer) const
3142 {
3143 packer.pack_array(6);
3144 packer.pack(public_key_x);
3145 packer.pack(public_key_y);
3146 packer.pack(signature);
3147 packer.pack(hashed_message);
3148 packer.pack(predicate);
3149 packer.pack(output);
3150 }
3151
3152 void msgpack_unpack(msgpack::object const& o)
3153 {
3154 std::string name = "EcdsaSecp256k1";
3155 if (o.type == msgpack::type::MAP) {
3156 auto kvmap = Helpers::make_kvmap(o, name);
3157 Helpers::conv_fld_from_kvmap(kvmap, name, "public_key_x", public_key_x, false);
3158 Helpers::conv_fld_from_kvmap(kvmap, name, "public_key_y", public_key_y, false);
3159 Helpers::conv_fld_from_kvmap(kvmap, name, "signature", signature, false);
3160 Helpers::conv_fld_from_kvmap(kvmap, name, "hashed_message", hashed_message, false);
3161 Helpers::conv_fld_from_kvmap(kvmap, name, "predicate", predicate, false);
3162 Helpers::conv_fld_from_kvmap(kvmap, name, "output", output, false);
3163 } else if (o.type == msgpack::type::ARRAY) {
3164 auto array = o.via.array;
3165 Helpers::conv_fld_from_array(array, name, "public_key_x", public_key_x, 0);
3166 Helpers::conv_fld_from_array(array, name, "public_key_y", public_key_y, 1);
3167 Helpers::conv_fld_from_array(array, name, "signature", signature, 2);
3168 Helpers::conv_fld_from_array(array, name, "hashed_message", hashed_message, 3);
3169 Helpers::conv_fld_from_array(array, name, "predicate", predicate, 4);
3170 Helpers::conv_fld_from_array(array, name, "output", output, 5);
3171 } else {
3172 throw_or_abort("expected MAP or ARRAY for " + name);
3173 }
3174 }
3175 };
3176
3184
3185 friend bool operator==(const EcdsaSecp256r1&, const EcdsaSecp256r1&);
3186
3187 void msgpack_pack(auto& packer) const
3188 {
3189 packer.pack_array(6);
3190 packer.pack(public_key_x);
3191 packer.pack(public_key_y);
3192 packer.pack(signature);
3193 packer.pack(hashed_message);
3194 packer.pack(predicate);
3195 packer.pack(output);
3196 }
3197
3198 void msgpack_unpack(msgpack::object const& o)
3199 {
3200 std::string name = "EcdsaSecp256r1";
3201 if (o.type == msgpack::type::MAP) {
3202 auto kvmap = Helpers::make_kvmap(o, name);
3203 Helpers::conv_fld_from_kvmap(kvmap, name, "public_key_x", public_key_x, false);
3204 Helpers::conv_fld_from_kvmap(kvmap, name, "public_key_y", public_key_y, false);
3205 Helpers::conv_fld_from_kvmap(kvmap, name, "signature", signature, false);
3206 Helpers::conv_fld_from_kvmap(kvmap, name, "hashed_message", hashed_message, false);
3207 Helpers::conv_fld_from_kvmap(kvmap, name, "predicate", predicate, false);
3208 Helpers::conv_fld_from_kvmap(kvmap, name, "output", output, false);
3209 } else if (o.type == msgpack::type::ARRAY) {
3210 auto array = o.via.array;
3211 Helpers::conv_fld_from_array(array, name, "public_key_x", public_key_x, 0);
3212 Helpers::conv_fld_from_array(array, name, "public_key_y", public_key_y, 1);
3213 Helpers::conv_fld_from_array(array, name, "signature", signature, 2);
3214 Helpers::conv_fld_from_array(array, name, "hashed_message", hashed_message, 3);
3215 Helpers::conv_fld_from_array(array, name, "predicate", predicate, 4);
3216 Helpers::conv_fld_from_array(array, name, "output", output, 5);
3217 } else {
3218 throw_or_abort("expected MAP or ARRAY for " + name);
3219 }
3220 }
3221 };
3222
3224 std::vector<Acir::FunctionInput> points;
3225 std::vector<Acir::FunctionInput> scalars;
3228
3229 friend bool operator==(const MultiScalarMul&, const MultiScalarMul&);
3230
3231 void msgpack_pack(auto& packer) const
3232 {
3233 packer.pack_array(4);
3234 packer.pack(points);
3235 packer.pack(scalars);
3236 packer.pack(predicate);
3237 packer.pack(outputs);
3238 }
3239
3240 void msgpack_unpack(msgpack::object const& o)
3241 {
3242 std::string name = "MultiScalarMul";
3243 if (o.type == msgpack::type::MAP) {
3244 auto kvmap = Helpers::make_kvmap(o, name);
3245 Helpers::conv_fld_from_kvmap(kvmap, name, "points", points, false);
3246 Helpers::conv_fld_from_kvmap(kvmap, name, "scalars", scalars, false);
3247 Helpers::conv_fld_from_kvmap(kvmap, name, "predicate", predicate, false);
3248 Helpers::conv_fld_from_kvmap(kvmap, name, "outputs", outputs, false);
3249 } else if (o.type == msgpack::type::ARRAY) {
3250 auto array = o.via.array;
3251 Helpers::conv_fld_from_array(array, name, "points", points, 0);
3252 Helpers::conv_fld_from_array(array, name, "scalars", scalars, 1);
3253 Helpers::conv_fld_from_array(array, name, "predicate", predicate, 2);
3254 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 3);
3255 } else {
3256 throw_or_abort("expected MAP or ARRAY for " + name);
3257 }
3258 }
3259 };
3260
3266
3267 friend bool operator==(const EmbeddedCurveAdd&, const EmbeddedCurveAdd&);
3268
3269 void msgpack_pack(auto& packer) const
3270 {
3271 packer.pack_array(4);
3272 packer.pack(input1);
3273 packer.pack(input2);
3274 packer.pack(predicate);
3275 packer.pack(outputs);
3276 }
3277
3278 void msgpack_unpack(msgpack::object const& o)
3279 {
3280 std::string name = "EmbeddedCurveAdd";
3281 if (o.type == msgpack::type::MAP) {
3282 auto kvmap = Helpers::make_kvmap(o, name);
3283 Helpers::conv_fld_from_kvmap(kvmap, name, "input1", input1, false);
3284 Helpers::conv_fld_from_kvmap(kvmap, name, "input2", input2, false);
3285 Helpers::conv_fld_from_kvmap(kvmap, name, "predicate", predicate, false);
3286 Helpers::conv_fld_from_kvmap(kvmap, name, "outputs", outputs, false);
3287 } else if (o.type == msgpack::type::ARRAY) {
3288 auto array = o.via.array;
3289 Helpers::conv_fld_from_array(array, name, "input1", input1, 0);
3290 Helpers::conv_fld_from_array(array, name, "input2", input2, 1);
3291 Helpers::conv_fld_from_array(array, name, "predicate", predicate, 2);
3292 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 3);
3293 } else {
3294 throw_or_abort("expected MAP or ARRAY for " + name);
3295 }
3296 }
3297 };
3298
3302
3303 friend bool operator==(const Keccakf1600&, const Keccakf1600&);
3304
3305 void msgpack_pack(auto& packer) const
3306 {
3307 packer.pack_array(2);
3308 packer.pack(inputs);
3309 packer.pack(outputs);
3310 }
3311
3312 void msgpack_unpack(msgpack::object const& o)
3313 {
3314 std::string name = "Keccakf1600";
3315 if (o.type == msgpack::type::MAP) {
3316 auto kvmap = Helpers::make_kvmap(o, name);
3317 Helpers::conv_fld_from_kvmap(kvmap, name, "inputs", inputs, false);
3318 Helpers::conv_fld_from_kvmap(kvmap, name, "outputs", outputs, false);
3319 } else if (o.type == msgpack::type::ARRAY) {
3320 auto array = o.via.array;
3321 Helpers::conv_fld_from_array(array, name, "inputs", inputs, 0);
3322 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 1);
3323 } else {
3324 throw_or_abort("expected MAP or ARRAY for " + name);
3325 }
3326 }
3327 };
3328
3330 std::vector<Acir::FunctionInput> verification_key;
3331 std::vector<Acir::FunctionInput> proof;
3332 std::vector<Acir::FunctionInput> public_inputs;
3334 uint32_t proof_type;
3336
3337 friend bool operator==(const RecursiveAggregation&, const RecursiveAggregation&);
3338
3339 void msgpack_pack(auto& packer) const
3340 {
3341 packer.pack_array(6);
3342 packer.pack(verification_key);
3343 packer.pack(proof);
3344 packer.pack(public_inputs);
3345 packer.pack(key_hash);
3346 packer.pack(proof_type);
3347 packer.pack(predicate);
3348 }
3349
3350 void msgpack_unpack(msgpack::object const& o)
3351 {
3352 std::string name = "RecursiveAggregation";
3353 if (o.type == msgpack::type::MAP) {
3354 auto kvmap = Helpers::make_kvmap(o, name);
3355 Helpers::conv_fld_from_kvmap(kvmap, name, "verification_key", verification_key, false);
3356 Helpers::conv_fld_from_kvmap(kvmap, name, "proof", proof, false);
3357 Helpers::conv_fld_from_kvmap(kvmap, name, "public_inputs", public_inputs, false);
3358 Helpers::conv_fld_from_kvmap(kvmap, name, "key_hash", key_hash, false);
3359 Helpers::conv_fld_from_kvmap(kvmap, name, "proof_type", proof_type, false);
3360 Helpers::conv_fld_from_kvmap(kvmap, name, "predicate", predicate, false);
3361 } else if (o.type == msgpack::type::ARRAY) {
3362 auto array = o.via.array;
3363 Helpers::conv_fld_from_array(array, name, "verification_key", verification_key, 0);
3364 Helpers::conv_fld_from_array(array, name, "proof", proof, 1);
3365 Helpers::conv_fld_from_array(array, name, "public_inputs", public_inputs, 2);
3366 Helpers::conv_fld_from_array(array, name, "key_hash", key_hash, 3);
3367 Helpers::conv_fld_from_array(array, name, "proof_type", proof_type, 4);
3368 Helpers::conv_fld_from_array(array, name, "predicate", predicate, 5);
3369 } else {
3370 throw_or_abort("expected MAP or ARRAY for " + name);
3371 }
3372 }
3373 };
3374
3376 std::vector<Acir::FunctionInput> inputs;
3377 std::vector<Acir::Witness> outputs;
3378
3379 friend bool operator==(const Poseidon2Permutation&, const Poseidon2Permutation&);
3380
3381 void msgpack_pack(auto& packer) const
3382 {
3383 packer.pack_array(2);
3384 packer.pack(inputs);
3385 packer.pack(outputs);
3386 }
3387
3388 void msgpack_unpack(msgpack::object const& o)
3389 {
3390 std::string name = "Poseidon2Permutation";
3391 if (o.type == msgpack::type::MAP) {
3392 auto kvmap = Helpers::make_kvmap(o, name);
3393 Helpers::conv_fld_from_kvmap(kvmap, name, "inputs", inputs, false);
3394 Helpers::conv_fld_from_kvmap(kvmap, name, "outputs", outputs, false);
3395 } else if (o.type == msgpack::type::ARRAY) {
3396 auto array = o.via.array;
3397 Helpers::conv_fld_from_array(array, name, "inputs", inputs, 0);
3398 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 1);
3399 } else {
3400 throw_or_abort("expected MAP or ARRAY for " + name);
3401 }
3402 }
3403 };
3404
3409
3410 friend bool operator==(const Sha256Compression&, const Sha256Compression&);
3411
3412 void msgpack_pack(auto& packer) const
3413 {
3414 packer.pack_array(3);
3415 packer.pack(inputs);
3416 packer.pack(hash_values);
3417 packer.pack(outputs);
3418 }
3419
3420 void msgpack_unpack(msgpack::object const& o)
3421 {
3422 std::string name = "Sha256Compression";
3423 if (o.type == msgpack::type::MAP) {
3424 auto kvmap = Helpers::make_kvmap(o, name);
3425 Helpers::conv_fld_from_kvmap(kvmap, name, "inputs", inputs, false);
3426 Helpers::conv_fld_from_kvmap(kvmap, name, "hash_values", hash_values, false);
3427 Helpers::conv_fld_from_kvmap(kvmap, name, "outputs", outputs, false);
3428 } else if (o.type == msgpack::type::ARRAY) {
3429 auto array = o.via.array;
3430 Helpers::conv_fld_from_array(array, name, "inputs", inputs, 0);
3431 Helpers::conv_fld_from_array(array, name, "hash_values", hash_values, 1);
3432 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 2);
3433 } else {
3434 throw_or_abort("expected MAP or ARRAY for " + name);
3435 }
3436 }
3437 };
3438
3439 std::variant<AES128Encrypt,
3440 AND,
3441 XOR,
3442 RANGE,
3443 Blake2s,
3444 Blake3,
3445 EcdsaSecp256k1,
3446 EcdsaSecp256r1,
3447 MultiScalarMul,
3448 EmbeddedCurveAdd,
3449 Keccakf1600,
3450 RecursiveAggregation,
3451 Poseidon2Permutation,
3452 Sha256Compression>
3454
3455 friend bool operator==(const BlackBoxFuncCall&, const BlackBoxFuncCall&);
3456
3457 void msgpack_pack(auto& packer) const
3458 {
3459 std::string tag;
3460 bool is_unit;
3461 switch (value.index()) {
3462
3463 case 0:
3464 tag = "AES128Encrypt";
3465 is_unit = false;
3466 break;
3467 case 1:
3468 tag = "AND";
3469 is_unit = false;
3470 break;
3471 case 2:
3472 tag = "XOR";
3473 is_unit = false;
3474 break;
3475 case 3:
3476 tag = "RANGE";
3477 is_unit = false;
3478 break;
3479 case 4:
3480 tag = "Blake2s";
3481 is_unit = false;
3482 break;
3483 case 5:
3484 tag = "Blake3";
3485 is_unit = false;
3486 break;
3487 case 6:
3488 tag = "EcdsaSecp256k1";
3489 is_unit = false;
3490 break;
3491 case 7:
3492 tag = "EcdsaSecp256r1";
3493 is_unit = false;
3494 break;
3495 case 8:
3496 tag = "MultiScalarMul";
3497 is_unit = false;
3498 break;
3499 case 9:
3500 tag = "EmbeddedCurveAdd";
3501 is_unit = false;
3502 break;
3503 case 10:
3504 tag = "Keccakf1600";
3505 is_unit = false;
3506 break;
3507 case 11:
3508 tag = "RecursiveAggregation";
3509 is_unit = false;
3510 break;
3511 case 12:
3512 tag = "Poseidon2Permutation";
3513 is_unit = false;
3514 break;
3515 case 13:
3516 tag = "Sha256Compression";
3517 is_unit = false;
3518 break;
3519 default:
3520 throw_or_abort("unknown enum 'BlackBoxFuncCall' variant index: " + std::to_string(value.index()));
3521 }
3522 if (is_unit) {
3523 packer.pack(tag);
3524 } else {
3525 std::visit(
3526 [&packer, tag](const auto& arg) {
3527 packer.pack_map(1);
3528 packer.pack(tag);
3529 packer.pack(arg);
3530 },
3531 value);
3532 }
3533 }
3534
3535 void msgpack_unpack(msgpack::object const& o)
3536 {
3537
3538 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
3539 std::cerr << o << std::endl;
3540 throw_or_abort("expected MAP or STR for enum 'BlackBoxFuncCall'; got type " + std::to_string(o.type));
3541 }
3542 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
3543 throw_or_abort("expected 1 entry for enum 'BlackBoxFuncCall'; got " + std::to_string(o.via.map.size));
3544 }
3545 std::string tag;
3546 try {
3547 if (o.type == msgpack::type::object_type::MAP) {
3548 o.via.map.ptr[0].key.convert(tag);
3549 } else {
3550 o.convert(tag);
3551 }
3552 } catch (const msgpack::type_error&) {
3553 std::cerr << o << std::endl;
3554 throw_or_abort("error converting tag to string for enum 'BlackBoxFuncCall'");
3555 }
3556 if (tag == "AES128Encrypt") {
3557 AES128Encrypt v;
3558 try {
3559 o.via.map.ptr[0].val.convert(v);
3560 } catch (const msgpack::type_error&) {
3561 std::cerr << o << std::endl;
3562 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::AES128Encrypt'");
3563 }
3564
3565 value = v;
3566 } else if (tag == "AND") {
3567 AND v;
3568 try {
3569 o.via.map.ptr[0].val.convert(v);
3570 } catch (const msgpack::type_error&) {
3571 std::cerr << o << std::endl;
3572 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::AND'");
3573 }
3574
3575 value = v;
3576 } else if (tag == "XOR") {
3577 XOR v;
3578 try {
3579 o.via.map.ptr[0].val.convert(v);
3580 } catch (const msgpack::type_error&) {
3581 std::cerr << o << std::endl;
3582 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::XOR'");
3583 }
3584
3585 value = v;
3586 } else if (tag == "RANGE") {
3587 RANGE v;
3588 try {
3589 o.via.map.ptr[0].val.convert(v);
3590 } catch (const msgpack::type_error&) {
3591 std::cerr << o << std::endl;
3592 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::RANGE'");
3593 }
3594
3595 value = v;
3596 } else if (tag == "Blake2s") {
3597 Blake2s v;
3598 try {
3599 o.via.map.ptr[0].val.convert(v);
3600 } catch (const msgpack::type_error&) {
3601 std::cerr << o << std::endl;
3602 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::Blake2s'");
3603 }
3604
3605 value = v;
3606 } else if (tag == "Blake3") {
3607 Blake3 v;
3608 try {
3609 o.via.map.ptr[0].val.convert(v);
3610 } catch (const msgpack::type_error&) {
3611 std::cerr << o << std::endl;
3612 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::Blake3'");
3613 }
3614
3615 value = v;
3616 } else if (tag == "EcdsaSecp256k1") {
3618 try {
3619 o.via.map.ptr[0].val.convert(v);
3620 } catch (const msgpack::type_error&) {
3621 std::cerr << o << std::endl;
3622 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::EcdsaSecp256k1'");
3623 }
3624
3625 value = v;
3626 } else if (tag == "EcdsaSecp256r1") {
3628 try {
3629 o.via.map.ptr[0].val.convert(v);
3630 } catch (const msgpack::type_error&) {
3631 std::cerr << o << std::endl;
3632 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::EcdsaSecp256r1'");
3633 }
3634
3635 value = v;
3636 } else if (tag == "MultiScalarMul") {
3638 try {
3639 o.via.map.ptr[0].val.convert(v);
3640 } catch (const msgpack::type_error&) {
3641 std::cerr << o << std::endl;
3642 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::MultiScalarMul'");
3643 }
3644
3645 value = v;
3646 } else if (tag == "EmbeddedCurveAdd") {
3648 try {
3649 o.via.map.ptr[0].val.convert(v);
3650 } catch (const msgpack::type_error&) {
3651 std::cerr << o << std::endl;
3652 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::EmbeddedCurveAdd'");
3653 }
3654
3655 value = v;
3656 } else if (tag == "Keccakf1600") {
3657 Keccakf1600 v;
3658 try {
3659 o.via.map.ptr[0].val.convert(v);
3660 } catch (const msgpack::type_error&) {
3661 std::cerr << o << std::endl;
3662 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::Keccakf1600'");
3663 }
3664
3665 value = v;
3666 } else if (tag == "RecursiveAggregation") {
3668 try {
3669 o.via.map.ptr[0].val.convert(v);
3670 } catch (const msgpack::type_error&) {
3671 std::cerr << o << std::endl;
3672 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::RecursiveAggregation'");
3673 }
3674
3675 value = v;
3676 } else if (tag == "Poseidon2Permutation") {
3678 try {
3679 o.via.map.ptr[0].val.convert(v);
3680 } catch (const msgpack::type_error&) {
3681 std::cerr << o << std::endl;
3682 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::Poseidon2Permutation'");
3683 }
3684
3685 value = v;
3686 } else if (tag == "Sha256Compression") {
3688 try {
3689 o.via.map.ptr[0].val.convert(v);
3690 } catch (const msgpack::type_error&) {
3691 std::cerr << o << std::endl;
3692 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::Sha256Compression'");
3693 }
3694
3695 value = v;
3696 } else {
3697 std::cerr << o << std::endl;
3698 throw_or_abort("unknown 'BlackBoxFuncCall' enum variant: " + tag);
3699 }
3700 }
3701};
3702
3703struct BlockId {
3704 uint32_t value;
3705
3706 friend bool operator==(const BlockId&, const BlockId&);
3707
3708 void msgpack_pack(auto& packer) const { packer.pack(value); }
3709
3710 void msgpack_unpack(msgpack::object const& o)
3711 {
3712 try {
3713 o.convert(value);
3714 } catch (const msgpack::type_error&) {
3715 std::cerr << o << std::endl;
3716 throw_or_abort("error converting into newtype 'BlockId'");
3717 }
3718 }
3719};
3720
3722
3723 struct Memory {
3724 friend bool operator==(const Memory&, const Memory&);
3725
3726 void msgpack_pack(auto& packer) const {}
3727 void msgpack_unpack(msgpack::object const& o) {}
3728 };
3729
3730 struct CallData {
3731 uint32_t value;
3732
3733 friend bool operator==(const CallData&, const CallData&);
3734
3735 void msgpack_pack(auto& packer) const { packer.pack(value); }
3736
3737 void msgpack_unpack(msgpack::object const& o)
3738 {
3739 try {
3740 o.convert(value);
3741 } catch (const msgpack::type_error&) {
3742 std::cerr << o << std::endl;
3743 throw_or_abort("error converting into newtype 'CallData'");
3744 }
3745 }
3746 };
3747
3748 struct ReturnData {
3749 friend bool operator==(const ReturnData&, const ReturnData&);
3750
3751 void msgpack_pack(auto& packer) const {}
3752 void msgpack_unpack(msgpack::object const& o) {}
3753 };
3754
3756
3757 friend bool operator==(const BlockType&, const BlockType&);
3758
3759 void msgpack_pack(auto& packer) const
3760 {
3761 std::string tag;
3762 bool is_unit;
3763 switch (value.index()) {
3764
3765 case 0:
3766 tag = "Memory";
3767 is_unit = true;
3768 break;
3769 case 1:
3770 tag = "CallData";
3771 is_unit = false;
3772 break;
3773 case 2:
3774 tag = "ReturnData";
3775 is_unit = true;
3776 break;
3777 default:
3778 throw_or_abort("unknown enum 'BlockType' variant index: " + std::to_string(value.index()));
3779 }
3780 if (is_unit) {
3781 packer.pack(tag);
3782 } else {
3783 std::visit(
3784 [&packer, tag](const auto& arg) {
3785 packer.pack_map(1);
3786 packer.pack(tag);
3787 packer.pack(arg);
3788 },
3789 value);
3790 }
3791 }
3792
3793 void msgpack_unpack(msgpack::object const& o)
3794 {
3795
3796 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
3797 std::cerr << o << std::endl;
3798 throw_or_abort("expected MAP or STR for enum 'BlockType'; got type " + std::to_string(o.type));
3799 }
3800 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
3801 throw_or_abort("expected 1 entry for enum 'BlockType'; got " + std::to_string(o.via.map.size));
3802 }
3803 std::string tag;
3804 try {
3805 if (o.type == msgpack::type::object_type::MAP) {
3806 o.via.map.ptr[0].key.convert(tag);
3807 } else {
3808 o.convert(tag);
3809 }
3810 } catch (const msgpack::type_error&) {
3811 std::cerr << o << std::endl;
3812 throw_or_abort("error converting tag to string for enum 'BlockType'");
3813 }
3814 if (tag == "Memory") {
3815 Memory v;
3816 value = v;
3817 } else if (tag == "CallData") {
3818 CallData v;
3819 try {
3820 o.via.map.ptr[0].val.convert(v);
3821 } catch (const msgpack::type_error&) {
3822 std::cerr << o << std::endl;
3823 throw_or_abort("error converting into enum variant 'BlockType::CallData'");
3824 }
3825
3826 value = v;
3827 } else if (tag == "ReturnData") {
3828 ReturnData v;
3829 value = v;
3830 } else {
3831 std::cerr << o << std::endl;
3832 throw_or_abort("unknown 'BlockType' enum variant: " + tag);
3833 }
3834 }
3835};
3836
3840 std::vector<uint8_t> q_c;
3841
3842 friend bool operator==(const Expression&, const Expression&);
3843
3844 void msgpack_pack(auto& packer) const
3845 {
3846 packer.pack_array(3);
3847 packer.pack(mul_terms);
3848 packer.pack(linear_combinations);
3849 packer.pack(q_c);
3850 }
3851
3852 void msgpack_unpack(msgpack::object const& o)
3853 {
3854 std::string name = "Expression";
3855 if (o.type == msgpack::type::MAP) {
3856 auto kvmap = Helpers::make_kvmap(o, name);
3857 Helpers::conv_fld_from_kvmap(kvmap, name, "mul_terms", mul_terms, false);
3858 Helpers::conv_fld_from_kvmap(kvmap, name, "linear_combinations", linear_combinations, false);
3859 Helpers::conv_fld_from_kvmap(kvmap, name, "q_c", q_c, false);
3860 } else if (o.type == msgpack::type::ARRAY) {
3861 auto array = o.via.array;
3862 Helpers::conv_fld_from_array(array, name, "mul_terms", mul_terms, 0);
3863 Helpers::conv_fld_from_array(array, name, "linear_combinations", linear_combinations, 1);
3864 Helpers::conv_fld_from_array(array, name, "q_c", q_c, 2);
3865 } else {
3866 throw_or_abort("expected MAP or ARRAY for " + name);
3867 }
3868 }
3869};
3870
3872
3873 struct Single {
3875
3876 friend bool operator==(const Single&, const Single&);
3877
3878 void msgpack_pack(auto& packer) const { packer.pack(value); }
3879
3880 void msgpack_unpack(msgpack::object const& o)
3881 {
3882 try {
3883 o.convert(value);
3884 } catch (const msgpack::type_error&) {
3885 std::cerr << o << std::endl;
3886 throw_or_abort("error converting into newtype 'Single'");
3887 }
3888 }
3889 };
3890
3891 struct Array {
3892 std::vector<Acir::Expression> value;
3893
3894 friend bool operator==(const Array&, const Array&);
3895
3896 void msgpack_pack(auto& packer) const { packer.pack(value); }
3897
3898 void msgpack_unpack(msgpack::object const& o)
3899 {
3900 try {
3901 o.convert(value);
3902 } catch (const msgpack::type_error&) {
3903 std::cerr << o << std::endl;
3904 throw_or_abort("error converting into newtype 'Array'");
3905 }
3906 }
3907 };
3908
3911
3912 friend bool operator==(const MemoryArray&, const MemoryArray&);
3913
3914 void msgpack_pack(auto& packer) const { packer.pack(value); }
3915
3916 void msgpack_unpack(msgpack::object const& o)
3917 {
3918 try {
3919 o.convert(value);
3920 } catch (const msgpack::type_error&) {
3921 std::cerr << o << std::endl;
3922 throw_or_abort("error converting into newtype 'MemoryArray'");
3923 }
3924 }
3925 };
3926
3928
3929 friend bool operator==(const BrilligInputs&, const BrilligInputs&);
3930
3931 void msgpack_pack(auto& packer) const
3932 {
3933 std::string tag;
3934 bool is_unit;
3935 switch (value.index()) {
3936
3937 case 0:
3938 tag = "Single";
3939 is_unit = false;
3940 break;
3941 case 1:
3942 tag = "Array";
3943 is_unit = false;
3944 break;
3945 case 2:
3946 tag = "MemoryArray";
3947 is_unit = false;
3948 break;
3949 default:
3950 throw_or_abort("unknown enum 'BrilligInputs' variant index: " + std::to_string(value.index()));
3951 }
3952 if (is_unit) {
3953 packer.pack(tag);
3954 } else {
3955 std::visit(
3956 [&packer, tag](const auto& arg) {
3957 packer.pack_map(1);
3958 packer.pack(tag);
3959 packer.pack(arg);
3960 },
3961 value);
3962 }
3963 }
3964
3965 void msgpack_unpack(msgpack::object const& o)
3966 {
3967
3968 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
3969 std::cerr << o << std::endl;
3970 throw_or_abort("expected MAP or STR for enum 'BrilligInputs'; got type " + std::to_string(o.type));
3971 }
3972 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
3973 throw_or_abort("expected 1 entry for enum 'BrilligInputs'; got " + std::to_string(o.via.map.size));
3974 }
3975 std::string tag;
3976 try {
3977 if (o.type == msgpack::type::object_type::MAP) {
3978 o.via.map.ptr[0].key.convert(tag);
3979 } else {
3980 o.convert(tag);
3981 }
3982 } catch (const msgpack::type_error&) {
3983 std::cerr << o << std::endl;
3984 throw_or_abort("error converting tag to string for enum 'BrilligInputs'");
3985 }
3986 if (tag == "Single") {
3987 Single v;
3988 try {
3989 o.via.map.ptr[0].val.convert(v);
3990 } catch (const msgpack::type_error&) {
3991 std::cerr << o << std::endl;
3992 throw_or_abort("error converting into enum variant 'BrilligInputs::Single'");
3993 }
3994
3995 value = v;
3996 } else if (tag == "Array") {
3997 Array v;
3998 try {
3999 o.via.map.ptr[0].val.convert(v);
4000 } catch (const msgpack::type_error&) {
4001 std::cerr << o << std::endl;
4002 throw_or_abort("error converting into enum variant 'BrilligInputs::Array'");
4003 }
4004
4005 value = v;
4006 } else if (tag == "MemoryArray") {
4007 MemoryArray v;
4008 try {
4009 o.via.map.ptr[0].val.convert(v);
4010 } catch (const msgpack::type_error&) {
4011 std::cerr << o << std::endl;
4012 throw_or_abort("error converting into enum variant 'BrilligInputs::MemoryArray'");
4013 }
4014
4015 value = v;
4016 } else {
4017 std::cerr << o << std::endl;
4018 throw_or_abort("unknown 'BrilligInputs' enum variant: " + tag);
4019 }
4020 }
4021};
4022
4024
4025 struct Simple {
4027
4028 friend bool operator==(const Simple&, const Simple&);
4029
4030 void msgpack_pack(auto& packer) const { packer.pack(value); }
4031
4032 void msgpack_unpack(msgpack::object const& o)
4033 {
4034 try {
4035 o.convert(value);
4036 } catch (const msgpack::type_error&) {
4037 std::cerr << o << std::endl;
4038 throw_or_abort("error converting into newtype 'Simple'");
4039 }
4040 }
4041 };
4042
4043 struct Array {
4044 std::vector<Acir::Witness> value;
4045
4046 friend bool operator==(const Array&, const Array&);
4047
4048 void msgpack_pack(auto& packer) const { packer.pack(value); }
4049
4050 void msgpack_unpack(msgpack::object const& o)
4051 {
4052 try {
4053 o.convert(value);
4054 } catch (const msgpack::type_error&) {
4055 std::cerr << o << std::endl;
4056 throw_or_abort("error converting into newtype 'Array'");
4057 }
4058 }
4059 };
4060
4062
4063 friend bool operator==(const BrilligOutputs&, const BrilligOutputs&);
4064
4065 void msgpack_pack(auto& packer) const
4066 {
4067 std::string tag;
4068 bool is_unit;
4069 switch (value.index()) {
4070
4071 case 0:
4072 tag = "Simple";
4073 is_unit = false;
4074 break;
4075 case 1:
4076 tag = "Array";
4077 is_unit = false;
4078 break;
4079 default:
4080 throw_or_abort("unknown enum 'BrilligOutputs' variant index: " + std::to_string(value.index()));
4081 }
4082 if (is_unit) {
4083 packer.pack(tag);
4084 } else {
4085 std::visit(
4086 [&packer, tag](const auto& arg) {
4087 packer.pack_map(1);
4088 packer.pack(tag);
4089 packer.pack(arg);
4090 },
4091 value);
4092 }
4093 }
4094
4095 void msgpack_unpack(msgpack::object const& o)
4096 {
4097
4098 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
4099 std::cerr << o << std::endl;
4100 throw_or_abort("expected MAP or STR for enum 'BrilligOutputs'; got type " + std::to_string(o.type));
4101 }
4102 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
4103 throw_or_abort("expected 1 entry for enum 'BrilligOutputs'; got " + std::to_string(o.via.map.size));
4104 }
4105 std::string tag;
4106 try {
4107 if (o.type == msgpack::type::object_type::MAP) {
4108 o.via.map.ptr[0].key.convert(tag);
4109 } else {
4110 o.convert(tag);
4111 }
4112 } catch (const msgpack::type_error&) {
4113 std::cerr << o << std::endl;
4114 throw_or_abort("error converting tag to string for enum 'BrilligOutputs'");
4115 }
4116 if (tag == "Simple") {
4117 Simple v;
4118 try {
4119 o.via.map.ptr[0].val.convert(v);
4120 } catch (const msgpack::type_error&) {
4121 std::cerr << o << std::endl;
4122 throw_or_abort("error converting into enum variant 'BrilligOutputs::Simple'");
4123 }
4124
4125 value = v;
4126 } else if (tag == "Array") {
4127 Array v;
4128 try {
4129 o.via.map.ptr[0].val.convert(v);
4130 } catch (const msgpack::type_error&) {
4131 std::cerr << o << std::endl;
4132 throw_or_abort("error converting into enum variant 'BrilligOutputs::Array'");
4133 }
4134
4135 value = v;
4136 } else {
4137 std::cerr << o << std::endl;
4138 throw_or_abort("unknown 'BrilligOutputs' enum variant: " + tag);
4139 }
4140 }
4141};
4142
4143struct MemOp {
4147
4148 friend bool operator==(const MemOp&, const MemOp&);
4149
4150 void msgpack_pack(auto& packer) const
4151 {
4152 packer.pack_array(3);
4153 packer.pack(operation);
4154 packer.pack(index);
4155 packer.pack(value);
4156 }
4157
4158 void msgpack_unpack(msgpack::object const& o)
4159 {
4160 std::string name = "MemOp";
4161 if (o.type == msgpack::type::MAP) {
4162 auto kvmap = Helpers::make_kvmap(o, name);
4163 Helpers::conv_fld_from_kvmap(kvmap, name, "operation", operation, false);
4164 Helpers::conv_fld_from_kvmap(kvmap, name, "index", index, false);
4165 Helpers::conv_fld_from_kvmap(kvmap, name, "value", value, false);
4166 } else if (o.type == msgpack::type::ARRAY) {
4167 auto array = o.via.array;
4168 Helpers::conv_fld_from_array(array, name, "operation", operation, 0);
4169 Helpers::conv_fld_from_array(array, name, "index", index, 1);
4170 Helpers::conv_fld_from_array(array, name, "value", value, 2);
4171 } else {
4172 throw_or_abort("expected MAP or ARRAY for " + name);
4173 }
4174 }
4175};
4176
4177struct Opcode {
4178
4179 struct AssertZero {
4181
4182 friend bool operator==(const AssertZero&, const AssertZero&);
4183
4184 void msgpack_pack(auto& packer) const { packer.pack(value); }
4185
4186 void msgpack_unpack(msgpack::object const& o)
4187 {
4188 try {
4189 o.convert(value);
4190 } catch (const msgpack::type_error&) {
4191 std::cerr << o << std::endl;
4192 throw_or_abort("error converting into newtype 'AssertZero'");
4193 }
4194 }
4195 };
4196
4199
4200 friend bool operator==(const BlackBoxFuncCall&, const BlackBoxFuncCall&);
4201
4202 void msgpack_pack(auto& packer) const { packer.pack(value); }
4203
4204 void msgpack_unpack(msgpack::object const& o)
4205 {
4206 try {
4207 o.convert(value);
4208 } catch (const msgpack::type_error&) {
4209 std::cerr << o << std::endl;
4210 throw_or_abort("error converting into newtype 'BlackBoxFuncCall'");
4211 }
4212 }
4213 };
4214
4215 struct MemoryOp {
4218
4219 friend bool operator==(const MemoryOp&, const MemoryOp&);
4220
4221 void msgpack_pack(auto& packer) const
4222 {
4223 packer.pack_array(2);
4224 packer.pack(block_id);
4225 packer.pack(op);
4226 }
4227
4228 void msgpack_unpack(msgpack::object const& o)
4229 {
4230 std::string name = "MemoryOp";
4231 if (o.type == msgpack::type::MAP) {
4232 auto kvmap = Helpers::make_kvmap(o, name);
4233 Helpers::conv_fld_from_kvmap(kvmap, name, "block_id", block_id, false);
4234 Helpers::conv_fld_from_kvmap(kvmap, name, "op", op, false);
4235 } else if (o.type == msgpack::type::ARRAY) {
4236 auto array = o.via.array;
4237 Helpers::conv_fld_from_array(array, name, "block_id", block_id, 0);
4238 Helpers::conv_fld_from_array(array, name, "op", op, 1);
4239 } else {
4240 throw_or_abort("expected MAP or ARRAY for " + name);
4241 }
4242 }
4243 };
4244
4245 struct MemoryInit {
4247 std::vector<Acir::Witness> init;
4249
4250 friend bool operator==(const MemoryInit&, const MemoryInit&);
4251
4252 void msgpack_pack(auto& packer) const
4253 {
4254 packer.pack_array(3);
4255 packer.pack(block_id);
4256 packer.pack(init);
4257 packer.pack(block_type);
4258 }
4259
4260 void msgpack_unpack(msgpack::object const& o)
4261 {
4262 std::string name = "MemoryInit";
4263 if (o.type == msgpack::type::MAP) {
4264 auto kvmap = Helpers::make_kvmap(o, name);
4265 Helpers::conv_fld_from_kvmap(kvmap, name, "block_id", block_id, false);
4266 Helpers::conv_fld_from_kvmap(kvmap, name, "init", init, false);
4267 Helpers::conv_fld_from_kvmap(kvmap, name, "block_type", block_type, false);
4268 } else if (o.type == msgpack::type::ARRAY) {
4269 auto array = o.via.array;
4270 Helpers::conv_fld_from_array(array, name, "block_id", block_id, 0);
4271 Helpers::conv_fld_from_array(array, name, "init", init, 1);
4272 Helpers::conv_fld_from_array(array, name, "block_type", block_type, 2);
4273 } else {
4274 throw_or_abort("expected MAP or ARRAY for " + name);
4275 }
4276 }
4277 };
4278
4280 uint32_t id;
4281 std::vector<Acir::BrilligInputs> inputs;
4282 std::vector<Acir::BrilligOutputs> outputs;
4284
4285 friend bool operator==(const BrilligCall&, const BrilligCall&);
4286
4287 void msgpack_pack(auto& packer) const
4288 {
4289 packer.pack_array(4);
4290 packer.pack(id);
4291 packer.pack(inputs);
4292 packer.pack(outputs);
4293 packer.pack(predicate);
4294 }
4295
4296 void msgpack_unpack(msgpack::object const& o)
4297 {
4298 std::string name = "BrilligCall";
4299 if (o.type == msgpack::type::MAP) {
4300 auto kvmap = Helpers::make_kvmap(o, name);
4301 Helpers::conv_fld_from_kvmap(kvmap, name, "id", id, false);
4302 Helpers::conv_fld_from_kvmap(kvmap, name, "inputs", inputs, false);
4303 Helpers::conv_fld_from_kvmap(kvmap, name, "outputs", outputs, false);
4304 Helpers::conv_fld_from_kvmap(kvmap, name, "predicate", predicate, false);
4305 } else if (o.type == msgpack::type::ARRAY) {
4306 auto array = o.via.array;
4307 Helpers::conv_fld_from_array(array, name, "id", id, 0);
4308 Helpers::conv_fld_from_array(array, name, "inputs", inputs, 1);
4309 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 2);
4310 Helpers::conv_fld_from_array(array, name, "predicate", predicate, 3);
4311 } else {
4312 throw_or_abort("expected MAP or ARRAY for " + name);
4313 }
4314 }
4315 };
4316
4317 struct Call {
4318 uint32_t id;
4319 std::vector<Acir::Witness> inputs;
4320 std::vector<Acir::Witness> outputs;
4322
4323 friend bool operator==(const Call&, const Call&);
4324
4325 void msgpack_pack(auto& packer) const
4326 {
4327 packer.pack_array(4);
4328 packer.pack(id);
4329 packer.pack(inputs);
4330 packer.pack(outputs);
4331 packer.pack(predicate);
4332 }
4333
4334 void msgpack_unpack(msgpack::object const& o)
4335 {
4336 std::string name = "Call";
4337 if (o.type == msgpack::type::MAP) {
4338 auto kvmap = Helpers::make_kvmap(o, name);
4339 Helpers::conv_fld_from_kvmap(kvmap, name, "id", id, false);
4340 Helpers::conv_fld_from_kvmap(kvmap, name, "inputs", inputs, false);
4341 Helpers::conv_fld_from_kvmap(kvmap, name, "outputs", outputs, false);
4342 Helpers::conv_fld_from_kvmap(kvmap, name, "predicate", predicate, false);
4343 } else if (o.type == msgpack::type::ARRAY) {
4344 auto array = o.via.array;
4345 Helpers::conv_fld_from_array(array, name, "id", id, 0);
4346 Helpers::conv_fld_from_array(array, name, "inputs", inputs, 1);
4347 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 2);
4348 Helpers::conv_fld_from_array(array, name, "predicate", predicate, 3);
4349 } else {
4350 throw_or_abort("expected MAP or ARRAY for " + name);
4351 }
4352 }
4353 };
4354
4356
4357 friend bool operator==(const Opcode&, const Opcode&);
4358
4359 void msgpack_pack(auto& packer) const
4360 {
4361 std::string tag;
4362 bool is_unit;
4363 switch (value.index()) {
4364
4365 case 0:
4366 tag = "AssertZero";
4367 is_unit = false;
4368 break;
4369 case 1:
4370 tag = "BlackBoxFuncCall";
4371 is_unit = false;
4372 break;
4373 case 2:
4374 tag = "MemoryOp";
4375 is_unit = false;
4376 break;
4377 case 3:
4378 tag = "MemoryInit";
4379 is_unit = false;
4380 break;
4381 case 4:
4382 tag = "BrilligCall";
4383 is_unit = false;
4384 break;
4385 case 5:
4386 tag = "Call";
4387 is_unit = false;
4388 break;
4389 default:
4390 throw_or_abort("unknown enum 'Opcode' variant index: " + std::to_string(value.index()));
4391 }
4392 if (is_unit) {
4393 packer.pack(tag);
4394 } else {
4395 std::visit(
4396 [&packer, tag](const auto& arg) {
4397 packer.pack_map(1);
4398 packer.pack(tag);
4399 packer.pack(arg);
4400 },
4401 value);
4402 }
4403 }
4404
4405 void msgpack_unpack(msgpack::object const& o)
4406 {
4407
4408 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
4409 std::cerr << o << std::endl;
4410 throw_or_abort("expected MAP or STR for enum 'Opcode'; got type " + std::to_string(o.type));
4411 }
4412 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
4413 throw_or_abort("expected 1 entry for enum 'Opcode'; got " + std::to_string(o.via.map.size));
4414 }
4415 std::string tag;
4416 try {
4417 if (o.type == msgpack::type::object_type::MAP) {
4418 o.via.map.ptr[0].key.convert(tag);
4419 } else {
4420 o.convert(tag);
4421 }
4422 } catch (const msgpack::type_error&) {
4423 std::cerr << o << std::endl;
4424 throw_or_abort("error converting tag to string for enum 'Opcode'");
4425 }
4426 if (tag == "AssertZero") {
4427 AssertZero v;
4428 try {
4429 o.via.map.ptr[0].val.convert(v);
4430 } catch (const msgpack::type_error&) {
4431 std::cerr << o << std::endl;
4432 throw_or_abort("error converting into enum variant 'Opcode::AssertZero'");
4433 }
4434
4435 value = v;
4436 } else if (tag == "BlackBoxFuncCall") {
4438 try {
4439 o.via.map.ptr[0].val.convert(v);
4440 } catch (const msgpack::type_error&) {
4441 std::cerr << o << std::endl;
4442 throw_or_abort("error converting into enum variant 'Opcode::BlackBoxFuncCall'");
4443 }
4444
4445 value = v;
4446 } else if (tag == "MemoryOp") {
4447 MemoryOp v;
4448 try {
4449 o.via.map.ptr[0].val.convert(v);
4450 } catch (const msgpack::type_error&) {
4451 std::cerr << o << std::endl;
4452 throw_or_abort("error converting into enum variant 'Opcode::MemoryOp'");
4453 }
4454
4455 value = v;
4456 } else if (tag == "MemoryInit") {
4457 MemoryInit v;
4458 try {
4459 o.via.map.ptr[0].val.convert(v);
4460 } catch (const msgpack::type_error&) {
4461 std::cerr << o << std::endl;
4462 throw_or_abort("error converting into enum variant 'Opcode::MemoryInit'");
4463 }
4464
4465 value = v;
4466 } else if (tag == "BrilligCall") {
4467 BrilligCall v;
4468 try {
4469 o.via.map.ptr[0].val.convert(v);
4470 } catch (const msgpack::type_error&) {
4471 std::cerr << o << std::endl;
4472 throw_or_abort("error converting into enum variant 'Opcode::BrilligCall'");
4473 }
4474
4475 value = v;
4476 } else if (tag == "Call") {
4477 Call v;
4478 try {
4479 o.via.map.ptr[0].val.convert(v);
4480 } catch (const msgpack::type_error&) {
4481 std::cerr << o << std::endl;
4482 throw_or_abort("error converting into enum variant 'Opcode::Call'");
4483 }
4484
4485 value = v;
4486 } else {
4487 std::cerr << o << std::endl;
4488 throw_or_abort("unknown 'Opcode' enum variant: " + tag);
4489 }
4490 }
4491};
4492
4494
4495 struct Expression {
4497
4498 friend bool operator==(const Expression&, const Expression&);
4499
4500 void msgpack_pack(auto& packer) const { packer.pack(value); }
4501
4502 void msgpack_unpack(msgpack::object const& o)
4503 {
4504 try {
4505 o.convert(value);
4506 } catch (const msgpack::type_error&) {
4507 std::cerr << o << std::endl;
4508 throw_or_abort("error converting into newtype 'Expression'");
4509 }
4510 }
4511 };
4512
4513 struct Memory {
4515
4516 friend bool operator==(const Memory&, const Memory&);
4517
4518 void msgpack_pack(auto& packer) const { packer.pack(value); }
4519
4520 void msgpack_unpack(msgpack::object const& o)
4521 {
4522 try {
4523 o.convert(value);
4524 } catch (const msgpack::type_error&) {
4525 std::cerr << o << std::endl;
4526 throw_or_abort("error converting into newtype 'Memory'");
4527 }
4528 }
4529 };
4530
4532
4533 friend bool operator==(const ExpressionOrMemory&, const ExpressionOrMemory&);
4534
4535 void msgpack_pack(auto& packer) const
4536 {
4537 std::string tag;
4538 bool is_unit;
4539 switch (value.index()) {
4540
4541 case 0:
4542 tag = "Expression";
4543 is_unit = false;
4544 break;
4545 case 1:
4546 tag = "Memory";
4547 is_unit = false;
4548 break;
4549 default:
4550 throw_or_abort("unknown enum 'ExpressionOrMemory' variant index: " + std::to_string(value.index()));
4551 }
4552 if (is_unit) {
4553 packer.pack(tag);
4554 } else {
4555 std::visit(
4556 [&packer, tag](const auto& arg) {
4557 packer.pack_map(1);
4558 packer.pack(tag);
4559 packer.pack(arg);
4560 },
4561 value);
4562 }
4563 }
4564
4565 void msgpack_unpack(msgpack::object const& o)
4566 {
4567
4568 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
4569 std::cerr << o << std::endl;
4570 throw_or_abort("expected MAP or STR for enum 'ExpressionOrMemory'; got type " + std::to_string(o.type));
4571 }
4572 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
4573 throw_or_abort("expected 1 entry for enum 'ExpressionOrMemory'; got " + std::to_string(o.via.map.size));
4574 }
4575 std::string tag;
4576 try {
4577 if (o.type == msgpack::type::object_type::MAP) {
4578 o.via.map.ptr[0].key.convert(tag);
4579 } else {
4580 o.convert(tag);
4581 }
4582 } catch (const msgpack::type_error&) {
4583 std::cerr << o << std::endl;
4584 throw_or_abort("error converting tag to string for enum 'ExpressionOrMemory'");
4585 }
4586 if (tag == "Expression") {
4587 Expression v;
4588 try {
4589 o.via.map.ptr[0].val.convert(v);
4590 } catch (const msgpack::type_error&) {
4591 std::cerr << o << std::endl;
4592 throw_or_abort("error converting into enum variant 'ExpressionOrMemory::Expression'");
4593 }
4594
4595 value = v;
4596 } else if (tag == "Memory") {
4597 Memory v;
4598 try {
4599 o.via.map.ptr[0].val.convert(v);
4600 } catch (const msgpack::type_error&) {
4601 std::cerr << o << std::endl;
4602 throw_or_abort("error converting into enum variant 'ExpressionOrMemory::Memory'");
4603 }
4604
4605 value = v;
4606 } else {
4607 std::cerr << o << std::endl;
4608 throw_or_abort("unknown 'ExpressionOrMemory' enum variant: " + tag);
4609 }
4610 }
4611};
4612
4615 std::vector<Acir::ExpressionOrMemory> payload;
4616
4617 friend bool operator==(const AssertionPayload&, const AssertionPayload&);
4618
4619 void msgpack_pack(auto& packer) const
4620 {
4621 packer.pack_array(2);
4622 packer.pack(error_selector);
4623 packer.pack(payload);
4624 }
4625
4626 void msgpack_unpack(msgpack::object const& o)
4627 {
4628 std::string name = "AssertionPayload";
4629 if (o.type == msgpack::type::MAP) {
4630 auto kvmap = Helpers::make_kvmap(o, name);
4631 Helpers::conv_fld_from_kvmap(kvmap, name, "error_selector", error_selector, false);
4632 Helpers::conv_fld_from_kvmap(kvmap, name, "payload", payload, false);
4633 } else if (o.type == msgpack::type::ARRAY) {
4634 auto array = o.via.array;
4635 Helpers::conv_fld_from_array(array, name, "error_selector", error_selector, 0);
4636 Helpers::conv_fld_from_array(array, name, "payload", payload, 1);
4637 } else {
4638 throw_or_abort("expected MAP or ARRAY for " + name);
4639 }
4640 }
4641};
4642
4644
4645 struct Acir {
4646 uint64_t value;
4647
4648 friend bool operator==(const Acir&, const Acir&);
4649
4650 void msgpack_pack(auto& packer) const { packer.pack(value); }
4651
4652 void msgpack_unpack(msgpack::object const& o)
4653 {
4654 try {
4655 o.convert(value);
4656 } catch (const msgpack::type_error&) {
4657 std::cerr << o << std::endl;
4658 throw_or_abort("error converting into newtype 'Acir'");
4659 }
4660 }
4661 };
4662
4663 struct Brillig {
4664 uint64_t acir_index;
4666
4667 friend bool operator==(const Brillig&, const Brillig&);
4668
4669 void msgpack_pack(auto& packer) const
4670 {
4671 packer.pack_array(2);
4672 packer.pack(acir_index);
4673 packer.pack(brillig_index);
4674 }
4675
4676 void msgpack_unpack(msgpack::object const& o)
4677 {
4678 std::string name = "Brillig";
4679 if (o.type == msgpack::type::MAP) {
4680 auto kvmap = Helpers::make_kvmap(o, name);
4681 Helpers::conv_fld_from_kvmap(kvmap, name, "acir_index", acir_index, false);
4682 Helpers::conv_fld_from_kvmap(kvmap, name, "brillig_index", brillig_index, false);
4683 } else if (o.type == msgpack::type::ARRAY) {
4684 auto array = o.via.array;
4685 Helpers::conv_fld_from_array(array, name, "acir_index", acir_index, 0);
4686 Helpers::conv_fld_from_array(array, name, "brillig_index", brillig_index, 1);
4687 } else {
4688 throw_or_abort("expected MAP or ARRAY for " + name);
4689 }
4690 }
4691 };
4692
4694
4695 friend bool operator==(const OpcodeLocation&, const OpcodeLocation&);
4696
4697 void msgpack_pack(auto& packer) const
4698 {
4699 std::string tag;
4700 bool is_unit;
4701 switch (value.index()) {
4702
4703 case 0:
4704 tag = "Acir";
4705 is_unit = false;
4706 break;
4707 case 1:
4708 tag = "Brillig";
4709 is_unit = false;
4710 break;
4711 default:
4712 throw_or_abort("unknown enum 'OpcodeLocation' variant index: " + std::to_string(value.index()));
4713 }
4714 if (is_unit) {
4715 packer.pack(tag);
4716 } else {
4717 std::visit(
4718 [&packer, tag](const auto& arg) {
4719 packer.pack_map(1);
4720 packer.pack(tag);
4721 packer.pack(arg);
4722 },
4723 value);
4724 }
4725 }
4726
4727 void msgpack_unpack(msgpack::object const& o)
4728 {
4729
4730 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
4731 std::cerr << o << std::endl;
4732 throw_or_abort("expected MAP or STR for enum 'OpcodeLocation'; got type " + std::to_string(o.type));
4733 }
4734 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
4735 throw_or_abort("expected 1 entry for enum 'OpcodeLocation'; got " + std::to_string(o.via.map.size));
4736 }
4737 std::string tag;
4738 try {
4739 if (o.type == msgpack::type::object_type::MAP) {
4740 o.via.map.ptr[0].key.convert(tag);
4741 } else {
4742 o.convert(tag);
4743 }
4744 } catch (const msgpack::type_error&) {
4745 std::cerr << o << std::endl;
4746 throw_or_abort("error converting tag to string for enum 'OpcodeLocation'");
4747 }
4748 if (tag == "Acir") {
4749 Acir v;
4750 try {
4751 o.via.map.ptr[0].val.convert(v);
4752 } catch (const msgpack::type_error&) {
4753 std::cerr << o << std::endl;
4754 throw_or_abort("error converting into enum variant 'OpcodeLocation::Acir'");
4755 }
4756
4757 value = v;
4758 } else if (tag == "Brillig") {
4759 Brillig v;
4760 try {
4761 o.via.map.ptr[0].val.convert(v);
4762 } catch (const msgpack::type_error&) {
4763 std::cerr << o << std::endl;
4764 throw_or_abort("error converting into enum variant 'OpcodeLocation::Brillig'");
4765 }
4766
4767 value = v;
4768 } else {
4769 std::cerr << o << std::endl;
4770 throw_or_abort("unknown 'OpcodeLocation' enum variant: " + tag);
4771 }
4772 }
4773};
4774
4776 std::vector<Acir::Witness> value;
4777
4778 friend bool operator==(const PublicInputs&, const PublicInputs&);
4779
4780 void msgpack_pack(auto& packer) const { packer.pack(value); }
4781
4782 void msgpack_unpack(msgpack::object const& o)
4783 {
4784 try {
4785 o.convert(value);
4786 } catch (const msgpack::type_error&) {
4787 std::cerr << o << std::endl;
4788 throw_or_abort("error converting into newtype 'PublicInputs'");
4789 }
4790 }
4791};
4792
4793struct Circuit {
4794 std::string function_name;
4796 std::vector<Acir::Opcode> opcodes;
4797 std::vector<Acir::Witness> private_parameters;
4801
4802 friend bool operator==(const Circuit&, const Circuit&);
4803
4804 void msgpack_pack(auto& packer) const
4805 {
4806 packer.pack_array(7);
4807 packer.pack(function_name);
4808 packer.pack(current_witness_index);
4809 packer.pack(opcodes);
4810 packer.pack(private_parameters);
4811 packer.pack(public_parameters);
4812 packer.pack(return_values);
4813 packer.pack(assert_messages);
4814 }
4815
4816 void msgpack_unpack(msgpack::object const& o)
4817 {
4818 std::string name = "Circuit";
4819 if (o.type == msgpack::type::MAP) {
4820 auto kvmap = Helpers::make_kvmap(o, name);
4821 Helpers::conv_fld_from_kvmap(kvmap, name, "function_name", function_name, false);
4822 Helpers::conv_fld_from_kvmap(kvmap, name, "current_witness_index", current_witness_index, false);
4823 Helpers::conv_fld_from_kvmap(kvmap, name, "opcodes", opcodes, false);
4824 Helpers::conv_fld_from_kvmap(kvmap, name, "private_parameters", private_parameters, false);
4825 Helpers::conv_fld_from_kvmap(kvmap, name, "public_parameters", public_parameters, false);
4826 Helpers::conv_fld_from_kvmap(kvmap, name, "return_values", return_values, false);
4827 Helpers::conv_fld_from_kvmap(kvmap, name, "assert_messages", assert_messages, false);
4828 } else if (o.type == msgpack::type::ARRAY) {
4829 auto array = o.via.array;
4830 Helpers::conv_fld_from_array(array, name, "function_name", function_name, 0);
4831 Helpers::conv_fld_from_array(array, name, "current_witness_index", current_witness_index, 1);
4832 Helpers::conv_fld_from_array(array, name, "opcodes", opcodes, 2);
4833 Helpers::conv_fld_from_array(array, name, "private_parameters", private_parameters, 3);
4834 Helpers::conv_fld_from_array(array, name, "public_parameters", public_parameters, 4);
4835 Helpers::conv_fld_from_array(array, name, "return_values", return_values, 5);
4836 Helpers::conv_fld_from_array(array, name, "assert_messages", assert_messages, 6);
4837 } else {
4838 throw_or_abort("expected MAP or ARRAY for " + name);
4839 }
4840 }
4841};
4842
4844 std::string function_name;
4845 std::vector<Acir::BrilligOpcode> bytecode;
4846
4847 friend bool operator==(const BrilligBytecode&, const BrilligBytecode&);
4848
4849 void msgpack_pack(auto& packer) const
4850 {
4851 packer.pack_array(2);
4852 packer.pack(function_name);
4853 packer.pack(bytecode);
4854 }
4855
4856 void msgpack_unpack(msgpack::object const& o)
4857 {
4858 std::string name = "BrilligBytecode";
4859 if (o.type == msgpack::type::MAP) {
4860 auto kvmap = Helpers::make_kvmap(o, name);
4861 Helpers::conv_fld_from_kvmap(kvmap, name, "function_name", function_name, false);
4862 Helpers::conv_fld_from_kvmap(kvmap, name, "bytecode", bytecode, false);
4863 } else if (o.type == msgpack::type::ARRAY) {
4864 auto array = o.via.array;
4865 Helpers::conv_fld_from_array(array, name, "function_name", function_name, 0);
4866 Helpers::conv_fld_from_array(array, name, "bytecode", bytecode, 1);
4867 } else {
4868 throw_or_abort("expected MAP or ARRAY for " + name);
4869 }
4870 }
4871};
4872
4873struct Program {
4874 std::vector<Acir::Circuit> functions;
4875 std::vector<Acir::BrilligBytecode> unconstrained_functions;
4876
4877 friend bool operator==(const Program&, const Program&);
4878
4879 void msgpack_pack(auto& packer) const
4880 {
4881 packer.pack_array(2);
4882 packer.pack(functions);
4883 packer.pack(unconstrained_functions);
4884 }
4885
4886 void msgpack_unpack(msgpack::object const& o)
4887 {
4888 std::string name = "Program";
4889 if (o.type == msgpack::type::MAP) {
4890 auto kvmap = Helpers::make_kvmap(o, name);
4891 Helpers::conv_fld_from_kvmap(kvmap, name, "functions", functions, false);
4892 Helpers::conv_fld_from_kvmap(kvmap, name, "unconstrained_functions", unconstrained_functions, false);
4893 } else if (o.type == msgpack::type::ARRAY) {
4894 auto array = o.via.array;
4895 Helpers::conv_fld_from_array(array, name, "functions", functions, 0);
4896 Helpers::conv_fld_from_array(array, name, "unconstrained_functions", unconstrained_functions, 1);
4897 } else {
4898 throw_or_abort("expected MAP or ARRAY for " + name);
4899 }
4900 }
4901};
4902
4904 std::vector<Acir::Circuit> functions;
4906
4907 friend bool operator==(const ProgramWithoutBrillig&, const ProgramWithoutBrillig&);
4908
4909 void msgpack_pack(auto& packer) const
4910 {
4911 packer.pack_array(2);
4912 packer.pack(functions);
4913 packer.pack(unconstrained_functions);
4914 }
4915
4916 void msgpack_unpack(msgpack::object const& o)
4917 {
4918 std::string name = "ProgramWithoutBrillig";
4919 if (o.type == msgpack::type::MAP) {
4920 auto kvmap = Helpers::make_kvmap(o, name);
4921 Helpers::conv_fld_from_kvmap(kvmap, name, "functions", functions, false);
4922 } else if (o.type == msgpack::type::ARRAY) {
4923 auto array = o.via.array;
4924 Helpers::conv_fld_from_array(array, name, "functions", functions, 0);
4925 } else {
4926 throw_or_abort("expected MAP or ARRAY for " + name);
4927 }
4928 }
4929};
4930
4931} // end of namespace Acir
4932
4933namespace Acir {
4934
4935inline bool operator==(const AssertionPayload& lhs, const AssertionPayload& rhs)
4936{
4937 if (!(lhs.error_selector == rhs.error_selector)) {
4938 return false;
4939 }
4940 if (!(lhs.payload == rhs.payload)) {
4941 return false;
4942 }
4943 return true;
4944}
4945
4946} // end of namespace Acir
4947
4948template <>
4949template <typename Serializer>
4951{
4952 serializer.increase_container_depth();
4953 serde::Serializable<decltype(obj.error_selector)>::serialize(obj.error_selector, serializer);
4954 serde::Serializable<decltype(obj.payload)>::serialize(obj.payload, serializer);
4955 serializer.decrease_container_depth();
4956}
4957
4958template <>
4959template <typename Deserializer>
4961{
4962 deserializer.increase_container_depth();
4964 obj.error_selector = serde::Deserializable<decltype(obj.error_selector)>::deserialize(deserializer);
4965 obj.payload = serde::Deserializable<decltype(obj.payload)>::deserialize(deserializer);
4966 deserializer.decrease_container_depth();
4967 return obj;
4968}
4969
4970namespace Acir {
4971
4972inline bool operator==(const BinaryFieldOp& lhs, const BinaryFieldOp& rhs)
4973{
4974 if (!(lhs.value == rhs.value)) {
4975 return false;
4976 }
4977 return true;
4978}
4979
4980} // end of namespace Acir
4981
4982template <>
4983template <typename Serializer>
4985{
4986 serializer.increase_container_depth();
4987 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
4988 serializer.decrease_container_depth();
4989}
4990
4991template <>
4992template <typename Deserializer>
4994{
4995 deserializer.increase_container_depth();
4997 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
4998 deserializer.decrease_container_depth();
4999 return obj;
5000}
5001
5002namespace Acir {
5003
5004inline bool operator==(const BinaryFieldOp::Add& lhs, const BinaryFieldOp::Add& rhs)
5005{
5006 return true;
5007}
5008
5009} // end of namespace Acir
5010
5011template <>
5012template <typename Serializer>
5016
5017template <>
5018template <typename Deserializer>
5024
5025namespace Acir {
5026
5027inline bool operator==(const BinaryFieldOp::Sub& lhs, const BinaryFieldOp::Sub& rhs)
5028{
5029 return true;
5030}
5031
5032} // end of namespace Acir
5033
5034template <>
5035template <typename Serializer>
5039
5040template <>
5041template <typename Deserializer>
5047
5048namespace Acir {
5049
5050inline bool operator==(const BinaryFieldOp::Mul& lhs, const BinaryFieldOp::Mul& rhs)
5051{
5052 return true;
5053}
5054
5055} // end of namespace Acir
5056
5057template <>
5058template <typename Serializer>
5062
5063template <>
5064template <typename Deserializer>
5070
5071namespace Acir {
5072
5073inline bool operator==(const BinaryFieldOp::Div& lhs, const BinaryFieldOp::Div& rhs)
5074{
5075 return true;
5076}
5077
5078} // end of namespace Acir
5079
5080template <>
5081template <typename Serializer>
5085
5086template <>
5087template <typename Deserializer>
5093
5094namespace Acir {
5095
5097{
5098 return true;
5099}
5100
5101} // end of namespace Acir
5102
5103template <>
5104template <typename Serializer>
5108
5109template <>
5110template <typename Deserializer>
5117
5118namespace Acir {
5119
5120inline bool operator==(const BinaryFieldOp::Equals& lhs, const BinaryFieldOp::Equals& rhs)
5121{
5122 return true;
5123}
5124
5125} // end of namespace Acir
5126
5127template <>
5128template <typename Serializer>
5132
5133template <>
5134template <typename Deserializer>
5140
5141namespace Acir {
5142
5144{
5145 return true;
5146}
5147
5148} // end of namespace Acir
5149
5150template <>
5151template <typename Serializer>
5155
5156template <>
5157template <typename Deserializer>
5164
5165namespace Acir {
5166
5168{
5169 return true;
5170}
5171
5172} // end of namespace Acir
5173
5174template <>
5175template <typename Serializer>
5179
5180template <>
5181template <typename Deserializer>
5188
5189namespace Acir {
5190
5191inline bool operator==(const BinaryIntOp& lhs, const BinaryIntOp& rhs)
5192{
5193 if (!(lhs.value == rhs.value)) {
5194 return false;
5195 }
5196 return true;
5197}
5198
5199} // end of namespace Acir
5200
5201template <>
5202template <typename Serializer>
5204{
5205 serializer.increase_container_depth();
5206 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
5207 serializer.decrease_container_depth();
5208}
5209
5210template <>
5211template <typename Deserializer>
5213{
5214 deserializer.increase_container_depth();
5216 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
5217 deserializer.decrease_container_depth();
5218 return obj;
5219}
5220
5221namespace Acir {
5222
5223inline bool operator==(const BinaryIntOp::Add& lhs, const BinaryIntOp::Add& rhs)
5224{
5225 return true;
5226}
5227
5228} // end of namespace Acir
5229
5230template <>
5231template <typename Serializer>
5234
5235template <>
5236template <typename Deserializer>
5242
5243namespace Acir {
5244
5245inline bool operator==(const BinaryIntOp::Sub& lhs, const BinaryIntOp::Sub& rhs)
5246{
5247 return true;
5248}
5249
5250} // end of namespace Acir
5251
5252template <>
5253template <typename Serializer>
5256
5257template <>
5258template <typename Deserializer>
5264
5265namespace Acir {
5266
5267inline bool operator==(const BinaryIntOp::Mul& lhs, const BinaryIntOp::Mul& rhs)
5268{
5269 return true;
5270}
5271
5272} // end of namespace Acir
5273
5274template <>
5275template <typename Serializer>
5278
5279template <>
5280template <typename Deserializer>
5286
5287namespace Acir {
5288
5289inline bool operator==(const BinaryIntOp::Div& lhs, const BinaryIntOp::Div& rhs)
5290{
5291 return true;
5292}
5293
5294} // end of namespace Acir
5295
5296template <>
5297template <typename Serializer>
5300
5301template <>
5302template <typename Deserializer>
5308
5309namespace Acir {
5310
5311inline bool operator==(const BinaryIntOp::Equals& lhs, const BinaryIntOp::Equals& rhs)
5312{
5313 return true;
5314}
5315
5316} // end of namespace Acir
5317
5318template <>
5319template <typename Serializer>
5323
5324template <>
5325template <typename Deserializer>
5331
5332namespace Acir {
5333
5334inline bool operator==(const BinaryIntOp::LessThan& lhs, const BinaryIntOp::LessThan& rhs)
5335{
5336 return true;
5337}
5338
5339} // end of namespace Acir
5340
5341template <>
5342template <typename Serializer>
5346
5347template <>
5348template <typename Deserializer>
5354
5355namespace Acir {
5356
5358{
5359 return true;
5360}
5361
5362} // end of namespace Acir
5363
5364template <>
5365template <typename Serializer>
5369
5370template <>
5371template <typename Deserializer>
5378
5379namespace Acir {
5380
5381inline bool operator==(const BinaryIntOp::And& lhs, const BinaryIntOp::And& rhs)
5382{
5383 return true;
5384}
5385
5386} // end of namespace Acir
5387
5388template <>
5389template <typename Serializer>
5392
5393template <>
5394template <typename Deserializer>
5400
5401namespace Acir {
5402
5403inline bool operator==(const BinaryIntOp::Or& lhs, const BinaryIntOp::Or& rhs)
5404{
5405 return true;
5406}
5407
5408} // end of namespace Acir
5409
5410template <>
5411template <typename Serializer>
5414
5415template <>
5416template <typename Deserializer>
5418{
5420 return obj;
5421}
5422
5423namespace Acir {
5424
5425inline bool operator==(const BinaryIntOp::Xor& lhs, const BinaryIntOp::Xor& rhs)
5426{
5427 return true;
5428}
5429
5430} // end of namespace Acir
5431
5432template <>
5433template <typename Serializer>
5436
5437template <>
5438template <typename Deserializer>
5444
5445namespace Acir {
5446
5447inline bool operator==(const BinaryIntOp::Shl& lhs, const BinaryIntOp::Shl& rhs)
5448{
5449 return true;
5450}
5451
5452} // end of namespace Acir
5453
5454template <>
5455template <typename Serializer>
5458
5459template <>
5460template <typename Deserializer>
5466
5467namespace Acir {
5468
5469inline bool operator==(const BinaryIntOp::Shr& lhs, const BinaryIntOp::Shr& rhs)
5470{
5471 return true;
5472}
5473
5474} // end of namespace Acir
5475
5476template <>
5477template <typename Serializer>
5480
5481template <>
5482template <typename Deserializer>
5488
5489namespace Acir {
5490
5491inline bool operator==(const BitSize& lhs, const BitSize& rhs)
5492{
5493 if (!(lhs.value == rhs.value)) {
5494 return false;
5495 }
5496 return true;
5497}
5498
5499} // end of namespace Acir
5500
5501template <>
5502template <typename Serializer>
5503void serde::Serializable<Acir::BitSize>::serialize(const Acir::BitSize& obj, Serializer& serializer)
5504{
5505 serializer.increase_container_depth();
5506 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
5507 serializer.decrease_container_depth();
5508}
5509
5510template <>
5511template <typename Deserializer>
5513{
5514 deserializer.increase_container_depth();
5515 Acir::BitSize obj;
5516 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
5517 deserializer.decrease_container_depth();
5518 return obj;
5519}
5520
5521namespace Acir {
5522
5523inline bool operator==(const BitSize::Field& lhs, const BitSize::Field& rhs)
5524{
5525 return true;
5526}
5527
5528} // end of namespace Acir
5529
5530template <>
5531template <typename Serializer>
5534
5535template <>
5536template <typename Deserializer>
5538{
5540 return obj;
5541}
5542
5543namespace Acir {
5544
5545inline bool operator==(const BitSize::Integer& lhs, const BitSize::Integer& rhs)
5546{
5547 if (!(lhs.value == rhs.value)) {
5548 return false;
5549 }
5550 return true;
5551}
5552
5553} // end of namespace Acir
5554
5555template <>
5556template <typename Serializer>
5558{
5559 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
5560}
5561
5562template <>
5563template <typename Deserializer>
5565{
5567 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
5568 return obj;
5569}
5570
5571namespace Acir {
5572
5573inline bool operator==(const BlackBoxFuncCall& lhs, const BlackBoxFuncCall& rhs)
5574{
5575 if (!(lhs.value == rhs.value)) {
5576 return false;
5577 }
5578 return true;
5579}
5580
5581} // end of namespace Acir
5582
5583template <>
5584template <typename Serializer>
5586{
5587 serializer.increase_container_depth();
5588 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
5589 serializer.decrease_container_depth();
5590}
5591
5592template <>
5593template <typename Deserializer>
5595{
5596 deserializer.increase_container_depth();
5598 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
5599 deserializer.decrease_container_depth();
5600 return obj;
5601}
5602
5603namespace Acir {
5604
5606{
5607 if (!(lhs.inputs == rhs.inputs)) {
5608 return false;
5609 }
5610 if (!(lhs.iv == rhs.iv)) {
5611 return false;
5612 }
5613 if (!(lhs.key == rhs.key)) {
5614 return false;
5615 }
5616 if (!(lhs.outputs == rhs.outputs)) {
5617 return false;
5618 }
5619 return true;
5620}
5621
5622} // end of namespace Acir
5623
5624template <>
5625template <typename Serializer>
5627 const Acir::BlackBoxFuncCall::AES128Encrypt& obj, Serializer& serializer)
5628{
5629 serde::Serializable<decltype(obj.inputs)>::serialize(obj.inputs, serializer);
5630 serde::Serializable<decltype(obj.iv)>::serialize(obj.iv, serializer);
5631 serde::Serializable<decltype(obj.key)>::serialize(obj.key, serializer);
5632 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
5633}
5634
5635template <>
5636template <typename Deserializer>
5638 Deserializer& deserializer)
5639{
5641 obj.inputs = serde::Deserializable<decltype(obj.inputs)>::deserialize(deserializer);
5642 obj.iv = serde::Deserializable<decltype(obj.iv)>::deserialize(deserializer);
5643 obj.key = serde::Deserializable<decltype(obj.key)>::deserialize(deserializer);
5644 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
5645 return obj;
5646}
5647
5648namespace Acir {
5649
5650inline bool operator==(const BlackBoxFuncCall::AND& lhs, const BlackBoxFuncCall::AND& rhs)
5651{
5652 if (!(lhs.lhs == rhs.lhs)) {
5653 return false;
5654 }
5655 if (!(lhs.rhs == rhs.rhs)) {
5656 return false;
5657 }
5658 if (!(lhs.num_bits == rhs.num_bits)) {
5659 return false;
5660 }
5661 if (!(lhs.output == rhs.output)) {
5662 return false;
5663 }
5664 return true;
5665}
5666
5667} // end of namespace Acir
5668
5669template <>
5670template <typename Serializer>
5672 Serializer& serializer)
5673{
5674 serde::Serializable<decltype(obj.lhs)>::serialize(obj.lhs, serializer);
5675 serde::Serializable<decltype(obj.rhs)>::serialize(obj.rhs, serializer);
5676 serde::Serializable<decltype(obj.num_bits)>::serialize(obj.num_bits, serializer);
5677 serde::Serializable<decltype(obj.output)>::serialize(obj.output, serializer);
5678}
5679
5680template <>
5681template <typename Deserializer>
5683{
5685 obj.lhs = serde::Deserializable<decltype(obj.lhs)>::deserialize(deserializer);
5686 obj.rhs = serde::Deserializable<decltype(obj.rhs)>::deserialize(deserializer);
5687 obj.num_bits = serde::Deserializable<decltype(obj.num_bits)>::deserialize(deserializer);
5688 obj.output = serde::Deserializable<decltype(obj.output)>::deserialize(deserializer);
5689 return obj;
5690}
5691
5692namespace Acir {
5693
5694inline bool operator==(const BlackBoxFuncCall::XOR& lhs, const BlackBoxFuncCall::XOR& rhs)
5695{
5696 if (!(lhs.lhs == rhs.lhs)) {
5697 return false;
5698 }
5699 if (!(lhs.rhs == rhs.rhs)) {
5700 return false;
5701 }
5702 if (!(lhs.num_bits == rhs.num_bits)) {
5703 return false;
5704 }
5705 if (!(lhs.output == rhs.output)) {
5706 return false;
5707 }
5708 return true;
5709}
5710
5711} // end of namespace Acir
5712
5713template <>
5714template <typename Serializer>
5716 Serializer& serializer)
5717{
5718 serde::Serializable<decltype(obj.lhs)>::serialize(obj.lhs, serializer);
5719 serde::Serializable<decltype(obj.rhs)>::serialize(obj.rhs, serializer);
5720 serde::Serializable<decltype(obj.num_bits)>::serialize(obj.num_bits, serializer);
5721 serde::Serializable<decltype(obj.output)>::serialize(obj.output, serializer);
5722}
5723
5724template <>
5725template <typename Deserializer>
5727{
5729 obj.lhs = serde::Deserializable<decltype(obj.lhs)>::deserialize(deserializer);
5730 obj.rhs = serde::Deserializable<decltype(obj.rhs)>::deserialize(deserializer);
5731 obj.num_bits = serde::Deserializable<decltype(obj.num_bits)>::deserialize(deserializer);
5732 obj.output = serde::Deserializable<decltype(obj.output)>::deserialize(deserializer);
5733 return obj;
5734}
5735
5736namespace Acir {
5737
5739{
5740 if (!(lhs.input == rhs.input)) {
5741 return false;
5742 }
5743 if (!(lhs.num_bits == rhs.num_bits)) {
5744 return false;
5745 }
5746 return true;
5747}
5748
5749} // end of namespace Acir
5750
5751template <>
5752template <typename Serializer>
5754 Serializer& serializer)
5755{
5756 serde::Serializable<decltype(obj.input)>::serialize(obj.input, serializer);
5757 serde::Serializable<decltype(obj.num_bits)>::serialize(obj.num_bits, serializer);
5758}
5759
5760template <>
5761template <typename Deserializer>
5763 Deserializer& deserializer)
5764{
5766 obj.input = serde::Deserializable<decltype(obj.input)>::deserialize(deserializer);
5767 obj.num_bits = serde::Deserializable<decltype(obj.num_bits)>::deserialize(deserializer);
5768 return obj;
5769}
5770
5771namespace Acir {
5772
5774{
5775 if (!(lhs.inputs == rhs.inputs)) {
5776 return false;
5777 }
5778 if (!(lhs.outputs == rhs.outputs)) {
5779 return false;
5780 }
5781 return true;
5782}
5783
5784} // end of namespace Acir
5785
5786template <>
5787template <typename Serializer>
5789 Serializer& serializer)
5790{
5791 serde::Serializable<decltype(obj.inputs)>::serialize(obj.inputs, serializer);
5792 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
5793}
5794
5795template <>
5796template <typename Deserializer>
5798 Deserializer& deserializer)
5799{
5801 obj.inputs = serde::Deserializable<decltype(obj.inputs)>::deserialize(deserializer);
5802 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
5803 return obj;
5804}
5805
5806namespace Acir {
5807
5809{
5810 if (!(lhs.inputs == rhs.inputs)) {
5811 return false;
5812 }
5813 if (!(lhs.outputs == rhs.outputs)) {
5814 return false;
5815 }
5816 return true;
5817}
5818
5819} // end of namespace Acir
5820
5821template <>
5822template <typename Serializer>
5824 Serializer& serializer)
5825{
5826 serde::Serializable<decltype(obj.inputs)>::serialize(obj.inputs, serializer);
5827 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
5828}
5829
5830template <>
5831template <typename Deserializer>
5833 Deserializer& deserializer)
5834{
5836 obj.inputs = serde::Deserializable<decltype(obj.inputs)>::deserialize(deserializer);
5837 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
5838 return obj;
5839}
5840
5841namespace Acir {
5842
5844{
5845 if (!(lhs.public_key_x == rhs.public_key_x)) {
5846 return false;
5847 }
5848 if (!(lhs.public_key_y == rhs.public_key_y)) {
5849 return false;
5850 }
5851 if (!(lhs.signature == rhs.signature)) {
5852 return false;
5853 }
5854 if (!(lhs.hashed_message == rhs.hashed_message)) {
5855 return false;
5856 }
5857 if (!(lhs.predicate == rhs.predicate)) {
5858 return false;
5859 }
5860 if (!(lhs.output == rhs.output)) {
5861 return false;
5862 }
5863 return true;
5864}
5865
5866} // end of namespace Acir
5867
5868template <>
5869template <typename Serializer>
5871 const Acir::BlackBoxFuncCall::EcdsaSecp256k1& obj, Serializer& serializer)
5872{
5873 serde::Serializable<decltype(obj.public_key_x)>::serialize(obj.public_key_x, serializer);
5874 serde::Serializable<decltype(obj.public_key_y)>::serialize(obj.public_key_y, serializer);
5875 serde::Serializable<decltype(obj.signature)>::serialize(obj.signature, serializer);
5876 serde::Serializable<decltype(obj.hashed_message)>::serialize(obj.hashed_message, serializer);
5877 serde::Serializable<decltype(obj.predicate)>::serialize(obj.predicate, serializer);
5878 serde::Serializable<decltype(obj.output)>::serialize(obj.output, serializer);
5879}
5880
5881template <>
5882template <typename Deserializer>
5884 Deserializer& deserializer)
5885{
5887 obj.public_key_x = serde::Deserializable<decltype(obj.public_key_x)>::deserialize(deserializer);
5888 obj.public_key_y = serde::Deserializable<decltype(obj.public_key_y)>::deserialize(deserializer);
5889 obj.signature = serde::Deserializable<decltype(obj.signature)>::deserialize(deserializer);
5890 obj.hashed_message = serde::Deserializable<decltype(obj.hashed_message)>::deserialize(deserializer);
5891 obj.predicate = serde::Deserializable<decltype(obj.predicate)>::deserialize(deserializer);
5892 obj.output = serde::Deserializable<decltype(obj.output)>::deserialize(deserializer);
5893 return obj;
5894}
5895
5896namespace Acir {
5897
5899{
5900 if (!(lhs.public_key_x == rhs.public_key_x)) {
5901 return false;
5902 }
5903 if (!(lhs.public_key_y == rhs.public_key_y)) {
5904 return false;
5905 }
5906 if (!(lhs.signature == rhs.signature)) {
5907 return false;
5908 }
5909 if (!(lhs.hashed_message == rhs.hashed_message)) {
5910 return false;
5911 }
5912 if (!(lhs.predicate == rhs.predicate)) {
5913 return false;
5914 }
5915 if (!(lhs.output == rhs.output)) {
5916 return false;
5917 }
5918 return true;
5919}
5920
5921} // end of namespace Acir
5922
5923template <>
5924template <typename Serializer>
5926 const Acir::BlackBoxFuncCall::EcdsaSecp256r1& obj, Serializer& serializer)
5927{
5928 serde::Serializable<decltype(obj.public_key_x)>::serialize(obj.public_key_x, serializer);
5929 serde::Serializable<decltype(obj.public_key_y)>::serialize(obj.public_key_y, serializer);
5930 serde::Serializable<decltype(obj.signature)>::serialize(obj.signature, serializer);
5931 serde::Serializable<decltype(obj.hashed_message)>::serialize(obj.hashed_message, serializer);
5932 serde::Serializable<decltype(obj.predicate)>::serialize(obj.predicate, serializer);
5933 serde::Serializable<decltype(obj.output)>::serialize(obj.output, serializer);
5934}
5935
5936template <>
5937template <typename Deserializer>
5939 Deserializer& deserializer)
5940{
5942 obj.public_key_x = serde::Deserializable<decltype(obj.public_key_x)>::deserialize(deserializer);
5943 obj.public_key_y = serde::Deserializable<decltype(obj.public_key_y)>::deserialize(deserializer);
5944 obj.signature = serde::Deserializable<decltype(obj.signature)>::deserialize(deserializer);
5945 obj.hashed_message = serde::Deserializable<decltype(obj.hashed_message)>::deserialize(deserializer);
5946 obj.predicate = serde::Deserializable<decltype(obj.predicate)>::deserialize(deserializer);
5947 obj.output = serde::Deserializable<decltype(obj.output)>::deserialize(deserializer);
5948 return obj;
5949}
5950
5951namespace Acir {
5952
5954{
5955 if (!(lhs.points == rhs.points)) {
5956 return false;
5957 }
5958 if (!(lhs.scalars == rhs.scalars)) {
5959 return false;
5960 }
5961 if (!(lhs.predicate == rhs.predicate)) {
5962 return false;
5963 }
5964 if (!(lhs.outputs == rhs.outputs)) {
5965 return false;
5966 }
5967 return true;
5968}
5969
5970} // end of namespace Acir
5971
5972template <>
5973template <typename Serializer>
5975 const Acir::BlackBoxFuncCall::MultiScalarMul& obj, Serializer& serializer)
5976{
5977 serde::Serializable<decltype(obj.points)>::serialize(obj.points, serializer);
5978 serde::Serializable<decltype(obj.scalars)>::serialize(obj.scalars, serializer);
5979 serde::Serializable<decltype(obj.predicate)>::serialize(obj.predicate, serializer);
5980 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
5981}
5982
5983template <>
5984template <typename Deserializer>
5986 Deserializer& deserializer)
5987{
5989 obj.points = serde::Deserializable<decltype(obj.points)>::deserialize(deserializer);
5990 obj.scalars = serde::Deserializable<decltype(obj.scalars)>::deserialize(deserializer);
5991 obj.predicate = serde::Deserializable<decltype(obj.predicate)>::deserialize(deserializer);
5992 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
5993 return obj;
5994}
5995
5996namespace Acir {
5997
5999{
6000 if (!(lhs.input1 == rhs.input1)) {
6001 return false;
6002 }
6003 if (!(lhs.input2 == rhs.input2)) {
6004 return false;
6005 }
6006 if (!(lhs.predicate == rhs.predicate)) {
6007 return false;
6008 }
6009 if (!(lhs.outputs == rhs.outputs)) {
6010 return false;
6011 }
6012 return true;
6013}
6014
6015} // end of namespace Acir
6016
6017template <>
6018template <typename Serializer>
6020 const Acir::BlackBoxFuncCall::EmbeddedCurveAdd& obj, Serializer& serializer)
6021{
6022 serde::Serializable<decltype(obj.input1)>::serialize(obj.input1, serializer);
6023 serde::Serializable<decltype(obj.input2)>::serialize(obj.input2, serializer);
6024 serde::Serializable<decltype(obj.predicate)>::serialize(obj.predicate, serializer);
6025 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
6026}
6027
6028template <>
6029template <typename Deserializer>
6031 Deserializer& deserializer)
6032{
6034 obj.input1 = serde::Deserializable<decltype(obj.input1)>::deserialize(deserializer);
6035 obj.input2 = serde::Deserializable<decltype(obj.input2)>::deserialize(deserializer);
6036 obj.predicate = serde::Deserializable<decltype(obj.predicate)>::deserialize(deserializer);
6037 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
6038 return obj;
6039}
6040
6041namespace Acir {
6042
6044{
6045 if (!(lhs.inputs == rhs.inputs)) {
6046 return false;
6047 }
6048 if (!(lhs.outputs == rhs.outputs)) {
6049 return false;
6050 }
6051 return true;
6052}
6053
6054} // end of namespace Acir
6055
6056template <>
6057template <typename Serializer>
6059 Serializer& serializer)
6060{
6061 serde::Serializable<decltype(obj.inputs)>::serialize(obj.inputs, serializer);
6062 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
6063}
6064
6065template <>
6066template <typename Deserializer>
6068 Deserializer& deserializer)
6069{
6071 obj.inputs = serde::Deserializable<decltype(obj.inputs)>::deserialize(deserializer);
6072 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
6073 return obj;
6074}
6075
6076namespace Acir {
6077
6080{
6081 if (!(lhs.verification_key == rhs.verification_key)) {
6082 return false;
6083 }
6084 if (!(lhs.proof == rhs.proof)) {
6085 return false;
6086 }
6087 if (!(lhs.public_inputs == rhs.public_inputs)) {
6088 return false;
6089 }
6090 if (!(lhs.key_hash == rhs.key_hash)) {
6091 return false;
6092 }
6093 if (!(lhs.proof_type == rhs.proof_type)) {
6094 return false;
6095 }
6096 if (!(lhs.predicate == rhs.predicate)) {
6097 return false;
6098 }
6099 return true;
6100}
6101
6102} // end of namespace Acir
6103
6104template <>
6105template <typename Serializer>
6107 const Acir::BlackBoxFuncCall::RecursiveAggregation& obj, Serializer& serializer)
6108{
6109 serde::Serializable<decltype(obj.verification_key)>::serialize(obj.verification_key, serializer);
6110 serde::Serializable<decltype(obj.proof)>::serialize(obj.proof, serializer);
6111 serde::Serializable<decltype(obj.public_inputs)>::serialize(obj.public_inputs, serializer);
6112 serde::Serializable<decltype(obj.key_hash)>::serialize(obj.key_hash, serializer);
6113 serde::Serializable<decltype(obj.proof_type)>::serialize(obj.proof_type, serializer);
6114 serde::Serializable<decltype(obj.predicate)>::serialize(obj.predicate, serializer);
6115}
6116
6117template <>
6118template <typename Deserializer>
6120 Acir::BlackBoxFuncCall::RecursiveAggregation>::deserialize(Deserializer& deserializer)
6121{
6123 obj.verification_key = serde::Deserializable<decltype(obj.verification_key)>::deserialize(deserializer);
6124 obj.proof = serde::Deserializable<decltype(obj.proof)>::deserialize(deserializer);
6125 obj.public_inputs = serde::Deserializable<decltype(obj.public_inputs)>::deserialize(deserializer);
6126 obj.key_hash = serde::Deserializable<decltype(obj.key_hash)>::deserialize(deserializer);
6127 obj.proof_type = serde::Deserializable<decltype(obj.proof_type)>::deserialize(deserializer);
6128 obj.predicate = serde::Deserializable<decltype(obj.predicate)>::deserialize(deserializer);
6129 return obj;
6130}
6131
6132namespace Acir {
6133
6136{
6137 if (!(lhs.inputs == rhs.inputs)) {
6138 return false;
6139 }
6140 if (!(lhs.outputs == rhs.outputs)) {
6141 return false;
6142 }
6143 return true;
6144}
6145
6146} // end of namespace Acir
6147
6148template <>
6149template <typename Serializer>
6151 const Acir::BlackBoxFuncCall::Poseidon2Permutation& obj, Serializer& serializer)
6152{
6153 serde::Serializable<decltype(obj.inputs)>::serialize(obj.inputs, serializer);
6154 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
6155}
6156
6157template <>
6158template <typename Deserializer>
6160 Acir::BlackBoxFuncCall::Poseidon2Permutation>::deserialize(Deserializer& deserializer)
6161{
6163 obj.inputs = serde::Deserializable<decltype(obj.inputs)>::deserialize(deserializer);
6164 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
6165 return obj;
6166}
6167
6168namespace Acir {
6169
6171{
6172 if (!(lhs.inputs == rhs.inputs)) {
6173 return false;
6174 }
6175 if (!(lhs.hash_values == rhs.hash_values)) {
6176 return false;
6177 }
6178 if (!(lhs.outputs == rhs.outputs)) {
6179 return false;
6180 }
6181 return true;
6182}
6183
6184} // end of namespace Acir
6185
6186template <>
6187template <typename Serializer>
6189 const Acir::BlackBoxFuncCall::Sha256Compression& obj, Serializer& serializer)
6190{
6191 serde::Serializable<decltype(obj.inputs)>::serialize(obj.inputs, serializer);
6192 serde::Serializable<decltype(obj.hash_values)>::serialize(obj.hash_values, serializer);
6193 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
6194}
6195
6196template <>
6197template <typename Deserializer>
6199 Deserializer& deserializer)
6200{
6202 obj.inputs = serde::Deserializable<decltype(obj.inputs)>::deserialize(deserializer);
6203 obj.hash_values = serde::Deserializable<decltype(obj.hash_values)>::deserialize(deserializer);
6204 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
6205 return obj;
6206}
6207
6208namespace Acir {
6209
6210inline bool operator==(const BlackBoxOp& lhs, const BlackBoxOp& rhs)
6211{
6212 if (!(lhs.value == rhs.value)) {
6213 return false;
6214 }
6215 return true;
6216}
6217
6218} // end of namespace Acir
6219
6220template <>
6221template <typename Serializer>
6223{
6224 serializer.increase_container_depth();
6225 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
6226 serializer.decrease_container_depth();
6227}
6228
6229template <>
6230template <typename Deserializer>
6232{
6233 deserializer.increase_container_depth();
6234 Acir::BlackBoxOp obj;
6235 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
6236 deserializer.decrease_container_depth();
6237 return obj;
6238}
6239
6240namespace Acir {
6241
6243{
6244 if (!(lhs.inputs == rhs.inputs)) {
6245 return false;
6246 }
6247 if (!(lhs.iv == rhs.iv)) {
6248 return false;
6249 }
6250 if (!(lhs.key == rhs.key)) {
6251 return false;
6252 }
6253 if (!(lhs.outputs == rhs.outputs)) {
6254 return false;
6255 }
6256 return true;
6257}
6258
6259} // end of namespace Acir
6260
6261template <>
6262template <typename Serializer>
6264 Serializer& serializer)
6265{
6266 serde::Serializable<decltype(obj.inputs)>::serialize(obj.inputs, serializer);
6267 serde::Serializable<decltype(obj.iv)>::serialize(obj.iv, serializer);
6268 serde::Serializable<decltype(obj.key)>::serialize(obj.key, serializer);
6269 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
6270}
6271
6272template <>
6273template <typename Deserializer>
6275 Deserializer& deserializer)
6276{
6278 obj.inputs = serde::Deserializable<decltype(obj.inputs)>::deserialize(deserializer);
6279 obj.iv = serde::Deserializable<decltype(obj.iv)>::deserialize(deserializer);
6280 obj.key = serde::Deserializable<decltype(obj.key)>::deserialize(deserializer);
6281 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
6282 return obj;
6283}
6284
6285namespace Acir {
6286
6287inline bool operator==(const BlackBoxOp::Blake2s& lhs, const BlackBoxOp::Blake2s& rhs)
6288{
6289 if (!(lhs.message == rhs.message)) {
6290 return false;
6291 }
6292 if (!(lhs.output == rhs.output)) {
6293 return false;
6294 }
6295 return true;
6296}
6297
6298} // end of namespace Acir
6299
6300template <>
6301template <typename Serializer>
6303 Serializer& serializer)
6304{
6305 serde::Serializable<decltype(obj.message)>::serialize(obj.message, serializer);
6306 serde::Serializable<decltype(obj.output)>::serialize(obj.output, serializer);
6307}
6308
6309template <>
6310template <typename Deserializer>
6312{
6314 obj.message = serde::Deserializable<decltype(obj.message)>::deserialize(deserializer);
6315 obj.output = serde::Deserializable<decltype(obj.output)>::deserialize(deserializer);
6316 return obj;
6317}
6318
6319namespace Acir {
6320
6321inline bool operator==(const BlackBoxOp::Blake3& lhs, const BlackBoxOp::Blake3& rhs)
6322{
6323 if (!(lhs.message == rhs.message)) {
6324 return false;
6325 }
6326 if (!(lhs.output == rhs.output)) {
6327 return false;
6328 }
6329 return true;
6330}
6331
6332} // end of namespace Acir
6333
6334template <>
6335template <typename Serializer>
6337 Serializer& serializer)
6338{
6339 serde::Serializable<decltype(obj.message)>::serialize(obj.message, serializer);
6340 serde::Serializable<decltype(obj.output)>::serialize(obj.output, serializer);
6341}
6342
6343template <>
6344template <typename Deserializer>
6346{
6348 obj.message = serde::Deserializable<decltype(obj.message)>::deserialize(deserializer);
6349 obj.output = serde::Deserializable<decltype(obj.output)>::deserialize(deserializer);
6350 return obj;
6351}
6352
6353namespace Acir {
6354
6356{
6357 if (!(lhs.input == rhs.input)) {
6358 return false;
6359 }
6360 if (!(lhs.output == rhs.output)) {
6361 return false;
6362 }
6363 return true;
6364}
6365
6366} // end of namespace Acir
6367
6368template <>
6369template <typename Serializer>
6371 Serializer& serializer)
6372{
6373 serde::Serializable<decltype(obj.input)>::serialize(obj.input, serializer);
6374 serde::Serializable<decltype(obj.output)>::serialize(obj.output, serializer);
6375}
6376
6377template <>
6378template <typename Deserializer>
6380 Deserializer& deserializer)
6381{
6383 obj.input = serde::Deserializable<decltype(obj.input)>::deserialize(deserializer);
6384 obj.output = serde::Deserializable<decltype(obj.output)>::deserialize(deserializer);
6385 return obj;
6386}
6387
6388namespace Acir {
6389
6391{
6392 if (!(lhs.hashed_msg == rhs.hashed_msg)) {
6393 return false;
6394 }
6395 if (!(lhs.public_key_x == rhs.public_key_x)) {
6396 return false;
6397 }
6398 if (!(lhs.public_key_y == rhs.public_key_y)) {
6399 return false;
6400 }
6401 if (!(lhs.signature == rhs.signature)) {
6402 return false;
6403 }
6404 if (!(lhs.result == rhs.result)) {
6405 return false;
6406 }
6407 return true;
6408}
6409
6410} // end of namespace Acir
6411
6412template <>
6413template <typename Serializer>
6415 Serializer& serializer)
6416{
6417 serde::Serializable<decltype(obj.hashed_msg)>::serialize(obj.hashed_msg, serializer);
6418 serde::Serializable<decltype(obj.public_key_x)>::serialize(obj.public_key_x, serializer);
6419 serde::Serializable<decltype(obj.public_key_y)>::serialize(obj.public_key_y, serializer);
6420 serde::Serializable<decltype(obj.signature)>::serialize(obj.signature, serializer);
6421 serde::Serializable<decltype(obj.result)>::serialize(obj.result, serializer);
6422}
6423
6424template <>
6425template <typename Deserializer>
6427 Deserializer& deserializer)
6428{
6430 obj.hashed_msg = serde::Deserializable<decltype(obj.hashed_msg)>::deserialize(deserializer);
6431 obj.public_key_x = serde::Deserializable<decltype(obj.public_key_x)>::deserialize(deserializer);
6432 obj.public_key_y = serde::Deserializable<decltype(obj.public_key_y)>::deserialize(deserializer);
6433 obj.signature = serde::Deserializable<decltype(obj.signature)>::deserialize(deserializer);
6434 obj.result = serde::Deserializable<decltype(obj.result)>::deserialize(deserializer);
6435 return obj;
6436}
6437
6438namespace Acir {
6439
6441{
6442 if (!(lhs.hashed_msg == rhs.hashed_msg)) {
6443 return false;
6444 }
6445 if (!(lhs.public_key_x == rhs.public_key_x)) {
6446 return false;
6447 }
6448 if (!(lhs.public_key_y == rhs.public_key_y)) {
6449 return false;
6450 }
6451 if (!(lhs.signature == rhs.signature)) {
6452 return false;
6453 }
6454 if (!(lhs.result == rhs.result)) {
6455 return false;
6456 }
6457 return true;
6458}
6459
6460} // end of namespace Acir
6461
6462template <>
6463template <typename Serializer>
6465 Serializer& serializer)
6466{
6467 serde::Serializable<decltype(obj.hashed_msg)>::serialize(obj.hashed_msg, serializer);
6468 serde::Serializable<decltype(obj.public_key_x)>::serialize(obj.public_key_x, serializer);
6469 serde::Serializable<decltype(obj.public_key_y)>::serialize(obj.public_key_y, serializer);
6470 serde::Serializable<decltype(obj.signature)>::serialize(obj.signature, serializer);
6471 serde::Serializable<decltype(obj.result)>::serialize(obj.result, serializer);
6472}
6473
6474template <>
6475template <typename Deserializer>
6477 Deserializer& deserializer)
6478{
6480 obj.hashed_msg = serde::Deserializable<decltype(obj.hashed_msg)>::deserialize(deserializer);
6481 obj.public_key_x = serde::Deserializable<decltype(obj.public_key_x)>::deserialize(deserializer);
6482 obj.public_key_y = serde::Deserializable<decltype(obj.public_key_y)>::deserialize(deserializer);
6483 obj.signature = serde::Deserializable<decltype(obj.signature)>::deserialize(deserializer);
6484 obj.result = serde::Deserializable<decltype(obj.result)>::deserialize(deserializer);
6485 return obj;
6486}
6487
6488namespace Acir {
6489
6491{
6492 if (!(lhs.points == rhs.points)) {
6493 return false;
6494 }
6495 if (!(lhs.scalars == rhs.scalars)) {
6496 return false;
6497 }
6498 if (!(lhs.outputs == rhs.outputs)) {
6499 return false;
6500 }
6501 return true;
6502}
6503
6504} // end of namespace Acir
6505
6506template <>
6507template <typename Serializer>
6509 Serializer& serializer)
6510{
6511 serde::Serializable<decltype(obj.points)>::serialize(obj.points, serializer);
6512 serde::Serializable<decltype(obj.scalars)>::serialize(obj.scalars, serializer);
6513 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
6514}
6515
6516template <>
6517template <typename Deserializer>
6519 Deserializer& deserializer)
6520{
6522 obj.points = serde::Deserializable<decltype(obj.points)>::deserialize(deserializer);
6523 obj.scalars = serde::Deserializable<decltype(obj.scalars)>::deserialize(deserializer);
6524 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
6525 return obj;
6526}
6527
6528namespace Acir {
6529
6531{
6532 if (!(lhs.input1_x == rhs.input1_x)) {
6533 return false;
6534 }
6535 if (!(lhs.input1_y == rhs.input1_y)) {
6536 return false;
6537 }
6538 if (!(lhs.input1_infinite == rhs.input1_infinite)) {
6539 return false;
6540 }
6541 if (!(lhs.input2_x == rhs.input2_x)) {
6542 return false;
6543 }
6544 if (!(lhs.input2_y == rhs.input2_y)) {
6545 return false;
6546 }
6547 if (!(lhs.input2_infinite == rhs.input2_infinite)) {
6548 return false;
6549 }
6550 if (!(lhs.result == rhs.result)) {
6551 return false;
6552 }
6553 return true;
6554}
6555
6556} // end of namespace Acir
6557
6558template <>
6559template <typename Serializer>
6561 Serializer& serializer)
6562{
6563 serde::Serializable<decltype(obj.input1_x)>::serialize(obj.input1_x, serializer);
6564 serde::Serializable<decltype(obj.input1_y)>::serialize(obj.input1_y, serializer);
6565 serde::Serializable<decltype(obj.input1_infinite)>::serialize(obj.input1_infinite, serializer);
6566 serde::Serializable<decltype(obj.input2_x)>::serialize(obj.input2_x, serializer);
6567 serde::Serializable<decltype(obj.input2_y)>::serialize(obj.input2_y, serializer);
6568 serde::Serializable<decltype(obj.input2_infinite)>::serialize(obj.input2_infinite, serializer);
6569 serde::Serializable<decltype(obj.result)>::serialize(obj.result, serializer);
6570}
6571
6572template <>
6573template <typename Deserializer>
6575 Deserializer& deserializer)
6576{
6578 obj.input1_x = serde::Deserializable<decltype(obj.input1_x)>::deserialize(deserializer);
6579 obj.input1_y = serde::Deserializable<decltype(obj.input1_y)>::deserialize(deserializer);
6580 obj.input1_infinite = serde::Deserializable<decltype(obj.input1_infinite)>::deserialize(deserializer);
6581 obj.input2_x = serde::Deserializable<decltype(obj.input2_x)>::deserialize(deserializer);
6582 obj.input2_y = serde::Deserializable<decltype(obj.input2_y)>::deserialize(deserializer);
6583 obj.input2_infinite = serde::Deserializable<decltype(obj.input2_infinite)>::deserialize(deserializer);
6584 obj.result = serde::Deserializable<decltype(obj.result)>::deserialize(deserializer);
6585 return obj;
6586}
6587
6588namespace Acir {
6589
6591{
6592 if (!(lhs.message == rhs.message)) {
6593 return false;
6594 }
6595 if (!(lhs.output == rhs.output)) {
6596 return false;
6597 }
6598 return true;
6599}
6600
6601} // end of namespace Acir
6602
6603template <>
6604template <typename Serializer>
6606 const Acir::BlackBoxOp::Poseidon2Permutation& obj, Serializer& serializer)
6607{
6608 serde::Serializable<decltype(obj.message)>::serialize(obj.message, serializer);
6609 serde::Serializable<decltype(obj.output)>::serialize(obj.output, serializer);
6610}
6611
6612template <>
6613template <typename Deserializer>
6615 Deserializer& deserializer)
6616{
6618 obj.message = serde::Deserializable<decltype(obj.message)>::deserialize(deserializer);
6619 obj.output = serde::Deserializable<decltype(obj.output)>::deserialize(deserializer);
6620 return obj;
6621}
6622
6623namespace Acir {
6624
6626{
6627 if (!(lhs.input == rhs.input)) {
6628 return false;
6629 }
6630 if (!(lhs.hash_values == rhs.hash_values)) {
6631 return false;
6632 }
6633 if (!(lhs.output == rhs.output)) {
6634 return false;
6635 }
6636 return true;
6637}
6638
6639} // end of namespace Acir
6640
6641template <>
6642template <typename Serializer>
6644 Serializer& serializer)
6645{
6646 serde::Serializable<decltype(obj.input)>::serialize(obj.input, serializer);
6647 serde::Serializable<decltype(obj.hash_values)>::serialize(obj.hash_values, serializer);
6648 serde::Serializable<decltype(obj.output)>::serialize(obj.output, serializer);
6649}
6650
6651template <>
6652template <typename Deserializer>
6654 Deserializer& deserializer)
6655{
6657 obj.input = serde::Deserializable<decltype(obj.input)>::deserialize(deserializer);
6658 obj.hash_values = serde::Deserializable<decltype(obj.hash_values)>::deserialize(deserializer);
6659 obj.output = serde::Deserializable<decltype(obj.output)>::deserialize(deserializer);
6660 return obj;
6661}
6662
6663namespace Acir {
6664
6665inline bool operator==(const BlackBoxOp::ToRadix& lhs, const BlackBoxOp::ToRadix& rhs)
6666{
6667 if (!(lhs.input == rhs.input)) {
6668 return false;
6669 }
6670 if (!(lhs.radix == rhs.radix)) {
6671 return false;
6672 }
6673 if (!(lhs.output_pointer == rhs.output_pointer)) {
6674 return false;
6675 }
6676 if (!(lhs.num_limbs == rhs.num_limbs)) {
6677 return false;
6678 }
6679 if (!(lhs.output_bits == rhs.output_bits)) {
6680 return false;
6681 }
6682 return true;
6683}
6684
6685} // end of namespace Acir
6686
6687template <>
6688template <typename Serializer>
6690 Serializer& serializer)
6691{
6692 serde::Serializable<decltype(obj.input)>::serialize(obj.input, serializer);
6693 serde::Serializable<decltype(obj.radix)>::serialize(obj.radix, serializer);
6694 serde::Serializable<decltype(obj.output_pointer)>::serialize(obj.output_pointer, serializer);
6695 serde::Serializable<decltype(obj.num_limbs)>::serialize(obj.num_limbs, serializer);
6696 serde::Serializable<decltype(obj.output_bits)>::serialize(obj.output_bits, serializer);
6697}
6698
6699template <>
6700template <typename Deserializer>
6702{
6704 obj.input = serde::Deserializable<decltype(obj.input)>::deserialize(deserializer);
6705 obj.radix = serde::Deserializable<decltype(obj.radix)>::deserialize(deserializer);
6706 obj.output_pointer = serde::Deserializable<decltype(obj.output_pointer)>::deserialize(deserializer);
6707 obj.num_limbs = serde::Deserializable<decltype(obj.num_limbs)>::deserialize(deserializer);
6708 obj.output_bits = serde::Deserializable<decltype(obj.output_bits)>::deserialize(deserializer);
6709 return obj;
6710}
6711
6712namespace Acir {
6713
6714inline bool operator==(const BlockId& lhs, const BlockId& rhs)
6715{
6716 if (!(lhs.value == rhs.value)) {
6717 return false;
6718 }
6719 return true;
6720}
6721
6722} // end of namespace Acir
6723
6724template <>
6725template <typename Serializer>
6726void serde::Serializable<Acir::BlockId>::serialize(const Acir::BlockId& obj, Serializer& serializer)
6727{
6728 serializer.increase_container_depth();
6729 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
6730 serializer.decrease_container_depth();
6731}
6732
6733template <>
6734template <typename Deserializer>
6736{
6737 deserializer.increase_container_depth();
6738 Acir::BlockId obj;
6739 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
6740 deserializer.decrease_container_depth();
6741 return obj;
6742}
6743
6744namespace Acir {
6745
6746inline bool operator==(const BlockType& lhs, const BlockType& rhs)
6747{
6748 if (!(lhs.value == rhs.value)) {
6749 return false;
6750 }
6751 return true;
6752}
6753
6754} // end of namespace Acir
6755
6756template <>
6757template <typename Serializer>
6759{
6760 serializer.increase_container_depth();
6761 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
6762 serializer.decrease_container_depth();
6763}
6764
6765template <>
6766template <typename Deserializer>
6768{
6769 deserializer.increase_container_depth();
6770 Acir::BlockType obj;
6771 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
6772 deserializer.decrease_container_depth();
6773 return obj;
6774}
6775
6776namespace Acir {
6777
6778inline bool operator==(const BlockType::Memory& lhs, const BlockType::Memory& rhs)
6779{
6780 return true;
6781}
6782
6783} // end of namespace Acir
6784
6785template <>
6786template <typename Serializer>
6789
6790template <>
6791template <typename Deserializer>
6797
6798namespace Acir {
6799
6800inline bool operator==(const BlockType::CallData& lhs, const BlockType::CallData& rhs)
6801{
6802 if (!(lhs.value == rhs.value)) {
6803 return false;
6804 }
6805 return true;
6806}
6807
6808} // end of namespace Acir
6809
6810template <>
6811template <typename Serializer>
6813 Serializer& serializer)
6814{
6815 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
6816}
6817
6818template <>
6819template <typename Deserializer>
6821{
6823 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
6824 return obj;
6825}
6826
6827namespace Acir {
6828
6829inline bool operator==(const BlockType::ReturnData& lhs, const BlockType::ReturnData& rhs)
6830{
6831 return true;
6832}
6833
6834} // end of namespace Acir
6835
6836template <>
6837template <typename Serializer>
6841
6842template <>
6843template <typename Deserializer>
6849
6850namespace Acir {
6851
6852inline bool operator==(const BrilligBytecode& lhs, const BrilligBytecode& rhs)
6853{
6854 if (!(lhs.function_name == rhs.function_name)) {
6855 return false;
6856 }
6857 if (!(lhs.bytecode == rhs.bytecode)) {
6858 return false;
6859 }
6860 return true;
6861}
6862
6863} // end of namespace Acir
6864
6865template <>
6866template <typename Serializer>
6868{
6869 serializer.increase_container_depth();
6870 serde::Serializable<decltype(obj.function_name)>::serialize(obj.function_name, serializer);
6871 serde::Serializable<decltype(obj.bytecode)>::serialize(obj.bytecode, serializer);
6872 serializer.decrease_container_depth();
6873}
6874
6875template <>
6876template <typename Deserializer>
6878{
6879 deserializer.increase_container_depth();
6881 obj.function_name = serde::Deserializable<decltype(obj.function_name)>::deserialize(deserializer);
6882 obj.bytecode = serde::Deserializable<decltype(obj.bytecode)>::deserialize(deserializer);
6883 deserializer.decrease_container_depth();
6884 return obj;
6885}
6886
6887namespace Acir {
6888
6889inline bool operator==(const BrilligInputs& lhs, const BrilligInputs& rhs)
6890{
6891 if (!(lhs.value == rhs.value)) {
6892 return false;
6893 }
6894 return true;
6895}
6896
6897} // end of namespace Acir
6898
6899template <>
6900template <typename Serializer>
6902{
6903 serializer.increase_container_depth();
6904 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
6905 serializer.decrease_container_depth();
6906}
6907
6908template <>
6909template <typename Deserializer>
6911{
6912 deserializer.increase_container_depth();
6914 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
6915 deserializer.decrease_container_depth();
6916 return obj;
6917}
6918
6919namespace Acir {
6920
6921inline bool operator==(const BrilligInputs::Single& lhs, const BrilligInputs::Single& rhs)
6922{
6923 if (!(lhs.value == rhs.value)) {
6924 return false;
6925 }
6926 return true;
6927}
6928
6929} // end of namespace Acir
6930
6931template <>
6932template <typename Serializer>
6934 Serializer& serializer)
6935{
6936 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
6937}
6938
6939template <>
6940template <typename Deserializer>
6942{
6944 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
6945 return obj;
6946}
6947
6948namespace Acir {
6949
6950inline bool operator==(const BrilligInputs::Array& lhs, const BrilligInputs::Array& rhs)
6951{
6952 if (!(lhs.value == rhs.value)) {
6953 return false;
6954 }
6955 return true;
6956}
6957
6958} // end of namespace Acir
6959
6960template <>
6961template <typename Serializer>
6963 Serializer& serializer)
6964{
6965 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
6966}
6967
6968template <>
6969template <typename Deserializer>
6971{
6973 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
6974 return obj;
6975}
6976
6977namespace Acir {
6978
6980{
6981 if (!(lhs.value == rhs.value)) {
6982 return false;
6983 }
6984 return true;
6985}
6986
6987} // end of namespace Acir
6988
6989template <>
6990template <typename Serializer>
6992 Serializer& serializer)
6993{
6994 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
6995}
6996
6997template <>
6998template <typename Deserializer>
7000 Deserializer& deserializer)
7001{
7003 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7004 return obj;
7005}
7006
7007namespace Acir {
7008
7009inline bool operator==(const BrilligOpcode& lhs, const BrilligOpcode& rhs)
7010{
7011 if (!(lhs.value == rhs.value)) {
7012 return false;
7013 }
7014 return true;
7015}
7016
7017} // end of namespace Acir
7018
7019template <>
7020template <typename Serializer>
7022{
7023 serializer.increase_container_depth();
7024 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7025 serializer.decrease_container_depth();
7026}
7027
7028template <>
7029template <typename Deserializer>
7031{
7032 deserializer.increase_container_depth();
7034 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7035 deserializer.decrease_container_depth();
7036 return obj;
7037}
7038
7039namespace Acir {
7040
7042{
7043 if (!(lhs.destination == rhs.destination)) {
7044 return false;
7045 }
7046 if (!(lhs.op == rhs.op)) {
7047 return false;
7048 }
7049 if (!(lhs.lhs == rhs.lhs)) {
7050 return false;
7051 }
7052 if (!(lhs.rhs == rhs.rhs)) {
7053 return false;
7054 }
7055 return true;
7056}
7057
7058} // end of namespace Acir
7059
7060template <>
7061template <typename Serializer>
7063 Serializer& serializer)
7064{
7065 serde::Serializable<decltype(obj.destination)>::serialize(obj.destination, serializer);
7066 serde::Serializable<decltype(obj.op)>::serialize(obj.op, serializer);
7067 serde::Serializable<decltype(obj.lhs)>::serialize(obj.lhs, serializer);
7068 serde::Serializable<decltype(obj.rhs)>::serialize(obj.rhs, serializer);
7069}
7070
7071template <>
7072template <typename Deserializer>
7074 Deserializer& deserializer)
7075{
7077 obj.destination = serde::Deserializable<decltype(obj.destination)>::deserialize(deserializer);
7078 obj.op = serde::Deserializable<decltype(obj.op)>::deserialize(deserializer);
7079 obj.lhs = serde::Deserializable<decltype(obj.lhs)>::deserialize(deserializer);
7080 obj.rhs = serde::Deserializable<decltype(obj.rhs)>::deserialize(deserializer);
7081 return obj;
7082}
7083
7084namespace Acir {
7085
7087{
7088 if (!(lhs.destination == rhs.destination)) {
7089 return false;
7090 }
7091 if (!(lhs.op == rhs.op)) {
7092 return false;
7093 }
7094 if (!(lhs.bit_size == rhs.bit_size)) {
7095 return false;
7096 }
7097 if (!(lhs.lhs == rhs.lhs)) {
7098 return false;
7099 }
7100 if (!(lhs.rhs == rhs.rhs)) {
7101 return false;
7102 }
7103 return true;
7104}
7105
7106} // end of namespace Acir
7107
7108template <>
7109template <typename Serializer>
7111 Serializer& serializer)
7112{
7113 serde::Serializable<decltype(obj.destination)>::serialize(obj.destination, serializer);
7114 serde::Serializable<decltype(obj.op)>::serialize(obj.op, serializer);
7115 serde::Serializable<decltype(obj.bit_size)>::serialize(obj.bit_size, serializer);
7116 serde::Serializable<decltype(obj.lhs)>::serialize(obj.lhs, serializer);
7117 serde::Serializable<decltype(obj.rhs)>::serialize(obj.rhs, serializer);
7118}
7119
7120template <>
7121template <typename Deserializer>
7123 Deserializer& deserializer)
7124{
7126 obj.destination = serde::Deserializable<decltype(obj.destination)>::deserialize(deserializer);
7127 obj.op = serde::Deserializable<decltype(obj.op)>::deserialize(deserializer);
7128 obj.bit_size = serde::Deserializable<decltype(obj.bit_size)>::deserialize(deserializer);
7129 obj.lhs = serde::Deserializable<decltype(obj.lhs)>::deserialize(deserializer);
7130 obj.rhs = serde::Deserializable<decltype(obj.rhs)>::deserialize(deserializer);
7131 return obj;
7132}
7133
7134namespace Acir {
7135
7136inline bool operator==(const BrilligOpcode::Not& lhs, const BrilligOpcode::Not& rhs)
7137{
7138 if (!(lhs.destination == rhs.destination)) {
7139 return false;
7140 }
7141 if (!(lhs.source == rhs.source)) {
7142 return false;
7143 }
7144 if (!(lhs.bit_size == rhs.bit_size)) {
7145 return false;
7146 }
7147 return true;
7148}
7149
7150} // end of namespace Acir
7151
7152template <>
7153template <typename Serializer>
7155 Serializer& serializer)
7156{
7157 serde::Serializable<decltype(obj.destination)>::serialize(obj.destination, serializer);
7158 serde::Serializable<decltype(obj.source)>::serialize(obj.source, serializer);
7159 serde::Serializable<decltype(obj.bit_size)>::serialize(obj.bit_size, serializer);
7160}
7161
7162template <>
7163template <typename Deserializer>
7165{
7167 obj.destination = serde::Deserializable<decltype(obj.destination)>::deserialize(deserializer);
7168 obj.source = serde::Deserializable<decltype(obj.source)>::deserialize(deserializer);
7169 obj.bit_size = serde::Deserializable<decltype(obj.bit_size)>::deserialize(deserializer);
7170 return obj;
7171}
7172
7173namespace Acir {
7174
7175inline bool operator==(const BrilligOpcode::Cast& lhs, const BrilligOpcode::Cast& rhs)
7176{
7177 if (!(lhs.destination == rhs.destination)) {
7178 return false;
7179 }
7180 if (!(lhs.source == rhs.source)) {
7181 return false;
7182 }
7183 if (!(lhs.bit_size == rhs.bit_size)) {
7184 return false;
7185 }
7186 return true;
7187}
7188
7189} // end of namespace Acir
7190
7191template <>
7192template <typename Serializer>
7194 Serializer& serializer)
7195{
7196 serde::Serializable<decltype(obj.destination)>::serialize(obj.destination, serializer);
7197 serde::Serializable<decltype(obj.source)>::serialize(obj.source, serializer);
7198 serde::Serializable<decltype(obj.bit_size)>::serialize(obj.bit_size, serializer);
7199}
7200
7201template <>
7202template <typename Deserializer>
7204{
7206 obj.destination = serde::Deserializable<decltype(obj.destination)>::deserialize(deserializer);
7207 obj.source = serde::Deserializable<decltype(obj.source)>::deserialize(deserializer);
7208 obj.bit_size = serde::Deserializable<decltype(obj.bit_size)>::deserialize(deserializer);
7209 return obj;
7210}
7211
7212namespace Acir {
7213
7214inline bool operator==(const BrilligOpcode::JumpIf& lhs, const BrilligOpcode::JumpIf& rhs)
7215{
7216 if (!(lhs.condition == rhs.condition)) {
7217 return false;
7218 }
7219 if (!(lhs.location == rhs.location)) {
7220 return false;
7221 }
7222 return true;
7223}
7224
7225} // end of namespace Acir
7226
7227template <>
7228template <typename Serializer>
7230 Serializer& serializer)
7231{
7232 serde::Serializable<decltype(obj.condition)>::serialize(obj.condition, serializer);
7233 serde::Serializable<decltype(obj.location)>::serialize(obj.location, serializer);
7234}
7235
7236template <>
7237template <typename Deserializer>
7239{
7241 obj.condition = serde::Deserializable<decltype(obj.condition)>::deserialize(deserializer);
7242 obj.location = serde::Deserializable<decltype(obj.location)>::deserialize(deserializer);
7243 return obj;
7244}
7245
7246namespace Acir {
7247
7248inline bool operator==(const BrilligOpcode::Jump& lhs, const BrilligOpcode::Jump& rhs)
7249{
7250 if (!(lhs.location == rhs.location)) {
7251 return false;
7252 }
7253 return true;
7254}
7255
7256} // end of namespace Acir
7257
7258template <>
7259template <typename Serializer>
7261 Serializer& serializer)
7262{
7263 serde::Serializable<decltype(obj.location)>::serialize(obj.location, serializer);
7264}
7265
7266template <>
7267template <typename Deserializer>
7269{
7271 obj.location = serde::Deserializable<decltype(obj.location)>::deserialize(deserializer);
7272 return obj;
7273}
7274
7275namespace Acir {
7276
7278{
7279 if (!(lhs.destination_address == rhs.destination_address)) {
7280 return false;
7281 }
7282 if (!(lhs.size_address == rhs.size_address)) {
7283 return false;
7284 }
7285 if (!(lhs.offset_address == rhs.offset_address)) {
7286 return false;
7287 }
7288 return true;
7289}
7290
7291} // end of namespace Acir
7292
7293template <>
7294template <typename Serializer>
7296 Serializer& serializer)
7297{
7298 serde::Serializable<decltype(obj.destination_address)>::serialize(obj.destination_address, serializer);
7299 serde::Serializable<decltype(obj.size_address)>::serialize(obj.size_address, serializer);
7300 serde::Serializable<decltype(obj.offset_address)>::serialize(obj.offset_address, serializer);
7301}
7302
7303template <>
7304template <typename Deserializer>
7306 Deserializer& deserializer)
7307{
7309 obj.destination_address = serde::Deserializable<decltype(obj.destination_address)>::deserialize(deserializer);
7310 obj.size_address = serde::Deserializable<decltype(obj.size_address)>::deserialize(deserializer);
7311 obj.offset_address = serde::Deserializable<decltype(obj.offset_address)>::deserialize(deserializer);
7312 return obj;
7313}
7314
7315namespace Acir {
7316
7317inline bool operator==(const BrilligOpcode::Call& lhs, const BrilligOpcode::Call& rhs)
7318{
7319 if (!(lhs.location == rhs.location)) {
7320 return false;
7321 }
7322 return true;
7323}
7324
7325} // end of namespace Acir
7326
7327template <>
7328template <typename Serializer>
7330 Serializer& serializer)
7331{
7332 serde::Serializable<decltype(obj.location)>::serialize(obj.location, serializer);
7333}
7334
7335template <>
7336template <typename Deserializer>
7338{
7340 obj.location = serde::Deserializable<decltype(obj.location)>::deserialize(deserializer);
7341 return obj;
7342}
7343
7344namespace Acir {
7345
7346inline bool operator==(const BrilligOpcode::Const& lhs, const BrilligOpcode::Const& rhs)
7347{
7348 if (!(lhs.destination == rhs.destination)) {
7349 return false;
7350 }
7351 if (!(lhs.bit_size == rhs.bit_size)) {
7352 return false;
7353 }
7354 if (!(lhs.value == rhs.value)) {
7355 return false;
7356 }
7357 return true;
7358}
7359
7360} // end of namespace Acir
7361
7362template <>
7363template <typename Serializer>
7365 Serializer& serializer)
7366{
7367 serde::Serializable<decltype(obj.destination)>::serialize(obj.destination, serializer);
7368 serde::Serializable<decltype(obj.bit_size)>::serialize(obj.bit_size, serializer);
7369 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7370}
7371
7372template <>
7373template <typename Deserializer>
7375{
7377 obj.destination = serde::Deserializable<decltype(obj.destination)>::deserialize(deserializer);
7378 obj.bit_size = serde::Deserializable<decltype(obj.bit_size)>::deserialize(deserializer);
7379 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7380 return obj;
7381}
7382
7383namespace Acir {
7384
7386{
7387 if (!(lhs.destination_pointer == rhs.destination_pointer)) {
7388 return false;
7389 }
7390 if (!(lhs.bit_size == rhs.bit_size)) {
7391 return false;
7392 }
7393 if (!(lhs.value == rhs.value)) {
7394 return false;
7395 }
7396 return true;
7397}
7398
7399} // end of namespace Acir
7400
7401template <>
7402template <typename Serializer>
7404 Serializer& serializer)
7405{
7406 serde::Serializable<decltype(obj.destination_pointer)>::serialize(obj.destination_pointer, serializer);
7407 serde::Serializable<decltype(obj.bit_size)>::serialize(obj.bit_size, serializer);
7408 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7409}
7410
7411template <>
7412template <typename Deserializer>
7414 Deserializer& deserializer)
7415{
7417 obj.destination_pointer = serde::Deserializable<decltype(obj.destination_pointer)>::deserialize(deserializer);
7418 obj.bit_size = serde::Deserializable<decltype(obj.bit_size)>::deserialize(deserializer);
7419 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7420 return obj;
7421}
7422
7423namespace Acir {
7424
7425inline bool operator==(const BrilligOpcode::Return& lhs, const BrilligOpcode::Return& rhs)
7426{
7427 return true;
7428}
7429
7430} // end of namespace Acir
7431
7432template <>
7433template <typename Serializer>
7437
7438template <>
7439template <typename Deserializer>
7445
7446namespace Acir {
7447
7449{
7450 if (!(lhs.function == rhs.function)) {
7451 return false;
7452 }
7453 if (!(lhs.destinations == rhs.destinations)) {
7454 return false;
7455 }
7456 if (!(lhs.destination_value_types == rhs.destination_value_types)) {
7457 return false;
7458 }
7459 if (!(lhs.inputs == rhs.inputs)) {
7460 return false;
7461 }
7462 if (!(lhs.input_value_types == rhs.input_value_types)) {
7463 return false;
7464 }
7465 return true;
7466}
7467
7468} // end of namespace Acir
7469
7470template <>
7471template <typename Serializer>
7473 Serializer& serializer)
7474{
7475 serde::Serializable<decltype(obj.function)>::serialize(obj.function, serializer);
7476 serde::Serializable<decltype(obj.destinations)>::serialize(obj.destinations, serializer);
7477 serde::Serializable<decltype(obj.destination_value_types)>::serialize(obj.destination_value_types, serializer);
7478 serde::Serializable<decltype(obj.inputs)>::serialize(obj.inputs, serializer);
7479 serde::Serializable<decltype(obj.input_value_types)>::serialize(obj.input_value_types, serializer);
7480}
7481
7482template <>
7483template <typename Deserializer>
7485 Deserializer& deserializer)
7486{
7488 obj.function = serde::Deserializable<decltype(obj.function)>::deserialize(deserializer);
7489 obj.destinations = serde::Deserializable<decltype(obj.destinations)>::deserialize(deserializer);
7491 serde::Deserializable<decltype(obj.destination_value_types)>::deserialize(deserializer);
7492 obj.inputs = serde::Deserializable<decltype(obj.inputs)>::deserialize(deserializer);
7493 obj.input_value_types = serde::Deserializable<decltype(obj.input_value_types)>::deserialize(deserializer);
7494 return obj;
7495}
7496
7497namespace Acir {
7498
7499inline bool operator==(const BrilligOpcode::Mov& lhs, const BrilligOpcode::Mov& rhs)
7500{
7501 if (!(lhs.destination == rhs.destination)) {
7502 return false;
7503 }
7504 if (!(lhs.source == rhs.source)) {
7505 return false;
7506 }
7507 return true;
7508}
7509
7510} // end of namespace Acir
7511
7512template <>
7513template <typename Serializer>
7515 Serializer& serializer)
7516{
7517 serde::Serializable<decltype(obj.destination)>::serialize(obj.destination, serializer);
7518 serde::Serializable<decltype(obj.source)>::serialize(obj.source, serializer);
7519}
7520
7521template <>
7522template <typename Deserializer>
7524{
7526 obj.destination = serde::Deserializable<decltype(obj.destination)>::deserialize(deserializer);
7527 obj.source = serde::Deserializable<decltype(obj.source)>::deserialize(deserializer);
7528 return obj;
7529}
7530
7531namespace Acir {
7532
7534{
7535 if (!(lhs.destination == rhs.destination)) {
7536 return false;
7537 }
7538 if (!(lhs.source_a == rhs.source_a)) {
7539 return false;
7540 }
7541 if (!(lhs.source_b == rhs.source_b)) {
7542 return false;
7543 }
7544 if (!(lhs.condition == rhs.condition)) {
7545 return false;
7546 }
7547 return true;
7548}
7549
7550} // end of namespace Acir
7551
7552template <>
7553template <typename Serializer>
7555 Serializer& serializer)
7556{
7557 serde::Serializable<decltype(obj.destination)>::serialize(obj.destination, serializer);
7558 serde::Serializable<decltype(obj.source_a)>::serialize(obj.source_a, serializer);
7559 serde::Serializable<decltype(obj.source_b)>::serialize(obj.source_b, serializer);
7560 serde::Serializable<decltype(obj.condition)>::serialize(obj.condition, serializer);
7561}
7562
7563template <>
7564template <typename Deserializer>
7566 Deserializer& deserializer)
7567{
7569 obj.destination = serde::Deserializable<decltype(obj.destination)>::deserialize(deserializer);
7570 obj.source_a = serde::Deserializable<decltype(obj.source_a)>::deserialize(deserializer);
7571 obj.source_b = serde::Deserializable<decltype(obj.source_b)>::deserialize(deserializer);
7572 obj.condition = serde::Deserializable<decltype(obj.condition)>::deserialize(deserializer);
7573 return obj;
7574}
7575
7576namespace Acir {
7577
7578inline bool operator==(const BrilligOpcode::Load& lhs, const BrilligOpcode::Load& rhs)
7579{
7580 if (!(lhs.destination == rhs.destination)) {
7581 return false;
7582 }
7583 if (!(lhs.source_pointer == rhs.source_pointer)) {
7584 return false;
7585 }
7586 return true;
7587}
7588
7589} // end of namespace Acir
7590
7591template <>
7592template <typename Serializer>
7594 Serializer& serializer)
7595{
7596 serde::Serializable<decltype(obj.destination)>::serialize(obj.destination, serializer);
7597 serde::Serializable<decltype(obj.source_pointer)>::serialize(obj.source_pointer, serializer);
7598}
7599
7600template <>
7601template <typename Deserializer>
7603{
7605 obj.destination = serde::Deserializable<decltype(obj.destination)>::deserialize(deserializer);
7606 obj.source_pointer = serde::Deserializable<decltype(obj.source_pointer)>::deserialize(deserializer);
7607 return obj;
7608}
7609
7610namespace Acir {
7611
7612inline bool operator==(const BrilligOpcode::Store& lhs, const BrilligOpcode::Store& rhs)
7613{
7614 if (!(lhs.destination_pointer == rhs.destination_pointer)) {
7615 return false;
7616 }
7617 if (!(lhs.source == rhs.source)) {
7618 return false;
7619 }
7620 return true;
7621}
7622
7623} // end of namespace Acir
7624
7625template <>
7626template <typename Serializer>
7628 Serializer& serializer)
7629{
7630 serde::Serializable<decltype(obj.destination_pointer)>::serialize(obj.destination_pointer, serializer);
7631 serde::Serializable<decltype(obj.source)>::serialize(obj.source, serializer);
7632}
7633
7634template <>
7635template <typename Deserializer>
7637{
7639 obj.destination_pointer = serde::Deserializable<decltype(obj.destination_pointer)>::deserialize(deserializer);
7640 obj.source = serde::Deserializable<decltype(obj.source)>::deserialize(deserializer);
7641 return obj;
7642}
7643
7644namespace Acir {
7645
7647{
7648 if (!(lhs.value == rhs.value)) {
7649 return false;
7650 }
7651 return true;
7652}
7653
7654} // end of namespace Acir
7655
7656template <>
7657template <typename Serializer>
7659 Serializer& serializer)
7660{
7661 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7662}
7663
7664template <>
7665template <typename Deserializer>
7667 Deserializer& deserializer)
7668{
7670 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7671 return obj;
7672}
7673
7674namespace Acir {
7675
7676inline bool operator==(const BrilligOpcode::Trap& lhs, const BrilligOpcode::Trap& rhs)
7677{
7678 if (!(lhs.revert_data == rhs.revert_data)) {
7679 return false;
7680 }
7681 return true;
7682}
7683
7684} // end of namespace Acir
7685
7686template <>
7687template <typename Serializer>
7689 Serializer& serializer)
7690{
7691 serde::Serializable<decltype(obj.revert_data)>::serialize(obj.revert_data, serializer);
7692}
7693
7694template <>
7695template <typename Deserializer>
7697{
7699 obj.revert_data = serde::Deserializable<decltype(obj.revert_data)>::deserialize(deserializer);
7700 return obj;
7701}
7702
7703namespace Acir {
7704
7705inline bool operator==(const BrilligOpcode::Stop& lhs, const BrilligOpcode::Stop& rhs)
7706{
7707 if (!(lhs.return_data == rhs.return_data)) {
7708 return false;
7709 }
7710 return true;
7711}
7712
7713} // end of namespace Acir
7714
7715template <>
7716template <typename Serializer>
7718 Serializer& serializer)
7719{
7720 serde::Serializable<decltype(obj.return_data)>::serialize(obj.return_data, serializer);
7721}
7722
7723template <>
7724template <typename Deserializer>
7726{
7728 obj.return_data = serde::Deserializable<decltype(obj.return_data)>::deserialize(deserializer);
7729 return obj;
7730}
7731
7732namespace Acir {
7733
7734inline bool operator==(const BrilligOutputs& lhs, const BrilligOutputs& rhs)
7735{
7736 if (!(lhs.value == rhs.value)) {
7737 return false;
7738 }
7739 return true;
7740}
7741
7742} // end of namespace Acir
7743
7744template <>
7745template <typename Serializer>
7747{
7748 serializer.increase_container_depth();
7749 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7750 serializer.decrease_container_depth();
7751}
7752
7753template <>
7754template <typename Deserializer>
7756{
7757 deserializer.increase_container_depth();
7759 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7760 deserializer.decrease_container_depth();
7761 return obj;
7762}
7763
7764namespace Acir {
7765
7767{
7768 if (!(lhs.value == rhs.value)) {
7769 return false;
7770 }
7771 return true;
7772}
7773
7774} // end of namespace Acir
7775
7776template <>
7777template <typename Serializer>
7779 Serializer& serializer)
7780{
7781 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7782}
7783
7784template <>
7785template <typename Deserializer>
7787 Deserializer& deserializer)
7788{
7790 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7791 return obj;
7792}
7793
7794namespace Acir {
7795
7796inline bool operator==(const BrilligOutputs::Array& lhs, const BrilligOutputs::Array& rhs)
7797{
7798 if (!(lhs.value == rhs.value)) {
7799 return false;
7800 }
7801 return true;
7802}
7803
7804} // end of namespace Acir
7805
7806template <>
7807template <typename Serializer>
7809 Serializer& serializer)
7810{
7811 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7812}
7813
7814template <>
7815template <typename Deserializer>
7817{
7819 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7820 return obj;
7821}
7822
7823namespace Acir {
7824
7825inline bool operator==(const Circuit& lhs, const Circuit& rhs)
7826{
7827 if (!(lhs.function_name == rhs.function_name)) {
7828 return false;
7829 }
7830 if (!(lhs.current_witness_index == rhs.current_witness_index)) {
7831 return false;
7832 }
7833 if (!(lhs.opcodes == rhs.opcodes)) {
7834 return false;
7835 }
7836 if (!(lhs.private_parameters == rhs.private_parameters)) {
7837 return false;
7838 }
7839 if (!(lhs.public_parameters == rhs.public_parameters)) {
7840 return false;
7841 }
7842 if (!(lhs.return_values == rhs.return_values)) {
7843 return false;
7844 }
7845 if (!(lhs.assert_messages == rhs.assert_messages)) {
7846 return false;
7847 }
7848 return true;
7849}
7850
7851} // end of namespace Acir
7852
7853template <>
7854template <typename Serializer>
7855void serde::Serializable<Acir::Circuit>::serialize(const Acir::Circuit& obj, Serializer& serializer)
7856{
7857 serializer.increase_container_depth();
7858 serde::Serializable<decltype(obj.function_name)>::serialize(obj.function_name, serializer);
7859 serde::Serializable<decltype(obj.current_witness_index)>::serialize(obj.current_witness_index, serializer);
7860 serde::Serializable<decltype(obj.opcodes)>::serialize(obj.opcodes, serializer);
7861 serde::Serializable<decltype(obj.private_parameters)>::serialize(obj.private_parameters, serializer);
7862 serde::Serializable<decltype(obj.public_parameters)>::serialize(obj.public_parameters, serializer);
7863 serde::Serializable<decltype(obj.return_values)>::serialize(obj.return_values, serializer);
7864 serde::Serializable<decltype(obj.assert_messages)>::serialize(obj.assert_messages, serializer);
7865 serializer.decrease_container_depth();
7866}
7867
7868template <>
7869template <typename Deserializer>
7871{
7872 deserializer.increase_container_depth();
7873 Acir::Circuit obj;
7874 obj.function_name = serde::Deserializable<decltype(obj.function_name)>::deserialize(deserializer);
7875 obj.current_witness_index = serde::Deserializable<decltype(obj.current_witness_index)>::deserialize(deserializer);
7876 obj.opcodes = serde::Deserializable<decltype(obj.opcodes)>::deserialize(deserializer);
7877 obj.private_parameters = serde::Deserializable<decltype(obj.private_parameters)>::deserialize(deserializer);
7878 obj.public_parameters = serde::Deserializable<decltype(obj.public_parameters)>::deserialize(deserializer);
7879 obj.return_values = serde::Deserializable<decltype(obj.return_values)>::deserialize(deserializer);
7880 obj.assert_messages = serde::Deserializable<decltype(obj.assert_messages)>::deserialize(deserializer);
7881 deserializer.decrease_container_depth();
7882 return obj;
7883}
7884
7885namespace Acir {
7886
7887inline bool operator==(const Expression& lhs, const Expression& rhs)
7888{
7889 if (!(lhs.mul_terms == rhs.mul_terms)) {
7890 return false;
7891 }
7892 if (!(lhs.linear_combinations == rhs.linear_combinations)) {
7893 return false;
7894 }
7895 if (!(lhs.q_c == rhs.q_c)) {
7896 return false;
7897 }
7898 return true;
7899}
7900
7901} // end of namespace Acir
7902
7903template <>
7904template <typename Serializer>
7906{
7907 serializer.increase_container_depth();
7908 serde::Serializable<decltype(obj.mul_terms)>::serialize(obj.mul_terms, serializer);
7909 serde::Serializable<decltype(obj.linear_combinations)>::serialize(obj.linear_combinations, serializer);
7910 serde::Serializable<decltype(obj.q_c)>::serialize(obj.q_c, serializer);
7911 serializer.decrease_container_depth();
7912}
7913
7914template <>
7915template <typename Deserializer>
7917{
7918 deserializer.increase_container_depth();
7919 Acir::Expression obj;
7920 obj.mul_terms = serde::Deserializable<decltype(obj.mul_terms)>::deserialize(deserializer);
7921 obj.linear_combinations = serde::Deserializable<decltype(obj.linear_combinations)>::deserialize(deserializer);
7922 obj.q_c = serde::Deserializable<decltype(obj.q_c)>::deserialize(deserializer);
7923 deserializer.decrease_container_depth();
7924 return obj;
7925}
7926
7927namespace Acir {
7928
7929inline bool operator==(const ExpressionOrMemory& lhs, const ExpressionOrMemory& rhs)
7930{
7931 if (!(lhs.value == rhs.value)) {
7932 return false;
7933 }
7934 return true;
7935}
7936
7937} // end of namespace Acir
7938
7939template <>
7940template <typename Serializer>
7942 Serializer& serializer)
7943{
7944 serializer.increase_container_depth();
7945 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7946 serializer.decrease_container_depth();
7947}
7948
7949template <>
7950template <typename Deserializer>
7952{
7953 deserializer.increase_container_depth();
7955 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7956 deserializer.decrease_container_depth();
7957 return obj;
7958}
7959
7960namespace Acir {
7961
7963{
7964 if (!(lhs.value == rhs.value)) {
7965 return false;
7966 }
7967 return true;
7968}
7969
7970} // end of namespace Acir
7971
7972template <>
7973template <typename Serializer>
7975 const Acir::ExpressionOrMemory::Expression& obj, Serializer& serializer)
7976{
7977 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7978}
7979
7980template <>
7981template <typename Deserializer>
7983 Deserializer& deserializer)
7984{
7986 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7987 return obj;
7988}
7989
7990namespace Acir {
7991
7993{
7994 if (!(lhs.value == rhs.value)) {
7995 return false;
7996 }
7997 return true;
7998}
7999
8000} // end of namespace Acir
8001
8002template <>
8003template <typename Serializer>
8005 Serializer& serializer)
8006{
8007 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
8008}
8009
8010template <>
8011template <typename Deserializer>
8013 Deserializer& deserializer)
8014{
8016 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
8017 return obj;
8018}
8019
8020namespace Acir {
8021
8022inline bool operator==(const FunctionInput& lhs, const FunctionInput& rhs)
8023{
8024 if (!(lhs.value == rhs.value)) {
8025 return false;
8026 }
8027 return true;
8028}
8029
8030} // end of namespace Acir
8031
8032template <>
8033template <typename Serializer>
8035{
8036 serializer.increase_container_depth();
8037 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
8038 serializer.decrease_container_depth();
8039}
8040
8041template <>
8042template <typename Deserializer>
8044{
8045 deserializer.increase_container_depth();
8047 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
8048 deserializer.decrease_container_depth();
8049 return obj;
8050}
8051
8052namespace Acir {
8053
8055{
8056 if (!(lhs.value == rhs.value)) {
8057 return false;
8058 }
8059 return true;
8060}
8061
8062} // end of namespace Acir
8063
8064template <>
8065template <typename Serializer>
8067 Serializer& serializer)
8068{
8069 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
8070}
8071
8072template <>
8073template <typename Deserializer>
8075 Deserializer& deserializer)
8076{
8078 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
8079 return obj;
8080}
8081
8082namespace Acir {
8083
8085{
8086 if (!(lhs.value == rhs.value)) {
8087 return false;
8088 }
8089 return true;
8090}
8091
8092} // end of namespace Acir
8093
8094template <>
8095template <typename Serializer>
8097 Serializer& serializer)
8098{
8099 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
8100}
8101
8102template <>
8103template <typename Deserializer>
8105 Deserializer& deserializer)
8106{
8108 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
8109 return obj;
8110}
8111
8112namespace Acir {
8113
8114inline bool operator==(const HeapArray& lhs, const HeapArray& rhs)
8115{
8116 if (!(lhs.pointer == rhs.pointer)) {
8117 return false;
8118 }
8119 if (!(lhs.size == rhs.size)) {
8120 return false;
8121 }
8122 return true;
8123}
8124
8125} // end of namespace Acir
8126
8127template <>
8128template <typename Serializer>
8130{
8131 serializer.increase_container_depth();
8132 serde::Serializable<decltype(obj.pointer)>::serialize(obj.pointer, serializer);
8133 serde::Serializable<decltype(obj.size)>::serialize(obj.size, serializer);
8134 serializer.decrease_container_depth();
8135}
8136
8137template <>
8138template <typename Deserializer>
8140{
8141 deserializer.increase_container_depth();
8142 Acir::HeapArray obj;
8143 obj.pointer = serde::Deserializable<decltype(obj.pointer)>::deserialize(deserializer);
8144 obj.size = serde::Deserializable<decltype(obj.size)>::deserialize(deserializer);
8145 deserializer.decrease_container_depth();
8146 return obj;
8147}
8148
8149namespace Acir {
8150
8151inline bool operator==(const HeapValueType& lhs, const HeapValueType& rhs)
8152{
8153 if (!(lhs.value == rhs.value)) {
8154 return false;
8155 }
8156 return true;
8157}
8158
8159} // end of namespace Acir
8160
8161template <>
8162template <typename Serializer>
8164{
8165 serializer.increase_container_depth();
8166 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
8167 serializer.decrease_container_depth();
8168}
8169
8170template <>
8171template <typename Deserializer>
8173{
8174 deserializer.increase_container_depth();
8176 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
8177 deserializer.decrease_container_depth();
8178 return obj;
8179}
8180
8181namespace Acir {
8182
8183inline bool operator==(const HeapValueType::Simple& lhs, const HeapValueType::Simple& rhs)
8184{
8185 if (!(lhs.value == rhs.value)) {
8186 return false;
8187 }
8188 return true;
8189}
8190
8191} // end of namespace Acir
8192
8193template <>
8194template <typename Serializer>
8196 Serializer& serializer)
8197{
8198 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
8199}
8200
8201template <>
8202template <typename Deserializer>
8204{
8206 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
8207 return obj;
8208}
8209
8210namespace Acir {
8211
8212inline bool operator==(const HeapValueType::Array& lhs, const HeapValueType::Array& rhs)
8213{
8214 if (!(lhs.value_types == rhs.value_types)) {
8215 return false;
8216 }
8217 if (!(lhs.size == rhs.size)) {
8218 return false;
8219 }
8220 return true;
8221}
8222
8223} // end of namespace Acir
8224
8225template <>
8226template <typename Serializer>
8228 Serializer& serializer)
8229{
8230 serde::Serializable<decltype(obj.value_types)>::serialize(obj.value_types, serializer);
8231 serde::Serializable<decltype(obj.size)>::serialize(obj.size, serializer);
8232}
8233
8234template <>
8235template <typename Deserializer>
8237{
8239 obj.value_types = serde::Deserializable<decltype(obj.value_types)>::deserialize(deserializer);
8240 obj.size = serde::Deserializable<decltype(obj.size)>::deserialize(deserializer);
8241 return obj;
8242}
8243
8244namespace Acir {
8245
8246inline bool operator==(const HeapValueType::Vector& lhs, const HeapValueType::Vector& rhs)
8247{
8248 if (!(lhs.value_types == rhs.value_types)) {
8249 return false;
8250 }
8251 return true;
8252}
8253
8254} // end of namespace Acir
8255
8256template <>
8257template <typename Serializer>
8259 Serializer& serializer)
8260{
8261 serde::Serializable<decltype(obj.value_types)>::serialize(obj.value_types, serializer);
8262}
8263
8264template <>
8265template <typename Deserializer>
8267{
8269 obj.value_types = serde::Deserializable<decltype(obj.value_types)>::deserialize(deserializer);
8270 return obj;
8271}
8272
8273namespace Acir {
8274
8275inline bool operator==(const HeapVector& lhs, const HeapVector& rhs)
8276{
8277 if (!(lhs.pointer == rhs.pointer)) {
8278 return false;
8279 }
8280 if (!(lhs.size == rhs.size)) {
8281 return false;
8282 }
8283 return true;
8284}
8285
8286} // end of namespace Acir
8287
8288template <>
8289template <typename Serializer>
8291{
8292 serializer.increase_container_depth();
8293 serde::Serializable<decltype(obj.pointer)>::serialize(obj.pointer, serializer);
8294 serde::Serializable<decltype(obj.size)>::serialize(obj.size, serializer);
8295 serializer.decrease_container_depth();
8296}
8297
8298template <>
8299template <typename Deserializer>
8301{
8302 deserializer.increase_container_depth();
8303 Acir::HeapVector obj;
8304 obj.pointer = serde::Deserializable<decltype(obj.pointer)>::deserialize(deserializer);
8305 obj.size = serde::Deserializable<decltype(obj.size)>::deserialize(deserializer);
8306 deserializer.decrease_container_depth();
8307 return obj;
8308}
8309
8310namespace Acir {
8311
8312inline bool operator==(const IntegerBitSize& lhs, const IntegerBitSize& rhs)
8313{
8314 if (!(lhs.value == rhs.value)) {
8315 return false;
8316 }
8317 return true;
8318}
8319
8320} // end of namespace Acir
8321
8322template <>
8323template <typename Serializer>
8325{
8326 serializer.increase_container_depth();
8327 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
8328 serializer.decrease_container_depth();
8329}
8330
8331template <>
8332template <typename Deserializer>
8334{
8335 deserializer.increase_container_depth();
8337 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
8338 deserializer.decrease_container_depth();
8339 return obj;
8340}
8341
8342namespace Acir {
8343
8344inline bool operator==(const IntegerBitSize::U1& lhs, const IntegerBitSize::U1& rhs)
8345{
8346 return true;
8347}
8348
8349} // end of namespace Acir
8350
8351template <>
8352template <typename Serializer>
8356
8357template <>
8358template <typename Deserializer>
8364
8365namespace Acir {
8366
8367inline bool operator==(const IntegerBitSize::U8& lhs, const IntegerBitSize::U8& rhs)
8368{
8369 return true;
8370}
8371
8372} // end of namespace Acir
8373
8374template <>
8375template <typename Serializer>
8379
8380template <>
8381template <typename Deserializer>
8387
8388namespace Acir {
8389
8390inline bool operator==(const IntegerBitSize::U16& lhs, const IntegerBitSize::U16& rhs)
8391{
8392 return true;
8393}
8394
8395} // end of namespace Acir
8396
8397template <>
8398template <typename Serializer>
8402
8403template <>
8404template <typename Deserializer>
8410
8411namespace Acir {
8412
8413inline bool operator==(const IntegerBitSize::U32& lhs, const IntegerBitSize::U32& rhs)
8414{
8415 return true;
8416}
8417
8418} // end of namespace Acir
8419
8420template <>
8421template <typename Serializer>
8425
8426template <>
8427template <typename Deserializer>
8433
8434namespace Acir {
8435
8436inline bool operator==(const IntegerBitSize::U64& lhs, const IntegerBitSize::U64& rhs)
8437{
8438 return true;
8439}
8440
8441} // end of namespace Acir
8442
8443template <>
8444template <typename Serializer>
8448
8449template <>
8450template <typename Deserializer>
8456
8457namespace Acir {
8458
8459inline bool operator==(const IntegerBitSize::U128& lhs, const IntegerBitSize::U128& rhs)
8460{
8461 return true;
8462}
8463
8464} // end of namespace Acir
8465
8466template <>
8467template <typename Serializer>
8471
8472template <>
8473template <typename Deserializer>
8479
8480namespace Acir {
8481
8482inline bool operator==(const MemOp& lhs, const MemOp& rhs)
8483{
8484 if (!(lhs.operation == rhs.operation)) {
8485 return false;
8486 }
8487 if (!(lhs.index == rhs.index)) {
8488 return false;
8489 }
8490 if (!(lhs.value == rhs.value)) {
8491 return false;
8492 }
8493 return true;
8494}
8495
8496} // end of namespace Acir
8497
8498template <>
8499template <typename Serializer>
8500void serde::Serializable<Acir::MemOp>::serialize(const Acir::MemOp& obj, Serializer& serializer)
8501{
8502 serializer.increase_container_depth();
8503 serde::Serializable<decltype(obj.operation)>::serialize(obj.operation, serializer);
8504 serde::Serializable<decltype(obj.index)>::serialize(obj.index, serializer);
8505 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
8506 serializer.decrease_container_depth();
8507}
8508
8509template <>
8510template <typename Deserializer>
8512{
8513 deserializer.increase_container_depth();
8514 Acir::MemOp obj;
8515 obj.operation = serde::Deserializable<decltype(obj.operation)>::deserialize(deserializer);
8516 obj.index = serde::Deserializable<decltype(obj.index)>::deserialize(deserializer);
8517 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
8518 deserializer.decrease_container_depth();
8519 return obj;
8520}
8521
8522namespace Acir {
8523
8524inline bool operator==(const MemoryAddress& lhs, const MemoryAddress& rhs)
8525{
8526 if (!(lhs.value == rhs.value)) {
8527 return false;
8528 }
8529 return true;
8530}
8531
8532} // end of namespace Acir
8533
8534template <>
8535template <typename Serializer>
8537{
8538 serializer.increase_container_depth();
8539 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
8540 serializer.decrease_container_depth();
8541}
8542
8543template <>
8544template <typename Deserializer>
8546{
8547 deserializer.increase_container_depth();
8549 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
8550 deserializer.decrease_container_depth();
8551 return obj;
8552}
8553
8554namespace Acir {
8555
8556inline bool operator==(const MemoryAddress::Direct& lhs, const MemoryAddress::Direct& rhs)
8557{
8558 if (!(lhs.value == rhs.value)) {
8559 return false;
8560 }
8561 return true;
8562}
8563
8564} // end of namespace Acir
8565
8566template <>
8567template <typename Serializer>
8569 Serializer& serializer)
8570{
8571 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
8572}
8573
8574template <>
8575template <typename Deserializer>
8577{
8579 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
8580 return obj;
8581}
8582
8583namespace Acir {
8584
8586{
8587 if (!(lhs.value == rhs.value)) {
8588 return false;
8589 }
8590 return true;
8591}
8592
8593} // end of namespace Acir
8594
8595template <>
8596template <typename Serializer>
8598 Serializer& serializer)
8599{
8600 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
8601}
8602
8603template <>
8604template <typename Deserializer>
8606 Deserializer& deserializer)
8607{
8609 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
8610 return obj;
8611}
8612
8613namespace Acir {
8614
8615inline bool operator==(const Opcode& lhs, const Opcode& rhs)
8616{
8617 if (!(lhs.value == rhs.value)) {
8618 return false;
8619 }
8620 return true;
8621}
8622
8623} // end of namespace Acir
8624
8625template <>
8626template <typename Serializer>
8627void serde::Serializable<Acir::Opcode>::serialize(const Acir::Opcode& obj, Serializer& serializer)
8628{
8629 serializer.increase_container_depth();
8630 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
8631 serializer.decrease_container_depth();
8632}
8633
8634template <>
8635template <typename Deserializer>
8637{
8638 deserializer.increase_container_depth();
8639 Acir::Opcode obj;
8640 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
8641 deserializer.decrease_container_depth();
8642 return obj;
8643}
8644
8645namespace Acir {
8646
8647inline bool operator==(const Opcode::AssertZero& lhs, const Opcode::AssertZero& rhs)
8648{
8649 if (!(lhs.value == rhs.value)) {
8650 return false;
8651 }
8652 return true;
8653}
8654
8655} // end of namespace Acir
8656
8657template <>
8658template <typename Serializer>
8660 Serializer& serializer)
8661{
8662 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
8663}
8664
8665template <>
8666template <typename Deserializer>
8668{
8670 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
8671 return obj;
8672}
8673
8674namespace Acir {
8675
8677{
8678 if (!(lhs.value == rhs.value)) {
8679 return false;
8680 }
8681 return true;
8682}
8683
8684} // end of namespace Acir
8685
8686template <>
8687template <typename Serializer>
8689 Serializer& serializer)
8690{
8691 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
8692}
8693
8694template <>
8695template <typename Deserializer>
8697 Deserializer& deserializer)
8698{
8700 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
8701 return obj;
8702}
8703
8704namespace Acir {
8705
8706inline bool operator==(const Opcode::MemoryOp& lhs, const Opcode::MemoryOp& rhs)
8707{
8708 if (!(lhs.block_id == rhs.block_id)) {
8709 return false;
8710 }
8711 if (!(lhs.op == rhs.op)) {
8712 return false;
8713 }
8714 return true;
8715}
8716
8717} // end of namespace Acir
8718
8719template <>
8720template <typename Serializer>
8722{
8723 serde::Serializable<decltype(obj.block_id)>::serialize(obj.block_id, serializer);
8724 serde::Serializable<decltype(obj.op)>::serialize(obj.op, serializer);
8725}
8726
8727template <>
8728template <typename Deserializer>
8730{
8732 obj.block_id = serde::Deserializable<decltype(obj.block_id)>::deserialize(deserializer);
8733 obj.op = serde::Deserializable<decltype(obj.op)>::deserialize(deserializer);
8734 return obj;
8735}
8736
8737namespace Acir {
8738
8739inline bool operator==(const Opcode::MemoryInit& lhs, const Opcode::MemoryInit& rhs)
8740{
8741 if (!(lhs.block_id == rhs.block_id)) {
8742 return false;
8743 }
8744 if (!(lhs.init == rhs.init)) {
8745 return false;
8746 }
8747 if (!(lhs.block_type == rhs.block_type)) {
8748 return false;
8749 }
8750 return true;
8751}
8752
8753} // end of namespace Acir
8754
8755template <>
8756template <typename Serializer>
8758 Serializer& serializer)
8759{
8760 serde::Serializable<decltype(obj.block_id)>::serialize(obj.block_id, serializer);
8761 serde::Serializable<decltype(obj.init)>::serialize(obj.init, serializer);
8762 serde::Serializable<decltype(obj.block_type)>::serialize(obj.block_type, serializer);
8763}
8764
8765template <>
8766template <typename Deserializer>
8768{
8770 obj.block_id = serde::Deserializable<decltype(obj.block_id)>::deserialize(deserializer);
8771 obj.init = serde::Deserializable<decltype(obj.init)>::deserialize(deserializer);
8772 obj.block_type = serde::Deserializable<decltype(obj.block_type)>::deserialize(deserializer);
8773 return obj;
8774}
8775
8776namespace Acir {
8777
8778inline bool operator==(const Opcode::BrilligCall& lhs, const Opcode::BrilligCall& rhs)
8779{
8780 if (!(lhs.id == rhs.id)) {
8781 return false;
8782 }
8783 if (!(lhs.inputs == rhs.inputs)) {
8784 return false;
8785 }
8786 if (!(lhs.outputs == rhs.outputs)) {
8787 return false;
8788 }
8789 if (!(lhs.predicate == rhs.predicate)) {
8790 return false;
8791 }
8792 return true;
8793}
8794
8795} // end of namespace Acir
8796
8797template <>
8798template <typename Serializer>
8800 Serializer& serializer)
8801{
8802 serde::Serializable<decltype(obj.id)>::serialize(obj.id, serializer);
8803 serde::Serializable<decltype(obj.inputs)>::serialize(obj.inputs, serializer);
8804 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
8805 serde::Serializable<decltype(obj.predicate)>::serialize(obj.predicate, serializer);
8806}
8807
8808template <>
8809template <typename Deserializer>
8811{
8813 obj.id = serde::Deserializable<decltype(obj.id)>::deserialize(deserializer);
8814 obj.inputs = serde::Deserializable<decltype(obj.inputs)>::deserialize(deserializer);
8815 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
8816 obj.predicate = serde::Deserializable<decltype(obj.predicate)>::deserialize(deserializer);
8817 return obj;
8818}
8819
8820namespace Acir {
8821
8822inline bool operator==(const Opcode::Call& lhs, const Opcode::Call& rhs)
8823{
8824 if (!(lhs.id == rhs.id)) {
8825 return false;
8826 }
8827 if (!(lhs.inputs == rhs.inputs)) {
8828 return false;
8829 }
8830 if (!(lhs.outputs == rhs.outputs)) {
8831 return false;
8832 }
8833 if (!(lhs.predicate == rhs.predicate)) {
8834 return false;
8835 }
8836 return true;
8837}
8838
8839} // end of namespace Acir
8840
8841template <>
8842template <typename Serializer>
8844{
8845 serde::Serializable<decltype(obj.id)>::serialize(obj.id, serializer);
8846 serde::Serializable<decltype(obj.inputs)>::serialize(obj.inputs, serializer);
8847 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
8848 serde::Serializable<decltype(obj.predicate)>::serialize(obj.predicate, serializer);
8849}
8850
8851template <>
8852template <typename Deserializer>
8854{
8856 obj.id = serde::Deserializable<decltype(obj.id)>::deserialize(deserializer);
8857 obj.inputs = serde::Deserializable<decltype(obj.inputs)>::deserialize(deserializer);
8858 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
8859 obj.predicate = serde::Deserializable<decltype(obj.predicate)>::deserialize(deserializer);
8860 return obj;
8861}
8862
8863namespace Acir {
8864
8865inline bool operator==(const OpcodeLocation& lhs, const OpcodeLocation& rhs)
8866{
8867 if (!(lhs.value == rhs.value)) {
8868 return false;
8869 }
8870 return true;
8871}
8872
8873} // end of namespace Acir
8874
8875template <>
8876template <typename Serializer>
8878{
8879 serializer.increase_container_depth();
8880 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
8881 serializer.decrease_container_depth();
8882}
8883
8884template <>
8885template <typename Deserializer>
8887{
8888 deserializer.increase_container_depth();
8890 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
8891 deserializer.decrease_container_depth();
8892 return obj;
8893}
8894
8895namespace Acir {
8896
8897inline bool operator==(const OpcodeLocation::Acir& lhs, const OpcodeLocation::Acir& rhs)
8898{
8899 if (!(lhs.value == rhs.value)) {
8900 return false;
8901 }
8902 return true;
8903}
8904
8905} // end of namespace Acir
8906
8907template <>
8908template <typename Serializer>
8910 Serializer& serializer)
8911{
8912 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
8913}
8914
8915template <>
8916template <typename Deserializer>
8918{
8920 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
8921 return obj;
8922}
8923
8924namespace Acir {
8925
8927{
8928 if (!(lhs.acir_index == rhs.acir_index)) {
8929 return false;
8930 }
8931 if (!(lhs.brillig_index == rhs.brillig_index)) {
8932 return false;
8933 }
8934 return true;
8935}
8936
8937} // end of namespace Acir
8938
8939template <>
8940template <typename Serializer>
8942 Serializer& serializer)
8943{
8944 serde::Serializable<decltype(obj.acir_index)>::serialize(obj.acir_index, serializer);
8945 serde::Serializable<decltype(obj.brillig_index)>::serialize(obj.brillig_index, serializer);
8946}
8947
8948template <>
8949template <typename Deserializer>
8951 Deserializer& deserializer)
8952{
8954 obj.acir_index = serde::Deserializable<decltype(obj.acir_index)>::deserialize(deserializer);
8955 obj.brillig_index = serde::Deserializable<decltype(obj.brillig_index)>::deserialize(deserializer);
8956 return obj;
8957}
8958
8959namespace Acir {
8960
8961inline bool operator==(const Program& lhs, const Program& rhs)
8962{
8963 if (!(lhs.functions == rhs.functions)) {
8964 return false;
8965 }
8966 if (!(lhs.unconstrained_functions == rhs.unconstrained_functions)) {
8967 return false;
8968 }
8969 return true;
8970}
8971
8972} // end of namespace Acir
8973
8974template <>
8975template <typename Serializer>
8976void serde::Serializable<Acir::Program>::serialize(const Acir::Program& obj, Serializer& serializer)
8977{
8978 serializer.increase_container_depth();
8979 serde::Serializable<decltype(obj.functions)>::serialize(obj.functions, serializer);
8980 serde::Serializable<decltype(obj.unconstrained_functions)>::serialize(obj.unconstrained_functions, serializer);
8981 serializer.decrease_container_depth();
8982}
8983
8984template <>
8985template <typename Deserializer>
8987{
8988 deserializer.increase_container_depth();
8989 Acir::Program obj;
8990 obj.functions = serde::Deserializable<decltype(obj.functions)>::deserialize(deserializer);
8992 serde::Deserializable<decltype(obj.unconstrained_functions)>::deserialize(deserializer);
8993 deserializer.decrease_container_depth();
8994 return obj;
8995}
8996
8997namespace Acir {
8998
8999inline bool operator==(const ProgramWithoutBrillig& lhs, const ProgramWithoutBrillig& rhs)
9000{
9001 if (!(lhs.functions == rhs.functions)) {
9002 return false;
9003 }
9004 if (!(lhs.unconstrained_functions == rhs.unconstrained_functions)) {
9005 return false;
9006 }
9007 return true;
9008}
9009
9010} // end of namespace Acir
9011
9012template <>
9013template <typename Serializer>
9015 Serializer& serializer)
9016{
9017 serializer.increase_container_depth();
9018 serde::Serializable<decltype(obj.functions)>::serialize(obj.functions, serializer);
9019 serde::Serializable<decltype(obj.unconstrained_functions)>::serialize(obj.unconstrained_functions, serializer);
9020 serializer.decrease_container_depth();
9021}
9022
9023template <>
9024template <typename Deserializer>
9026{
9027 deserializer.increase_container_depth();
9029 obj.functions = serde::Deserializable<decltype(obj.functions)>::deserialize(deserializer);
9031 serde::Deserializable<decltype(obj.unconstrained_functions)>::deserialize(deserializer);
9032 deserializer.decrease_container_depth();
9033 return obj;
9034}
9035
9036namespace Acir {
9037
9038inline bool operator==(const PublicInputs& lhs, const PublicInputs& rhs)
9039{
9040 if (!(lhs.value == rhs.value)) {
9041 return false;
9042 }
9043 return true;
9044}
9045
9046} // end of namespace Acir
9047
9048template <>
9049template <typename Serializer>
9051{
9052 serializer.increase_container_depth();
9053 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
9054 serializer.decrease_container_depth();
9055}
9056
9057template <>
9058template <typename Deserializer>
9060{
9061 deserializer.increase_container_depth();
9063 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
9064 deserializer.decrease_container_depth();
9065 return obj;
9066}
9067
9068namespace Acir {
9069
9070inline bool operator==(const SemanticLength& lhs, const SemanticLength& rhs)
9071{
9072 if (!(lhs.value == rhs.value)) {
9073 return false;
9074 }
9075 return true;
9076}
9077
9078} // end of namespace Acir
9079
9080template <>
9081template <typename Serializer>
9083{
9084 serializer.increase_container_depth();
9085 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
9086 serializer.decrease_container_depth();
9087}
9088
9089template <>
9090template <typename Deserializer>
9092{
9093 deserializer.increase_container_depth();
9095 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
9096 deserializer.decrease_container_depth();
9097 return obj;
9098}
9099
9100namespace Acir {
9101
9102inline bool operator==(const SemiFlattenedLength& lhs, const SemiFlattenedLength& rhs)
9103{
9104 if (!(lhs.value == rhs.value)) {
9105 return false;
9106 }
9107 return true;
9108}
9109
9110} // end of namespace Acir
9111
9112template <>
9113template <typename Serializer>
9115 Serializer& serializer)
9116{
9117 serializer.increase_container_depth();
9118 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
9119 serializer.decrease_container_depth();
9120}
9121
9122template <>
9123template <typename Deserializer>
9125{
9126 deserializer.increase_container_depth();
9128 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
9129 deserializer.decrease_container_depth();
9130 return obj;
9131}
9132
9133namespace Acir {
9134
9135inline bool operator==(const ValueOrArray& lhs, const ValueOrArray& rhs)
9136{
9137 if (!(lhs.value == rhs.value)) {
9138 return false;
9139 }
9140 return true;
9141}
9142
9143} // end of namespace Acir
9144
9145template <>
9146template <typename Serializer>
9148{
9149 serializer.increase_container_depth();
9150 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
9151 serializer.decrease_container_depth();
9152}
9153
9154template <>
9155template <typename Deserializer>
9157{
9158 deserializer.increase_container_depth();
9160 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
9161 deserializer.decrease_container_depth();
9162 return obj;
9163}
9164
9165namespace Acir {
9166
9168{
9169 if (!(lhs.value == rhs.value)) {
9170 return false;
9171 }
9172 return true;
9173}
9174
9175} // end of namespace Acir
9176
9177template <>
9178template <typename Serializer>
9180 Serializer& serializer)
9181{
9182 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
9183}
9184
9185template <>
9186template <typename Deserializer>
9188 Deserializer& deserializer)
9189{
9191 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
9192 return obj;
9193}
9194
9195namespace Acir {
9196
9198{
9199 if (!(lhs.value == rhs.value)) {
9200 return false;
9201 }
9202 return true;
9203}
9204
9205} // end of namespace Acir
9206
9207template <>
9208template <typename Serializer>
9210 Serializer& serializer)
9211{
9212 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
9213}
9214
9215template <>
9216template <typename Deserializer>
9218 Deserializer& deserializer)
9219{
9221 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
9222 return obj;
9223}
9224
9225namespace Acir {
9226
9228{
9229 if (!(lhs.value == rhs.value)) {
9230 return false;
9231 }
9232 return true;
9233}
9234
9235} // end of namespace Acir
9236
9237template <>
9238template <typename Serializer>
9240 Serializer& serializer)
9241{
9242 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
9243}
9244
9245template <>
9246template <typename Deserializer>
9248 Deserializer& deserializer)
9249{
9251 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
9252 return obj;
9253}
9254
9255namespace Acir {
9256
9257inline bool operator==(const Witness& lhs, const Witness& rhs)
9258{
9259 if (!(lhs.value == rhs.value)) {
9260 return false;
9261 }
9262 return true;
9263}
9264
9265} // end of namespace Acir
9266
9267template <>
9268template <typename Serializer>
9269void serde::Serializable<Acir::Witness>::serialize(const Acir::Witness& obj, Serializer& serializer)
9270{
9271 serializer.increase_container_depth();
9272 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
9273 serializer.decrease_container_depth();
9274}
9275
9276template <>
9277template <typename Deserializer>
9279{
9280 deserializer.increase_container_depth();
9281 Acir::Witness obj;
9282 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
9283 deserializer.decrease_container_depth();
9284 return obj;
9285}
Serves as a key-value node store for merkle trees. Caches all changes in memory before persisting the...
Definition acir.hpp:6
bool operator==(const AssertionPayload &lhs, const AssertionPayload &rhs)
Definition acir.hpp:4935
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
std::string to_string(bb::avm2::ValueTag tag)
uint64_t error_selector
Definition acir.hpp:4614
std::vector< Acir::ExpressionOrMemory > payload
Definition acir.hpp:4615
friend bool operator==(const AssertionPayload &, const AssertionPayload &)
Definition acir.hpp:4935
void msgpack_pack(auto &packer) const
Definition acir.hpp:4619
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:4626
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:81
void msgpack_pack(auto &packer) const
Definition acir.hpp:80
friend bool operator==(const Add &, const Add &)
Definition acir.hpp:5004
void msgpack_pack(auto &packer) const
Definition acir.hpp:101
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:102
friend bool operator==(const Div &, const Div &)
Definition acir.hpp:5073
void msgpack_pack(auto &packer) const
Definition acir.hpp:115
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:116
friend bool operator==(const Equals &, const Equals &)
Definition acir.hpp:5120
friend bool operator==(const IntegerDiv &, const IntegerDiv &)
Definition acir.hpp:5096
void msgpack_pack(auto &packer) const
Definition acir.hpp:108
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:109
friend bool operator==(const LessThanEquals &, const LessThanEquals &)
Definition acir.hpp:5167
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:130
void msgpack_pack(auto &packer) const
Definition acir.hpp:129
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:123
void msgpack_pack(auto &packer) const
Definition acir.hpp:122
friend bool operator==(const LessThan &, const LessThan &)
Definition acir.hpp:5143
void msgpack_pack(auto &packer) const
Definition acir.hpp:94
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:95
friend bool operator==(const Mul &, const Mul &)
Definition acir.hpp:5050
void msgpack_pack(auto &packer) const
Definition acir.hpp:87
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:88
friend bool operator==(const Sub &, const Sub &)
Definition acir.hpp:5027
std::variant< Add, Sub, Mul, Div, IntegerDiv, Equals, LessThan, LessThanEquals > value
Definition acir.hpp:133
void msgpack_pack(auto &packer) const
Definition acir.hpp:137
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:191
friend bool operator==(const BinaryFieldOp &, const BinaryFieldOp &)
Definition acir.hpp:4972
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:249
friend bool operator==(const Add &, const Add &)
Definition acir.hpp:5223
void msgpack_pack(auto &packer) const
Definition acir.hpp:248
void msgpack_pack(auto &packer) const
Definition acir.hpp:297
friend bool operator==(const And &, const And &)
Definition acir.hpp:5381
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:298
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:270
friend bool operator==(const Div &, const Div &)
Definition acir.hpp:5289
void msgpack_pack(auto &packer) const
Definition acir.hpp:269
void msgpack_pack(auto &packer) const
Definition acir.hpp:276
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:277
friend bool operator==(const Equals &, const Equals &)
Definition acir.hpp:5311
friend bool operator==(const LessThanEquals &, const LessThanEquals &)
Definition acir.hpp:5357
void msgpack_pack(auto &packer) const
Definition acir.hpp:290
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:291
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:284
friend bool operator==(const LessThan &, const LessThan &)
Definition acir.hpp:5334
void msgpack_pack(auto &packer) const
Definition acir.hpp:283
void msgpack_pack(auto &packer) const
Definition acir.hpp:262
friend bool operator==(const Mul &, const Mul &)
Definition acir.hpp:5267
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:263
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:305
void msgpack_pack(auto &packer) const
Definition acir.hpp:304
friend bool operator==(const Or &, const Or &)
Definition acir.hpp:5403
friend bool operator==(const Shl &, const Shl &)
Definition acir.hpp:5447
void msgpack_pack(auto &packer) const
Definition acir.hpp:318
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:319
void msgpack_pack(auto &packer) const
Definition acir.hpp:325
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:326
friend bool operator==(const Shr &, const Shr &)
Definition acir.hpp:5469
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:256
void msgpack_pack(auto &packer) const
Definition acir.hpp:255
friend bool operator==(const Sub &, const Sub &)
Definition acir.hpp:5245
friend bool operator==(const Xor &, const Xor &)
Definition acir.hpp:5425
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:312
void msgpack_pack(auto &packer) const
Definition acir.hpp:311
void msgpack_pack(auto &packer) const
Definition acir.hpp:333
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:403
std::variant< Add, Sub, Mul, Div, Equals, LessThan, LessThanEquals, And, Or, Xor, Shl, Shr > value
Definition acir.hpp:329
friend bool operator==(const BinaryIntOp &, const BinaryIntOp &)
Definition acir.hpp:5191
friend bool operator==(const Field &, const Field &)
Definition acir.hpp:5523
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:613
void msgpack_pack(auto &packer) const
Definition acir.hpp:612
Acir::IntegerBitSize value
Definition acir.hpp:617
friend bool operator==(const Integer &, const Integer &)
Definition acir.hpp:5545
void msgpack_pack(auto &packer) const
Definition acir.hpp:621
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:623
std::variant< Field, Integer > value
Definition acir.hpp:634
friend bool operator==(const BitSize &, const BitSize &)
Definition acir.hpp:5491
void msgpack_pack(auto &packer) const
Definition acir.hpp:638
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:668
void msgpack_pack(auto &packer) const
Definition acir.hpp:2935
std::shared_ptr< std::array< Acir::FunctionInput, 16 > > key
Definition acir.hpp:2930
std::vector< Acir::Witness > outputs
Definition acir.hpp:2931
std::vector< Acir::FunctionInput > inputs
Definition acir.hpp:2928
friend bool operator==(const AES128Encrypt &, const AES128Encrypt &)
Definition acir.hpp:5605
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2944
std::shared_ptr< std::array< Acir::FunctionInput, 16 > > iv
Definition acir.hpp:2929
friend bool operator==(const AND &, const AND &)
Definition acir.hpp:5650
Acir::FunctionInput lhs
Definition acir.hpp:2966
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2982
Acir::FunctionInput rhs
Definition acir.hpp:2967
void msgpack_pack(auto &packer) const
Definition acir.hpp:2973
std::shared_ptr< std::array< Acir::Witness, 32 > > outputs
Definition acir.hpp:3073
void msgpack_pack(auto &packer) const
Definition acir.hpp:3077
friend bool operator==(const Blake2s &, const Blake2s &)
Definition acir.hpp:5773
std::vector< Acir::FunctionInput > inputs
Definition acir.hpp:3072
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3084
void msgpack_pack(auto &packer) const
Definition acir.hpp:3107
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3114
std::shared_ptr< std::array< Acir::Witness, 32 > > outputs
Definition acir.hpp:3103
std::vector< Acir::FunctionInput > inputs
Definition acir.hpp:3102
friend bool operator==(const Blake3 &, const Blake3 &)
Definition acir.hpp:5808
std::shared_ptr< std::array< Acir::FunctionInput, 32 > > public_key_x
Definition acir.hpp:3132
std::shared_ptr< std::array< Acir::FunctionInput, 32 > > hashed_message
Definition acir.hpp:3135
void msgpack_pack(auto &packer) const
Definition acir.hpp:3141
friend bool operator==(const EcdsaSecp256k1 &, const EcdsaSecp256k1 &)
Definition acir.hpp:5843
std::shared_ptr< std::array< Acir::FunctionInput, 32 > > public_key_y
Definition acir.hpp:3133
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3152
std::shared_ptr< std::array< Acir::FunctionInput, 64 > > signature
Definition acir.hpp:3134
std::shared_ptr< std::array< Acir::FunctionInput, 32 > > public_key_x
Definition acir.hpp:3178
friend bool operator==(const EcdsaSecp256r1 &, const EcdsaSecp256r1 &)
Definition acir.hpp:5898
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3198
std::shared_ptr< std::array< Acir::FunctionInput, 32 > > hashed_message
Definition acir.hpp:3181
void msgpack_pack(auto &packer) const
Definition acir.hpp:3187
std::shared_ptr< std::array< Acir::FunctionInput, 32 > > public_key_y
Definition acir.hpp:3179
std::shared_ptr< std::array< Acir::FunctionInput, 64 > > signature
Definition acir.hpp:3180
std::shared_ptr< std::array< Acir::Witness, 3 > > outputs
Definition acir.hpp:3265
friend bool operator==(const EmbeddedCurveAdd &, const EmbeddedCurveAdd &)
Definition acir.hpp:5998
void msgpack_pack(auto &packer) const
Definition acir.hpp:3269
std::shared_ptr< std::array< Acir::FunctionInput, 3 > > input2
Definition acir.hpp:3263
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3278
std::shared_ptr< std::array< Acir::FunctionInput, 3 > > input1
Definition acir.hpp:3262
std::shared_ptr< std::array< Acir::FunctionInput, 25 > > inputs
Definition acir.hpp:3300
friend bool operator==(const Keccakf1600 &, const Keccakf1600 &)
Definition acir.hpp:6043
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3312
void msgpack_pack(auto &packer) const
Definition acir.hpp:3305
std::shared_ptr< std::array< Acir::Witness, 25 > > outputs
Definition acir.hpp:3301
std::vector< Acir::FunctionInput > scalars
Definition acir.hpp:3225
std::vector< Acir::FunctionInput > points
Definition acir.hpp:3224
std::shared_ptr< std::array< Acir::Witness, 3 > > outputs
Definition acir.hpp:3227
friend bool operator==(const MultiScalarMul &, const MultiScalarMul &)
Definition acir.hpp:5953
void msgpack_pack(auto &packer) const
Definition acir.hpp:3231
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3240
std::vector< Acir::Witness > outputs
Definition acir.hpp:3377
std::vector< Acir::FunctionInput > inputs
Definition acir.hpp:3376
void msgpack_pack(auto &packer) const
Definition acir.hpp:3381
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3388
friend bool operator==(const Poseidon2Permutation &, const Poseidon2Permutation &)
Definition acir.hpp:6134
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3054
friend bool operator==(const RANGE &, const RANGE &)
Definition acir.hpp:5738
void msgpack_pack(auto &packer) const
Definition acir.hpp:3047
Acir::FunctionInput input
Definition acir.hpp:3042
std::vector< Acir::FunctionInput > verification_key
Definition acir.hpp:3330
std::vector< Acir::FunctionInput > proof
Definition acir.hpp:3331
void msgpack_pack(auto &packer) const
Definition acir.hpp:3339
std::vector< Acir::FunctionInput > public_inputs
Definition acir.hpp:3332
friend bool operator==(const RecursiveAggregation &, const RecursiveAggregation &)
Definition acir.hpp:6078
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3350
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3420
std::shared_ptr< std::array< Acir::FunctionInput, 8 > > hash_values
Definition acir.hpp:3407
friend bool operator==(const Sha256Compression &, const Sha256Compression &)
Definition acir.hpp:6170
std::shared_ptr< std::array< Acir::FunctionInput, 16 > > inputs
Definition acir.hpp:3406
std::shared_ptr< std::array< Acir::Witness, 8 > > outputs
Definition acir.hpp:3408
void msgpack_pack(auto &packer) const
Definition acir.hpp:3412
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3020
Acir::FunctionInput rhs
Definition acir.hpp:3005
Acir::FunctionInput lhs
Definition acir.hpp:3004
void msgpack_pack(auto &packer) const
Definition acir.hpp:3011
friend bool operator==(const XOR &, const XOR &)
Definition acir.hpp:5694
void msgpack_pack(auto &packer) const
Definition acir.hpp:3457
friend bool operator==(const BlackBoxFuncCall &, const BlackBoxFuncCall &)
Definition acir.hpp:5573
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3535
std::variant< AES128Encrypt, AND, XOR, RANGE, Blake2s, Blake3, EcdsaSecp256k1, EcdsaSecp256r1, MultiScalarMul, EmbeddedCurveAdd, Keccakf1600, RecursiveAggregation, Poseidon2Permutation, Sha256Compression > value
Definition acir.hpp:3453
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:896
void msgpack_pack(auto &packer) const
Definition acir.hpp:887
friend bool operator==(const AES128Encrypt &, const AES128Encrypt &)
Definition acir.hpp:6242
Acir::HeapArray output
Definition acir.hpp:919
Acir::HeapArray message
Definition acir.hpp:918
friend bool operator==(const Blake2s &, const Blake2s &)
Definition acir.hpp:6287
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:930
void msgpack_pack(auto &packer) const
Definition acir.hpp:923
Acir::HeapArray message
Definition acir.hpp:948
Acir::HeapArray output
Definition acir.hpp:949
void msgpack_pack(auto &packer) const
Definition acir.hpp:953
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:960
friend bool operator==(const Blake3 &, const Blake3 &)
Definition acir.hpp:6321
Acir::MemoryAddress result
Definition acir.hpp:1012
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1026
friend bool operator==(const EcdsaSecp256k1 &, const EcdsaSecp256k1 &)
Definition acir.hpp:6390
void msgpack_pack(auto &packer) const
Definition acir.hpp:1016
Acir::MemoryAddress result
Definition acir.hpp:1054
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1068
friend bool operator==(const EcdsaSecp256r1 &, const EcdsaSecp256r1 &)
Definition acir.hpp:6440
void msgpack_pack(auto &packer) const
Definition acir.hpp:1058
Acir::MemoryAddress input1_x
Definition acir.hpp:1126
friend bool operator==(const EmbeddedCurveAdd &, const EmbeddedCurveAdd &)
Definition acir.hpp:6530
Acir::MemoryAddress input2_infinite
Definition acir.hpp:1131
Acir::MemoryAddress input1_y
Definition acir.hpp:1127
Acir::MemoryAddress input1_infinite
Definition acir.hpp:1128
Acir::MemoryAddress input2_x
Definition acir.hpp:1129
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1148
void msgpack_pack(auto &packer) const
Definition acir.hpp:1136
Acir::MemoryAddress input2_y
Definition acir.hpp:1130
Acir::HeapArray input
Definition acir.hpp:978
friend bool operator==(const Keccakf1600 &, const Keccakf1600 &)
Definition acir.hpp:6355
Acir::HeapArray output
Definition acir.hpp:979
void msgpack_pack(auto &packer) const
Definition acir.hpp:983
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:990
friend bool operator==(const MultiScalarMul &, const MultiScalarMul &)
Definition acir.hpp:6490
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1106
void msgpack_pack(auto &packer) const
Definition acir.hpp:1098
void msgpack_pack(auto &packer) const
Definition acir.hpp:1181
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1188
friend bool operator==(const Poseidon2Permutation &, const Poseidon2Permutation &)
Definition acir.hpp:6590
friend bool operator==(const Sha256Compression &, const Sha256Compression &)
Definition acir.hpp:6625
void msgpack_pack(auto &packer) const
Definition acir.hpp:1212
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1220
friend bool operator==(const ToRadix &, const ToRadix &)
Definition acir.hpp:6665
Acir::MemoryAddress output_pointer
Definition acir.hpp:1242
Acir::MemoryAddress radix
Definition acir.hpp:1241
Acir::MemoryAddress output_bits
Definition acir.hpp:1244
Acir::MemoryAddress input
Definition acir.hpp:1240
Acir::MemoryAddress num_limbs
Definition acir.hpp:1243
void msgpack_pack(auto &packer) const
Definition acir.hpp:1248
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1258
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1362
void msgpack_pack(auto &packer) const
Definition acir.hpp:1296
friend bool operator==(const BlackBoxOp &, const BlackBoxOp &)
Definition acir.hpp:6210
std::variant< AES128Encrypt, Blake2s, Blake3, Keccakf1600, EcdsaSecp256k1, EcdsaSecp256r1, MultiScalarMul, EmbeddedCurveAdd, Poseidon2Permutation, Sha256Compression, ToRadix > value
Definition acir.hpp:1292
void msgpack_pack(auto &packer) const
Definition acir.hpp:3708
friend bool operator==(const BlockId &, const BlockId &)
Definition acir.hpp:6714
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3710
uint32_t value
Definition acir.hpp:3704
friend bool operator==(const CallData &, const CallData &)
Definition acir.hpp:6800
void msgpack_pack(auto &packer) const
Definition acir.hpp:3735
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3737
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3727
friend bool operator==(const Memory &, const Memory &)
Definition acir.hpp:6778
void msgpack_pack(auto &packer) const
Definition acir.hpp:3726
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3752
friend bool operator==(const ReturnData &, const ReturnData &)
Definition acir.hpp:6829
void msgpack_pack(auto &packer) const
Definition acir.hpp:3751
void msgpack_pack(auto &packer) const
Definition acir.hpp:3759
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3793
std::variant< Memory, CallData, ReturnData > value
Definition acir.hpp:3755
friend bool operator==(const BlockType &, const BlockType &)
Definition acir.hpp:6746
void msgpack_pack(auto &packer) const
Definition acir.hpp:4849
friend bool operator==(const BrilligBytecode &, const BrilligBytecode &)
Definition acir.hpp:6852
std::vector< Acir::BrilligOpcode > bytecode
Definition acir.hpp:4845
std::string function_name
Definition acir.hpp:4844
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:4856
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3898
void msgpack_pack(auto &packer) const
Definition acir.hpp:3896
std::vector< Acir::Expression > value
Definition acir.hpp:3892
friend bool operator==(const Array &, const Array &)
Definition acir.hpp:6950
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3916
void msgpack_pack(auto &packer) const
Definition acir.hpp:3914
friend bool operator==(const MemoryArray &, const MemoryArray &)
Definition acir.hpp:6979
Acir::Expression value
Definition acir.hpp:3874
friend bool operator==(const Single &, const Single &)
Definition acir.hpp:6921
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3880
void msgpack_pack(auto &packer) const
Definition acir.hpp:3878
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3965
std::variant< Single, Array, MemoryArray > value
Definition acir.hpp:3927
void msgpack_pack(auto &packer) const
Definition acir.hpp:3931
friend bool operator==(const BrilligInputs &, const BrilligInputs &)
Definition acir.hpp:6889
void msgpack_pack(auto &packer) const
Definition acir.hpp:1884
friend bool operator==(const BinaryFieldOp &, const BinaryFieldOp &)
Definition acir.hpp:7041
Acir::MemoryAddress destination
Definition acir.hpp:1877
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1893
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1933
Acir::MemoryAddress destination
Definition acir.hpp:1915
Acir::MemoryAddress rhs
Definition acir.hpp:1919
void msgpack_pack(auto &packer) const
Definition acir.hpp:1923
friend bool operator==(const BinaryIntOp &, const BinaryIntOp &)
Definition acir.hpp:7086
Acir::IntegerBitSize bit_size
Definition acir.hpp:1917
Acir::MemoryAddress lhs
Definition acir.hpp:1918
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2392
Acir::BlackBoxOp value
Definition acir.hpp:2386
friend bool operator==(const BlackBox &, const BlackBox &)
Definition acir.hpp:7646
void msgpack_pack(auto &packer) const
Definition acir.hpp:2390
void msgpack_pack(auto &packer) const
Definition acir.hpp:2119
friend bool operator==(const Call &, const Call &)
Definition acir.hpp:7317
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2125
Acir::MemoryAddress offset_address
Definition acir.hpp:2083
friend bool operator==(const CalldataCopy &, const CalldataCopy &)
Definition acir.hpp:7277
Acir::MemoryAddress destination_address
Definition acir.hpp:2081
void msgpack_pack(auto &packer) const
Definition acir.hpp:2087
Acir::MemoryAddress size_address
Definition acir.hpp:2082
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2095
Acir::MemoryAddress source
Definition acir.hpp:1992
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2005
void msgpack_pack(auto &packer) const
Definition acir.hpp:1997
Acir::MemoryAddress destination
Definition acir.hpp:1991
Acir::BitSize bit_size
Definition acir.hpp:1993
friend bool operator==(const Cast &, const Cast &)
Definition acir.hpp:7175
Acir::MemoryAddress source_b
Definition acir.hpp:2290
friend bool operator==(const ConditionalMov &, const ConditionalMov &)
Definition acir.hpp:7533
Acir::MemoryAddress source_a
Definition acir.hpp:2289
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2304
void msgpack_pack(auto &packer) const
Definition acir.hpp:2295
Acir::MemoryAddress destination
Definition acir.hpp:2288
Acir::MemoryAddress condition
Definition acir.hpp:2291
Acir::BitSize bit_size
Definition acir.hpp:2142
friend bool operator==(const Const &, const Const &)
Definition acir.hpp:7346
std::vector< uint8_t > value
Definition acir.hpp:2143
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2155
void msgpack_pack(auto &packer) const
Definition acir.hpp:2147
Acir::MemoryAddress destination
Definition acir.hpp:2141
std::vector< Acir::HeapValueType > input_value_types
Definition acir.hpp:2220
std::vector< Acir::HeapValueType > destination_value_types
Definition acir.hpp:2218
std::vector< Acir::ValueOrArray > destinations
Definition acir.hpp:2217
friend bool operator==(const ForeignCall &, const ForeignCall &)
Definition acir.hpp:7448
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2234
void msgpack_pack(auto &packer) const
Definition acir.hpp:2224
std::vector< Acir::ValueOrArray > inputs
Definition acir.hpp:2219
std::vector< uint8_t > value
Definition acir.hpp:2177
void msgpack_pack(auto &packer) const
Definition acir.hpp:2181
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2189
friend bool operator==(const IndirectConst &, const IndirectConst &)
Definition acir.hpp:7385
Acir::MemoryAddress destination_pointer
Definition acir.hpp:2175
void msgpack_pack(auto &packer) const
Definition acir.hpp:2059
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2065
friend bool operator==(const Jump &, const Jump &)
Definition acir.hpp:7248
void msgpack_pack(auto &packer) const
Definition acir.hpp:2030
Acir::MemoryAddress condition
Definition acir.hpp:2025
friend bool operator==(const JumpIf &, const JumpIf &)
Definition acir.hpp:7214
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2037
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2338
Acir::MemoryAddress destination
Definition acir.hpp:2326
Acir::MemoryAddress source_pointer
Definition acir.hpp:2327
friend bool operator==(const Load &, const Load &)
Definition acir.hpp:7578
void msgpack_pack(auto &packer) const
Definition acir.hpp:2331
Acir::MemoryAddress destination
Definition acir.hpp:2258
friend bool operator==(const Mov &, const Mov &)
Definition acir.hpp:7499
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2270
Acir::MemoryAddress source
Definition acir.hpp:2259
void msgpack_pack(auto &packer) const
Definition acir.hpp:2263
friend bool operator==(const Not &, const Not &)
Definition acir.hpp:7136
Acir::MemoryAddress source
Definition acir.hpp:1958
void msgpack_pack(auto &packer) const
Definition acir.hpp:1963
Acir::IntegerBitSize bit_size
Definition acir.hpp:1959
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1971
Acir::MemoryAddress destination
Definition acir.hpp:1957
friend bool operator==(const Return &, const Return &)
Definition acir.hpp:7425
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2212
void msgpack_pack(auto &packer) const
Definition acir.hpp:2211
friend bool operator==(const Stop &, const Stop &)
Definition acir.hpp:7705
void msgpack_pack(auto &packer) const
Definition acir.hpp:2434
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2440
Acir::HeapVector return_data
Definition acir.hpp:2430
friend bool operator==(const Store &, const Store &)
Definition acir.hpp:7612
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2368
Acir::MemoryAddress source
Definition acir.hpp:2357
Acir::MemoryAddress destination_pointer
Definition acir.hpp:2356
void msgpack_pack(auto &packer) const
Definition acir.hpp:2361
friend bool operator==(const Trap &, const Trap &)
Definition acir.hpp:7676
void msgpack_pack(auto &packer) const
Definition acir.hpp:2408
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2414
Acir::HeapVector revert_data
Definition acir.hpp:2404
std::variant< BinaryFieldOp, BinaryIntOp, Not, Cast, JumpIf, Jump, CalldataCopy, Call, Const, IndirectConst, Return, ForeignCall, Mov, ConditionalMov, Load, Store, BlackBox, Trap, Stop > value
Definition acir.hpp:2474
friend bool operator==(const BrilligOpcode &, const BrilligOpcode &)
Definition acir.hpp:7009
void msgpack_pack(auto &packer) const
Definition acir.hpp:2478
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2576
void msgpack_pack(auto &packer) const
Definition acir.hpp:4048
std::vector< Acir::Witness > value
Definition acir.hpp:4044
friend bool operator==(const Array &, const Array &)
Definition acir.hpp:7796
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:4050
void msgpack_pack(auto &packer) const
Definition acir.hpp:4030
friend bool operator==(const Simple &, const Simple &)
Definition acir.hpp:7766
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:4032
friend bool operator==(const BrilligOutputs &, const BrilligOutputs &)
Definition acir.hpp:7734
void msgpack_pack(auto &packer) const
Definition acir.hpp:4065
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:4095
std::variant< Simple, Array > value
Definition acir.hpp:4061
Acir::PublicInputs return_values
Definition acir.hpp:4799
void msgpack_pack(auto &packer) const
Definition acir.hpp:4804
std::vector< Acir::Opcode > opcodes
Definition acir.hpp:4796
friend bool operator==(const Circuit &, const Circuit &)
Definition acir.hpp:7825
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:4816
uint32_t current_witness_index
Definition acir.hpp:4795
std::vector< Acir::Witness > private_parameters
Definition acir.hpp:4797
Acir::PublicInputs public_parameters
Definition acir.hpp:4798
std::string function_name
Definition acir.hpp:4794
std::vector< std::tuple< Acir::OpcodeLocation, Acir::AssertionPayload > > assert_messages
Definition acir.hpp:4800
std::vector< std::tuple< std::vector< uint8_t >, Acir::Witness > > linear_combinations
Definition acir.hpp:3839
std::vector< uint8_t > q_c
Definition acir.hpp:3840
std::vector< std::tuple< std::vector< uint8_t >, Acir::Witness, Acir::Witness > > mul_terms
Definition acir.hpp:3838
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3852
void msgpack_pack(auto &packer) const
Definition acir.hpp:3844
friend bool operator==(const Expression &, const Expression &)
Definition acir.hpp:7887
void msgpack_pack(auto &packer) const
Definition acir.hpp:4500
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:4502
friend bool operator==(const Expression &, const Expression &)
Definition acir.hpp:7962
void msgpack_pack(auto &packer) const
Definition acir.hpp:4518
friend bool operator==(const Memory &, const Memory &)
Definition acir.hpp:7992
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:4520
std::variant< Expression, Memory > value
Definition acir.hpp:4531
void msgpack_pack(auto &packer) const
Definition acir.hpp:4535
friend bool operator==(const ExpressionOrMemory &, const ExpressionOrMemory &)
Definition acir.hpp:7929
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:4565
std::vector< uint8_t > value
Definition acir.hpp:2808
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2814
friend bool operator==(const Constant &, const Constant &)
Definition acir.hpp:8054
void msgpack_pack(auto &packer) const
Definition acir.hpp:2812
void msgpack_pack(auto &packer) const
Definition acir.hpp:2830
friend bool operator==(const Witness &, const Witness &)
Definition acir.hpp:8084
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2832
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2877
void msgpack_pack(auto &packer) const
Definition acir.hpp:2847
std::variant< Constant, Witness > value
Definition acir.hpp:2843
friend bool operator==(const FunctionInput &, const FunctionInput &)
Definition acir.hpp:8022
void msgpack_pack(auto &packer) const
Definition acir.hpp:853
Acir::SemiFlattenedLength size
Definition acir.hpp:849
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:860
friend bool operator==(const HeapArray &, const HeapArray &)
Definition acir.hpp:8114
Acir::MemoryAddress pointer
Definition acir.hpp:848
Acir::SemanticLength size
Definition acir.hpp:1542
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1553
void msgpack_pack(auto &packer) const
Definition acir.hpp:1546
friend bool operator==(const Array &, const Array &)
Definition acir.hpp:8212
std::vector< Acir::HeapValueType > value_types
Definition acir.hpp:1541
void msgpack_pack(auto &packer) const
Definition acir.hpp:1527
friend bool operator==(const Simple &, const Simple &)
Definition acir.hpp:8183
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1529
friend bool operator==(const Vector &, const Vector &)
Definition acir.hpp:8246
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1581
void msgpack_pack(auto &packer) const
Definition acir.hpp:1575
std::vector< Acir::HeapValueType > value_types
Definition acir.hpp:1571
void msgpack_pack(auto &packer) const
Definition acir.hpp:1600
friend bool operator==(const HeapValueType &, const HeapValueType &)
Definition acir.hpp:8151
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1634
std::variant< Simple, Array, Vector > value
Definition acir.hpp:1596
void msgpack_pack(auto &packer) const
Definition acir.hpp:1698
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1705
friend bool operator==(const HeapVector &, const HeapVector &)
Definition acir.hpp:8275
Acir::MemoryAddress size
Definition acir.hpp:1694
Acir::MemoryAddress pointer
Definition acir.hpp:1693
static void conv_fld_from_kvmap(std::map< std::string, msgpack::object const * > const &kvmap, std::string const &struct_name, std::string const &field_name, T &field, bool is_optional)
Definition acir.hpp:27
static std::map< std::string, msgpack::object const * > make_kvmap(msgpack::object const &o, std::string const &name)
Definition acir.hpp:8
static void conv_fld_from_array(msgpack::object_array const &array, std::string const &struct_name, std::string const &field_name, T &field, uint32_t index)
Definition acir.hpp:50
friend bool operator==(const U128 &, const U128 &)
Definition acir.hpp:8459
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:508
void msgpack_pack(auto &packer) const
Definition acir.hpp:507
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:487
friend bool operator==(const U16 &, const U16 &)
Definition acir.hpp:8390
void msgpack_pack(auto &packer) const
Definition acir.hpp:486
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:473
void msgpack_pack(auto &packer) const
Definition acir.hpp:472
friend bool operator==(const U1 &, const U1 &)
Definition acir.hpp:8344
void msgpack_pack(auto &packer) const
Definition acir.hpp:493
friend bool operator==(const U32 &, const U32 &)
Definition acir.hpp:8413
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:494
void msgpack_pack(auto &packer) const
Definition acir.hpp:500
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:501
friend bool operator==(const U64 &, const U64 &)
Definition acir.hpp:8436
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:480
void msgpack_pack(auto &packer) const
Definition acir.hpp:479
friend bool operator==(const U8 &, const U8 &)
Definition acir.hpp:8367
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:561
friend bool operator==(const IntegerBitSize &, const IntegerBitSize &)
Definition acir.hpp:8312
std::variant< U1, U8, U16, U32, U64, U128 > value
Definition acir.hpp:511
void msgpack_pack(auto &packer) const
Definition acir.hpp:515
Acir::Expression value
Definition acir.hpp:4146
friend bool operator==(const MemOp &, const MemOp &)
Definition acir.hpp:8482
void msgpack_pack(auto &packer) const
Definition acir.hpp:4150
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:4158
Acir::Expression operation
Definition acir.hpp:4144
Acir::Expression index
Definition acir.hpp:4145
void msgpack_pack(auto &packer) const
Definition acir.hpp:716
friend bool operator==(const Direct &, const Direct &)
Definition acir.hpp:8556
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:718
void msgpack_pack(auto &packer) const
Definition acir.hpp:734
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:736
friend bool operator==(const Relative &, const Relative &)
Definition acir.hpp:8585
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:781
friend bool operator==(const MemoryAddress &, const MemoryAddress &)
Definition acir.hpp:8524
void msgpack_pack(auto &packer) const
Definition acir.hpp:751
std::variant< Direct, Relative > value
Definition acir.hpp:747
void msgpack_pack(auto &packer) const
Definition acir.hpp:4184
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:4186
Acir::Expression value
Definition acir.hpp:4180
friend bool operator==(const AssertZero &, const AssertZero &)
Definition acir.hpp:8647
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:4204
Acir::BlackBoxFuncCall value
Definition acir.hpp:4198
friend bool operator==(const BlackBoxFuncCall &, const BlackBoxFuncCall &)
Definition acir.hpp:8676
void msgpack_pack(auto &packer) const
Definition acir.hpp:4202
friend bool operator==(const BrilligCall &, const BrilligCall &)
Definition acir.hpp:8778
std::vector< Acir::BrilligInputs > inputs
Definition acir.hpp:4281
Acir::Expression predicate
Definition acir.hpp:4283
void msgpack_pack(auto &packer) const
Definition acir.hpp:4287
std::vector< Acir::BrilligOutputs > outputs
Definition acir.hpp:4282
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:4296
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:4334
Acir::Expression predicate
Definition acir.hpp:4321
friend bool operator==(const Call &, const Call &)
Definition acir.hpp:8822
void msgpack_pack(auto &packer) const
Definition acir.hpp:4325
std::vector< Acir::Witness > outputs
Definition acir.hpp:4320
std::vector< Acir::Witness > inputs
Definition acir.hpp:4319
Acir::BlockId block_id
Definition acir.hpp:4246
std::vector< Acir::Witness > init
Definition acir.hpp:4247
Acir::BlockType block_type
Definition acir.hpp:4248
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:4260
void msgpack_pack(auto &packer) const
Definition acir.hpp:4252
friend bool operator==(const MemoryInit &, const MemoryInit &)
Definition acir.hpp:8739
friend bool operator==(const MemoryOp &, const MemoryOp &)
Definition acir.hpp:8706
void msgpack_pack(auto &packer) const
Definition acir.hpp:4221
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:4228
Acir::BlockId block_id
Definition acir.hpp:4216
std::variant< AssertZero, BlackBoxFuncCall, MemoryOp, MemoryInit, BrilligCall, Call > value
Definition acir.hpp:4355
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:4405
friend bool operator==(const Opcode &, const Opcode &)
Definition acir.hpp:8615
void msgpack_pack(auto &packer) const
Definition acir.hpp:4359
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:4652
friend bool operator==(const Acir &, const Acir &)
Definition acir.hpp:8897
void msgpack_pack(auto &packer) const
Definition acir.hpp:4650
friend bool operator==(const Brillig &, const Brillig &)
Definition acir.hpp:8926
void msgpack_pack(auto &packer) const
Definition acir.hpp:4669
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:4676
friend bool operator==(const OpcodeLocation &, const OpcodeLocation &)
Definition acir.hpp:8865
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:4727
std::variant< Acir, Brillig > value
Definition acir.hpp:4693
void msgpack_pack(auto &packer) const
Definition acir.hpp:4697
void msgpack_pack(auto &packer) const
Definition acir.hpp:4879
std::vector< Acir::Circuit > functions
Definition acir.hpp:4874
friend bool operator==(const Program &, const Program &)
Definition acir.hpp:8961
std::vector< Acir::BrilligBytecode > unconstrained_functions
Definition acir.hpp:4875
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:4886
void msgpack_pack(auto &packer) const
Definition acir.hpp:4909
std::vector< Acir::Circuit > functions
Definition acir.hpp:4904
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:4916
std::monostate unconstrained_functions
Definition acir.hpp:4905
friend bool operator==(const ProgramWithoutBrillig &, const ProgramWithoutBrillig &)
Definition acir.hpp:8999
friend bool operator==(const PublicInputs &, const PublicInputs &)
Definition acir.hpp:9038
std::vector< Acir::Witness > value
Definition acir.hpp:4776
void msgpack_pack(auto &packer) const
Definition acir.hpp:4780
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:4782
friend bool operator==(const SemanticLength &, const SemanticLength &)
Definition acir.hpp:9070
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1507
void msgpack_pack(auto &packer) const
Definition acir.hpp:1505
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:836
friend bool operator==(const SemiFlattenedLength &, const SemiFlattenedLength &)
Definition acir.hpp:9102
void msgpack_pack(auto &packer) const
Definition acir.hpp:834
void msgpack_pack(auto &packer) const
Definition acir.hpp:1747
friend bool operator==(const HeapArray &, const HeapArray &)
Definition acir.hpp:9197
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1749
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1767
void msgpack_pack(auto &packer) const
Definition acir.hpp:1765
friend bool operator==(const HeapVector &, const HeapVector &)
Definition acir.hpp:9227
void msgpack_pack(auto &packer) const
Definition acir.hpp:1729
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1731
friend bool operator==(const MemoryAddress &, const MemoryAddress &)
Definition acir.hpp:9167
Acir::MemoryAddress value
Definition acir.hpp:1725
void msgpack_pack(auto &packer) const
Definition acir.hpp:1782
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1816
std::variant< MemoryAddress, HeapArray, HeapVector > value
Definition acir.hpp:1778
friend bool operator==(const ValueOrArray &, const ValueOrArray &)
Definition acir.hpp:9135
uint32_t value
Definition acir.hpp:2788
void msgpack_pack(auto &packer) const
Definition acir.hpp:2792
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2794
friend bool operator==(const Witness &, const Witness &)
Definition acir.hpp:9257
static T deserialize(Deserializer &deserializer)
static void serialize(const T &value, Serializer &serializer)
void throw_or_abort(std::string const &err)