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,508 @@
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_TESTS_BASE64_DECODE_H_
16
+ #define PRIVACY_PROOFS_ZK_LIB_CIRCUITS_TESTS_BASE64_DECODE_H_
17
+
18
+ #include <cstddef>
19
+ #include <vector>
20
+
21
+ #include "util/ceildiv.h"
22
+ #include "util/panic.h"
23
+
24
+ namespace proofs {
25
+
26
+ // This class implements a circuit to assert a base64 url decoding.
27
+ // A string in base64 consists of the characters A-Z a-z 0-9 - _ and =.
28
+ // 0--25 are mapped to A-Z, 26--51 are mapped to a-z, 52--61 are mapped to 0-9,
29
+ // and 62--63 are mapped to - and _ respectively.
30
+ // The base64 encoding is padded with = to a multiple of 4.
31
+ template <class LogicCircuit>
32
+ class Base64Decoder {
33
+ using EltW = typename LogicCircuit::EltW;
34
+ using BitW = typename LogicCircuit::BitW;
35
+ using v8 = typename LogicCircuit::v8;
36
+ using v6 = typename LogicCircuit::template bitvec<6>;
37
+
38
+ public:
39
+ explicit Base64Decoder(const LogicCircuit& lc) : lc_(lc) {}
40
+
41
+ void base64_rawurl_decode(const v8 inputs[/*n*/],
42
+ v8 output[/* ceil(n*6/8) */], size_t n) const {
43
+ check(n < (1 << 28), "input too large"); // avoid overflows
44
+ v6 zero = lc_.template vbit<6>(0);
45
+
46
+ size_t max = ceildiv<size_t>(n * 6, 8);
47
+ size_t oc = 0;
48
+
49
+ for (size_t i = 0; i < n; i += 4, oc += 3) {
50
+ v6 quad[4]{v6(zero), v6(zero), v6(zero), v6(zero)};
51
+ for (size_t j = 0; j < 4 && i + j < n; ++j) {
52
+ decode(inputs[i + j], quad[j]);
53
+ }
54
+ // repack
55
+ for (size_t j = 0; j < 24 && (oc + j / 8) < max; ++j) {
56
+ output[oc + j / 8][7 - (j % 8)] = quad[j / 6][5 - (j % 6)];
57
+ }
58
+ }
59
+ }
60
+
61
+ template <size_t N>
62
+ void base64_rawurl_decode_len(
63
+ const v8 inputs[/*n*/], v8 output[/* ceil(n*6/8) */], size_t n,
64
+ typename LogicCircuit::template bitvec<N>& len) const {
65
+ check(n < (1 << 28), "input too large"); // avoid overflows
66
+ v6 zero = lc_.template vbit<6>(0);
67
+
68
+ size_t max = ceildiv<size_t>(n * 6, 8);
69
+ size_t oc = 0;
70
+
71
+ for (size_t i = 0; i < n; i += 4, oc += 3) {
72
+ v6 quad[4]{v6(zero), v6(zero), v6(zero), v6(zero)};
73
+ BitW invalid;
74
+ for (size_t j = 0; j < 4 && i + j < n; ++j) {
75
+ decode(inputs[i + j], quad[j], invalid);
76
+ auto range = lc_.vlt(i + j, len);
77
+ lc_.assert_implies(range, lc_.lnot(invalid));
78
+ }
79
+ // repack
80
+ for (size_t j = 0; j < 24 && (oc + j / 8) < max; ++j) {
81
+ output[oc + j / 8][7 - (j % 8)] = quad[j / 6][5 - (j % 6)];
82
+ }
83
+ }
84
+ }
85
+
86
+ void decode(const v8& in, v6& out) const {
87
+ BitW invalid;
88
+ decode(in, out, invalid);
89
+ lc_.assert0(invalid);
90
+ }
91
+
92
+ void decode(const v8& in, v6& out, BitW& invalid) const {
93
+ v8 ni;
94
+ for (size_t i = 0; i < 8; ++i) {
95
+ ni[i] = lc_.lnot(in[i]);
96
+ }
97
+ std::vector<std::vector<BitW> > exp[] = {
98
+ {
99
+ // ['!v4', '!v3', '!v2', '!v1', '!v0']
100
+ {
101
+ ni[4],
102
+ ni[3],
103
+ ni[2],
104
+ ni[1],
105
+ ni[0],
106
+ },
107
+ // ['v4', 'v3', '!v2', 'v1', 'v0']
108
+ {
109
+ in[4],
110
+ in[3],
111
+ ni[2],
112
+ in[1],
113
+ in[0],
114
+ },
115
+ // ['v5', 'v4', 'v3', 'v1', 'v0']
116
+ {
117
+ in[5],
118
+ in[4],
119
+ in[3],
120
+ in[1],
121
+ in[0],
122
+ },
123
+ // ['!v6', 'v3', 'v2', '!v0']
124
+ {
125
+ ni[6],
126
+ in[3],
127
+ in[2],
128
+ ni[0],
129
+ },
130
+ // ['v4', 'v3', 'v2', '!v1']
131
+ {
132
+ in[4],
133
+ in[3],
134
+ in[2],
135
+ ni[1],
136
+ },
137
+ // ['v4', 'v3', 'v2', '!v0']
138
+ {
139
+ in[4],
140
+ in[3],
141
+ in[2],
142
+ ni[0],
143
+ },
144
+ // ['!v6', '!v4', '!v3']
145
+ {
146
+ ni[6],
147
+ ni[4],
148
+ ni[3],
149
+ },
150
+ // ['!v6', '!v4', '!v2']
151
+ {
152
+ ni[6],
153
+ ni[4],
154
+ ni[2],
155
+ },
156
+ // ['!v6', 'v3', 'v1']
157
+ {
158
+ ni[6],
159
+ in[3],
160
+ in[1],
161
+ },
162
+ // ['!v6', '!v5']
163
+ {
164
+ ni[6],
165
+ ni[5],
166
+ },
167
+ // ['v7']
168
+ {
169
+ in[7],
170
+ },
171
+ },
172
+ {
173
+ // ['v6', 'v5', 'v4', '!v3', '!v2']
174
+ {
175
+ in[6],
176
+ in[5],
177
+ in[4],
178
+ ni[3],
179
+ ni[2],
180
+ },
181
+ // ['v6', 'v5', 'v4', '!v3', '!v0']
182
+ {
183
+ in[6],
184
+ in[5],
185
+ in[4],
186
+ ni[3],
187
+ ni[0],
188
+ },
189
+ // ['v6', 'v5', 'v4', 'v2', '!v1']
190
+ {
191
+ in[6],
192
+ in[5],
193
+ in[4],
194
+ in[2],
195
+ ni[1],
196
+ },
197
+ // ['v5', 'v2', 'v1', 'v0']
198
+ {
199
+ in[5],
200
+ in[2],
201
+ in[1],
202
+ in[0],
203
+ },
204
+ // ['v4', 'v3', 'v1', 'v0']
205
+ {
206
+ in[4],
207
+ in[3],
208
+ in[1],
209
+ in[0],
210
+ },
211
+ // ['v5', 'v3']
212
+ {
213
+ in[5],
214
+ in[3],
215
+ },
216
+ // ['!v6', '!v2']
217
+ {
218
+ ni[6],
219
+ ni[2],
220
+ },
221
+ // ['!v6', 'v2']
222
+ {
223
+ ni[6],
224
+ in[2],
225
+ },
226
+ },
227
+ {
228
+ // ['v5', '!v4', '!v3', '!v1']
229
+ {
230
+ in[5],
231
+ ni[4],
232
+ ni[3],
233
+ ni[1],
234
+ },
235
+ // ['v5', '!v4', '!v3', '!v2']
236
+ {
237
+ in[5],
238
+ ni[4],
239
+ ni[3],
240
+ ni[2],
241
+ },
242
+ // ['!v5', 'v4', 'v1']
243
+ {
244
+ ni[5],
245
+ in[4],
246
+ in[1],
247
+ },
248
+ // ['v5', '!v4', '!v3', '!v0']
249
+ {
250
+ in[5],
251
+ ni[4],
252
+ ni[3],
253
+ ni[0],
254
+ },
255
+ // ['v4', 'v2', 'v1', 'v0']
256
+ {
257
+ in[4],
258
+ in[2],
259
+ in[1],
260
+ in[0],
261
+ },
262
+ // ['!v5', 'v4', 'v0']
263
+ {
264
+ ni[5],
265
+ in[4],
266
+ in[0],
267
+ },
268
+ // ['!v5', 'v4', 'v2']
269
+ {
270
+ ni[5],
271
+ in[4],
272
+ in[2],
273
+ },
274
+ // ['v4', 'v3']
275
+ {
276
+ in[4],
277
+ in[3],
278
+ },
279
+ // ['!v6', '!v2']
280
+ {
281
+ ni[6],
282
+ ni[2],
283
+ },
284
+ // ['!v6', 'v2']
285
+ {
286
+ ni[6],
287
+ in[2],
288
+ },
289
+ },
290
+ {
291
+ // ['v6', '!v3', '!v2', '!v1', '!v0']
292
+ {
293
+ in[6],
294
+ ni[3],
295
+ ni[2],
296
+ ni[1],
297
+ ni[0],
298
+ },
299
+ // ['v6', 'v5', 'v4', '!v3', '!v2']
300
+ {
301
+ in[6],
302
+ in[5],
303
+ in[4],
304
+ ni[3],
305
+ ni[2],
306
+ },
307
+ // ['v6', 'v5', 'v4', '!v3', '!v0']
308
+ {
309
+ in[6],
310
+ in[5],
311
+ in[4],
312
+ ni[3],
313
+ ni[0],
314
+ },
315
+ // ['v6', 'v5', 'v4', 'v2', '!v1']
316
+ {
317
+ in[6],
318
+ in[5],
319
+ in[4],
320
+ in[2],
321
+ ni[1],
322
+ },
323
+ // ['v5', '!v4', '!v3', '!v1']
324
+ {
325
+ in[5],
326
+ ni[4],
327
+ ni[3],
328
+ ni[1],
329
+ },
330
+ // ['v5', '!v4', '!v3', '!v2']
331
+ {
332
+ in[5],
333
+ ni[4],
334
+ ni[3],
335
+ ni[2],
336
+ },
337
+ // ['v5', '!v4', '!v3', '!v0']
338
+ {
339
+ in[5],
340
+ ni[4],
341
+ ni[3],
342
+ ni[0],
343
+ },
344
+ // ['!v5', 'v3', 'v1']
345
+ {
346
+ ni[5],
347
+ in[3],
348
+ in[1],
349
+ },
350
+ // ['v3', 'v2', 'v1', 'v0']
351
+ {
352
+ in[3],
353
+ in[2],
354
+ in[1],
355
+ in[0],
356
+ },
357
+ // ['!v5', 'v3', 'v0']
358
+ {
359
+ ni[5],
360
+ in[3],
361
+ in[0],
362
+ },
363
+ // ['!v5', 'v3', 'v2']
364
+ {
365
+ ni[5],
366
+ in[3],
367
+ in[2],
368
+ },
369
+ // ['!v6', 'v3']
370
+ {
371
+ ni[6],
372
+ in[3],
373
+ },
374
+ // ['!v6', 'v2']
375
+ {
376
+ ni[6],
377
+ in[2],
378
+ },
379
+ },
380
+ {
381
+ // ['v5', '!v4', 'v2', '!v1', 'v0']
382
+ {
383
+ in[5],
384
+ ni[4],
385
+ in[2],
386
+ ni[1],
387
+ in[0],
388
+ },
389
+ // ['v6', 'v5', 'v4', 'v2', '!v1']
390
+ {
391
+ in[6],
392
+ in[5],
393
+ in[4],
394
+ in[2],
395
+ ni[1],
396
+ },
397
+ // ['!v5', '!v2', '!v1', '!v0']
398
+ {
399
+ ni[5],
400
+ ni[2],
401
+ ni[1],
402
+ ni[0],
403
+ },
404
+ // ['v6', 'v5', 'v2', '!v0']
405
+ {
406
+ in[6],
407
+ in[5],
408
+ in[2],
409
+ ni[0],
410
+ },
411
+ // ['v5', '!v2', 'v1', 'v0']
412
+ {
413
+ in[5],
414
+ ni[2],
415
+ in[1],
416
+ in[0],
417
+ },
418
+ // ['!v5', 'v2', 'v0']
419
+ {
420
+ ni[5],
421
+ in[2],
422
+ in[0],
423
+ },
424
+ // ['!v5', 'v2', 'v1']
425
+ {
426
+ ni[5],
427
+ in[2],
428
+ in[1],
429
+ },
430
+ // ['!v6', '!v2']
431
+ {
432
+ ni[6],
433
+ ni[2],
434
+ },
435
+ },
436
+ {
437
+ // ['v5', '!v4', 'v2', '!v1', 'v0']
438
+ {
439
+ in[5],
440
+ ni[4],
441
+ in[2],
442
+ ni[1],
443
+ in[0],
444
+ },
445
+ // ['v6', 'v5', '!v1', 'v0']
446
+ {
447
+ in[6],
448
+ in[5],
449
+ ni[1],
450
+ in[0],
451
+ },
452
+ // ['!v5', '!v1', '!v0']
453
+ {
454
+ ni[5],
455
+ ni[1],
456
+ ni[0],
457
+ },
458
+ // ['!v5', 'v1', 'v0']
459
+ {
460
+ ni[5],
461
+ in[1],
462
+ in[0],
463
+ },
464
+ // ['v5', 'v1', '!v0']
465
+ {
466
+ in[5],
467
+ in[1],
468
+ ni[0],
469
+ },
470
+ // ['!v6', 'v1']
471
+ {
472
+ ni[6],
473
+ in[1],
474
+ },
475
+ },
476
+ {
477
+ // ['v4', 'v3', 'v1', 'v0']
478
+ {
479
+ in[4],
480
+ in[3],
481
+ in[1],
482
+ in[0],
483
+ },
484
+ // ['!v6', 'v4', 'v0']
485
+ {
486
+ ni[6],
487
+ in[4],
488
+ in[0],
489
+ },
490
+ // ['v6', '!v0']
491
+ {
492
+ in[6],
493
+ ni[0],
494
+ },
495
+ },
496
+ };
497
+ invalid = lc_.or_of_and(exp[0]);
498
+ for (size_t i = 0; i < 6; ++i) {
499
+ out[5 - i] = lc_.or_of_and(exp[i + 1]);
500
+ }
501
+ }
502
+
503
+ private:
504
+ const LogicCircuit& lc_;
505
+ };
506
+ } // namespace proofs
507
+
508
+ #endif // PRIVACY_PROOFS_ZK_LIB_CIRCUITS_TESTS_BASE64_DECODE_H_
@@ -0,0 +1,95 @@
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 <cstddef>
16
+ #include <cstring>
17
+ #include <memory>
18
+ #include <string>
19
+
20
+ #include "arrays/dense.h"
21
+ #include "circuits/compiler/circuit_dump.h"
22
+ #include "circuits/compiler/compiler.h"
23
+ #include "circuits/logic/compiler_backend.h"
24
+ #include "circuits/logic/evaluation_backend.h"
25
+ #include "circuits/logic/logic.h"
26
+ #include "circuits/tests/base64/decode.h"
27
+ #include "gf2k/gf2_128.h"
28
+ #include "sumcheck/prover.h"
29
+ #include "gtest/gtest.h"
30
+
31
+ namespace proofs {
32
+ namespace {
33
+
34
+ typedef GF2_128<> Field;
35
+ const Field F;
36
+
37
+ using CompilerBackend = CompilerBackend<Field>;
38
+ using LogicCircuit = Logic<Field, CompilerBackend>;
39
+
40
+ using EvaluationBackend = EvaluationBackend<Field>;
41
+ using Logic = Logic<Field, EvaluationBackend>;
42
+
43
+ TEST(Base64, Circuit) {
44
+ QuadCircuit<Field> Q(F);
45
+ const CompilerBackend cbk(&Q);
46
+ const LogicCircuit LC(&cbk, F);
47
+ const EvaluationBackend ebk(F);
48
+ const Logic L(&ebk, F);
49
+ constexpr size_t nc = 1;
50
+
51
+ using v8 = LogicCircuit::v8;
52
+ using v6 = LogicCircuit::template bitvec<6>;
53
+
54
+ Base64Decoder<LogicCircuit> bd(LC);
55
+
56
+ v8 in = LC.vinput<8>();
57
+ v6 out;
58
+
59
+ bd.decode(in, out);
60
+ LC.voutput(out, 0);
61
+
62
+ auto CIRCUIT = Q.mkcircuit(nc);
63
+ dump_info<Field>("Base64Decoder", nc, Q);
64
+
65
+ // now evaluate the circuit on all inputs
66
+ std::string valid =
67
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
68
+
69
+ // Loop over all input symbols.
70
+ for (size_t c = 0; c < 256; ++c) {
71
+ auto win = L.template vbit<8>(c);
72
+ auto W = std::make_unique<Dense<Field>>(nc, /*constant one*/ 1 + 8);
73
+ W->v_[0] = F.one();
74
+ for (size_t i = 0; i < 8; ++i) {
75
+ W->v_[1 + i] = L.eval(win[i]).elt();
76
+ }
77
+
78
+ Prover<Field>::inputs pin;
79
+ Prover<Field> prover(F);
80
+ auto V = prover.eval_circuit(&pin, CIRCUIT.get(), W->clone(), F);
81
+
82
+ size_t ind = valid.find(c);
83
+ if (ind != std::string::npos) {
84
+ auto want = L.template vbit<6>(ind);
85
+ for (size_t i = 0; i < 6; ++i) {
86
+ EXPECT_EQ(V->v_[i], L.eval(want[i]).elt());
87
+ }
88
+ } else {
89
+ EXPECT_EQ(V, nullptr);
90
+ }
91
+ }
92
+ }
93
+
94
+ } // namespace
95
+ } // namespace proofs