longfellow 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (289) hide show
  1. checksums.yaml +7 -0
  2. data/CODE_OF_CONDUCT.md +10 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +152 -0
  5. data/ext/longfellow/CMakeLists.txt +76 -0
  6. data/ext/longfellow/extconf.rb +77 -0
  7. data/lib/longfellow/attribute.rb +65 -0
  8. data/lib/longfellow/c.rb +105 -0
  9. data/lib/longfellow/errors.rb +78 -0
  10. data/lib/longfellow/version.rb +5 -0
  11. data/lib/longfellow/zk_spec.rb +40 -0
  12. data/lib/longfellow.rb +162 -0
  13. data/sig/longfellow.rbs +74 -0
  14. data/vendor/longfellow-zk/LICENSE +203 -0
  15. data/vendor/longfellow-zk/lib/algebra/blas.h +121 -0
  16. data/vendor/longfellow-zk/lib/algebra/bogorng.h +68 -0
  17. data/vendor/longfellow-zk/lib/algebra/compare.h +40 -0
  18. data/vendor/longfellow-zk/lib/algebra/convolution.h +219 -0
  19. data/vendor/longfellow-zk/lib/algebra/crt.cc +42 -0
  20. data/vendor/longfellow-zk/lib/algebra/crt.h +299 -0
  21. data/vendor/longfellow-zk/lib/algebra/crt_convolution.h +114 -0
  22. data/vendor/longfellow-zk/lib/algebra/crt_test.cc +371 -0
  23. data/vendor/longfellow-zk/lib/algebra/fft.h +104 -0
  24. data/vendor/longfellow-zk/lib/algebra/fft_interpolation.h +304 -0
  25. data/vendor/longfellow-zk/lib/algebra/fft_interpolation_test.cc +168 -0
  26. data/vendor/longfellow-zk/lib/algebra/fft_test.cc +257 -0
  27. data/vendor/longfellow-zk/lib/algebra/fp.h +59 -0
  28. data/vendor/longfellow-zk/lib/algebra/fp2.h +240 -0
  29. data/vendor/longfellow-zk/lib/algebra/fp24.h +342 -0
  30. data/vendor/longfellow-zk/lib/algebra/fp24_6.h +305 -0
  31. data/vendor/longfellow-zk/lib/algebra/fp24_6_test.cc +197 -0
  32. data/vendor/longfellow-zk/lib/algebra/fp2_test.cc +280 -0
  33. data/vendor/longfellow-zk/lib/algebra/fp_generic.h +533 -0
  34. data/vendor/longfellow-zk/lib/algebra/fp_p128.h +91 -0
  35. data/vendor/longfellow-zk/lib/algebra/fp_p256.h +68 -0
  36. data/vendor/longfellow-zk/lib/algebra/fp_p256k1.h +123 -0
  37. data/vendor/longfellow-zk/lib/algebra/fp_p384.h +65 -0
  38. data/vendor/longfellow-zk/lib/algebra/fp_p521.h +62 -0
  39. data/vendor/longfellow-zk/lib/algebra/fp_test.cc +522 -0
  40. data/vendor/longfellow-zk/lib/algebra/hash.h +39 -0
  41. data/vendor/longfellow-zk/lib/algebra/interpolation.h +117 -0
  42. data/vendor/longfellow-zk/lib/algebra/interpolation_test.cc +74 -0
  43. data/vendor/longfellow-zk/lib/algebra/limb.h +153 -0
  44. data/vendor/longfellow-zk/lib/algebra/limb_test.cc +75 -0
  45. data/vendor/longfellow-zk/lib/algebra/nat.cc +32 -0
  46. data/vendor/longfellow-zk/lib/algebra/nat.h +212 -0
  47. data/vendor/longfellow-zk/lib/algebra/nat_test.cc +183 -0
  48. data/vendor/longfellow-zk/lib/algebra/nussbaumer.h +400 -0
  49. data/vendor/longfellow-zk/lib/algebra/nussbaumer_test.cc +138 -0
  50. data/vendor/longfellow-zk/lib/algebra/nussbaumerfp2_test.cc +139 -0
  51. data/vendor/longfellow-zk/lib/algebra/permutations.h +79 -0
  52. data/vendor/longfellow-zk/lib/algebra/poly.h +240 -0
  53. data/vendor/longfellow-zk/lib/algebra/poly_test.cc +123 -0
  54. data/vendor/longfellow-zk/lib/algebra/reed_solomon.h +150 -0
  55. data/vendor/longfellow-zk/lib/algebra/reed_solomon_extension.h +108 -0
  56. data/vendor/longfellow-zk/lib/algebra/reed_solomon_extension_test.cc +76 -0
  57. data/vendor/longfellow-zk/lib/algebra/reed_solomon_test.cc +473 -0
  58. data/vendor/longfellow-zk/lib/algebra/rfft.h +400 -0
  59. data/vendor/longfellow-zk/lib/algebra/rfft_test.cc +102 -0
  60. data/vendor/longfellow-zk/lib/algebra/static_string.h +29 -0
  61. data/vendor/longfellow-zk/lib/algebra/sysdep.h +495 -0
  62. data/vendor/longfellow-zk/lib/algebra/sysdep_test.cc +41 -0
  63. data/vendor/longfellow-zk/lib/algebra/twiddle.h +59 -0
  64. data/vendor/longfellow-zk/lib/algebra/utility.h +86 -0
  65. data/vendor/longfellow-zk/lib/algebra/utility_test.cc +86 -0
  66. data/vendor/longfellow-zk/lib/arrays/affine.h +56 -0
  67. data/vendor/longfellow-zk/lib/arrays/affine_test.cc +220 -0
  68. data/vendor/longfellow-zk/lib/arrays/dense.h +210 -0
  69. data/vendor/longfellow-zk/lib/arrays/eq.h +75 -0
  70. data/vendor/longfellow-zk/lib/arrays/eqs.h +137 -0
  71. data/vendor/longfellow-zk/lib/arrays/eqs_test.cc +151 -0
  72. data/vendor/longfellow-zk/lib/arrays/sparse.h +192 -0
  73. data/vendor/longfellow-zk/lib/cbor/host_decoder.h +323 -0
  74. data/vendor/longfellow-zk/lib/cbor/host_decoder_test.cc +541 -0
  75. data/vendor/longfellow-zk/lib/circuits/cbor_parser/cbor.h +594 -0
  76. data/vendor/longfellow-zk/lib/circuits/cbor_parser/cbor_byte_decoder.h +150 -0
  77. data/vendor/longfellow-zk/lib/circuits/cbor_parser/cbor_byte_decoder_test.cc +147 -0
  78. data/vendor/longfellow-zk/lib/circuits/cbor_parser/cbor_constants.h +27 -0
  79. data/vendor/longfellow-zk/lib/circuits/cbor_parser/cbor_pluck.h +110 -0
  80. data/vendor/longfellow-zk/lib/circuits/cbor_parser/cbor_pluck_test.cc +55 -0
  81. data/vendor/longfellow-zk/lib/circuits/cbor_parser/cbor_test.cc +174 -0
  82. data/vendor/longfellow-zk/lib/circuits/cbor_parser/cbor_testing.h +98 -0
  83. data/vendor/longfellow-zk/lib/circuits/cbor_parser/cbor_witness.h +312 -0
  84. data/vendor/longfellow-zk/lib/circuits/cbor_parser/mso2_test.cc +662 -0
  85. data/vendor/longfellow-zk/lib/circuits/cbor_parser/mso_test.cc +485 -0
  86. data/vendor/longfellow-zk/lib/circuits/cbor_parser/scan.h +104 -0
  87. data/vendor/longfellow-zk/lib/circuits/cbor_parser/scan_test.cc +137 -0
  88. data/vendor/longfellow-zk/lib/circuits/cbor_parser_v2/cbor.h +640 -0
  89. data/vendor/longfellow-zk/lib/circuits/cbor_parser_v2/cbor_byte_decoder.h +150 -0
  90. data/vendor/longfellow-zk/lib/circuits/cbor_parser_v2/cbor_byte_decoder_test.cc +147 -0
  91. data/vendor/longfellow-zk/lib/circuits/cbor_parser_v2/cbor_constants.h +27 -0
  92. data/vendor/longfellow-zk/lib/circuits/cbor_parser_v2/cbor_testing.h +99 -0
  93. data/vendor/longfellow-zk/lib/circuits/cbor_parser_v2/cbor_witness.h +319 -0
  94. data/vendor/longfellow-zk/lib/circuits/cbor_parser_v2/lexer_test.cc +120 -0
  95. data/vendor/longfellow-zk/lib/circuits/cbor_parser_v2/mdoc_examples_test.cc +89 -0
  96. data/vendor/longfellow-zk/lib/circuits/cbor_parser_v2/parser_circuit_test.cc +506 -0
  97. data/vendor/longfellow-zk/lib/circuits/cbor_parser_v2/parser_size_test.cc +79 -0
  98. data/vendor/longfellow-zk/lib/circuits/cbor_parser_v2/parser_test.cc +473 -0
  99. data/vendor/longfellow-zk/lib/circuits/compiler/canonicalization_test.cc +185 -0
  100. data/vendor/longfellow-zk/lib/circuits/compiler/circuit_dump.h +65 -0
  101. data/vendor/longfellow-zk/lib/circuits/compiler/compiler.h +471 -0
  102. data/vendor/longfellow-zk/lib/circuits/compiler/compiler_test.cc +110 -0
  103. data/vendor/longfellow-zk/lib/circuits/compiler/node.h +176 -0
  104. data/vendor/longfellow-zk/lib/circuits/compiler/pdqhash.h +127 -0
  105. data/vendor/longfellow-zk/lib/circuits/compiler/schedule.h +435 -0
  106. data/vendor/longfellow-zk/lib/circuits/ecdsa/verify_circuit.h +371 -0
  107. data/vendor/longfellow-zk/lib/circuits/ecdsa/verify_external_test.cc +246 -0
  108. data/vendor/longfellow-zk/lib/circuits/ecdsa/verify_test.cc +587 -0
  109. data/vendor/longfellow-zk/lib/circuits/ecdsa/verify_witness.h +201 -0
  110. data/vendor/longfellow-zk/lib/circuits/logic/bit_adder.h +140 -0
  111. data/vendor/longfellow-zk/lib/circuits/logic/bit_adder_test.cc +64 -0
  112. data/vendor/longfellow-zk/lib/circuits/logic/bit_plucker.h +247 -0
  113. data/vendor/longfellow-zk/lib/circuits/logic/bit_plucker_constants.h +35 -0
  114. data/vendor/longfellow-zk/lib/circuits/logic/bit_plucker_encoder.h +72 -0
  115. data/vendor/longfellow-zk/lib/circuits/logic/bit_plucker_test.cc +183 -0
  116. data/vendor/longfellow-zk/lib/circuits/logic/compiler_backend.h +62 -0
  117. data/vendor/longfellow-zk/lib/circuits/logic/counter.h +171 -0
  118. data/vendor/longfellow-zk/lib/circuits/logic/counter_test.cc +102 -0
  119. data/vendor/longfellow-zk/lib/circuits/logic/evaluation_backend.h +94 -0
  120. data/vendor/longfellow-zk/lib/circuits/logic/logic.h +1232 -0
  121. data/vendor/longfellow-zk/lib/circuits/logic/logic_circuit_test.cc +310 -0
  122. data/vendor/longfellow-zk/lib/circuits/logic/logic_test.cc +521 -0
  123. data/vendor/longfellow-zk/lib/circuits/logic/memcmp.h +68 -0
  124. data/vendor/longfellow-zk/lib/circuits/logic/memcmp_test.cc +148 -0
  125. data/vendor/longfellow-zk/lib/circuits/logic/polynomial.h +94 -0
  126. data/vendor/longfellow-zk/lib/circuits/logic/polynomial_test.cc +62 -0
  127. data/vendor/longfellow-zk/lib/circuits/logic/routing.h +445 -0
  128. data/vendor/longfellow-zk/lib/circuits/logic/routing_test.cc +241 -0
  129. data/vendor/longfellow-zk/lib/circuits/logic/unary.h +55 -0
  130. data/vendor/longfellow-zk/lib/circuits/logic/unary_plucker.h +77 -0
  131. data/vendor/longfellow-zk/lib/circuits/logic/unary_plucker_constants.h +37 -0
  132. data/vendor/longfellow-zk/lib/circuits/logic/unary_plucker_test.cc +53 -0
  133. data/vendor/longfellow-zk/lib/circuits/logic/unary_size_test.cc +69 -0
  134. data/vendor/longfellow-zk/lib/circuits/logic/unary_test.cc +62 -0
  135. data/vendor/longfellow-zk/lib/circuits/mac/mac_circuit.h +193 -0
  136. data/vendor/longfellow-zk/lib/circuits/mac/mac_circuit_test.cc +223 -0
  137. data/vendor/longfellow-zk/lib/circuits/mac/mac_reference.h +72 -0
  138. data/vendor/longfellow-zk/lib/circuits/mac/mac_witness.h +94 -0
  139. data/vendor/longfellow-zk/lib/circuits/mdoc/circuit_maker.cc +242 -0
  140. data/vendor/longfellow-zk/lib/circuits/mdoc/mdoc_attribute_ids.h +311 -0
  141. data/vendor/longfellow-zk/lib/circuits/mdoc/mdoc_attribute_test.cc +64 -0
  142. data/vendor/longfellow-zk/lib/circuits/mdoc/mdoc_circuit_id.cc +85 -0
  143. data/vendor/longfellow-zk/lib/circuits/mdoc/mdoc_constants.h +85 -0
  144. data/vendor/longfellow-zk/lib/circuits/mdoc/mdoc_decompress.cc +41 -0
  145. data/vendor/longfellow-zk/lib/circuits/mdoc/mdoc_decompress.h +27 -0
  146. data/vendor/longfellow-zk/lib/circuits/mdoc/mdoc_examples.h +5232 -0
  147. data/vendor/longfellow-zk/lib/circuits/mdoc/mdoc_generate_circuit.cc +199 -0
  148. data/vendor/longfellow-zk/lib/circuits/mdoc/mdoc_hash.h +554 -0
  149. data/vendor/longfellow-zk/lib/circuits/mdoc/mdoc_signature.h +143 -0
  150. data/vendor/longfellow-zk/lib/circuits/mdoc/mdoc_signature_test.cc +444 -0
  151. data/vendor/longfellow-zk/lib/circuits/mdoc/mdoc_test_attributes.h +157 -0
  152. data/vendor/longfellow-zk/lib/circuits/mdoc/mdoc_witness.h +863 -0
  153. data/vendor/longfellow-zk/lib/circuits/mdoc/mdoc_zk.cc +693 -0
  154. data/vendor/longfellow-zk/lib/circuits/mdoc/mdoc_zk.h +216 -0
  155. data/vendor/longfellow-zk/lib/circuits/mdoc/mdoc_zk_test.cc +724 -0
  156. data/vendor/longfellow-zk/lib/circuits/mdoc/zk_spec.cc +100 -0
  157. data/vendor/longfellow-zk/lib/circuits/mdoc/zk_spec_test.cc +155 -0
  158. data/vendor/longfellow-zk/lib/circuits/sha/flatsha256_circuit.h +330 -0
  159. data/vendor/longfellow-zk/lib/circuits/sha/flatsha256_circuit_test.cc +607 -0
  160. data/vendor/longfellow-zk/lib/circuits/sha/flatsha256_io.h +26 -0
  161. data/vendor/longfellow-zk/lib/circuits/sha/flatsha256_witness.cc +163 -0
  162. data/vendor/longfellow-zk/lib/circuits/sha/flatsha256_witness.h +47 -0
  163. data/vendor/longfellow-zk/lib/circuits/sha/sha256_constants.cc +34 -0
  164. data/vendor/longfellow-zk/lib/circuits/sha/sha256_constants.h +27 -0
  165. data/vendor/longfellow-zk/lib/circuits/sha/sha256_test_values.h +389 -0
  166. data/vendor/longfellow-zk/lib/circuits/tests/anoncred/ptrcred.h +171 -0
  167. data/vendor/longfellow-zk/lib/circuits/tests/anoncred/small.h +218 -0
  168. data/vendor/longfellow-zk/lib/circuits/tests/anoncred/small_examples.h +118 -0
  169. data/vendor/longfellow-zk/lib/circuits/tests/anoncred/small_io.h +25 -0
  170. data/vendor/longfellow-zk/lib/circuits/tests/anoncred/small_test.cc +208 -0
  171. data/vendor/longfellow-zk/lib/circuits/tests/anoncred/small_witness.h +130 -0
  172. data/vendor/longfellow-zk/lib/circuits/tests/base64/decode.h +508 -0
  173. data/vendor/longfellow-zk/lib/circuits/tests/base64/decode_circuit_test.cc +95 -0
  174. data/vendor/longfellow-zk/lib/circuits/tests/base64/decode_test.cc +119 -0
  175. data/vendor/longfellow-zk/lib/circuits/tests/base64/decode_util.cc +47 -0
  176. data/vendor/longfellow-zk/lib/circuits/tests/base64/decode_util.h +29 -0
  177. data/vendor/longfellow-zk/lib/circuits/tests/ec/pk_circuit.h +231 -0
  178. data/vendor/longfellow-zk/lib/circuits/tests/ec/pk_circuit_test.cc +428 -0
  179. data/vendor/longfellow-zk/lib/circuits/tests/ec/pk_witness.h +102 -0
  180. data/vendor/longfellow-zk/lib/circuits/tests/jwt/jwt.h +190 -0
  181. data/vendor/longfellow-zk/lib/circuits/tests/jwt/jwt_constants.h +26 -0
  182. data/vendor/longfellow-zk/lib/circuits/tests/jwt/jwt_test.cc +559 -0
  183. data/vendor/longfellow-zk/lib/circuits/tests/jwt/jwt_witness.h +315 -0
  184. data/vendor/longfellow-zk/lib/circuits/tests/mdoc/mdoc_1f.h +411 -0
  185. data/vendor/longfellow-zk/lib/circuits/tests/mdoc/mdoc_1f_io.h +32 -0
  186. data/vendor/longfellow-zk/lib/circuits/tests/mdoc/mdoc_1f_test.cc +364 -0
  187. data/vendor/longfellow-zk/lib/circuits/tests/mdoc/mdoc_1f_witness.h +278 -0
  188. data/vendor/longfellow-zk/lib/circuits/tests/mdoc/mdoc_revocation.h +146 -0
  189. data/vendor/longfellow-zk/lib/circuits/tests/mdoc/mdoc_revocation_constants.h +25 -0
  190. data/vendor/longfellow-zk/lib/circuits/tests/mdoc/mdoc_revocation_test.cc +315 -0
  191. data/vendor/longfellow-zk/lib/circuits/tests/mdoc/mdoc_revocation_witness.h +136 -0
  192. data/vendor/longfellow-zk/lib/circuits/tests/pq/bitaddr/bitaddr.h +250 -0
  193. data/vendor/longfellow-zk/lib/circuits/tests/pq/bitaddr/bitaddr_test.cc +333 -0
  194. data/vendor/longfellow-zk/lib/circuits/tests/pq/bitaddr/bitaddr_witness.h +152 -0
  195. data/vendor/longfellow-zk/lib/circuits/tests/pq/ml_dsa/ml_dsa_44.h +903 -0
  196. data/vendor/longfellow-zk/lib/circuits/tests/pq/ml_dsa/ml_dsa_44_circuit_test.cc +274 -0
  197. data/vendor/longfellow-zk/lib/circuits/tests/pq/ml_dsa/ml_dsa_44_eval_test.cc +440 -0
  198. data/vendor/longfellow-zk/lib/circuits/tests/pq/ml_dsa/ml_dsa_44_examples.cc +8851 -0
  199. data/vendor/longfellow-zk/lib/circuits/tests/pq/ml_dsa/ml_dsa_44_examples.h +93 -0
  200. data/vendor/longfellow-zk/lib/circuits/tests/pq/ml_dsa/ml_dsa_44_types.cc +24 -0
  201. data/vendor/longfellow-zk/lib/circuits/tests/pq/ml_dsa/ml_dsa_44_types.h +118 -0
  202. data/vendor/longfellow-zk/lib/circuits/tests/pq/ml_dsa/ml_dsa_44_witness.h +453 -0
  203. data/vendor/longfellow-zk/lib/circuits/tests/pq/ml_dsa/ml_dsa_44_witness_test.cc +49 -0
  204. data/vendor/longfellow-zk/lib/circuits/tests/pq/ml_dsa/ml_dsa_ref.cc +458 -0
  205. data/vendor/longfellow-zk/lib/circuits/tests/pq/ml_dsa/ml_dsa_ref.h +150 -0
  206. data/vendor/longfellow-zk/lib/circuits/tests/pq/ml_dsa/ml_dsa_ref_test.cc +398 -0
  207. data/vendor/longfellow-zk/lib/circuits/tests/pq/ml_dsa/ml_dsa_ref_test_vectors.inc +3618 -0
  208. data/vendor/longfellow-zk/lib/circuits/tests/pq/ml_dsa/ml_dsa_ref_test_vectors_pkdecode.inc +689 -0
  209. data/vendor/longfellow-zk/lib/circuits/tests/pq/ml_dsa/ml_dsa_ref_test_vectors_sigdecode.inc +1501 -0
  210. data/vendor/longfellow-zk/lib/circuits/tests/pq/ml_dsa/sigdecode_test_vectors.inc +540 -0
  211. data/vendor/longfellow-zk/lib/circuits/tests/ripemd/ripemd_circuit.h +394 -0
  212. data/vendor/longfellow-zk/lib/circuits/tests/ripemd/ripemd_circuit_test.cc +577 -0
  213. data/vendor/longfellow-zk/lib/circuits/tests/ripemd/ripemd_constants.h +90 -0
  214. data/vendor/longfellow-zk/lib/circuits/tests/ripemd/ripemd_witness.cc +174 -0
  215. data/vendor/longfellow-zk/lib/circuits/tests/ripemd/ripemd_witness.h +140 -0
  216. data/vendor/longfellow-zk/lib/circuits/tests/sha3/sha3_circuit.h +351 -0
  217. data/vendor/longfellow-zk/lib/circuits/tests/sha3/sha3_circuit_test.cc +466 -0
  218. data/vendor/longfellow-zk/lib/circuits/tests/sha3/sha3_reference.cc +207 -0
  219. data/vendor/longfellow-zk/lib/circuits/tests/sha3/sha3_reference.h +59 -0
  220. data/vendor/longfellow-zk/lib/circuits/tests/sha3/sha3_reference_test.cc +153 -0
  221. data/vendor/longfellow-zk/lib/circuits/tests/sha3/sha3_round_constants.cc +39 -0
  222. data/vendor/longfellow-zk/lib/circuits/tests/sha3/sha3_round_constants.h +29 -0
  223. data/vendor/longfellow-zk/lib/circuits/tests/sha3/sha3_slicing.h +31 -0
  224. data/vendor/longfellow-zk/lib/circuits/tests/sha3/sha3_witness.cc +83 -0
  225. data/vendor/longfellow-zk/lib/circuits/tests/sha3/sha3_witness.h +72 -0
  226. data/vendor/longfellow-zk/lib/circuits/tests/sha3/shake_test_vectors.h +477 -0
  227. data/vendor/longfellow-zk/lib/ec/elliptic_curve.h +596 -0
  228. data/vendor/longfellow-zk/lib/ec/elliptic_curve_test.cc +548 -0
  229. data/vendor/longfellow-zk/lib/ec/p256.cc +36 -0
  230. data/vendor/longfellow-zk/lib/ec/p256.h +60 -0
  231. data/vendor/longfellow-zk/lib/ec/p256k1.cc +34 -0
  232. data/vendor/longfellow-zk/lib/ec/p256k1.h +60 -0
  233. data/vendor/longfellow-zk/lib/gf2k/gf2_128.h +503 -0
  234. data/vendor/longfellow-zk/lib/gf2k/gf2_128_bench.cc +48 -0
  235. data/vendor/longfellow-zk/lib/gf2k/gf2_128_test.cc +416 -0
  236. data/vendor/longfellow-zk/lib/gf2k/gf2poly.h +74 -0
  237. data/vendor/longfellow-zk/lib/gf2k/lch14.h +242 -0
  238. data/vendor/longfellow-zk/lib/gf2k/lch14_bench.cc +75 -0
  239. data/vendor/longfellow-zk/lib/gf2k/lch14_reed_solomon.h +127 -0
  240. data/vendor/longfellow-zk/lib/gf2k/lch14_reed_solomon_test.cc +110 -0
  241. data/vendor/longfellow-zk/lib/gf2k/lch14_test.cc +246 -0
  242. data/vendor/longfellow-zk/lib/gf2k/sysdep.h +329 -0
  243. data/vendor/longfellow-zk/lib/ligero/ligero_param.h +449 -0
  244. data/vendor/longfellow-zk/lib/ligero/ligero_prover.h +354 -0
  245. data/vendor/longfellow-zk/lib/ligero/ligero_test.cc +136 -0
  246. data/vendor/longfellow-zk/lib/ligero/ligero_transcript.h +67 -0
  247. data/vendor/longfellow-zk/lib/ligero/ligero_verifier.h +272 -0
  248. data/vendor/longfellow-zk/lib/merkle/merkle_commitment.h +104 -0
  249. data/vendor/longfellow-zk/lib/merkle/merkle_tree.h +216 -0
  250. data/vendor/longfellow-zk/lib/merkle/merkle_tree_test.cc +240 -0
  251. data/vendor/longfellow-zk/lib/proto/circuit.h +354 -0
  252. data/vendor/longfellow-zk/lib/proto/circuit_test.cc +202 -0
  253. data/vendor/longfellow-zk/lib/random/random.h +119 -0
  254. data/vendor/longfellow-zk/lib/random/random_test.cc +189 -0
  255. data/vendor/longfellow-zk/lib/random/secure_random_engine.h +37 -0
  256. data/vendor/longfellow-zk/lib/random/transcript.h +193 -0
  257. data/vendor/longfellow-zk/lib/random/transcript_test.cc +344 -0
  258. data/vendor/longfellow-zk/lib/sumcheck/circuit.h +148 -0
  259. data/vendor/longfellow-zk/lib/sumcheck/circuit_id.h +71 -0
  260. data/vendor/longfellow-zk/lib/sumcheck/equad.h +126 -0
  261. data/vendor/longfellow-zk/lib/sumcheck/hquad.h +115 -0
  262. data/vendor/longfellow-zk/lib/sumcheck/prover.h +59 -0
  263. data/vendor/longfellow-zk/lib/sumcheck/prover_layers.h +362 -0
  264. data/vendor/longfellow-zk/lib/sumcheck/quad.h +227 -0
  265. data/vendor/longfellow-zk/lib/sumcheck/quad_builder.h +211 -0
  266. data/vendor/longfellow-zk/lib/sumcheck/quad_test.cc +169 -0
  267. data/vendor/longfellow-zk/lib/sumcheck/sumcheck_test.cc +324 -0
  268. data/vendor/longfellow-zk/lib/sumcheck/testing.h +69 -0
  269. data/vendor/longfellow-zk/lib/sumcheck/transcript_sumcheck.h +85 -0
  270. data/vendor/longfellow-zk/lib/sumcheck/verifier.h +84 -0
  271. data/vendor/longfellow-zk/lib/sumcheck/verifier_layers.h +221 -0
  272. data/vendor/longfellow-zk/lib/testing/test_main.cc +50 -0
  273. data/vendor/longfellow-zk/lib/util/ceildiv.h +164 -0
  274. data/vendor/longfellow-zk/lib/util/ceildiv_test.cc +152 -0
  275. data/vendor/longfellow-zk/lib/util/crc64.h +45 -0
  276. data/vendor/longfellow-zk/lib/util/crypto.cc +39 -0
  277. data/vendor/longfellow-zk/lib/util/crypto.h +108 -0
  278. data/vendor/longfellow-zk/lib/util/log.cc +110 -0
  279. data/vendor/longfellow-zk/lib/util/log.h +33 -0
  280. data/vendor/longfellow-zk/lib/util/panic.h +40 -0
  281. data/vendor/longfellow-zk/lib/util/readbuffer.h +67 -0
  282. data/vendor/longfellow-zk/lib/util/serialization.h +54 -0
  283. data/vendor/longfellow-zk/lib/zk/zk_common.h +455 -0
  284. data/vendor/longfellow-zk/lib/zk/zk_proof.h +378 -0
  285. data/vendor/longfellow-zk/lib/zk/zk_prover.h +202 -0
  286. data/vendor/longfellow-zk/lib/zk/zk_test.cc +340 -0
  287. data/vendor/longfellow-zk/lib/zk/zk_testing.h +154 -0
  288. data/vendor/longfellow-zk/lib/zk/zk_verifier.h +109 -0
  289. metadata +347 -0
