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,98 @@
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_CBOR_TESTING_H_
16
+ #define PRIVACY_PROOFS_ZK_LIB_CIRCUITS_CBOR_PARSER_CBOR_TESTING_H_
17
+
18
+ #include <stddef.h>
19
+
20
+ #include "circuits/cbor_parser/cbor.h"
21
+ #include "circuits/cbor_parser/cbor_constants.h"
22
+ #include "circuits/cbor_parser/cbor_witness.h"
23
+ #include "circuits/logic/counter.h"
24
+ #include "circuits/logic/evaluation_backend.h"
25
+ #include "circuits/logic/logic.h"
26
+
27
+ // The purpose of this class is to convert the witnesses from Elt to
28
+ // EltW.
29
+ //
30
+ // Why?
31
+ //
32
+ // We want EltW in the evaluation backend to be a distinct type from
33
+ // Elt. They are really the same thing, but we want to be able to
34
+ // instantiate circuits in the compiler backend as well, and thus
35
+ // circuits ought not to rely on the fact that EvaluationBackend::EltW
36
+ // is really an Elt in disguise.
37
+ // Consequently, tests in the evaluation backend must accept EltW.
38
+ //
39
+ // The witness generator must produce Elt, otherwise this forces the
40
+ // inclusion of Logic in the app. We don't like that because Logic
41
+ // is just a set of helpers to generate circuits, and the final app
42
+ // is not supposed to generate circuits (since circuits are part of the
43
+ // prover<->verifier API and so they must be set in stone in advance.)
44
+ //
45
+ // So this class is the price to be paid to maintain this typing
46
+ // hygiene. Time will tell whether it was worth it.
47
+
48
+ namespace proofs {
49
+
50
+ template <class Field>
51
+ class CborTesting {
52
+ using EvalBackend = EvaluationBackend<Field>;
53
+ using LogicF = Logic<Field, EvalBackend>;
54
+ using EltW = typename LogicF::EltW;
55
+ using BitW = typename LogicF::BitW;
56
+ using CborL = Cbor<LogicF>;
57
+ using CborWitnessF = CborWitness<Field>;
58
+
59
+ public:
60
+ explicit CborTesting(const Field &F) : f_(F) {}
61
+
62
+ void convert_witnesses(
63
+ size_t n, typename CborL::v8 in[/*n*/],
64
+ typename CborL::position_witness pw[/*n*/],
65
+ typename CborL::global_witness &gw,
66
+ const typename CborWitnessF::v8 inS[/*n*/],
67
+ const typename CborWitnessF::position_witness pwS[/*n*/],
68
+ const typename CborWitnessF::global_witness &gwS) const {
69
+ const EvalBackend ebk(f_);
70
+ const LogicF L(&ebk, f_);
71
+ const Counter<LogicF> CTR(L);
72
+
73
+ for (size_t i = 0; i < n; ++i) {
74
+ for (size_t j = 0; j < 8; ++j) {
75
+ in[i][j] = BitW(L.konst(inS[i][j]), f_);
76
+ }
77
+ pw[i].encoded_sel_header = L.konst(pwS[i].encoded_sel_header);
78
+ }
79
+
80
+ gw.invprod_decode = L.konst(gwS.invprod_decode);
81
+ gw.cc0_counter = CTR.as_counter(gwS.cc0_counter);
82
+ gw.invprod_parse = L.konst(gwS.invprod_parse);
83
+ }
84
+
85
+ // Return an index that can be fed to a circuit in the
86
+ // evaluation backend (i.e., a bit vector).
87
+ typename CborL::vindex index(size_t j) const {
88
+ const EvalBackend ebk(f_);
89
+ const LogicF L(&ebk, f_);
90
+ return L.template vbit<CborConstants::kIndexBits>(j);
91
+ }
92
+
93
+ private:
94
+ const Field &f_;
95
+ };
96
+ } // namespace proofs
97
+
98
+ #endif // PRIVACY_PROOFS_ZK_LIB_CIRCUITS_CBOR_PARSER_CBOR_TESTING_H_
@@ -0,0 +1,312 @@
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_CBOR_WITNESS_H_
16
+ #define PRIVACY_PROOFS_ZK_LIB_CIRCUITS_CBOR_PARSER_CBOR_WITNESS_H_
17
+
18
+ #include <stddef.h>
19
+ #include <stdint.h>
20
+
21
+ #include <array>
22
+
23
+ #include "circuits/cbor_parser/cbor_constants.h"
24
+ #include "circuits/cbor_parser/cbor_pluck.h"
25
+ #include "util/panic.h"
26
+
27
+ namespace proofs {
28
+ template <class Field>
29
+ class CborWitness {
30
+ public:
31
+ using Elt = typename Field::Elt;
32
+ using CElt = typename Field::CElt;
33
+ static constexpr size_t kNCounters = CborConstants::kNCounters;
34
+ static constexpr size_t kIndexBits = CborConstants::kIndexBits;
35
+ using counters = std::array<size_t, kNCounters>;
36
+ using vindex = std::array<Elt, kIndexBits>;
37
+
38
+ struct position_witness {
39
+ Elt encoded_sel_header;
40
+
41
+ // SLEN output value, used for debugging but not fed to the circuit
42
+ size_t slen_next_debug;
43
+ // counter values, used for debugging but not fed to the circuit
44
+ counters cc_debug;
45
+ size_t isel_debug;
46
+ };
47
+
48
+ struct global_witness {
49
+ Elt invprod_decode;
50
+ CElt cc0_counter;
51
+ Elt invprod_parse;
52
+ };
53
+
54
+ using v8 = std::array<Elt, 8>;
55
+
56
+ explicit CborWitness(const Field& F) : f_(F) {}
57
+
58
+ // Return an index as an array of Elt, which can be stored into W[]
59
+ vindex index(size_t j) const {
60
+ const Field& F = f_; // shorthand
61
+ vindex r;
62
+ for (size_t i = 0; i < kIndexBits; ++i) {
63
+ r[i] = F.of_scalar((j >> i) & 1);
64
+ }
65
+ return r;
66
+ }
67
+
68
+ void fill_witnesses(size_t n, size_t input_len, const uint8_t bytes[/*n*/],
69
+ v8 in[/*n*/], position_witness pw[/*n*/],
70
+ global_witness& gw) const {
71
+ const Field& F = f_; // shorthand
72
+
73
+ // First pass to compute the number of top-level items. In the
74
+ // second pass, we will use this value to that all counters are 0
75
+ // at the end of the input.
76
+ size_t top_level_items;
77
+ {
78
+ // start with a value of cc[0] guaranteed not to
79
+ // underflow counter 0.
80
+ counters cc{{n + 1}};
81
+
82
+ size_t slen = 1;
83
+ for (size_t i = 0; i < n; ++i) {
84
+ bool overflow;
85
+ bool header = (slen == 1);
86
+ cc = counters_next(bytes[i], header,
87
+ /*have_nextb=*/(i + 1) < n,
88
+ /*nextb=*/(i + 1) < n ? bytes[i + 1] : 0, cc,
89
+ &overflow);
90
+ proofs::check(!overflow, "!overflow");
91
+ slen = next_slen(slen, n, bytes, i);
92
+ }
93
+
94
+ top_level_items = (n + 1) - cc[0];
95
+ }
96
+
97
+ // second pass starting with the correct counter values
98
+ {
99
+ counters cc{{top_level_items}};
100
+ Elt prod_parse = F.one();
101
+ Elt prod_decode = F.one();
102
+
103
+ size_t slen = 1;
104
+ for (size_t i = 0; i < n; ++i) {
105
+ bool overflow;
106
+ bool header = (slen == 1);
107
+
108
+ // Require all bytes to be 0 except the last N-INPUT_LEN.
109
+ // That is, the input must be aligned towards the end
110
+ // of arrays, and padded with zeroes at the beginning.
111
+ proofs::check(input_len <= n, "input_len <= n");
112
+ if (i + input_len < n) {
113
+ proofs::check(bytes[i] == 0, "bytes[i] == 0");
114
+ }
115
+
116
+ // set up input
117
+ for (size_t j = 0; j < 8; ++j) {
118
+ in[i][j] = F.of_scalar((bytes[i] >> j) & 1);
119
+ }
120
+
121
+ if (!header) {
122
+ F.mul(prod_decode, F.znz_indicator(F.as_counter(slen - 1)));
123
+ }
124
+
125
+ // set up parse witness
126
+ size_t isel = kNCounters;
127
+ for (size_t l = kNCounters; l-- > 0;) {
128
+ if (cc[l] != 0) {
129
+ if (i > 0) {
130
+ F.mul(prod_parse, F.znz_indicator(F.as_counter(cc[l])));
131
+ }
132
+ isel = l;
133
+ break;
134
+ }
135
+ }
136
+
137
+ cc = counters_next(bytes[i], header,
138
+ /*have_nextb=*/(i + 1) < n,
139
+ /*nextb=*/(i + 1) < n ? bytes[i + 1] : 0, cc,
140
+ &overflow);
141
+ proofs::check(!overflow, "!overflow");
142
+ if (i == 0) {
143
+ gw.cc0_counter = F.as_counter(cc[0]);
144
+ }
145
+ pw[i].cc_debug = cc;
146
+
147
+ // set up decode witness
148
+ size_t slen_next = next_slen(slen, n, bytes, i);
149
+ pw[i].slen_next_debug = slen_next;
150
+
151
+ // encode witnesses
152
+ pw[i].encoded_sel_header =
153
+ cbor_plucker_point<Field, kNCounters>()(header, isel, F);
154
+ pw[i].isel_debug = isel;
155
+
156
+ // advance slen
157
+ slen = slen_next;
158
+ }
159
+
160
+ gw.invprod_decode = F.invertf(prod_decode);
161
+ gw.invprod_parse = F.invertf(prod_parse);
162
+ }
163
+ }
164
+
165
+ private:
166
+ static size_t next_slen(size_t slen, size_t n, const uint8_t bytes[/*n*/],
167
+ size_t i) {
168
+ size_t slenm1 = slen - 1;
169
+ bool header = (slenm1 == 0);
170
+ if (header) {
171
+ if (i + 1 < n) {
172
+ return item_length(bytes[i], true, bytes[i + 1]);
173
+ } else {
174
+ return item_length(bytes[i], false, 0);
175
+ }
176
+ } else {
177
+ return slenm1;
178
+ }
179
+ }
180
+
181
+ // TODO [matteof 2023-11-03] Should not panic() here.
182
+ static size_t item_length(uint8_t b, bool valid_nextb, uint8_t nextb) {
183
+ size_t type = (b >> 5) & 0x7u;
184
+ size_t count = b & 0x1Fu;
185
+ bool count0_23 = (count < 24);
186
+ bool count24 = (count == 24);
187
+ bool count25 = (count == 25);
188
+ bool count26 = (count == 26);
189
+ bool count27 = (count == 27);
190
+
191
+ switch (type) {
192
+ case 0: /* unsigned */
193
+ case 1: /* negative integer */
194
+ case 6: /* tag */
195
+ if (count0_23) {
196
+ return 1;
197
+ } else if (count24) {
198
+ return 2;
199
+ } else if (count25) {
200
+ return 3;
201
+ } else if (count26) {
202
+ return 5;
203
+ } else if (count27) {
204
+ return 9;
205
+ } else {
206
+ check(false, "unwitnessed count (atom)");
207
+ return 0;
208
+ }
209
+
210
+ case 4: /* array */
211
+ case 5: /* map */
212
+ if (count0_23) {
213
+ return 1;
214
+ } else if (count24) {
215
+ return 2;
216
+ } else {
217
+ check(false, "unwitnessed count (item)");
218
+ return 0;
219
+ }
220
+
221
+ case 2: /* bytes */
222
+ case 3: /* text */
223
+ if (count0_23) {
224
+ return 1 + count;
225
+ } else if (count24) {
226
+ if (valid_nextb) {
227
+ return 2 + nextb;
228
+ } else {
229
+ check(false, "invalid nextb");
230
+ return 0;
231
+ }
232
+ } else {
233
+ check(false, "unwitnessed count (bytes)");
234
+ return 0;
235
+ }
236
+
237
+ case 7: /* special */
238
+ check(false, "unwitnessed special");
239
+ return 0;
240
+
241
+ default:
242
+ check(false, "can't happen");
243
+ return 0;
244
+ }
245
+ }
246
+
247
+ static size_t decode_count(size_t count_in_header, bool have_nextb,
248
+ uint8_t nextb) {
249
+ if (count_in_header < 24) {
250
+ return count_in_header;
251
+ } else if (count_in_header == 24) {
252
+ if (have_nextb) {
253
+ return nextb;
254
+ } else {
255
+ check(false, "!have_nextb");
256
+ }
257
+ } else {
258
+ check(false, "count > 24");
259
+ }
260
+ return 0xdeadbeef;
261
+ }
262
+
263
+ static counters counters_next(uint8_t b, bool header, bool have_nextb,
264
+ uint8_t nextb, const counters& c,
265
+ bool* overflow) {
266
+ size_t type = (b >> 5) & 0x7u;
267
+ size_t count_in_header = b & 0x1Fu;
268
+ bool tagp = (type == 6);
269
+ bool arrayp = (type == 4);
270
+ bool mapp = (type == 5);
271
+
272
+ counters c1 = c;
273
+ *overflow = false;
274
+
275
+ for (size_t l = kNCounters; l-- > 0;) {
276
+ if (c[l] != 0) {
277
+ if (header) {
278
+ c1[l] = c[l] - 1;
279
+
280
+ if (tagp) {
281
+ if (l + 1 < kNCounters) {
282
+ c1[l + 1] = 1;
283
+ } else {
284
+ *overflow = true;
285
+ }
286
+ } else if (arrayp) {
287
+ if (l + 1 < kNCounters) {
288
+ c1[l + 1] = decode_count(count_in_header, have_nextb, nextb);
289
+ } else {
290
+ *overflow = true;
291
+ }
292
+ } else if (mapp) {
293
+ if (l + 1 < kNCounters) {
294
+ c1[l + 1] = 2 * decode_count(count_in_header, have_nextb, nextb);
295
+ } else {
296
+ *overflow = true;
297
+ }
298
+ }
299
+ }
300
+ break;
301
+ }
302
+ }
303
+
304
+ return c1;
305
+ }
306
+
307
+ private:
308
+ const Field& f_;
309
+ };
310
+ } // namespace proofs
311
+
312
+ #endif // PRIVACY_PROOFS_ZK_LIB_CIRCUITS_CBOR_PARSER_CBOR_WITNESS_H_