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