@@ -0,0 +1,506 @@
1
+ // Copyright 2026 Google LLC.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #include <stddef.h>
16
+
17
+ #include <cstdint>
18
+ #include <memory>
19
+ #include <vector>
20
+
21
+ #include "algebra/fp_p256.h"
22
+ #include "arrays/dense.h"
23
+ #include "circuits/cbor_parser_v2/cbor.h"
24
+ #include "circuits/cbor_parser_v2/cbor_witness.h"
25
+ #include "circuits/compiler/circuit_dump.h"
26
+ #include "circuits/compiler/compiler.h"
27
+ #include "circuits/logic/compiler_backend.h"
28
+ #include "circuits/logic/counter.h"
29
+ #include "circuits/logic/logic.h"
30
+ #include "gf2k/gf2_128.h"
31
+ #include "sumcheck/circuit.h"
32
+ #include "sumcheck/testing.h"
33
+ #include "util/log.h"
34
+ #include "gtest/gtest.h"
35
+
36
+ namespace proofs {
37
+ namespace {
38
+ /*
39
+ Decoding of the example:
40
+
41
+ A6 # map(6)
42
+ 67 # text(7)
43
+ 76657273696F6E # "version"
44
+ 63 # text(3)
45
+ 312E30 # "1.0"
46
+ 6F # text(15)
47
+ 646967657374416C676F726974686D # "digestAlgorithm"
48
+ 67 # text(7)
49
+ 5348412D323536 # "SHA-256"
50
+ 6C # text(12)
51
+ 76616C756544696765737473 # "valueDigests"
52
+ A2 # map(2)
53
+ 71 # text(17)
54
+ 6F72672E69736F2E31383031332E352E31 # "org.iso.18013.5.1"
55
+ B8 2B # map(43)
56
+ 00 # unsigned(0)
57
+ 58 20 # bytes(32)
58
+ 9F764FEF7CD0D9226AF6E38F71FA281EA44DC97C3019A39CDD10E832872AA59A
59
+ 01 # unsigned(1)
60
+ 58 20 # bytes(32)
61
+ 41335B076B589CEFB7FC62143ADF3323069E885FF2E3E84EE905056AC9F7AB79
62
+ 02 # unsigned(2)
63
+ 58 20 # bytes(32)
64
+ 0FA28177FD958101AB6722421FBACA0C38594807D735A46AA4214EACF0E5AAA5
65
+ 03 # unsigned(3)
66
+ 58 20 # bytes(32)
67
+ E3AD1C7DEE0DA1DDEDE6080C3B7FAE97035FFDB418DAE775F1E10817E1395FA9
68
+ 04 # unsigned(4)
69
+ 58 20 # bytes(32)
70
+ 586D5F928DA86071AF5AEA4B16DD795F99E45D35AECD30195B92F1EA6481F5C1
71
+ 05 # unsigned(5)
72
+ 58 20 # bytes(32)
73
+ FC5E2D29D7DB42D63AA2EE8E6924ACA947732E6C62704029E0FECB87CF170F37
74
+ 06 # unsigned(6)
75
+ 58 20 # bytes(32)
76
+ EA29563A32A346DDFC940D42DCDE4A0CEC3DB130E9073C624AE8D23B60F28748
77
+ 07 # unsigned(7)
78
+ 58 20 # bytes(32)
79
+ D36E6B84B4B2A629D9543C28BC6DC29A67F643696F1DAB192989B6AA9351CA08
80
+ 08 # unsigned(8)
81
+ 58 20 # bytes(32)
82
+ 393FF4D76A884156FCFAE5AE4BB73510D2A51E09AE3AD10817B0931CA982C818
83
+ 09 # unsigned(9)
84
+ 58 20 # bytes(32)
85
+ 40CAB6EADAF859C5C92F39B8D091949D5215044EA2C99DB21995FCA45B102EE0
86
+ 0A # unsigned(10)
87
+ 58 20 # bytes(32)
88
+ F2343744267FCD80B8FAB893283E3015D6E79A86F5571D742C8830958E73CDE9
89
+ 0B # unsigned(11)
90
+ 58 20 # bytes(32)
91
+ 2EB472B2FE3DA6D518701622B7022C34043647EE5554FBE08874391BBBDA23E7
92
+ 0C # unsigned(12)
93
+ 58 20 # bytes(32)
94
+ A5C87C6499B67F38ACA2B6585D115DC5259DCBDAC2DCEDA92DC476CF817FC11B
95
+ 0D # unsigned(13)
96
+ 58 20 # bytes(32)
97
+ 6C0A6DDDE77BB27A0C876AABF14CF20D921DE8648D8CE54A33E1A46A09E66E4E
98
+ 0E # unsigned(14)
99
+ 58 20 # bytes(32)
100
+ D6FF79077E79A9DC94F4E0DA16AD58E8A0CD7CEDB01A19CA7AC6D7AB3460E23A
101
+ 0F # unsigned(15)
102
+ 58 20 # bytes(32)
103
+ A899B4B1F57CFB8AC8084B65E9B8B087975ECDFEE2918DAB5F9D4B819518C0BE
104
+ 10 # unsigned(16)
105
+ 58 20 # bytes(32)
106
+ 8850EEB5DB6E291F9FD995E8AC539529FF2CE125B3A79B913E6E5EBEFA880E76
107
+ 11 # unsigned(17)
108
+ 58 20 # bytes(32)
109
+ DDFD87771C16848C4999E98711D6E82478F7EBC479A9A83F1BC31D3E51BC821E
110
+ 12 # unsigned(18)
111
+ 58 20 # bytes(32)
112
+ C8BA11F4E182108DEB38890E4158A83AA9863A5E9322071C13B4278E0D389808
113
+ 13 # unsigned(19)
114
+ 58 20 # bytes(32)
115
+ 87AE60874B2603B8A84AA9E76FEB1F23468BF9420A2A3C03536E35CAE5958BC1
116
+ 14 # unsigned(20)
117
+ 58 20 # bytes(32)
118
+ F34F4E5485DE8938C5A9AB37EA3BBD6E67F5EF1F8319D64562EE063CBADE002C
119
+ 15 # unsigned(21)
120
+ 58 20 # bytes(32)
121
+ ECE81153961D98DEE85D819E0AC1EEF2141806FFEF7684932B94C354E17350CC
122
+ 16 # unsigned(22)
123
+ 58 20 # bytes(32)
124
+ 9AB1EB8CA05422E2D70E73EF8289184CF8EDCF4E40DA39347BA40425550CE65F
125
+ 17 # unsigned(23)
126
+ 58 20 # bytes(32)
127
+ C7B3886BBC9051076F5AD2D530142E7FBFAF3128CC21392FAF1D3EE0E5F8933B
128
+ 18 18 # unsigned(24)
129
+ 58 20 # bytes(32)
130
+ 083697C66436B25FCF8AA0CC9556126D94012013A58C70F8E885C02D2F5238EC
131
+ 18 19 # unsigned(25)
132
+ 58 20 # bytes(32)
133
+ 037BD4447E09A5D7AADCB3593D05E4C17AA230AF60E7C8D30C29AFC97AD9815D
134
+ 18 1A # unsigned(26)
135
+ 58 20 # bytes(32)
136
+ 1970C3AC3C55D82702CE9F8ED7760832386E5FDDAF4E352D4CF953A15E40ACEC
137
+ 18 1B # unsigned(27)
138
+ 58 20 # bytes(32)
139
+ C4BBFAAF6BD490962861F63398DA8FAD19C26E1DACD07D5291E9A22CDAF5319E
140
+ 18 1C # unsigned(28)
141
+ 58 20 # bytes(32)
142
+ 24AA53A9B4120C192DF790EE170E38535655FA5637B661C0EF26AA3B357DB604
143
+ 18 1D # unsigned(29)
144
+ 58 20 # bytes(32)
145
+ 4E1396CCDC527D296D650184256860ECE3F379AD4900899F171544AFF5B950A3
146
+ 18 1E # unsigned(30)
147
+ 58 20 # bytes(32)
148
+ 7648D830A5F2D49354BA3E65F4497131D63748C747748E7909BAEEEC82279A76
149
+ 18 1F # unsigned(31)
150
+ 58 20 # bytes(32)
151
+ 2ECDDA6BE9985C3FCBB2FB0852CC1F994018A5AB1310661F7AD1FF44BB622CF9
152
+ 18 20 # unsigned(32)
153
+ 58 20 # bytes(32)
154
+ C67442548CCB44996823748506D7FBE38802F2AB95B2937FB9B4B5FB95CD362E
155
+ 18 21 # unsigned(33)
156
+ 58 20 # bytes(32)
157
+ 770487D5590519E5E75785199F0D1785DB096E959434A0FFD19D866455A387A8
158
+ 18 22 # unsigned(34)
159
+ 58 20 # bytes(32)
160
+ 12F6BC766780E9059378495CDE5E47F78BE351D50DD53E518EB3A68FDFAFDCB3
161
+ 18 23 # unsigned(35)
162
+ 58 20 # bytes(32)
163
+ D5B848D4EDB7680C1674620B45474002E29A59E9B747C59875713F39D0DE4326
164
+ 18 24 # unsigned(36)
165
+ 58 20 # bytes(32)
166
+ F11E3EEC4BE51AE12EABFB52B4CACA059ADA766FC55990F2C9C8AAE36E3DC415
167
+ 18 25 # unsigned(37)
168
+ 58 20 # bytes(32)
169
+ 7ED8D09F036A1D6305189EC708659C4BFD11E1F81348F559464BDEB8B709BAC0
170
+ 18 26 # unsigned(38)
171
+ 58 20 # bytes(32)
172
+ 48FEAFFA4FE8A71B417E914AB7DEE179B497199FE4879D894DCB9D8CC66BCD73
173
+ 18 27 # unsigned(39)
174
+ 58 20 # bytes(32)
175
+ E5AEF986F9D62470BC154E103EEC191053ADAB466A101C4A4EA3EE1A1E025C2C
176
+ 18 28 # unsigned(40)
177
+ 58 20 # bytes(32)
178
+ BAAE3DD3E7EAAA5FB84F24E575223902B138F854575213CBB70D741AB466F015
179
+ 18 29 # unsigned(41)
180
+ 58 20 # bytes(32)
181
+ 4CB132396ABC658FEDDC1A7C2A6A4D1CD458D23805488E287A2BDC020C9B4EFE
182
+ 18 2A # unsigned(42)
183
+ 58 20 # bytes(32)
184
+ EC64D65D4830B6013F70B0F21728788C2FD372126CB51AB1E5F7D26B83036022
185
+ 73 # text(19)
186
+ 6F72672E61616D76612E31383031332E352E31 # "org.aamva.18013.5.1"
187
+ A7 # map(7)
188
+ 00 # unsigned(0)
189
+ 58 20 # bytes(32)
190
+ BD1205F826496CEDD84271854628984D76C62AB6B7D4F68E04658D4E63DAA410
191
+ 01 # unsigned(1)
192
+ 58 20 # bytes(32)
193
+ 28A2A6F3FB47EE49758A06BE56B75DA5980A2EF7D4D6C6B00402C1023C97BEF6
194
+ 02 # unsigned(2)
195
+ 58 20 # bytes(32)
196
+ DAF10E80D87EDDA4051BF121895CAD3FC595DB8D5AEB3526DE704B6F0E77ACFA
197
+ 03 # unsigned(3)
198
+ 58 20 # bytes(32)
199
+ A6F80A0CBF80F42CC33E08F98E0D85CFC5A4B97D13C5D4BAD8992BFE5ABD9A92
200
+ 04 # unsigned(4)
201
+ 58 20 # bytes(32)
202
+ 062632510EEFBB338C12228D8CA299D4C07C34F12CCCF86C519472528D8FBC9A
203
+ 05 # unsigned(5)
204
+ 58 20 # bytes(32)
205
+ CE4F3515E7C256095AC6B6AA4A4AF0AC8B964079BD627BC897F544087F2D2C7B
206
+ 06 # unsigned(6)
207
+ 58 20 # bytes(32)
208
+ 921AEC9FA8C51C6F90DE860F6E5F4D81C756F62A8FE6E19D9122E942DDB9BFA3
209
+ 6D # text(13)
210
+ 6465766963654B6579496E666F # "deviceKeyInfo"
211
+ A1 # map(1)
212
+ 69 # text(9)
213
+ 6465766963654B6579 # "deviceKey"
214
+ A4 # map(4)
215
+ 01 # unsigned(1)
216
+ 02 # unsigned(2)
217
+ 20 # negative(0)
218
+ 01 # unsigned(1)
219
+ 21 # negative(1)
220
+ 58 20 # bytes(32)
221
+ 61DC8B2C6E98E1A282B16F95F373C1B0B99EE47FA57191763F08B2FC1EBE9AF5
222
+ 22 # negative(2)
223
+ 58 20 # bytes(32)
224
+ 10CF01637F63CB7C53F8925FD2A37DEDEC6D04EAABE4DCCA94437962813AAF1C
225
+ 6C # text(12)
226
+ 76616C6964697479496E666F # "validityInfo"
227
+ A3 # map(3)
228
+ 66 # text(6)
229
+ 7369676E6564 # "signed"
230
+ C0 # tag(0)
231
+ 74 # text(20)
232
+ 323032342D30322D31345430383A30303A30305A # "2024-02-14T08:00:00Z"
233
+ 69 # text(9)
234
+ 76616C696446726F6D # "validFrom"
235
+ C0 # tag(0)
236
+ 74 # text(20)
237
+ 323032342D30322D31345430383A30303A30305A # "2024-02-14T08:00:00Z"
238
+ 6A # text(10)
239
+ 76616C6964556E74696C # "validUntil"
240
+ C0 # tag(0)
241
+ 74 # text(20)
242
+ 323032352D30322D31345430383A30303A30305A # "2025-02-14T08:00:00Z"
243
+ 67 # text(7)
244
+ 646F6354797065 # "docType"
245
+ 75 # text(21)
246
+ 6F72672E69736F2E31383031332E352E312E6D444C # "org.iso.18013.5.1.mDL"
247
+ */
248
+ static constexpr size_t mso_nbytes = 2099;
249
+ static const uint8_t mso_example[mso_nbytes] = {
250
+ 0xA6, 0x67, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x63, 0x31, 0x2E,
251
+ 0x30, 0x6F, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x41, 0x6C, 0x67, 0x6F,
252
+ 0x72, 0x69, 0x74, 0x68, 0x6D, 0x67, 0x53, 0x48, 0x41, 0x2D, 0x32, 0x35,
253
+ 0x36, 0x6C, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x44, 0x69, 0x67, 0x65, 0x73,
254
+ 0x74, 0x73, 0xA2, 0x71, 0x6F, 0x72, 0x67, 0x2E, 0x69, 0x73, 0x6F, 0x2E,
255
+ 0x31, 0x38, 0x30, 0x31, 0x33, 0x2E, 0x35, 0x2E, 0x31, 0xB8, 0x2B, 0x00,
256
+ 0x58, 0x20, 0x9F, 0x76, 0x4F, 0xEF, 0x7C, 0xD0, 0xD9, 0x22, 0x6A, 0xF6,
257
+ 0xE3, 0x8F, 0x71, 0xFA, 0x28, 0x1E, 0xA4, 0x4D, 0xC9, 0x7C, 0x30, 0x19,
258
+ 0xA3, 0x9C, 0xDD, 0x10, 0xE8, 0x32, 0x87, 0x2A, 0xA5, 0x9A, 0x01, 0x58,
259
+ 0x20, 0x41, 0x33, 0x5B, 0x07, 0x6B, 0x58, 0x9C, 0xEF, 0xB7, 0xFC, 0x62,
260
+ 0x14, 0x3A, 0xDF, 0x33, 0x23, 0x06, 0x9E, 0x88, 0x5F, 0xF2, 0xE3, 0xE8,
261
+ 0x4E, 0xE9, 0x05, 0x05, 0x6A, 0xC9, 0xF7, 0xAB, 0x79, 0x02, 0x58, 0x20,
262
+ 0x0F, 0xA2, 0x81, 0x77, 0xFD, 0x95, 0x81, 0x01, 0xAB, 0x67, 0x22, 0x42,
263
+ 0x1F, 0xBA, 0xCA, 0x0C, 0x38, 0x59, 0x48, 0x07, 0xD7, 0x35, 0xA4, 0x6A,
264
+ 0xA4, 0x21, 0x4E, 0xAC, 0xF0, 0xE5, 0xAA, 0xA5, 0x03, 0x58, 0x20, 0xE3,
265
+ 0xAD, 0x1C, 0x7D, 0xEE, 0x0D, 0xA1, 0xDD, 0xED, 0xE6, 0x08, 0x0C, 0x3B,
266
+ 0x7F, 0xAE, 0x97, 0x03, 0x5F, 0xFD, 0xB4, 0x18, 0xDA, 0xE7, 0x75, 0xF1,
267
+ 0xE1, 0x08, 0x17, 0xE1, 0x39, 0x5F, 0xA9, 0x04, 0x58, 0x20, 0x58, 0x6D,
268
+ 0x5F, 0x92, 0x8D, 0xA8, 0x60, 0x71, 0xAF, 0x5A, 0xEA, 0x4B, 0x16, 0xDD,
269
+ 0x79, 0x5F, 0x99, 0xE4, 0x5D, 0x35, 0xAE, 0xCD, 0x30, 0x19, 0x5B, 0x92,
270
+ 0xF1, 0xEA, 0x64, 0x81, 0xF5, 0xC1, 0x05, 0x58, 0x20, 0xFC, 0x5E, 0x2D,
271
+ 0x29, 0xD7, 0xDB, 0x42, 0xD6, 0x3A, 0xA2, 0xEE, 0x8E, 0x69, 0x24, 0xAC,
272
+ 0xA9, 0x47, 0x73, 0x2E, 0x6C, 0x62, 0x70, 0x40, 0x29, 0xE0, 0xFE, 0xCB,
273
+ 0x87, 0xCF, 0x17, 0x0F, 0x37, 0x06, 0x58, 0x20, 0xEA, 0x29, 0x56, 0x3A,
274
+ 0x32, 0xA3, 0x46, 0xDD, 0xFC, 0x94, 0x0D, 0x42, 0xDC, 0xDE, 0x4A, 0x0C,
275
+ 0xEC, 0x3D, 0xB1, 0x30, 0xE9, 0x07, 0x3C, 0x62, 0x4A, 0xE8, 0xD2, 0x3B,
276
+ 0x60, 0xF2, 0x87, 0x48, 0x07, 0x58, 0x20, 0xD3, 0x6E, 0x6B, 0x84, 0xB4,
277
+ 0xB2, 0xA6, 0x29, 0xD9, 0x54, 0x3C, 0x28, 0xBC, 0x6D, 0xC2, 0x9A, 0x67,
278
+ 0xF6, 0x43, 0x69, 0x6F, 0x1D, 0xAB, 0x19, 0x29, 0x89, 0xB6, 0xAA, 0x93,
279
+ 0x51, 0xCA, 0x08, 0x08, 0x58, 0x20, 0x39, 0x3F, 0xF4, 0xD7, 0x6A, 0x88,
280
+ 0x41, 0x56, 0xFC, 0xFA, 0xE5, 0xAE, 0x4B, 0xB7, 0x35, 0x10, 0xD2, 0xA5,
281
+ 0x1E, 0x09, 0xAE, 0x3A, 0xD1, 0x08, 0x17, 0xB0, 0x93, 0x1C, 0xA9, 0x82,
282
+ 0xC8, 0x18, 0x09, 0x58, 0x20, 0x40, 0xCA, 0xB6, 0xEA, 0xDA, 0xF8, 0x59,
283
+ 0xC5, 0xC9, 0x2F, 0x39, 0xB8, 0xD0, 0x91, 0x94, 0x9D, 0x52, 0x15, 0x04,
284
+ 0x4E, 0xA2, 0xC9, 0x9D, 0xB2, 0x19, 0x95, 0xFC, 0xA4, 0x5B, 0x10, 0x2E,
285
+ 0xE0, 0x0A, 0x58, 0x20, 0xF2, 0x34, 0x37, 0x44, 0x26, 0x7F, 0xCD, 0x80,
286
+ 0xB8, 0xFA, 0xB8, 0x93, 0x28, 0x3E, 0x30, 0x15, 0xD6, 0xE7, 0x9A, 0x86,
287
+ 0xF5, 0x57, 0x1D, 0x74, 0x2C, 0x88, 0x30, 0x95, 0x8E, 0x73, 0xCD, 0xE9,
288
+ 0x0B, 0x58, 0x20, 0x2E, 0xB4, 0x72, 0xB2, 0xFE, 0x3D, 0xA6, 0xD5, 0x18,
289
+ 0x70, 0x16, 0x22, 0xB7, 0x02, 0x2C, 0x34, 0x04, 0x36, 0x47, 0xEE, 0x55,
290
+ 0x54, 0xFB, 0xE0, 0x88, 0x74, 0x39, 0x1B, 0xBB, 0xDA, 0x23, 0xE7, 0x0C,
291
+ 0x58, 0x20, 0xA5, 0xC8, 0x7C, 0x64, 0x99, 0xB6, 0x7F, 0x38, 0xAC, 0xA2,
292
+ 0xB6, 0x58, 0x5D, 0x11, 0x5D, 0xC5, 0x25, 0x9D, 0xCB, 0xDA, 0xC2, 0xDC,
293
+ 0xED, 0xA9, 0x2D, 0xC4, 0x76, 0xCF, 0x81, 0x7F, 0xC1, 0x1B, 0x0D, 0x58,
294
+ 0x20, 0x6C, 0x0A, 0x6D, 0xDD, 0xE7, 0x7B, 0xB2, 0x7A, 0x0C, 0x87, 0x6A,
295
+ 0xAB, 0xF1, 0x4C, 0xF2, 0x0D, 0x92, 0x1D, 0xE8, 0x64, 0x8D, 0x8C, 0xE5,
296
+ 0x4A, 0x33, 0xE1, 0xA4, 0x6A, 0x09, 0xE6, 0x6E, 0x4E, 0x0E, 0x58, 0x20,
297
+ 0xD6, 0xFF, 0x79, 0x07, 0x7E, 0x79, 0xA9, 0xDC, 0x94, 0xF4, 0xE0, 0xDA,
298
+ 0x16, 0xAD, 0x58, 0xE8, 0xA0, 0xCD, 0x7C, 0xED, 0xB0, 0x1A, 0x19, 0xCA,
299
+ 0x7A, 0xC6, 0xD7, 0xAB, 0x34, 0x60, 0xE2, 0x3A, 0x0F, 0x58, 0x20, 0xA8,
300
+ 0x99, 0xB4, 0xB1, 0xF5, 0x7C, 0xFB, 0x8A, 0xC8, 0x08, 0x4B, 0x65, 0xE9,
301
+ 0xB8, 0xB0, 0x87, 0x97, 0x5E, 0xCD, 0xFE, 0xE2, 0x91, 0x8D, 0xAB, 0x5F,
302
+ 0x9D, 0x4B, 0x81, 0x95, 0x18, 0xC0, 0xBE, 0x10, 0x58, 0x20, 0x88, 0x50,
303
+ 0xEE, 0xB5, 0xDB, 0x6E, 0x29, 0x1F, 0x9F, 0xD9, 0x95, 0xE8, 0xAC, 0x53,
304
+ 0x95, 0x29, 0xFF, 0x2C, 0xE1, 0x25, 0xB3, 0xA7, 0x9B, 0x91, 0x3E, 0x6E,
305
+ 0x5E, 0xBE, 0xFA, 0x88, 0x0E, 0x76, 0x11, 0x58, 0x20, 0xDD, 0xFD, 0x87,
306
+ 0x77, 0x1C, 0x16, 0x84, 0x8C, 0x49, 0x99, 0xE9, 0x87, 0x11, 0xD6, 0xE8,
307
+ 0x24, 0x78, 0xF7, 0xEB, 0xC4, 0x79, 0xA9, 0xA8, 0x3F, 0x1B, 0xC3, 0x1D,
308
+ 0x3E, 0x51, 0xBC, 0x82, 0x1E, 0x12, 0x58, 0x20, 0xC8, 0xBA, 0x11, 0xF4,
309
+ 0xE1, 0x82, 0x10, 0x8D, 0xEB, 0x38, 0x89, 0x0E, 0x41, 0x58, 0xA8, 0x3A,
310
+ 0xA9, 0x86, 0x3A, 0x5E, 0x93, 0x22, 0x07, 0x1C, 0x13, 0xB4, 0x27, 0x8E,
311
+ 0x0D, 0x38, 0x98, 0x08, 0x13, 0x58, 0x20, 0x87, 0xAE, 0x60, 0x87, 0x4B,
312
+ 0x26, 0x03, 0xB8, 0xA8, 0x4A, 0xA9, 0xE7, 0x6F, 0xEB, 0x1F, 0x23, 0x46,
313
+ 0x8B, 0xF9, 0x42, 0x0A, 0x2A, 0x3C, 0x03, 0x53, 0x6E, 0x35, 0xCA, 0xE5,
314
+ 0x95, 0x8B, 0xC1, 0x14, 0x58, 0x20, 0xF3, 0x4F, 0x4E, 0x54, 0x85, 0xDE,
315
+ 0x89, 0x38, 0xC5, 0xA9, 0xAB, 0x37, 0xEA, 0x3B, 0xBD, 0x6E, 0x67, 0xF5,
316
+ 0xEF, 0x1F, 0x83, 0x19, 0xD6, 0x45, 0x62, 0xEE, 0x06, 0x3C, 0xBA, 0xDE,
317
+ 0x00, 0x2C, 0x15, 0x58, 0x20, 0xEC, 0xE8, 0x11, 0x53, 0x96, 0x1D, 0x98,
318
+ 0xDE, 0xE8, 0x5D, 0x81, 0x9E, 0x0A, 0xC1, 0xEE, 0xF2, 0x14, 0x18, 0x06,
319
+ 0xFF, 0xEF, 0x76, 0x84, 0x93, 0x2B, 0x94, 0xC3, 0x54, 0xE1, 0x73, 0x50,
320
+ 0xCC, 0x16, 0x58, 0x20, 0x9A, 0xB1, 0xEB, 0x8C, 0xA0, 0x54, 0x22, 0xE2,
321
+ 0xD7, 0x0E, 0x73, 0xEF, 0x82, 0x89, 0x18, 0x4C, 0xF8, 0xED, 0xCF, 0x4E,
322
+ 0x40, 0xDA, 0x39, 0x34, 0x7B, 0xA4, 0x04, 0x25, 0x55, 0x0C, 0xE6, 0x5F,
323
+ 0x17, 0x58, 0x20, 0xC7, 0xB3, 0x88, 0x6B, 0xBC, 0x90, 0x51, 0x07, 0x6F,
324
+ 0x5A, 0xD2, 0xD5, 0x30, 0x14, 0x2E, 0x7F, 0xBF, 0xAF, 0x31, 0x28, 0xCC,
325
+ 0x21, 0x39, 0x2F, 0xAF, 0x1D, 0x3E, 0xE0, 0xE5, 0xF8, 0x93, 0x3B, 0x18,
326
+ 0x18, 0x58, 0x20, 0x08, 0x36, 0x97, 0xC6, 0x64, 0x36, 0xB2, 0x5F, 0xCF,
327
+ 0x8A, 0xA0, 0xCC, 0x95, 0x56, 0x12, 0x6D, 0x94, 0x01, 0x20, 0x13, 0xA5,
328
+ 0x8C, 0x70, 0xF8, 0xE8, 0x85, 0xC0, 0x2D, 0x2F, 0x52, 0x38, 0xEC, 0x18,
329
+ 0x19, 0x58, 0x20, 0x03, 0x7B, 0xD4, 0x44, 0x7E, 0x09, 0xA5, 0xD7, 0xAA,
330
+ 0xDC, 0xB3, 0x59, 0x3D, 0x05, 0xE4, 0xC1, 0x7A, 0xA2, 0x30, 0xAF, 0x60,
331
+ 0xE7, 0xC8, 0xD3, 0x0C, 0x29, 0xAF, 0xC9, 0x7A, 0xD9, 0x81, 0x5D, 0x18,
332
+ 0x1A, 0x58, 0x20, 0x19, 0x70, 0xC3, 0xAC, 0x3C, 0x55, 0xD8, 0x27, 0x02,
333
+ 0xCE, 0x9F, 0x8E, 0xD7, 0x76, 0x08, 0x32, 0x38, 0x6E, 0x5F, 0xDD, 0xAF,
334
+ 0x4E, 0x35, 0x2D, 0x4C, 0xF9, 0x53, 0xA1, 0x5E, 0x40, 0xAC, 0xEC, 0x18,
335
+ 0x1B, 0x58, 0x20, 0xC4, 0xBB, 0xFA, 0xAF, 0x6B, 0xD4, 0x90, 0x96, 0x28,
336
+ 0x61, 0xF6, 0x33, 0x98, 0xDA, 0x8F, 0xAD, 0x19, 0xC2, 0x6E, 0x1D, 0xAC,
337
+ 0xD0, 0x7D, 0x52, 0x91, 0xE9, 0xA2, 0x2C, 0xDA, 0xF5, 0x31, 0x9E, 0x18,
338
+ 0x1C, 0x58, 0x20, 0x24, 0xAA, 0x53, 0xA9, 0xB4, 0x12, 0x0C, 0x19, 0x2D,
339
+ 0xF7, 0x90, 0xEE, 0x17, 0x0E, 0x38, 0x53, 0x56, 0x55, 0xFA, 0x56, 0x37,
340
+ 0xB6, 0x61, 0xC0, 0xEF, 0x26, 0xAA, 0x3B, 0x35, 0x7D, 0xB6, 0x04, 0x18,
341
+ 0x1D, 0x58, 0x20, 0x4E, 0x13, 0x96, 0xCC, 0xDC, 0x52, 0x7D, 0x29, 0x6D,
342
+ 0x65, 0x01, 0x84, 0x25, 0x68, 0x60, 0xEC, 0xE3, 0xF3, 0x79, 0xAD, 0x49,
343
+ 0x00, 0x89, 0x9F, 0x17, 0x15, 0x44, 0xAF, 0xF5, 0xB9, 0x50, 0xA3, 0x18,
344
+ 0x1E, 0x58, 0x20, 0x76, 0x48, 0xD8, 0x30, 0xA5, 0xF2, 0xD4, 0x93, 0x54,
345
+ 0xBA, 0x3E, 0x65, 0xF4, 0x49, 0x71, 0x31, 0xD6, 0x37, 0x48, 0xC7, 0x47,
346
+ 0x74, 0x8E, 0x79, 0x09, 0xBA, 0xEE, 0xEC, 0x82, 0x27, 0x9A, 0x76, 0x18,
347
+ 0x1F, 0x58, 0x20, 0x2E, 0xCD, 0xDA, 0x6B, 0xE9, 0x98, 0x5C, 0x3F, 0xCB,
348
+ 0xB2, 0xFB, 0x08, 0x52, 0xCC, 0x1F, 0x99, 0x40, 0x18, 0xA5, 0xAB, 0x13,
349
+ 0x10, 0x66, 0x1F, 0x7A, 0xD1, 0xFF, 0x44, 0xBB, 0x62, 0x2C, 0xF9, 0x18,
350
+ 0x20, 0x58, 0x20, 0xC6, 0x74, 0x42, 0x54, 0x8C, 0xCB, 0x44, 0x99, 0x68,
351
+ 0x23, 0x74, 0x85, 0x06, 0xD7, 0xFB, 0xE3, 0x88, 0x02, 0xF2, 0xAB, 0x95,
352
+ 0xB2, 0x93, 0x7F, 0xB9, 0xB4, 0xB5, 0xFB, 0x95, 0xCD, 0x36, 0x2E, 0x18,
353
+ 0x21, 0x58, 0x20, 0x77, 0x04, 0x87, 0xD5, 0x59, 0x05, 0x19, 0xE5, 0xE7,
354
+ 0x57, 0x85, 0x19, 0x9F, 0x0D, 0x17, 0x85, 0xDB, 0x09, 0x6E, 0x95, 0x94,
355
+ 0x34, 0xA0, 0xFF, 0xD1, 0x9D, 0x86, 0x64, 0x55, 0xA3, 0x87, 0xA8, 0x18,
356
+ 0x22, 0x58, 0x20, 0x12, 0xF6, 0xBC, 0x76, 0x67, 0x80, 0xE9, 0x05, 0x93,
357
+ 0x78, 0x49, 0x5C, 0xDE, 0x5E, 0x47, 0xF7, 0x8B, 0xE3, 0x51, 0xD5, 0x0D,
358
+ 0xD5, 0x3E, 0x51, 0x8E, 0xB3, 0xA6, 0x8F, 0xDF, 0xAF, 0xDC, 0xB3, 0x18,
359
+ 0x23, 0x58, 0x20, 0xD5, 0xB8, 0x48, 0xD4, 0xED, 0xB7, 0x68, 0x0C, 0x16,
360
+ 0x74, 0x62, 0x0B, 0x45, 0x47, 0x40, 0x02, 0xE2, 0x9A, 0x59, 0xE9, 0xB7,
361
+ 0x47, 0xC5, 0x98, 0x75, 0x71, 0x3F, 0x39, 0xD0, 0xDE, 0x43, 0x26, 0x18,
362
+ 0x24, 0x58, 0x20, 0xF1, 0x1E, 0x3E, 0xEC, 0x4B, 0xE5, 0x1A, 0xE1, 0x2E,
363
+ 0xAB, 0xFB, 0x52, 0xB4, 0xCA, 0xCA, 0x05, 0x9A, 0xDA, 0x76, 0x6F, 0xC5,
364
+ 0x59, 0x90, 0xF2, 0xC9, 0xC8, 0xAA, 0xE3, 0x6E, 0x3D, 0xC4, 0x15, 0x18,
365
+ 0x25, 0x58, 0x20, 0x7E, 0xD8, 0xD0, 0x9F, 0x03, 0x6A, 0x1D, 0x63, 0x05,
366
+ 0x18, 0x9E, 0xC7, 0x08, 0x65, 0x9C, 0x4B, 0xFD, 0x11, 0xE1, 0xF8, 0x13,
367
+ 0x48, 0xF5, 0x59, 0x46, 0x4B, 0xDE, 0xB8, 0xB7, 0x09, 0xBA, 0xC0, 0x18,
368
+ 0x26, 0x58, 0x20, 0x48, 0xFE, 0xAF, 0xFA, 0x4F, 0xE8, 0xA7, 0x1B, 0x41,
369
+ 0x7E, 0x91, 0x4A, 0xB7, 0xDE, 0xE1, 0x79, 0xB4, 0x97, 0x19, 0x9F, 0xE4,
370
+ 0x87, 0x9D, 0x89, 0x4D, 0xCB, 0x9D, 0x8C, 0xC6, 0x6B, 0xCD, 0x73, 0x18,
371
+ 0x27, 0x58, 0x20, 0xE5, 0xAE, 0xF9, 0x86, 0xF9, 0xD6, 0x24, 0x70, 0xBC,
372
+ 0x15, 0x4E, 0x10, 0x3E, 0xEC, 0x19, 0x10, 0x53, 0xAD, 0xAB, 0x46, 0x6A,
373
+ 0x10, 0x1C, 0x4A, 0x4E, 0xA3, 0xEE, 0x1A, 0x1E, 0x02, 0x5C, 0x2C, 0x18,
374
+ 0x28, 0x58, 0x20, 0xBA, 0xAE, 0x3D, 0xD3, 0xE7, 0xEA, 0xAA, 0x5F, 0xB8,
375
+ 0x4F, 0x24, 0xE5, 0x75, 0x22, 0x39, 0x02, 0xB1, 0x38, 0xF8, 0x54, 0x57,
376
+ 0x52, 0x13, 0xCB, 0xB7, 0x0D, 0x74, 0x1A, 0xB4, 0x66, 0xF0, 0x15, 0x18,
377
+ 0x29, 0x58, 0x20, 0x4C, 0xB1, 0x32, 0x39, 0x6A, 0xBC, 0x65, 0x8F, 0xED,
378
+ 0xDC, 0x1A, 0x7C, 0x2A, 0x6A, 0x4D, 0x1C, 0xD4, 0x58, 0xD2, 0x38, 0x05,
379
+ 0x48, 0x8E, 0x28, 0x7A, 0x2B, 0xDC, 0x02, 0x0C, 0x9B, 0x4E, 0xFE, 0x18,
380
+ 0x2A, 0x58, 0x20, 0xEC, 0x64, 0xD6, 0x5D, 0x48, 0x30, 0xB6, 0x01, 0x3F,
381
+ 0x70, 0xB0, 0xF2, 0x17, 0x28, 0x78, 0x8C, 0x2F, 0xD3, 0x72, 0x12, 0x6C,
382
+ 0xB5, 0x1A, 0xB1, 0xE5, 0xF7, 0xD2, 0x6B, 0x83, 0x03, 0x60, 0x22, 0x73,
383
+ 0x6F, 0x72, 0x67, 0x2E, 0x61, 0x61, 0x6D, 0x76, 0x61, 0x2E, 0x31, 0x38,
384
+ 0x30, 0x31, 0x33, 0x2E, 0x35, 0x2E, 0x31, 0xA7, 0x00, 0x58, 0x20, 0xBD,
385
+ 0x12, 0x05, 0xF8, 0x26, 0x49, 0x6C, 0xED, 0xD8, 0x42, 0x71, 0x85, 0x46,
386
+ 0x28, 0x98, 0x4D, 0x76, 0xC6, 0x2A, 0xB6, 0xB7, 0xD4, 0xF6, 0x8E, 0x04,
387
+ 0x65, 0x8D, 0x4E, 0x63, 0xDA, 0xA4, 0x10, 0x01, 0x58, 0x20, 0x28, 0xA2,
388
+ 0xA6, 0xF3, 0xFB, 0x47, 0xEE, 0x49, 0x75, 0x8A, 0x06, 0xBE, 0x56, 0xB7,
389
+ 0x5D, 0xA5, 0x98, 0x0A, 0x2E, 0xF7, 0xD4, 0xD6, 0xC6, 0xB0, 0x04, 0x02,
390
+ 0xC1, 0x02, 0x3C, 0x97, 0xBE, 0xF6, 0x02, 0x58, 0x20, 0xDA, 0xF1, 0x0E,
391
+ 0x80, 0xD8, 0x7E, 0xDD, 0xA4, 0x05, 0x1B, 0xF1, 0x21, 0x89, 0x5C, 0xAD,
392
+ 0x3F, 0xC5, 0x95, 0xDB, 0x8D, 0x5A, 0xEB, 0x35, 0x26, 0xDE, 0x70, 0x4B,
393
+ 0x6F, 0x0E, 0x77, 0xAC, 0xFA, 0x03, 0x58, 0x20, 0xA6, 0xF8, 0x0A, 0x0C,
394
+ 0xBF, 0x80, 0xF4, 0x2C, 0xC3, 0x3E, 0x08, 0xF9, 0x8E, 0x0D, 0x85, 0xCF,
395
+ 0xC5, 0xA4, 0xB9, 0x7D, 0x13, 0xC5, 0xD4, 0xBA, 0xD8, 0x99, 0x2B, 0xFE,
396
+ 0x5A, 0xBD, 0x9A, 0x92, 0x04, 0x58, 0x20, 0x06, 0x26, 0x32, 0x51, 0x0E,
397
+ 0xEF, 0xBB, 0x33, 0x8C, 0x12, 0x22, 0x8D, 0x8C, 0xA2, 0x99, 0xD4, 0xC0,
398
+ 0x7C, 0x34, 0xF1, 0x2C, 0xCC, 0xF8, 0x6C, 0x51, 0x94, 0x72, 0x52, 0x8D,
399
+ 0x8F, 0xBC, 0x9A, 0x05, 0x58, 0x20, 0xCE, 0x4F, 0x35, 0x15, 0xE7, 0xC2,
400
+ 0x56, 0x09, 0x5A, 0xC6, 0xB6, 0xAA, 0x4A, 0x4A, 0xF0, 0xAC, 0x8B, 0x96,
401
+ 0x40, 0x79, 0xBD, 0x62, 0x7B, 0xC8, 0x97, 0xF5, 0x44, 0x08, 0x7F, 0x2D,
402
+ 0x2C, 0x7B, 0x06, 0x58, 0x20, 0x92, 0x1A, 0xEC, 0x9F, 0xA8, 0xC5, 0x1C,
403
+ 0x6F, 0x90, 0xDE, 0x86, 0x0F, 0x6E, 0x5F, 0x4D, 0x81, 0xC7, 0x56, 0xF6,
404
+ 0x2A, 0x8F, 0xE6, 0xE1, 0x9D, 0x91, 0x22, 0xE9, 0x42, 0xDD, 0xB9, 0xBF,
405
+ 0xA3, 0x6D, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4B, 0x65, 0x79, 0x49,
406
+ 0x6E, 0x66, 0x6F, 0xA1, 0x69, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4B,
407
+ 0x65, 0x79, 0xA4, 0x01, 0x02, 0x20, 0x01, 0x21, 0x58, 0x20, 0x61, 0xDC,
408
+ 0x8B, 0x2C, 0x6E, 0x98, 0xE1, 0xA2, 0x82, 0xB1, 0x6F, 0x95, 0xF3, 0x73,
409
+ 0xC1, 0xB0, 0xB9, 0x9E, 0xE4, 0x7F, 0xA5, 0x71, 0x91, 0x76, 0x3F, 0x08,
410
+ 0xB2, 0xFC, 0x1E, 0xBE, 0x9A, 0xF5, 0x22, 0x58, 0x20, 0x10, 0xCF, 0x01,
411
+ 0x63, 0x7F, 0x63, 0xCB, 0x7C, 0x53, 0xF8, 0x92, 0x5F, 0xD2, 0xA3, 0x7D,
412
+ 0xED, 0xEC, 0x6D, 0x04, 0xEA, 0xAB, 0xE4, 0xDC, 0xCA, 0x94, 0x43, 0x79,
413
+ 0x62, 0x81, 0x3A, 0xAF, 0x1C, 0x6C, 0x76, 0x61, 0x6C, 0x69, 0x64, 0x69,
414
+ 0x74, 0x79, 0x49, 0x6E, 0x66, 0x6F, 0xA3, 0x66, 0x73, 0x69, 0x67, 0x6E,
415
+ 0x65, 0x64, 0xC0, 0x74, 0x32, 0x30, 0x32, 0x34, 0x2D, 0x30, 0x32, 0x2D,
416
+ 0x31, 0x34, 0x54, 0x30, 0x38, 0x3A, 0x30, 0x30, 0x3A, 0x30, 0x30, 0x5A,
417
+ 0x69, 0x76, 0x61, 0x6C, 0x69, 0x64, 0x46, 0x72, 0x6F, 0x6D, 0xC0, 0x74,
418
+ 0x32, 0x30, 0x32, 0x34, 0x2D, 0x30, 0x32, 0x2D, 0x31, 0x34, 0x54, 0x30,
419
+ 0x38, 0x3A, 0x30, 0x30, 0x3A, 0x30, 0x30, 0x5A, 0x6A, 0x76, 0x61, 0x6C,
420
+ 0x69, 0x64, 0x55, 0x6E, 0x74, 0x69, 0x6C, 0xC0, 0x74, 0x32, 0x30, 0x32,
421
+ 0x35, 0x2D, 0x30, 0x32, 0x2D, 0x31, 0x34, 0x54, 0x30, 0x38, 0x3A, 0x30,
422
+ 0x30, 0x3A, 0x30, 0x30, 0x5A, 0x67, 0x64, 0x6F, 0x63, 0x54, 0x79, 0x70,
423
+ 0x65, 0x75, 0x6F, 0x72, 0x67, 0x2E, 0x69, 0x73, 0x6F, 0x2E, 0x31, 0x38,
424
+ 0x30, 0x31, 0x33, 0x2E, 0x35, 0x2E, 0x31, 0x2E, 0x6D, 0x44, 0x4C,
425
+ };
426
+
427
+ template <class Field>
428
+ void test_parser_circuit(const Field& F) {
429
+ using CborWitness = CborWitness<Field>;
430
+ using CompilerBackend = CompilerBackend<Field>;
431
+ using LogicCircuit = Logic<Field, CompilerBackend>;
432
+ using CborC = Cbor<LogicCircuit>;
433
+
434
+ constexpr size_t n = mso_nbytes;
435
+
436
+ //------------------------------------------------------------
437
+ // Circuit generation
438
+ std::unique_ptr<Circuit<Field>> CIRCUIT;
439
+ size_t ninput;
440
+ {
441
+ QuadCircuit<Field> Q(F);
442
+ const CompilerBackend cbk(&Q);
443
+ const LogicCircuit LC(&cbk, F);
444
+ const CborC CBORC(LC);
445
+ const Counter<LogicCircuit> CTRC(LC);
446
+
447
+ std::vector<typename CborC::v8> inC(n);
448
+ std::vector<typename CborC::position_witness> pwC(n);
449
+
450
+ // input
451
+ for (size_t j = 0; j < n; ++j) {
452
+ inC[j] = LC.template vinput<8>();
453
+ }
454
+
455
+ // witnesses
456
+ CBORC.witness_wires(n, pwC.data());
457
+
458
+ std::vector<typename CborC::decode> dsC(n);
459
+ std::vector<typename CborC::parse_output> psC(n);
460
+ CBORC.decode_and_assert_decode_and_parse(n, dsC.data(), psC.data(),
461
+ inC.data(), pwC.data());
462
+
463
+ CIRCUIT = Q.mkcircuit(/*nc=*/1);
464
+ ninput = Q.ninput();
465
+ dump_info<Field>("parser_circuit_test", n, Q);
466
+ }
467
+
468
+ //------------------------------------------------------------
469
+ // Compute witnesses
470
+ const CborWitness CW(F);
471
+ std::vector<typename CborWitness::v8> inS(n);
472
+ std::vector<typename CborWitness::position_witness> pwS(n);
473
+ CW.compute_witnesses(n, n, mso_example, inS.data(), pwS.data());
474
+
475
+ //------------------------------------------------------------
476
+ // Fill inputs
477
+ auto W = std::make_unique<Dense<Field>>(/*nc=*/1, ninput);
478
+ DenseFiller<Field> filler(*W);
479
+
480
+ filler.push_back(F.one());
481
+
482
+ for (size_t i = 0; i < n; ++i) {
483
+ filler.push_back(inS[i]);
484
+ }
485
+
486
+ CW.push_witnesses(filler, n, pwS.data());
487
+
488
+ /*------------------------------------------------------------*/
489
+ // Prove
490
+ Proof<Field> proof(CIRCUIT->nl);
491
+ log(INFO, "Start prover");
492
+ run_prover<Field>(CIRCUIT.get(), W->clone(), &proof, F);
493
+ log(INFO, "Prover done");
494
+
495
+ /*------------------------------------------------------------*/
496
+ // Verify
497
+ log(INFO, "Start verifier");
498
+ run_verifier<Field>(CIRCUIT.get(), W->clone(), proof, F);
499
+ log(INFO, "Verifier done");
500
+ }
501
+
502
+ TEST(CborParserCircuit, MSOP256) { test_parser_circuit(Fp256<>()); }
503
+
504
+ TEST(CborParserCircuit, MSOBinaryField) { test_parser_circuit(GF2_128<>()); }
505
+ } // namespace
506
+ } // namespace proofs
@@ -0,0 +1,79 @@
1
+ // Copyright 2026 Google LLC.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #include <stddef.h>
16
+
17
+ #include <vector>
18
+
19
+ #include "algebra/fp.h"
20
+ #include "circuits/cbor_parser_v2/cbor.h"
21
+ #include "circuits/compiler/circuit_dump.h"
22
+ #include "circuits/compiler/compiler.h"
23
+ #include "circuits/logic/compiler_backend.h"
24
+ #include "circuits/logic/counter.h"
25
+ #include "circuits/logic/logic.h"
26
+ #include "gf2k/gf2_128.h"
27
+ #include "util/log.h"
28
+ #include "gtest/gtest.h"
29
+
30
+ namespace proofs {
31
+ namespace {
32
+
33
+ template <class Field>
34
+ void parser_size(const char* name, const Field& F) {
35
+ using CompilerBackend = CompilerBackend<Field>;
36
+ using LogicCircuit = Logic<Field, CompilerBackend>;
37
+ using CborC = Cbor<LogicCircuit>;
38
+
39
+ set_log_level(INFO);
40
+
41
+ size_t sizes[] = {247, 503, 1079, 1591, 2231, 2551};
42
+
43
+ for (size_t i = 0; i < sizeof(sizes) / sizeof(sizes[0]); ++i) {
44
+ size_t n = sizes[i];
45
+ QuadCircuit<Field> Q(F);
46
+ const CompilerBackend cbk(&Q);
47
+ const LogicCircuit LC(&cbk, F);
48
+ const CborC CBORC(LC);
49
+ const Counter<LogicCircuit> CTRC(LC);
50
+
51
+ std::vector<typename CborC::v8> inC(n);
52
+ std::vector<typename CborC::position_witness> pwC(n);
53
+
54
+ // input
55
+ for (size_t j = 0; j < n; ++j) {
56
+ inC[j] = LC.template vinput<8>();
57
+ }
58
+
59
+ // witnesses
60
+ CBORC.witness_wires(n, pwC.data());
61
+
62
+ std::vector<typename CborC::decode> dsC(n);
63
+ std::vector<typename CborC::parse_output> psC(n);
64
+ CBORC.decode_and_assert_decode_and_parse(n, dsC.data(), psC.data(),
65
+ inC.data(), pwC.data());
66
+
67
+ auto CIRCUIT = Q.mkcircuit(/*nc=*/1);
68
+ dump_info<Field>(name, n, Q);
69
+ }
70
+ }
71
+
72
+ TEST(CborParseSize, DecodeAndAssertDecodeAndParse_PrimeField) {
73
+ parser_size("Fp<1>", Fp<1>("18446744073709551557"));
74
+ }
75
+ TEST(CborParseSize, DecodeAndAssertDecodeAndParse_BinaryField) {
76
+ parser_size("GF2_128<>", GF2_128<>());
77
+ }
78
+ } // namespace
79
+ } // namespace proofs