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,473 @@
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 <vector>
19
+
20
+ #include "algebra/fp.h"
21
+ #include "circuits/cbor_parser_v2/cbor.h"
22
+ #include "circuits/cbor_parser_v2/cbor_testing.h"
23
+ #include "circuits/cbor_parser_v2/cbor_witness.h"
24
+ #include "circuits/logic/evaluation_backend.h"
25
+ #include "circuits/logic/logic.h"
26
+ #include "gf2k/gf2_128.h"
27
+ #include "gtest/gtest.h"
28
+
29
+ namespace proofs {
30
+ namespace {
31
+ /*
32
+ Decoding of the example:
33
+
34
+ A6 # map(6)
35
+ 67 # text(7)
36
+ 76657273696F6E # "version"
37
+ 63 # text(3)
38
+ 312E30 # "1.0"
39
+ 6F # text(15)
40
+ 646967657374416C676F726974686D # "digestAlgorithm"
41
+ 67 # text(7)
42
+ 5348412D323536 # "SHA-256"
43
+ 6C # text(12)
44
+ 76616C756544696765737473 # "valueDigests"
45
+ A2 # map(2)
46
+ 71 # text(17)
47
+ 6F72672E69736F2E31383031332E352E31 # "org.iso.18013.5.1"
48
+ B8 2B # map(43)
49
+ 00 # unsigned(0)
50
+ 58 20 # bytes(32)
51
+ 9F764FEF7CD0D9226AF6E38F71FA281EA44DC97C3019A39CDD10E832872AA59A
52
+ 01 # unsigned(1)
53
+ 58 20 # bytes(32)
54
+ 41335B076B589CEFB7FC62143ADF3323069E885FF2E3E84EE905056AC9F7AB79
55
+ 02 # unsigned(2)
56
+ 58 20 # bytes(32)
57
+ 0FA28177FD958101AB6722421FBACA0C38594807D735A46AA4214EACF0E5AAA5
58
+ 03 # unsigned(3)
59
+ 58 20 # bytes(32)
60
+ E3AD1C7DEE0DA1DDEDE6080C3B7FAE97035FFDB418DAE775F1E10817E1395FA9
61
+ 04 # unsigned(4)
62
+ 58 20 # bytes(32)
63
+ 586D5F928DA86071AF5AEA4B16DD795F99E45D35AECD30195B92F1EA6481F5C1
64
+ 05 # unsigned(5)
65
+ 58 20 # bytes(32)
66
+ FC5E2D29D7DB42D63AA2EE8E6924ACA947732E6C62704029E0FECB87CF170F37
67
+ 06 # unsigned(6)
68
+ 58 20 # bytes(32)
69
+ EA29563A32A346DDFC940D42DCDE4A0CEC3DB130E9073C624AE8D23B60F28748
70
+ 07 # unsigned(7)
71
+ 58 20 # bytes(32)
72
+ D36E6B84B4B2A629D9543C28BC6DC29A67F643696F1DAB192989B6AA9351CA08
73
+ 08 # unsigned(8)
74
+ 58 20 # bytes(32)
75
+ 393FF4D76A884156FCFAE5AE4BB73510D2A51E09AE3AD10817B0931CA982C818
76
+ 09 # unsigned(9)
77
+ 58 20 # bytes(32)
78
+ 40CAB6EADAF859C5C92F39B8D091949D5215044EA2C99DB21995FCA45B102EE0
79
+ 0A # unsigned(10)
80
+ 58 20 # bytes(32)
81
+ F2343744267FCD80B8FAB893283E3015D6E79A86F5571D742C8830958E73CDE9
82
+ 0B # unsigned(11)
83
+ 58 20 # bytes(32)
84
+ 2EB472B2FE3DA6D518701622B7022C34043647EE5554FBE08874391BBBDA23E7
85
+ 0C # unsigned(12)
86
+ 58 20 # bytes(32)
87
+ A5C87C6499B67F38ACA2B6585D115DC5259DCBDAC2DCEDA92DC476CF817FC11B
88
+ 0D # unsigned(13)
89
+ 58 20 # bytes(32)
90
+ 6C0A6DDDE77BB27A0C876AABF14CF20D921DE8648D8CE54A33E1A46A09E66E4E
91
+ 0E # unsigned(14)
92
+ 58 20 # bytes(32)
93
+ D6FF79077E79A9DC94F4E0DA16AD58E8A0CD7CEDB01A19CA7AC6D7AB3460E23A
94
+ 0F # unsigned(15)
95
+ 58 20 # bytes(32)
96
+ A899B4B1F57CFB8AC8084B65E9B8B087975ECDFEE2918DAB5F9D4B819518C0BE
97
+ 10 # unsigned(16)
98
+ 58 20 # bytes(32)
99
+ 8850EEB5DB6E291F9FD995E8AC539529FF2CE125B3A79B913E6E5EBEFA880E76
100
+ 11 # unsigned(17)
101
+ 58 20 # bytes(32)
102
+ DDFD87771C16848C4999E98711D6E82478F7EBC479A9A83F1BC31D3E51BC821E
103
+ 12 # unsigned(18)
104
+ 58 20 # bytes(32)
105
+ C8BA11F4E182108DEB38890E4158A83AA9863A5E9322071C13B4278E0D389808
106
+ 13 # unsigned(19)
107
+ 58 20 # bytes(32)
108
+ 87AE60874B2603B8A84AA9E76FEB1F23468BF9420A2A3C03536E35CAE5958BC1
109
+ 14 # unsigned(20)
110
+ 58 20 # bytes(32)
111
+ F34F4E5485DE8938C5A9AB37EA3BBD6E67F5EF1F8319D64562EE063CBADE002C
112
+ 15 # unsigned(21)
113
+ 58 20 # bytes(32)
114
+ ECE81153961D98DEE85D819E0AC1EEF2141806FFEF7684932B94C354E17350CC
115
+ 16 # unsigned(22)
116
+ 58 20 # bytes(32)
117
+ 9AB1EB8CA05422E2D70E73EF8289184CF8EDCF4E40DA39347BA40425550CE65F
118
+ 17 # unsigned(23)
119
+ 58 20 # bytes(32)
120
+ C7B3886BBC9051076F5AD2D530142E7FBFAF3128CC21392FAF1D3EE0E5F8933B
121
+ 18 18 # unsigned(24)
122
+ 58 20 # bytes(32)
123
+ 083697C66436B25FCF8AA0CC9556126D94012013A58C70F8E885C02D2F5238EC
124
+ 18 19 # unsigned(25)
125
+ 58 20 # bytes(32)
126
+ 037BD4447E09A5D7AADCB3593D05E4C17AA230AF60E7C8D30C29AFC97AD9815D
127
+ 18 1A # unsigned(26)
128
+ 58 20 # bytes(32)
129
+ 1970C3AC3C55D82702CE9F8ED7760832386E5FDDAF4E352D4CF953A15E40ACEC
130
+ 18 1B # unsigned(27)
131
+ 58 20 # bytes(32)
132
+ C4BBFAAF6BD490962861F63398DA8FAD19C26E1DACD07D5291E9A22CDAF5319E
133
+ 18 1C # unsigned(28)
134
+ 58 20 # bytes(32)
135
+ 24AA53A9B4120C192DF790EE170E38535655FA5637B661C0EF26AA3B357DB604
136
+ 18 1D # unsigned(29)
137
+ 58 20 # bytes(32)
138
+ 4E1396CCDC527D296D650184256860ECE3F379AD4900899F171544AFF5B950A3
139
+ 18 1E # unsigned(30)
140
+ 58 20 # bytes(32)
141
+ 7648D830A5F2D49354BA3E65F4497131D63748C747748E7909BAEEEC82279A76
142
+ 18 1F # unsigned(31)
143
+ 58 20 # bytes(32)
144
+ 2ECDDA6BE9985C3FCBB2FB0852CC1F994018A5AB1310661F7AD1FF44BB622CF9
145
+ 18 20 # unsigned(32)
146
+ 58 20 # bytes(32)
147
+ C67442548CCB44996823748506D7FBE38802F2AB95B2937FB9B4B5FB95CD362E
148
+ 18 21 # unsigned(33)
149
+ 58 20 # bytes(32)
150
+ 770487D5590519E5E75785199F0D1785DB096E959434A0FFD19D866455A387A8
151
+ 18 22 # unsigned(34)
152
+ 58 20 # bytes(32)
153
+ 12F6BC766780E9059378495CDE5E47F78BE351D50DD53E518EB3A68FDFAFDCB3
154
+ 18 23 # unsigned(35)
155
+ 58 20 # bytes(32)
156
+ D5B848D4EDB7680C1674620B45474002E29A59E9B747C59875713F39D0DE4326
157
+ 18 24 # unsigned(36)
158
+ 58 20 # bytes(32)
159
+ F11E3EEC4BE51AE12EABFB52B4CACA059ADA766FC55990F2C9C8AAE36E3DC415
160
+ 18 25 # unsigned(37)
161
+ 58 20 # bytes(32)
162
+ 7ED8D09F036A1D6305189EC708659C4BFD11E1F81348F559464BDEB8B709BAC0
163
+ 18 26 # unsigned(38)
164
+ 58 20 # bytes(32)
165
+ 48FEAFFA4FE8A71B417E914AB7DEE179B497199FE4879D894DCB9D8CC66BCD73
166
+ 18 27 # unsigned(39)
167
+ 58 20 # bytes(32)
168
+ E5AEF986F9D62470BC154E103EEC191053ADAB466A101C4A4EA3EE1A1E025C2C
169
+ 18 28 # unsigned(40)
170
+ 58 20 # bytes(32)
171
+ BAAE3DD3E7EAAA5FB84F24E575223902B138F854575213CBB70D741AB466F015
172
+ 18 29 # unsigned(41)
173
+ 58 20 # bytes(32)
174
+ 4CB132396ABC658FEDDC1A7C2A6A4D1CD458D23805488E287A2BDC020C9B4EFE
175
+ 18 2A # unsigned(42)
176
+ 58 20 # bytes(32)
177
+ EC64D65D4830B6013F70B0F21728788C2FD372126CB51AB1E5F7D26B83036022
178
+ 73 # text(19)
179
+ 6F72672E61616D76612E31383031332E352E31 # "org.aamva.18013.5.1"
180
+ A7 # map(7)
181
+ 00 # unsigned(0)
182
+ 58 20 # bytes(32)
183
+ BD1205F826496CEDD84271854628984D76C62AB6B7D4F68E04658D4E63DAA410
184
+ 01 # unsigned(1)
185
+ 58 20 # bytes(32)
186
+ 28A2A6F3FB47EE49758A06BE56B75DA5980A2EF7D4D6C6B00402C1023C97BEF6
187
+ 02 # unsigned(2)
188
+ 58 20 # bytes(32)
189
+ DAF10E80D87EDDA4051BF121895CAD3FC595DB8D5AEB3526DE704B6F0E77ACFA
190
+ 03 # unsigned(3)
191
+ 58 20 # bytes(32)
192
+ A6F80A0CBF80F42CC33E08F98E0D85CFC5A4B97D13C5D4BAD8992BFE5ABD9A92
193
+ 04 # unsigned(4)
194
+ 58 20 # bytes(32)
195
+ 062632510EEFBB338C12228D8CA299D4C07C34F12CCCF86C519472528D8FBC9A
196
+ 05 # unsigned(5)
197
+ 58 20 # bytes(32)
198
+ CE4F3515E7C256095AC6B6AA4A4AF0AC8B964079BD627BC897F544087F2D2C7B
199
+ 06 # unsigned(6)
200
+ 58 20 # bytes(32)
201
+ 921AEC9FA8C51C6F90DE860F6E5F4D81C756F62A8FE6E19D9122E942DDB9BFA3
202
+ 6D # text(13)
203
+ 6465766963654B6579496E666F # "deviceKeyInfo"
204
+ A1 # map(1)
205
+ 69 # text(9)
206
+ 6465766963654B6579 # "deviceKey"
207
+ A4 # map(4)
208
+ 01 # unsigned(1)
209
+ 02 # unsigned(2)
210
+ 20 # negative(0)
211
+ 01 # unsigned(1)
212
+ 21 # negative(1)
213
+ 58 20 # bytes(32)
214
+ 61DC8B2C6E98E1A282B16F95F373C1B0B99EE47FA57191763F08B2FC1EBE9AF5
215
+ 22 # negative(2)
216
+ 58 20 # bytes(32)
217
+ 10CF01637F63CB7C53F8925FD2A37DEDEC6D04EAABE4DCCA94437962813AAF1C
218
+ 6C # text(12)
219
+ 76616C6964697479496E666F # "validityInfo"
220
+ A3 # map(3)
221
+ 66 # text(6)
222
+ 7369676E6564 # "signed"
223
+ C0 # tag(0)
224
+ 74 # text(20)
225
+ 323032342D30322D31345430383A30303A30305A # "2024-02-14T08:00:00Z"
226
+ 69 # text(9)
227
+ 76616C696446726F6D # "validFrom"
228
+ C0 # tag(0)
229
+ 74 # text(20)
230
+ 323032342D30322D31345430383A30303A30305A # "2024-02-14T08:00:00Z"
231
+ 6A # text(10)
232
+ 76616C6964556E74696C # "validUntil"
233
+ C0 # tag(0)
234
+ 74 # text(20)
235
+ 323032352D30322D31345430383A30303A30305A # "2025-02-14T08:00:00Z"
236
+ 67 # text(7)
237
+ 646F6354797065 # "docType"
238
+ 75 # text(21)
239
+ 6F72672E69736F2E31383031332E352E312E6D444C # "org.iso.18013.5.1.mDL"
240
+ */
241
+ static constexpr size_t mso_nbytes = 2099;
242
+ static const uint8_t mso_example[mso_nbytes] = {
243
+ 0xA6, 0x67, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x63, 0x31, 0x2E,
244
+ 0x30, 0x6F, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x41, 0x6C, 0x67, 0x6F,
245
+ 0x72, 0x69, 0x74, 0x68, 0x6D, 0x67, 0x53, 0x48, 0x41, 0x2D, 0x32, 0x35,
246
+ 0x36, 0x6C, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x44, 0x69, 0x67, 0x65, 0x73,
247
+ 0x74, 0x73, 0xA2, 0x71, 0x6F, 0x72, 0x67, 0x2E, 0x69, 0x73, 0x6F, 0x2E,
248
+ 0x31, 0x38, 0x30, 0x31, 0x33, 0x2E, 0x35, 0x2E, 0x31, 0xB8, 0x2B, 0x00,
249
+ 0x58, 0x20, 0x9F, 0x76, 0x4F, 0xEF, 0x7C, 0xD0, 0xD9, 0x22, 0x6A, 0xF6,
250
+ 0xE3, 0x8F, 0x71, 0xFA, 0x28, 0x1E, 0xA4, 0x4D, 0xC9, 0x7C, 0x30, 0x19,
251
+ 0xA3, 0x9C, 0xDD, 0x10, 0xE8, 0x32, 0x87, 0x2A, 0xA5, 0x9A, 0x01, 0x58,
252
+ 0x20, 0x41, 0x33, 0x5B, 0x07, 0x6B, 0x58, 0x9C, 0xEF, 0xB7, 0xFC, 0x62,
253
+ 0x14, 0x3A, 0xDF, 0x33, 0x23, 0x06, 0x9E, 0x88, 0x5F, 0xF2, 0xE3, 0xE8,
254
+ 0x4E, 0xE9, 0x05, 0x05, 0x6A, 0xC9, 0xF7, 0xAB, 0x79, 0x02, 0x58, 0x20,
255
+ 0x0F, 0xA2, 0x81, 0x77, 0xFD, 0x95, 0x81, 0x01, 0xAB, 0x67, 0x22, 0x42,
256
+ 0x1F, 0xBA, 0xCA, 0x0C, 0x38, 0x59, 0x48, 0x07, 0xD7, 0x35, 0xA4, 0x6A,
257
+ 0xA4, 0x21, 0x4E, 0xAC, 0xF0, 0xE5, 0xAA, 0xA5, 0x03, 0x58, 0x20, 0xE3,
258
+ 0xAD, 0x1C, 0x7D, 0xEE, 0x0D, 0xA1, 0xDD, 0xED, 0xE6, 0x08, 0x0C, 0x3B,
259
+ 0x7F, 0xAE, 0x97, 0x03, 0x5F, 0xFD, 0xB4, 0x18, 0xDA, 0xE7, 0x75, 0xF1,
260
+ 0xE1, 0x08, 0x17, 0xE1, 0x39, 0x5F, 0xA9, 0x04, 0x58, 0x20, 0x58, 0x6D,
261
+ 0x5F, 0x92, 0x8D, 0xA8, 0x60, 0x71, 0xAF, 0x5A, 0xEA, 0x4B, 0x16, 0xDD,
262
+ 0x79, 0x5F, 0x99, 0xE4, 0x5D, 0x35, 0xAE, 0xCD, 0x30, 0x19, 0x5B, 0x92,
263
+ 0xF1, 0xEA, 0x64, 0x81, 0xF5, 0xC1, 0x05, 0x58, 0x20, 0xFC, 0x5E, 0x2D,
264
+ 0x29, 0xD7, 0xDB, 0x42, 0xD6, 0x3A, 0xA2, 0xEE, 0x8E, 0x69, 0x24, 0xAC,
265
+ 0xA9, 0x47, 0x73, 0x2E, 0x6C, 0x62, 0x70, 0x40, 0x29, 0xE0, 0xFE, 0xCB,
266
+ 0x87, 0xCF, 0x17, 0x0F, 0x37, 0x06, 0x58, 0x20, 0xEA, 0x29, 0x56, 0x3A,
267
+ 0x32, 0xA3, 0x46, 0xDD, 0xFC, 0x94, 0x0D, 0x42, 0xDC, 0xDE, 0x4A, 0x0C,
268
+ 0xEC, 0x3D, 0xB1, 0x30, 0xE9, 0x07, 0x3C, 0x62, 0x4A, 0xE8, 0xD2, 0x3B,
269
+ 0x60, 0xF2, 0x87, 0x48, 0x07, 0x58, 0x20, 0xD3, 0x6E, 0x6B, 0x84, 0xB4,
270
+ 0xB2, 0xA6, 0x29, 0xD9, 0x54, 0x3C, 0x28, 0xBC, 0x6D, 0xC2, 0x9A, 0x67,
271
+ 0xF6, 0x43, 0x69, 0x6F, 0x1D, 0xAB, 0x19, 0x29, 0x89, 0xB6, 0xAA, 0x93,
272
+ 0x51, 0xCA, 0x08, 0x08, 0x58, 0x20, 0x39, 0x3F, 0xF4, 0xD7, 0x6A, 0x88,
273
+ 0x41, 0x56, 0xFC, 0xFA, 0xE5, 0xAE, 0x4B, 0xB7, 0x35, 0x10, 0xD2, 0xA5,
274
+ 0x1E, 0x09, 0xAE, 0x3A, 0xD1, 0x08, 0x17, 0xB0, 0x93, 0x1C, 0xA9, 0x82,
275
+ 0xC8, 0x18, 0x09, 0x58, 0x20, 0x40, 0xCA, 0xB6, 0xEA, 0xDA, 0xF8, 0x59,
276
+ 0xC5, 0xC9, 0x2F, 0x39, 0xB8, 0xD0, 0x91, 0x94, 0x9D, 0x52, 0x15, 0x04,
277
+ 0x4E, 0xA2, 0xC9, 0x9D, 0xB2, 0x19, 0x95, 0xFC, 0xA4, 0x5B, 0x10, 0x2E,
278
+ 0xE0, 0x0A, 0x58, 0x20, 0xF2, 0x34, 0x37, 0x44, 0x26, 0x7F, 0xCD, 0x80,
279
+ 0xB8, 0xFA, 0xB8, 0x93, 0x28, 0x3E, 0x30, 0x15, 0xD6, 0xE7, 0x9A, 0x86,
280
+ 0xF5, 0x57, 0x1D, 0x74, 0x2C, 0x88, 0x30, 0x95, 0x8E, 0x73, 0xCD, 0xE9,
281
+ 0x0B, 0x58, 0x20, 0x2E, 0xB4, 0x72, 0xB2, 0xFE, 0x3D, 0xA6, 0xD5, 0x18,
282
+ 0x70, 0x16, 0x22, 0xB7, 0x02, 0x2C, 0x34, 0x04, 0x36, 0x47, 0xEE, 0x55,
283
+ 0x54, 0xFB, 0xE0, 0x88, 0x74, 0x39, 0x1B, 0xBB, 0xDA, 0x23, 0xE7, 0x0C,
284
+ 0x58, 0x20, 0xA5, 0xC8, 0x7C, 0x64, 0x99, 0xB6, 0x7F, 0x38, 0xAC, 0xA2,
285
+ 0xB6, 0x58, 0x5D, 0x11, 0x5D, 0xC5, 0x25, 0x9D, 0xCB, 0xDA, 0xC2, 0xDC,
286
+ 0xED, 0xA9, 0x2D, 0xC4, 0x76, 0xCF, 0x81, 0x7F, 0xC1, 0x1B, 0x0D, 0x58,
287
+ 0x20, 0x6C, 0x0A, 0x6D, 0xDD, 0xE7, 0x7B, 0xB2, 0x7A, 0x0C, 0x87, 0x6A,
288
+ 0xAB, 0xF1, 0x4C, 0xF2, 0x0D, 0x92, 0x1D, 0xE8, 0x64, 0x8D, 0x8C, 0xE5,
289
+ 0x4A, 0x33, 0xE1, 0xA4, 0x6A, 0x09, 0xE6, 0x6E, 0x4E, 0x0E, 0x58, 0x20,
290
+ 0xD6, 0xFF, 0x79, 0x07, 0x7E, 0x79, 0xA9, 0xDC, 0x94, 0xF4, 0xE0, 0xDA,
291
+ 0x16, 0xAD, 0x58, 0xE8, 0xA0, 0xCD, 0x7C, 0xED, 0xB0, 0x1A, 0x19, 0xCA,
292
+ 0x7A, 0xC6, 0xD7, 0xAB, 0x34, 0x60, 0xE2, 0x3A, 0x0F, 0x58, 0x20, 0xA8,
293
+ 0x99, 0xB4, 0xB1, 0xF5, 0x7C, 0xFB, 0x8A, 0xC8, 0x08, 0x4B, 0x65, 0xE9,
294
+ 0xB8, 0xB0, 0x87, 0x97, 0x5E, 0xCD, 0xFE, 0xE2, 0x91, 0x8D, 0xAB, 0x5F,
295
+ 0x9D, 0x4B, 0x81, 0x95, 0x18, 0xC0, 0xBE, 0x10, 0x58, 0x20, 0x88, 0x50,
296
+ 0xEE, 0xB5, 0xDB, 0x6E, 0x29, 0x1F, 0x9F, 0xD9, 0x95, 0xE8, 0xAC, 0x53,
297
+ 0x95, 0x29, 0xFF, 0x2C, 0xE1, 0x25, 0xB3, 0xA7, 0x9B, 0x91, 0x3E, 0x6E,
298
+ 0x5E, 0xBE, 0xFA, 0x88, 0x0E, 0x76, 0x11, 0x58, 0x20, 0xDD, 0xFD, 0x87,
299
+ 0x77, 0x1C, 0x16, 0x84, 0x8C, 0x49, 0x99, 0xE9, 0x87, 0x11, 0xD6, 0xE8,
300
+ 0x24, 0x78, 0xF7, 0xEB, 0xC4, 0x79, 0xA9, 0xA8, 0x3F, 0x1B, 0xC3, 0x1D,
301
+ 0x3E, 0x51, 0xBC, 0x82, 0x1E, 0x12, 0x58, 0x20, 0xC8, 0xBA, 0x11, 0xF4,
302
+ 0xE1, 0x82, 0x10, 0x8D, 0xEB, 0x38, 0x89, 0x0E, 0x41, 0x58, 0xA8, 0x3A,
303
+ 0xA9, 0x86, 0x3A, 0x5E, 0x93, 0x22, 0x07, 0x1C, 0x13, 0xB4, 0x27, 0x8E,
304
+ 0x0D, 0x38, 0x98, 0x08, 0x13, 0x58, 0x20, 0x87, 0xAE, 0x60, 0x87, 0x4B,
305
+ 0x26, 0x03, 0xB8, 0xA8, 0x4A, 0xA9, 0xE7, 0x6F, 0xEB, 0x1F, 0x23, 0x46,
306
+ 0x8B, 0xF9, 0x42, 0x0A, 0x2A, 0x3C, 0x03, 0x53, 0x6E, 0x35, 0xCA, 0xE5,
307
+ 0x95, 0x8B, 0xC1, 0x14, 0x58, 0x20, 0xF3, 0x4F, 0x4E, 0x54, 0x85, 0xDE,
308
+ 0x89, 0x38, 0xC5, 0xA9, 0xAB, 0x37, 0xEA, 0x3B, 0xBD, 0x6E, 0x67, 0xF5,
309
+ 0xEF, 0x1F, 0x83, 0x19, 0xD6, 0x45, 0x62, 0xEE, 0x06, 0x3C, 0xBA, 0xDE,
310
+ 0x00, 0x2C, 0x15, 0x58, 0x20, 0xEC, 0xE8, 0x11, 0x53, 0x96, 0x1D, 0x98,
311
+ 0xDE, 0xE8, 0x5D, 0x81, 0x9E, 0x0A, 0xC1, 0xEE, 0xF2, 0x14, 0x18, 0x06,
312
+ 0xFF, 0xEF, 0x76, 0x84, 0x93, 0x2B, 0x94, 0xC3, 0x54, 0xE1, 0x73, 0x50,
313
+ 0xCC, 0x16, 0x58, 0x20, 0x9A, 0xB1, 0xEB, 0x8C, 0xA0, 0x54, 0x22, 0xE2,
314
+ 0xD7, 0x0E, 0x73, 0xEF, 0x82, 0x89, 0x18, 0x4C, 0xF8, 0xED, 0xCF, 0x4E,
315
+ 0x40, 0xDA, 0x39, 0x34, 0x7B, 0xA4, 0x04, 0x25, 0x55, 0x0C, 0xE6, 0x5F,
316
+ 0x17, 0x58, 0x20, 0xC7, 0xB3, 0x88, 0x6B, 0xBC, 0x90, 0x51, 0x07, 0x6F,
317
+ 0x5A, 0xD2, 0xD5, 0x30, 0x14, 0x2E, 0x7F, 0xBF, 0xAF, 0x31, 0x28, 0xCC,
318
+ 0x21, 0x39, 0x2F, 0xAF, 0x1D, 0x3E, 0xE0, 0xE5, 0xF8, 0x93, 0x3B, 0x18,
319
+ 0x18, 0x58, 0x20, 0x08, 0x36, 0x97, 0xC6, 0x64, 0x36, 0xB2, 0x5F, 0xCF,
320
+ 0x8A, 0xA0, 0xCC, 0x95, 0x56, 0x12, 0x6D, 0x94, 0x01, 0x20, 0x13, 0xA5,
321
+ 0x8C, 0x70, 0xF8, 0xE8, 0x85, 0xC0, 0x2D, 0x2F, 0x52, 0x38, 0xEC, 0x18,
322
+ 0x19, 0x58, 0x20, 0x03, 0x7B, 0xD4, 0x44, 0x7E, 0x09, 0xA5, 0xD7, 0xAA,
323
+ 0xDC, 0xB3, 0x59, 0x3D, 0x05, 0xE4, 0xC1, 0x7A, 0xA2, 0x30, 0xAF, 0x60,
324
+ 0xE7, 0xC8, 0xD3, 0x0C, 0x29, 0xAF, 0xC9, 0x7A, 0xD9, 0x81, 0x5D, 0x18,
325
+ 0x1A, 0x58, 0x20, 0x19, 0x70, 0xC3, 0xAC, 0x3C, 0x55, 0xD8, 0x27, 0x02,
326
+ 0xCE, 0x9F, 0x8E, 0xD7, 0x76, 0x08, 0x32, 0x38, 0x6E, 0x5F, 0xDD, 0xAF,
327
+ 0x4E, 0x35, 0x2D, 0x4C, 0xF9, 0x53, 0xA1, 0x5E, 0x40, 0xAC, 0xEC, 0x18,
328
+ 0x1B, 0x58, 0x20, 0xC4, 0xBB, 0xFA, 0xAF, 0x6B, 0xD4, 0x90, 0x96, 0x28,
329
+ 0x61, 0xF6, 0x33, 0x98, 0xDA, 0x8F, 0xAD, 0x19, 0xC2, 0x6E, 0x1D, 0xAC,
330
+ 0xD0, 0x7D, 0x52, 0x91, 0xE9, 0xA2, 0x2C, 0xDA, 0xF5, 0x31, 0x9E, 0x18,
331
+ 0x1C, 0x58, 0x20, 0x24, 0xAA, 0x53, 0xA9, 0xB4, 0x12, 0x0C, 0x19, 0x2D,
332
+ 0xF7, 0x90, 0xEE, 0x17, 0x0E, 0x38, 0x53, 0x56, 0x55, 0xFA, 0x56, 0x37,
333
+ 0xB6, 0x61, 0xC0, 0xEF, 0x26, 0xAA, 0x3B, 0x35, 0x7D, 0xB6, 0x04, 0x18,
334
+ 0x1D, 0x58, 0x20, 0x4E, 0x13, 0x96, 0xCC, 0xDC, 0x52, 0x7D, 0x29, 0x6D,
335
+ 0x65, 0x01, 0x84, 0x25, 0x68, 0x60, 0xEC, 0xE3, 0xF3, 0x79, 0xAD, 0x49,
336
+ 0x00, 0x89, 0x9F, 0x17, 0x15, 0x44, 0xAF, 0xF5, 0xB9, 0x50, 0xA3, 0x18,
337
+ 0x1E, 0x58, 0x20, 0x76, 0x48, 0xD8, 0x30, 0xA5, 0xF2, 0xD4, 0x93, 0x54,
338
+ 0xBA, 0x3E, 0x65, 0xF4, 0x49, 0x71, 0x31, 0xD6, 0x37, 0x48, 0xC7, 0x47,
339
+ 0x74, 0x8E, 0x79, 0x09, 0xBA, 0xEE, 0xEC, 0x82, 0x27, 0x9A, 0x76, 0x18,
340
+ 0x1F, 0x58, 0x20, 0x2E, 0xCD, 0xDA, 0x6B, 0xE9, 0x98, 0x5C, 0x3F, 0xCB,
341
+ 0xB2, 0xFB, 0x08, 0x52, 0xCC, 0x1F, 0x99, 0x40, 0x18, 0xA5, 0xAB, 0x13,
342
+ 0x10, 0x66, 0x1F, 0x7A, 0xD1, 0xFF, 0x44, 0xBB, 0x62, 0x2C, 0xF9, 0x18,
343
+ 0x20, 0x58, 0x20, 0xC6, 0x74, 0x42, 0x54, 0x8C, 0xCB, 0x44, 0x99, 0x68,
344
+ 0x23, 0x74, 0x85, 0x06, 0xD7, 0xFB, 0xE3, 0x88, 0x02, 0xF2, 0xAB, 0x95,
345
+ 0xB2, 0x93, 0x7F, 0xB9, 0xB4, 0xB5, 0xFB, 0x95, 0xCD, 0x36, 0x2E, 0x18,
346
+ 0x21, 0x58, 0x20, 0x77, 0x04, 0x87, 0xD5, 0x59, 0x05, 0x19, 0xE5, 0xE7,
347
+ 0x57, 0x85, 0x19, 0x9F, 0x0D, 0x17, 0x85, 0xDB, 0x09, 0x6E, 0x95, 0x94,
348
+ 0x34, 0xA0, 0xFF, 0xD1, 0x9D, 0x86, 0x64, 0x55, 0xA3, 0x87, 0xA8, 0x18,
349
+ 0x22, 0x58, 0x20, 0x12, 0xF6, 0xBC, 0x76, 0x67, 0x80, 0xE9, 0x05, 0x93,
350
+ 0x78, 0x49, 0x5C, 0xDE, 0x5E, 0x47, 0xF7, 0x8B, 0xE3, 0x51, 0xD5, 0x0D,
351
+ 0xD5, 0x3E, 0x51, 0x8E, 0xB3, 0xA6, 0x8F, 0xDF, 0xAF, 0xDC, 0xB3, 0x18,
352
+ 0x23, 0x58, 0x20, 0xD5, 0xB8, 0x48, 0xD4, 0xED, 0xB7, 0x68, 0x0C, 0x16,
353
+ 0x74, 0x62, 0x0B, 0x45, 0x47, 0x40, 0x02, 0xE2, 0x9A, 0x59, 0xE9, 0xB7,
354
+ 0x47, 0xC5, 0x98, 0x75, 0x71, 0x3F, 0x39, 0xD0, 0xDE, 0x43, 0x26, 0x18,
355
+ 0x24, 0x58, 0x20, 0xF1, 0x1E, 0x3E, 0xEC, 0x4B, 0xE5, 0x1A, 0xE1, 0x2E,
356
+ 0xAB, 0xFB, 0x52, 0xB4, 0xCA, 0xCA, 0x05, 0x9A, 0xDA, 0x76, 0x6F, 0xC5,
357
+ 0x59, 0x90, 0xF2, 0xC9, 0xC8, 0xAA, 0xE3, 0x6E, 0x3D, 0xC4, 0x15, 0x18,
358
+ 0x25, 0x58, 0x20, 0x7E, 0xD8, 0xD0, 0x9F, 0x03, 0x6A, 0x1D, 0x63, 0x05,
359
+ 0x18, 0x9E, 0xC7, 0x08, 0x65, 0x9C, 0x4B, 0xFD, 0x11, 0xE1, 0xF8, 0x13,
360
+ 0x48, 0xF5, 0x59, 0x46, 0x4B, 0xDE, 0xB8, 0xB7, 0x09, 0xBA, 0xC0, 0x18,
361
+ 0x26, 0x58, 0x20, 0x48, 0xFE, 0xAF, 0xFA, 0x4F, 0xE8, 0xA7, 0x1B, 0x41,
362
+ 0x7E, 0x91, 0x4A, 0xB7, 0xDE, 0xE1, 0x79, 0xB4, 0x97, 0x19, 0x9F, 0xE4,
363
+ 0x87, 0x9D, 0x89, 0x4D, 0xCB, 0x9D, 0x8C, 0xC6, 0x6B, 0xCD, 0x73, 0x18,
364
+ 0x27, 0x58, 0x20, 0xE5, 0xAE, 0xF9, 0x86, 0xF9, 0xD6, 0x24, 0x70, 0xBC,
365
+ 0x15, 0x4E, 0x10, 0x3E, 0xEC, 0x19, 0x10, 0x53, 0xAD, 0xAB, 0x46, 0x6A,
366
+ 0x10, 0x1C, 0x4A, 0x4E, 0xA3, 0xEE, 0x1A, 0x1E, 0x02, 0x5C, 0x2C, 0x18,
367
+ 0x28, 0x58, 0x20, 0xBA, 0xAE, 0x3D, 0xD3, 0xE7, 0xEA, 0xAA, 0x5F, 0xB8,
368
+ 0x4F, 0x24, 0xE5, 0x75, 0x22, 0x39, 0x02, 0xB1, 0x38, 0xF8, 0x54, 0x57,
369
+ 0x52, 0x13, 0xCB, 0xB7, 0x0D, 0x74, 0x1A, 0xB4, 0x66, 0xF0, 0x15, 0x18,
370
+ 0x29, 0x58, 0x20, 0x4C, 0xB1, 0x32, 0x39, 0x6A, 0xBC, 0x65, 0x8F, 0xED,
371
+ 0xDC, 0x1A, 0x7C, 0x2A, 0x6A, 0x4D, 0x1C, 0xD4, 0x58, 0xD2, 0x38, 0x05,
372
+ 0x48, 0x8E, 0x28, 0x7A, 0x2B, 0xDC, 0x02, 0x0C, 0x9B, 0x4E, 0xFE, 0x18,
373
+ 0x2A, 0x58, 0x20, 0xEC, 0x64, 0xD6, 0x5D, 0x48, 0x30, 0xB6, 0x01, 0x3F,
374
+ 0x70, 0xB0, 0xF2, 0x17, 0x28, 0x78, 0x8C, 0x2F, 0xD3, 0x72, 0x12, 0x6C,
375
+ 0xB5, 0x1A, 0xB1, 0xE5, 0xF7, 0xD2, 0x6B, 0x83, 0x03, 0x60, 0x22, 0x73,
376
+ 0x6F, 0x72, 0x67, 0x2E, 0x61, 0x61, 0x6D, 0x76, 0x61, 0x2E, 0x31, 0x38,
377
+ 0x30, 0x31, 0x33, 0x2E, 0x35, 0x2E, 0x31, 0xA7, 0x00, 0x58, 0x20, 0xBD,
378
+ 0x12, 0x05, 0xF8, 0x26, 0x49, 0x6C, 0xED, 0xD8, 0x42, 0x71, 0x85, 0x46,
379
+ 0x28, 0x98, 0x4D, 0x76, 0xC6, 0x2A, 0xB6, 0xB7, 0xD4, 0xF6, 0x8E, 0x04,
380
+ 0x65, 0x8D, 0x4E, 0x63, 0xDA, 0xA4, 0x10, 0x01, 0x58, 0x20, 0x28, 0xA2,
381
+ 0xA6, 0xF3, 0xFB, 0x47, 0xEE, 0x49, 0x75, 0x8A, 0x06, 0xBE, 0x56, 0xB7,
382
+ 0x5D, 0xA5, 0x98, 0x0A, 0x2E, 0xF7, 0xD4, 0xD6, 0xC6, 0xB0, 0x04, 0x02,
383
+ 0xC1, 0x02, 0x3C, 0x97, 0xBE, 0xF6, 0x02, 0x58, 0x20, 0xDA, 0xF1, 0x0E,
384
+ 0x80, 0xD8, 0x7E, 0xDD, 0xA4, 0x05, 0x1B, 0xF1, 0x21, 0x89, 0x5C, 0xAD,
385
+ 0x3F, 0xC5, 0x95, 0xDB, 0x8D, 0x5A, 0xEB, 0x35, 0x26, 0xDE, 0x70, 0x4B,
386
+ 0x6F, 0x0E, 0x77, 0xAC, 0xFA, 0x03, 0x58, 0x20, 0xA6, 0xF8, 0x0A, 0x0C,
387
+ 0xBF, 0x80, 0xF4, 0x2C, 0xC3, 0x3E, 0x08, 0xF9, 0x8E, 0x0D, 0x85, 0xCF,
388
+ 0xC5, 0xA4, 0xB9, 0x7D, 0x13, 0xC5, 0xD4, 0xBA, 0xD8, 0x99, 0x2B, 0xFE,
389
+ 0x5A, 0xBD, 0x9A, 0x92, 0x04, 0x58, 0x20, 0x06, 0x26, 0x32, 0x51, 0x0E,
390
+ 0xEF, 0xBB, 0x33, 0x8C, 0x12, 0x22, 0x8D, 0x8C, 0xA2, 0x99, 0xD4, 0xC0,
391
+ 0x7C, 0x34, 0xF1, 0x2C, 0xCC, 0xF8, 0x6C, 0x51, 0x94, 0x72, 0x52, 0x8D,
392
+ 0x8F, 0xBC, 0x9A, 0x05, 0x58, 0x20, 0xCE, 0x4F, 0x35, 0x15, 0xE7, 0xC2,
393
+ 0x56, 0x09, 0x5A, 0xC6, 0xB6, 0xAA, 0x4A, 0x4A, 0xF0, 0xAC, 0x8B, 0x96,
394
+ 0x40, 0x79, 0xBD, 0x62, 0x7B, 0xC8, 0x97, 0xF5, 0x44, 0x08, 0x7F, 0x2D,
395
+ 0x2C, 0x7B, 0x06, 0x58, 0x20, 0x92, 0x1A, 0xEC, 0x9F, 0xA8, 0xC5, 0x1C,
396
+ 0x6F, 0x90, 0xDE, 0x86, 0x0F, 0x6E, 0x5F, 0x4D, 0x81, 0xC7, 0x56, 0xF6,
397
+ 0x2A, 0x8F, 0xE6, 0xE1, 0x9D, 0x91, 0x22, 0xE9, 0x42, 0xDD, 0xB9, 0xBF,
398
+ 0xA3, 0x6D, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4B, 0x65, 0x79, 0x49,
399
+ 0x6E, 0x66, 0x6F, 0xA1, 0x69, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4B,
400
+ 0x65, 0x79, 0xA4, 0x01, 0x02, 0x20, 0x01, 0x21, 0x58, 0x20, 0x61, 0xDC,
401
+ 0x8B, 0x2C, 0x6E, 0x98, 0xE1, 0xA2, 0x82, 0xB1, 0x6F, 0x95, 0xF3, 0x73,
402
+ 0xC1, 0xB0, 0xB9, 0x9E, 0xE4, 0x7F, 0xA5, 0x71, 0x91, 0x76, 0x3F, 0x08,
403
+ 0xB2, 0xFC, 0x1E, 0xBE, 0x9A, 0xF5, 0x22, 0x58, 0x20, 0x10, 0xCF, 0x01,
404
+ 0x63, 0x7F, 0x63, 0xCB, 0x7C, 0x53, 0xF8, 0x92, 0x5F, 0xD2, 0xA3, 0x7D,
405
+ 0xED, 0xEC, 0x6D, 0x04, 0xEA, 0xAB, 0xE4, 0xDC, 0xCA, 0x94, 0x43, 0x79,
406
+ 0x62, 0x81, 0x3A, 0xAF, 0x1C, 0x6C, 0x76, 0x61, 0x6C, 0x69, 0x64, 0x69,
407
+ 0x74, 0x79, 0x49, 0x6E, 0x66, 0x6F, 0xA3, 0x66, 0x73, 0x69, 0x67, 0x6E,
408
+ 0x65, 0x64, 0xC0, 0x74, 0x32, 0x30, 0x32, 0x34, 0x2D, 0x30, 0x32, 0x2D,
409
+ 0x31, 0x34, 0x54, 0x30, 0x38, 0x3A, 0x30, 0x30, 0x3A, 0x30, 0x30, 0x5A,
410
+ 0x69, 0x76, 0x61, 0x6C, 0x69, 0x64, 0x46, 0x72, 0x6F, 0x6D, 0xC0, 0x74,
411
+ 0x32, 0x30, 0x32, 0x34, 0x2D, 0x30, 0x32, 0x2D, 0x31, 0x34, 0x54, 0x30,
412
+ 0x38, 0x3A, 0x30, 0x30, 0x3A, 0x30, 0x30, 0x5A, 0x6A, 0x76, 0x61, 0x6C,
413
+ 0x69, 0x64, 0x55, 0x6E, 0x74, 0x69, 0x6C, 0xC0, 0x74, 0x32, 0x30, 0x32,
414
+ 0x35, 0x2D, 0x30, 0x32, 0x2D, 0x31, 0x34, 0x54, 0x30, 0x38, 0x3A, 0x30,
415
+ 0x30, 0x3A, 0x30, 0x30, 0x5A, 0x67, 0x64, 0x6F, 0x63, 0x54, 0x79, 0x70,
416
+ 0x65, 0x75, 0x6F, 0x72, 0x67, 0x2E, 0x69, 0x73, 0x6F, 0x2E, 0x31, 0x38,
417
+ 0x30, 0x31, 0x33, 0x2E, 0x35, 0x2E, 0x31, 0x2E, 0x6D, 0x44, 0x4C,
418
+ };
419
+
420
+ template <class Field>
421
+ void test_parser(const Field& F) {
422
+ using CborWitness = CborWitness<Field>;
423
+ using CborTesting = CborTesting<Field>;
424
+
425
+ using EvalBackend = EvaluationBackend<Field>;
426
+ using Logic = Logic<Field, EvalBackend>;
427
+ using CborL = Cbor<Logic>;
428
+
429
+ const EvalBackend ebk(F);
430
+ const Logic L(&ebk, F);
431
+ const CborL CBOR(L);
432
+ const CborTesting CT(F);
433
+ const CborWitness CW(F);
434
+
435
+ size_t input_len = mso_nbytes;
436
+ size_t n = input_len;
437
+
438
+ std::vector<typename CborWitness::v8> inS(n);
439
+ std::vector<typename CborWitness::position_witness> pwS(n);
440
+ CW.compute_witnesses(n, input_len, mso_example, inS.data(), pwS.data());
441
+
442
+ std::vector<typename CborL::v8> in(n);
443
+ std::vector<typename CborL::position_witness> pw(n);
444
+ CT.convert_witnesses(n, in.data(), pw.data(), inS.data(), pwS.data());
445
+
446
+ std::vector<typename CborL::decode> ds(n);
447
+ std::vector<typename CborL::parse_output> ps(n);
448
+ CBOR.decode_and_assert_decode_and_parse(n, ds.data(), ps.data(), in.data(),
449
+ pw.data());
450
+
451
+ // assert a map entry with a 1 byte index
452
+ CBOR.assert_map_entry(n,
453
+ CT.index(1886), // devKey.v,
454
+ 2,
455
+ CT.index(1926), // devKeyPky.k,
456
+ CT.index(1927), // devKeyPky.v,
457
+ CT.index(3), // devKeyPky.ndx,
458
+ ds.data(), ps.data());
459
+
460
+ // assert a map entry with a 2-byte index
461
+ CBOR.assert_map_entry(n, CT.index(69), // org.v,
462
+ 2,
463
+ CT.index(246), // k pos for entry 5
464
+ CT.index(247), // v pos for entry 5
465
+ CT.index(5), // index = 5
466
+ ds.data(), ps.data());
467
+ }
468
+
469
+ TEST(CborParser, MSOPrimeField) { test_parser(Fp<1>("18446744073709551557")); }
470
+
471
+ TEST(CborParser, MSOBinaryField) { test_parser(GF2_128<>()); }
472
+ } // namespace
473
+ } // namespace proofs
@@ -0,0 +1,185 @@
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 <cstddef>
18
+ #include <memory>
19
+ #include <random>
20
+
21
+ #include "algebra/fp.h"
22
+ #include "circuits/compiler/compiler.h"
23
+ #include "sumcheck/circuit.h"
24
+ #include "gtest/gtest.h"
25
+
26
+ namespace proofs {
27
+ namespace {
28
+ typedef Fp<1> Field;
29
+ const Field F("18446744073709551557");
30
+
31
+ TEST(Compiler, CanonicalizationSimple) {
32
+ std::unique_ptr<Circuit<Field>> c0;
33
+ std::unique_ptr<Circuit<Field>> c1;
34
+ // generate (a * b) * (c * d) in two different ways
35
+
36
+ {
37
+ QuadCircuit<Field> Q(F);
38
+
39
+ size_t a = Q.input_wire();
40
+ size_t b = Q.input_wire();
41
+ size_t c = Q.input_wire();
42
+ size_t d = Q.input_wire();
43
+ size_t ab = Q.mul(a, b);
44
+ size_t cd = Q.mul(c, d);
45
+ size_t out = Q.mul(ab, cd);
46
+ Q.output_wire(out, 0);
47
+ c0 = Q.mkcircuit(1);
48
+ }
49
+ {
50
+ QuadCircuit<Field> Q(F);
51
+
52
+ size_t a = Q.input_wire();
53
+ size_t b = Q.input_wire();
54
+ size_t c = Q.input_wire();
55
+ size_t d = Q.input_wire();
56
+ size_t cd = Q.mul(c, d);
57
+ size_t ab = Q.mul(b, a);
58
+ // introduce spurious unused results just to confuse things
59
+ // even more
60
+ Q.add(a, b);
61
+ Q.sub(d, ab);
62
+ size_t out = Q.mul(ab, cd);
63
+ Q.output_wire(out, 0);
64
+ c1 = Q.mkcircuit(1);
65
+ }
66
+ for (size_t i = 0; i < sizeof(c0->id); ++i) {
67
+ EXPECT_EQ(c0->id[i], c1->id[i]);
68
+ }
69
+ }
70
+
71
+ constexpr size_t kN = 13;
72
+
73
+ // A *= B
74
+ void matmul_ij(size_t A[kN][kN], const size_t B[kN][kN],
75
+ QuadCircuit<Field> &Q) {
76
+ size_t C[kN][kN];
77
+
78
+ // C = A * B
79
+ for (size_t i = 0; i < kN; ++i) {
80
+ for (size_t j = 0; j < kN; ++j) {
81
+ size_t s = Q.mul(A[i][0], B[0][j]);
82
+ for (size_t k = 1; k < kN; ++k) {
83
+ s = Q.add(s, Q.mul(A[i][k], B[k][j]));
84
+ }
85
+ C[i][j] = s;
86
+ }
87
+ }
88
+ // A = C
89
+ for (size_t i = 0; i < kN; ++i) {
90
+ for (size_t j = 0; j < kN; ++j) {
91
+ A[i][j] = C[i][j];
92
+ }
93
+ }
94
+ }
95
+
96
+ void matmul_ji(size_t A[kN][kN], const size_t B[kN][kN],
97
+ QuadCircuit<Field> &Q) {
98
+ size_t C[kN][kN];
99
+
100
+ // C = A * B
101
+ for (size_t j = 0; j < kN; ++j) {
102
+ for (size_t i = 0; i < kN; ++i) {
103
+ size_t s = Q.mul(A[i][0], B[0][j]);
104
+ for (size_t k = 1; k < kN; ++k) {
105
+ s = Q.add(s, Q.mul(A[i][k], B[k][j]));
106
+ }
107
+ C[i][j] = s;
108
+ }
109
+ }
110
+ // A = C
111
+ for (size_t i = 0; i < kN; ++i) {
112
+ for (size_t j = 0; j < kN; ++j) {
113
+ A[i][j] = C[i][j];
114
+ }
115
+ }
116
+ }
117
+
118
+ TEST(Compiler, CanonicalizationMatMul) {
119
+ std::mt19937 rng;
120
+ std::uniform_int_distribution<> dist(0, 1);
121
+ size_t pwr = 10;
122
+ std::unique_ptr<Circuit<Field>> c0;
123
+
124
+ // Test matrix multiplication in IJ order
125
+ // versus .5 IJ + .5 JI order.
126
+ {
127
+ QuadCircuit<Field> Q(F);
128
+ size_t A[kN][kN], B[kN][kN];
129
+ for (size_t i = 0; i < kN; ++i) {
130
+ for (size_t j = 0; j < kN; ++j) {
131
+ A[i][j] = Q.input_wire();
132
+ B[i][j] = Q.input_wire();
133
+ }
134
+ }
135
+
136
+ for (size_t n = 0; n < pwr; ++n) {
137
+ matmul_ij(A, B, Q);
138
+ }
139
+
140
+ size_t nout = 0;
141
+ for (size_t i = 0; i < kN; ++i) {
142
+ for (size_t j = 0; j < kN; ++j) {
143
+ Q.output_wire(A[i][j], nout++);
144
+ }
145
+ }
146
+
147
+ c0 = Q.mkcircuit(1);
148
+ }
149
+
150
+ // repeat a few times since the test is randomized
151
+ for (size_t repeat = 0; repeat < 10; ++repeat) {
152
+ QuadCircuit<Field> Q(F);
153
+ size_t A[kN][kN], B[kN][kN];
154
+ for (size_t i = 0; i < kN; ++i) {
155
+ for (size_t j = 0; j < kN; ++j) {
156
+ A[i][j] = Q.input_wire();
157
+ B[i][j] = Q.input_wire();
158
+ }
159
+ }
160
+
161
+ for (size_t n = 0; n < pwr; ++n) {
162
+ if (dist(rng) == 0) {
163
+ matmul_ij(A, B, Q);
164
+ } else {
165
+ matmul_ji(A, B, Q);
166
+ }
167
+ }
168
+
169
+ size_t nout = 0;
170
+ for (size_t i = 0; i < kN; ++i) {
171
+ for (size_t j = 0; j < kN; ++j) {
172
+ Q.output_wire(A[i][j], nout++);
173
+ }
174
+ }
175
+
176
+ std::unique_ptr<Circuit<Field>> c = Q.mkcircuit(1);
177
+
178
+ for (size_t i = 0; i < sizeof(c0->id); ++i) {
179
+ EXPECT_EQ(c0->id[i], c->id[i]);
180
+ }
181
+ }
182
+ }
183
+
184
+ } // namespace
185
+ } // namespace proofs