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,411 @@
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_MDOC_MDOC_1F_H_
16
+ #define PRIVACY_PROOFS_ZK_LIB_CIRCUITS_TESTS_MDOC_MDOC_1F_H_
17
+
18
+ #include <cstddef>
19
+ #include <cstdint>
20
+ #include <vector>
21
+
22
+ #include "circuits/cbor_parser/cbor.h"
23
+ #include "circuits/ecdsa/verify_circuit.h"
24
+ #include "circuits/logic/bit_plucker.h"
25
+ #include "circuits/logic/counter.h"
26
+ #include "circuits/logic/routing.h"
27
+ #include "circuits/mdoc/mdoc_constants.h"
28
+ #include "circuits/sha/flatsha256_circuit.h"
29
+ #include "circuits/tests/mdoc/mdoc_1f_io.h"
30
+ #include "util/panic.h"
31
+ namespace proofs {
32
+
33
+ template <class LogicCircuit, class Field, class EC, size_t kNumAttr>
34
+ class mdoc_1f {
35
+ using EltW = typename LogicCircuit::EltW;
36
+ using Elt = typename LogicCircuit::Elt;
37
+ using Nat = typename Field::N;
38
+ using Ecdsa = VerifyCircuit<LogicCircuit, Field, EC>;
39
+ using EcdsaWitness = typename Ecdsa::Witness;
40
+
41
+ using v8 = typename LogicCircuit::v8;
42
+ using v32 = typename LogicCircuit::v32;
43
+ using v256 = typename LogicCircuit::v256;
44
+ using Flatsha =
45
+ FlatSHA256Circuit<LogicCircuit,
46
+ BitPlucker<LogicCircuit, kMdoc1SHAPluckerBits>>;
47
+ using RoutingL = Routing<LogicCircuit>;
48
+ using ShaBlockWitness = typename Flatsha::BlockWitness;
49
+ using sha_packed_v32 = typename Flatsha::packed_v32;
50
+ using CborL = Cbor<LogicCircuit, kMdoc1CborIndexBits>;
51
+ using vind = typename CborL::vindex;
52
+
53
+ const LogicCircuit& lc_;
54
+ const EC& ec_;
55
+ const Nat& order_;
56
+
57
+ public:
58
+ struct CborIndex {
59
+ vind k, v, ndx;
60
+ void input(const LogicCircuit& lc) {
61
+ k = lc.template vinput<kMdoc1CborIndexBits>();
62
+ v = lc.template vinput<kMdoc1CborIndexBits>();
63
+ ndx = lc.template vinput<kMdoc1CborIndexBits>();
64
+ }
65
+ };
66
+
67
+ struct AttrShift {
68
+ vind offset;
69
+ vind len;
70
+ void input(const LogicCircuit& lc) {
71
+ offset = lc.template vinput<kMdoc1CborIndexBits>();
72
+ len = lc.template vinput<kMdoc1CborIndexBits>();
73
+ }
74
+ };
75
+
76
+ class Witness {
77
+ public:
78
+ EltW e_;
79
+ EltW dpkx_, dpky_;
80
+
81
+ EcdsaWitness sig_;
82
+ EcdsaWitness dpk_sig_;
83
+
84
+ v8 in_[64 * kMdoc1MaxSHABlocks]; /* input bytes, 64 * MAX */
85
+ v8 nb_; /* index of sha block that contains the real hash */
86
+ ShaBlockWitness sig_sha_[kMdoc1MaxSHABlocks];
87
+
88
+ size_t num_attr_;
89
+
90
+ std::vector<std::vector<ShaBlockWitness>> attr_sha_;
91
+ std::vector<std::vector<v8>> attrb_;
92
+
93
+ std::vector<CborIndex> attr_mso_;
94
+ std::vector<AttrShift> attr_ei_;
95
+ std::vector<AttrShift> attr_ev_;
96
+
97
+ std::vector<v8> incb_;
98
+ std::vector<typename CborL::position_witness> pwcb_;
99
+ typename CborL::global_witness gwcb_;
100
+
101
+ vind prepad_, mso_len_;
102
+
103
+ CborIndex valid_, valid_from_, valid_until_;
104
+ CborIndex dev_key_info_, dev_key_, dev_key_pkx_, dev_key_pky_;
105
+ CborIndex value_digests_, org_;
106
+
107
+ explicit Witness(size_t num_attr)
108
+ : num_attr_(num_attr),
109
+ attr_sha_(num_attr),
110
+ attrb_(num_attr),
111
+ attr_mso_(num_attr),
112
+ attr_ei_(num_attr),
113
+ attr_ev_(num_attr),
114
+ incb_(kMdoc1MaxMsoLen),
115
+ pwcb_(kMdoc1MaxMsoLen) {
116
+ for (size_t i = 0; i < num_attr; ++i) {
117
+ attr_sha_[i].resize(2);
118
+ }
119
+ }
120
+
121
+ void input(const LogicCircuit& lc) {
122
+ const Counter<LogicCircuit> CTRC(lc);
123
+
124
+ e_ = lc.eltw_input();
125
+ dpkx_ = lc.eltw_input();
126
+ dpky_ = lc.eltw_input();
127
+
128
+ sig_.input(lc);
129
+ dpk_sig_.input(lc);
130
+
131
+ nb_ = lc.template vinput<8>();
132
+
133
+ // sha input init (skip the prefix) =========================
134
+ for (size_t i = 0; i + kCose1PrefixLen < 64 * kMdoc1MaxSHABlocks; ++i) {
135
+ in_[i] = lc.template vinput<8>();
136
+ }
137
+
138
+ for (size_t j = 0; j < kMdoc1MaxSHABlocks; j++) {
139
+ sig_sha_[j].input(lc);
140
+ }
141
+
142
+ // Cbor input init: note, the inC array will be constructed in the
143
+ // circuit.
144
+ prepad_ = lc.template vinput<kMdoc1CborIndexBits>();
145
+ mso_len_ = lc.template vinput<kMdoc1CborIndexBits>();
146
+ for (size_t i = 0; i < kMdoc1MaxMsoLen; ++i) {
147
+ pwcb_[i].encoded_sel_header = lc.eltw_input();
148
+ }
149
+ gwcb_.invprod_decode = lc.eltw_input();
150
+ gwcb_.cc0_counter = CTRC.input();
151
+ gwcb_.invprod_parse = lc.eltw_input();
152
+
153
+ valid_.input(lc);
154
+ valid_from_.input(lc);
155
+ valid_until_.input(lc);
156
+ dev_key_info_.input(lc);
157
+ dev_key_.input(lc);
158
+ dev_key_pkx_.input(lc);
159
+ dev_key_pky_.input(lc);
160
+ value_digests_.input(lc);
161
+ org_.input(lc);
162
+
163
+ // Attribute opening witnesses
164
+ for (size_t ai = 0; ai < num_attr_; ++ai) {
165
+ for (size_t i = 0; i < 64 * 2; ++i) {
166
+ attrb_[ai].push_back(lc.template vinput<8>());
167
+ }
168
+ for (size_t j = 0; j < 2; j++) {
169
+ attr_sha_[ai][j].input(lc);
170
+ }
171
+ attr_mso_[ai].input(lc);
172
+ attr_ei_[ai].input(lc);
173
+ attr_ev_[ai].input(lc);
174
+ }
175
+ }
176
+ };
177
+
178
+ struct OpenedAttribute {
179
+ v8 attr[96]; // representing attribute name, elementValue delimiter, and
180
+ // finally the attribute value.
181
+ v8 len;
182
+ void input(const LogicCircuit& lc) {
183
+ for (size_t j = 0; j < 96; ++j) {
184
+ attr[j] = lc.template vinput<8>();
185
+ }
186
+ len = lc.template vinput<8>();
187
+ }
188
+ };
189
+
190
+ struct PathEntry {
191
+ CborIndex ind;
192
+ size_t l;
193
+ const uint8_t* name;
194
+ };
195
+
196
+ explicit mdoc_1f(const LogicCircuit& lc, const EC& ec, const Nat& order)
197
+ : lc_(lc), ec_(ec), order_(order), sha_(lc), r_(lc), cbor_(lc) {}
198
+
199
+ void assert_credential(EltW pkX, EltW pkY, EltW hash_tr,
200
+ OpenedAttribute oa[/* NUM_ATTR */],
201
+ const v8 now[/*kDateLen*/], const Witness& vw) const {
202
+ Ecdsa ecc(lc_, ec_, order_);
203
+
204
+ ecc.verify_signature3(pkX, pkY, vw.e_, vw.sig_);
205
+ ecc.verify_signature3(vw.dpkx_, vw.dpky_, hash_tr, vw.dpk_sig_);
206
+
207
+ // Construct the message to hash by concatenating the prefix and the input.
208
+ std::vector<v8> bbuf(64 * kMdoc1MaxSHABlocks);
209
+ for (size_t i = 0; i < 64 * kMdoc1MaxSHABlocks; ++i) {
210
+ if (i < kCose1PrefixLen) {
211
+ lc_.bits(8, bbuf[i].data(), kCose1Prefix[i]);
212
+ } else {
213
+ bbuf[i] = vw.in_[i - kCose1PrefixLen];
214
+ }
215
+ }
216
+ sha_.assert_message(kMdoc1MaxSHABlocks, vw.nb_, bbuf.data(), vw.sig_sha_);
217
+ // Verify that the hash of the mdoc is equal to e.
218
+ assert_hash(vw.e_, vw);
219
+
220
+ // Shift a portion of the MSO into buf and check it.
221
+ const v8 zz = lc_.template vbit<8>(0); // cannot appear in strings
222
+ std::vector<v8> cmp_buf(kMdoc1MaxMsoLen);
223
+
224
+ // Re-arrange the input wires to produce the <0 padded><mso> input
225
+ // required for cbor parsing. The subtracted 5 corresponds to the fix
226
+ // length D8 18 <len2> prefix of the mso that we want to skip parsing.
227
+ // The subtracted 2 corresponds to the length.
228
+ std::vector<v8> in_cb(kMdoc1MaxMsoLen);
229
+ r_.unshift(vw.prepad_, kMdoc1MaxMsoLen, in_cb.data(),
230
+ kMdoc1MaxMsoLen - 5 - 2, vw.in_ + 5 + 2, zz, 3);
231
+
232
+ std::vector<typename CborL::decode> dsC(kMdoc1MaxMsoLen);
233
+ std::vector<typename CborL::parse_output> psC(kMdoc1MaxMsoLen);
234
+ cbor_.decode_and_assert_decode_and_parse(kMdoc1MaxMsoLen, dsC.data(),
235
+ psC.data(), in_cb.data(),
236
+ vw.pwcb_.data(), vw.gwcb_);
237
+
238
+ cbor_.assert_input_starts_at(kMdoc1MaxMsoLen, vw.prepad_, vw.mso_len_,
239
+ dsC.data());
240
+
241
+ // Validity
242
+ PathEntry vk[2] = {{vw.valid_, kValidityInfoLen, kValidityInfoID},
243
+ {vw.valid_from_, kValidFromLen, kValidFromID}};
244
+ assert_path(2, vk, vw, dsC, psC);
245
+ cbor_.assert_date_before_at(kMdoc1MaxMsoLen, vw.valid_from_.v, now,
246
+ dsC.data());
247
+
248
+ // validUntil is a key in validityInfo.
249
+ cbor_.assert_map_entry(kMdoc1MaxMsoLen, vw.valid_.v, 1, vw.valid_until_.k,
250
+ vw.valid_until_.v, vw.valid_until_.ndx, dsC.data(),
251
+ psC.data());
252
+ cbor_.assert_text_at(kMdoc1MaxMsoLen, vw.valid_until_.k, kValidUntilLen,
253
+ kValidUntilID, dsC.data());
254
+ cbor_.assert_date_after_at(kMdoc1MaxMsoLen, vw.valid_until_.v, now,
255
+ dsC.data());
256
+
257
+ PathEntry dk[2] = {
258
+ {vw.dev_key_info_, kDeviceKeyInfoLen, kDeviceKeyInfoID},
259
+ {vw.dev_key_, kDeviceKeyLen, kDeviceKeyID}};
260
+ assert_path(2, dk, vw, dsC, psC);
261
+ cbor_.assert_map_entry(kMdoc1MaxMsoLen, vw.dev_key_.v, 2, vw.dev_key_pkx_.k,
262
+ vw.dev_key_pkx_.v, vw.dev_key_pkx_.ndx, dsC.data(),
263
+ psC.data());
264
+ cbor_.assert_map_entry(kMdoc1MaxMsoLen, vw.dev_key_.v, 2, vw.dev_key_pky_.k,
265
+ vw.dev_key_pky_.v, vw.dev_key_pky_.ndx, dsC.data(),
266
+ psC.data());
267
+ cbor_.assert_negative_at(kMdoc1MaxMsoLen, vw.dev_key_pkx_.k, 1, dsC.data());
268
+ cbor_.assert_negative_at(kMdoc1MaxMsoLen, vw.dev_key_pky_.k, 2, dsC.data());
269
+ assert_elt_as_be_bytes_at(kMdoc1MaxMsoLen, vw.dev_key_pkx_.v, 32, vw.dpkx_,
270
+ dsC.data());
271
+ assert_elt_as_be_bytes_at(kMdoc1MaxMsoLen, vw.dev_key_pky_.v, 32, vw.dpky_,
272
+ dsC.data());
273
+ // Attributes parsing
274
+ PathEntry ak[2] = {
275
+ {vw.value_digests_, kValueDigestsLen, kValueDigestsID},
276
+ {vw.org_, kOrgLen, kOrgID}};
277
+ assert_path(2, ak, vw, dsC, psC);
278
+
279
+ // Attributes: Equality of hash with MSO value
280
+ for (size_t ai = 0; ai < vw.num_attr_; ++ai) {
281
+ auto two = lc_.template vbit<8>(2);
282
+ v8 B[96];
283
+ sha_.assert_message(2, two, vw.attrb_[ai].data(),
284
+ vw.attr_sha_[ai].data());
285
+
286
+ // Check the hash matches the value in the signed MSO.
287
+ cbor_.assert_map_entry(kMdoc1MaxMsoLen, vw.org_.v, 2, vw.attr_mso_[ai].k,
288
+ vw.attr_mso_[ai].v, vw.attr_mso_[ai].ndx,
289
+ dsC.data(), psC.data());
290
+ EltW h = repack32(vw.attr_sha_[ai][1].h1);
291
+ assert_elt_as_be_bytes_at(kMdoc1MaxMsoLen, vw.attr_mso_[ai].v, 32, h,
292
+ dsC.data());
293
+
294
+ // Check that the attribute_id and value occur in the hashed text.
295
+ r_.shift(vw.attr_ei_[ai].offset, 96, B, 128, vw.attrb_[ai].data(), zz, 3);
296
+ assert_attribute(96, oa[ai].len, B, oa[ai].attr);
297
+ }
298
+ }
299
+
300
+ private:
301
+ // TODO [matteof 2025-08-01] packing a SHA256 hash into an
302
+ // EltW loses some soundness, and there is no reason to do it.
303
+ // Get rid of repack32() and compare the individual bits/bytes.
304
+ EltW repack32(const sha_packed_v32 H[]) const {
305
+ EltW h = lc_.konst(0);
306
+ Elt twok = lc_.one();
307
+ for (size_t j = 8; j-- > 0;) {
308
+ auto hj = sha_.bp_.unpack_v32(H[j]);
309
+ for (size_t k = 0; k < 32; ++k) {
310
+ h = lc_.axpy(h, twok, lc_.eval(hj[k]));
311
+ lc_.f_.add(twok, twok);
312
+ }
313
+ }
314
+ return h;
315
+ }
316
+
317
+ // Assert that the hash of the mdoc is equal to e.
318
+ // The hash is encoded in the SHA witness, and thus the correct block
319
+ // must be muxed for the comparison. Thus method first muxes the "packed"
320
+ // encoding of the SHA witness, then unpacks it and compares it to e to
321
+ // save a lot of work in the bit plucker.
322
+ void assert_hash(const EltW& e, const Witness& vw) const {
323
+ sha_packed_v32 x[8];
324
+ for (size_t b = 0; b < kMdoc1MaxSHABlocks; ++b) {
325
+ auto bt = lc_.veq(vw.nb_, b + 1); /* b is zero-indexed */
326
+ auto ebt = lc_.eval(bt);
327
+ for (size_t i = 0; i < 8; ++i) {
328
+ for (size_t k = 0; k < sha_.bp_.kNv32Elts; ++k) {
329
+ if (b == 0) {
330
+ x[i][k] = lc_.mul(ebt, vw.sig_sha_[b].h1[i][k]);
331
+ } else {
332
+ auto maybe_sha = lc_.mul(ebt, vw.sig_sha_[b].h1[i][k]);
333
+ x[i][k] = lc_.add(x[i][k], maybe_sha);
334
+ }
335
+ }
336
+ }
337
+ }
338
+
339
+ EltW h = repack32(x);
340
+ lc_.assert_eq(h, e);
341
+ }
342
+
343
+ // Checks that an attribute id or attribute value is as expected.
344
+ // The len parameter holds the byte length of the expected id or value.
345
+ void assert_attribute(size_t max, const v8& len, const v8 got[/*max*/],
346
+ const v8 want[/*max*/]) const {
347
+ // auto two = lc_.konst(2);
348
+ for (size_t j = 0; j < max; ++j) {
349
+ auto ll = lc_.vlt(j, len);
350
+ auto same = lc_.eq(8, got[j].data(), want[j].data());
351
+ lc_.assert_implies(ll, same);
352
+ }
353
+ }
354
+
355
+ void assert_path(size_t len, PathEntry p[], const Witness& vw,
356
+ std::vector<typename CborL::decode>& dsC,
357
+ std::vector<typename CborL::parse_output>& psC) const {
358
+ vind start(vw.prepad_);
359
+ for (size_t i = 0; i < len; ++i) {
360
+ cbor_.assert_map_entry(kMdoc1MaxMsoLen, start, i, p[i].ind.k, p[i].ind.v,
361
+ p[i].ind.ndx, dsC.data(), psC.data());
362
+ cbor_.assert_text_at(kMdoc1MaxMsoLen, p[i].ind.k, p[i].l, p[i].name,
363
+ dsC.data());
364
+ start = p[i].ind.v;
365
+ }
366
+ }
367
+
368
+ void assert_elt_as_be_bytes_at(size_t n, const vind& j, size_t len, EltW X,
369
+ const typename CborL::decode ds[/*n*/]) const {
370
+ const LogicCircuit& LC = lc_; // shorthand
371
+
372
+ std::vector<EltW> A(n);
373
+ for (size_t i = 0; i < n; ++i) {
374
+ A[i] = ds[i].bd.as_scalar;
375
+ }
376
+ EltW tx = LC.konst(0), k256 = LC.konst(256);
377
+
378
+ std::vector<EltW> B(2 + len);
379
+ size_t unroll = 3;
380
+ size_t si = 1;
381
+ r_.shift(j, len + 2, B.data(), n, A.data(), LC.konst(0), unroll);
382
+ if (len < 24) {
383
+ size_t expected_header = (2 << 5) + len;
384
+ auto eh = LC.konst(expected_header);
385
+ LC.assert_eq(B[0], eh);
386
+ } else if (len < 256) {
387
+ size_t expected_header = (2 << 5) + 24;
388
+ auto eh = LC.konst(expected_header);
389
+ LC.assert_eq(B[0], eh);
390
+ LC.assert_eq(B[1], LC.konst(len));
391
+ si = 2;
392
+ } else {
393
+ check(false, "len >= 256");
394
+ }
395
+
396
+ for (size_t i = 0; i < len; ++i) {
397
+ auto tmp = LC.mul(tx, k256);
398
+ tx = LC.add(tmp, B[i + si]);
399
+ }
400
+
401
+ LC.assert_eq(tx, X);
402
+ }
403
+
404
+ Flatsha sha_;
405
+ RoutingL r_;
406
+ CborL cbor_;
407
+ };
408
+
409
+ } // namespace proofs
410
+
411
+ #endif // PRIVACY_PROOFS_ZK_LIB_CIRCUITS_TESTS_MDOC_MDOC_1F_H_
@@ -0,0 +1,32 @@
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_MDOC_MDOC_1F_IO_H_
16
+ #define PRIVACY_PROOFS_ZK_LIB_CIRCUITS_TESTS_MDOC_MDOC_1F_IO_H_
17
+
18
+ #include <cstddef>
19
+
20
+ #include "circuits/mdoc/mdoc_constants.h"
21
+
22
+ namespace proofs {
23
+
24
+ static constexpr size_t kMdoc1DateLen = 20; // Length of CBOR-formatted time.
25
+ static constexpr size_t kMdoc1MaxSHABlocks = 7;
26
+ static constexpr size_t kMdoc1CborIndexBits = 9;
27
+ static constexpr size_t kMdoc1MaxMsoLen =
28
+ kMdoc1MaxSHABlocks * 64 - 9 - kCose1PrefixLen;
29
+ static constexpr size_t kMdoc1SHAPluckerBits = 3;
30
+ } // namespace proofs
31
+
32
+ #endif // PRIVACY_PROOFS_ZK_LIB_CIRCUITS_TESTS_MDOC_MDOC_1F_IO_H_