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.
- checksums.yaml +7 -0
- data/CODE_OF_CONDUCT.md +10 -0
- data/LICENSE.txt +21 -0
- data/README.md +152 -0
- data/ext/longfellow/CMakeLists.txt +76 -0
- data/ext/longfellow/extconf.rb +77 -0
- data/lib/longfellow/attribute.rb +65 -0
- data/lib/longfellow/c.rb +105 -0
- data/lib/longfellow/errors.rb +78 -0
- data/lib/longfellow/version.rb +5 -0
- data/lib/longfellow/zk_spec.rb +40 -0
- data/lib/longfellow.rb +162 -0
- data/sig/longfellow.rbs +74 -0
- data/vendor/longfellow-zk/LICENSE +203 -0
- data/vendor/longfellow-zk/lib/algebra/blas.h +121 -0
- data/vendor/longfellow-zk/lib/algebra/bogorng.h +68 -0
- data/vendor/longfellow-zk/lib/algebra/compare.h +40 -0
- data/vendor/longfellow-zk/lib/algebra/convolution.h +219 -0
- data/vendor/longfellow-zk/lib/algebra/crt.cc +42 -0
- data/vendor/longfellow-zk/lib/algebra/crt.h +299 -0
- data/vendor/longfellow-zk/lib/algebra/crt_convolution.h +114 -0
- data/vendor/longfellow-zk/lib/algebra/crt_test.cc +371 -0
- data/vendor/longfellow-zk/lib/algebra/fft.h +104 -0
- data/vendor/longfellow-zk/lib/algebra/fft_interpolation.h +304 -0
- data/vendor/longfellow-zk/lib/algebra/fft_interpolation_test.cc +168 -0
- data/vendor/longfellow-zk/lib/algebra/fft_test.cc +257 -0
- data/vendor/longfellow-zk/lib/algebra/fp.h +59 -0
- data/vendor/longfellow-zk/lib/algebra/fp2.h +240 -0
- data/vendor/longfellow-zk/lib/algebra/fp24.h +342 -0
- data/vendor/longfellow-zk/lib/algebra/fp24_6.h +305 -0
- data/vendor/longfellow-zk/lib/algebra/fp24_6_test.cc +197 -0
- data/vendor/longfellow-zk/lib/algebra/fp2_test.cc +280 -0
- data/vendor/longfellow-zk/lib/algebra/fp_generic.h +533 -0
- data/vendor/longfellow-zk/lib/algebra/fp_p128.h +91 -0
- data/vendor/longfellow-zk/lib/algebra/fp_p256.h +68 -0
- data/vendor/longfellow-zk/lib/algebra/fp_p256k1.h +123 -0
- data/vendor/longfellow-zk/lib/algebra/fp_p384.h +65 -0
- data/vendor/longfellow-zk/lib/algebra/fp_p521.h +62 -0
- data/vendor/longfellow-zk/lib/algebra/fp_test.cc +522 -0
- data/vendor/longfellow-zk/lib/algebra/hash.h +39 -0
- data/vendor/longfellow-zk/lib/algebra/interpolation.h +117 -0
- data/vendor/longfellow-zk/lib/algebra/interpolation_test.cc +74 -0
- data/vendor/longfellow-zk/lib/algebra/limb.h +153 -0
- data/vendor/longfellow-zk/lib/algebra/limb_test.cc +75 -0
- data/vendor/longfellow-zk/lib/algebra/nat.cc +32 -0
- data/vendor/longfellow-zk/lib/algebra/nat.h +212 -0
- data/vendor/longfellow-zk/lib/algebra/nat_test.cc +183 -0
- data/vendor/longfellow-zk/lib/algebra/nussbaumer.h +400 -0
- data/vendor/longfellow-zk/lib/algebra/nussbaumer_test.cc +138 -0
- data/vendor/longfellow-zk/lib/algebra/nussbaumerfp2_test.cc +139 -0
- data/vendor/longfellow-zk/lib/algebra/permutations.h +79 -0
- data/vendor/longfellow-zk/lib/algebra/poly.h +240 -0
- data/vendor/longfellow-zk/lib/algebra/poly_test.cc +123 -0
- data/vendor/longfellow-zk/lib/algebra/reed_solomon.h +150 -0
- data/vendor/longfellow-zk/lib/algebra/reed_solomon_extension.h +108 -0
- data/vendor/longfellow-zk/lib/algebra/reed_solomon_extension_test.cc +76 -0
- data/vendor/longfellow-zk/lib/algebra/reed_solomon_test.cc +473 -0
- data/vendor/longfellow-zk/lib/algebra/rfft.h +400 -0
- data/vendor/longfellow-zk/lib/algebra/rfft_test.cc +102 -0
- data/vendor/longfellow-zk/lib/algebra/static_string.h +29 -0
- data/vendor/longfellow-zk/lib/algebra/sysdep.h +495 -0
- data/vendor/longfellow-zk/lib/algebra/sysdep_test.cc +41 -0
- data/vendor/longfellow-zk/lib/algebra/twiddle.h +59 -0
- data/vendor/longfellow-zk/lib/algebra/utility.h +86 -0
- data/vendor/longfellow-zk/lib/algebra/utility_test.cc +86 -0
- data/vendor/longfellow-zk/lib/arrays/affine.h +56 -0
- data/vendor/longfellow-zk/lib/arrays/affine_test.cc +220 -0
- data/vendor/longfellow-zk/lib/arrays/dense.h +210 -0
- data/vendor/longfellow-zk/lib/arrays/eq.h +75 -0
- data/vendor/longfellow-zk/lib/arrays/eqs.h +137 -0
- data/vendor/longfellow-zk/lib/arrays/eqs_test.cc +151 -0
- data/vendor/longfellow-zk/lib/arrays/sparse.h +192 -0
- data/vendor/longfellow-zk/lib/cbor/host_decoder.h +323 -0
- data/vendor/longfellow-zk/lib/cbor/host_decoder_test.cc +541 -0
- data/vendor/longfellow-zk/lib/circuits/cbor_parser/cbor.h +594 -0
- data/vendor/longfellow-zk/lib/circuits/cbor_parser/cbor_byte_decoder.h +150 -0
- data/vendor/longfellow-zk/lib/circuits/cbor_parser/cbor_byte_decoder_test.cc +147 -0
- data/vendor/longfellow-zk/lib/circuits/cbor_parser/cbor_constants.h +27 -0
- data/vendor/longfellow-zk/lib/circuits/cbor_parser/cbor_pluck.h +110 -0
- data/vendor/longfellow-zk/lib/circuits/cbor_parser/cbor_pluck_test.cc +55 -0
- data/vendor/longfellow-zk/lib/circuits/cbor_parser/cbor_test.cc +174 -0
- data/vendor/longfellow-zk/lib/circuits/cbor_parser/cbor_testing.h +98 -0
- data/vendor/longfellow-zk/lib/circuits/cbor_parser/cbor_witness.h +312 -0
- data/vendor/longfellow-zk/lib/circuits/cbor_parser/mso2_test.cc +662 -0
- data/vendor/longfellow-zk/lib/circuits/cbor_parser/mso_test.cc +485 -0
- data/vendor/longfellow-zk/lib/circuits/cbor_parser/scan.h +104 -0
- data/vendor/longfellow-zk/lib/circuits/cbor_parser/scan_test.cc +137 -0
- data/vendor/longfellow-zk/lib/circuits/cbor_parser_v2/cbor.h +640 -0
- data/vendor/longfellow-zk/lib/circuits/cbor_parser_v2/cbor_byte_decoder.h +150 -0
- data/vendor/longfellow-zk/lib/circuits/cbor_parser_v2/cbor_byte_decoder_test.cc +147 -0
- data/vendor/longfellow-zk/lib/circuits/cbor_parser_v2/cbor_constants.h +27 -0
- data/vendor/longfellow-zk/lib/circuits/cbor_parser_v2/cbor_testing.h +99 -0
- data/vendor/longfellow-zk/lib/circuits/cbor_parser_v2/cbor_witness.h +319 -0
- data/vendor/longfellow-zk/lib/circuits/cbor_parser_v2/lexer_test.cc +120 -0
- data/vendor/longfellow-zk/lib/circuits/cbor_parser_v2/mdoc_examples_test.cc +89 -0
- data/vendor/longfellow-zk/lib/circuits/cbor_parser_v2/parser_circuit_test.cc +506 -0
- data/vendor/longfellow-zk/lib/circuits/cbor_parser_v2/parser_size_test.cc +79 -0
- data/vendor/longfellow-zk/lib/circuits/cbor_parser_v2/parser_test.cc +473 -0
- data/vendor/longfellow-zk/lib/circuits/compiler/canonicalization_test.cc +185 -0
- data/vendor/longfellow-zk/lib/circuits/compiler/circuit_dump.h +65 -0
- data/vendor/longfellow-zk/lib/circuits/compiler/compiler.h +471 -0
- data/vendor/longfellow-zk/lib/circuits/compiler/compiler_test.cc +110 -0
- data/vendor/longfellow-zk/lib/circuits/compiler/node.h +176 -0
- data/vendor/longfellow-zk/lib/circuits/compiler/pdqhash.h +127 -0
- data/vendor/longfellow-zk/lib/circuits/compiler/schedule.h +435 -0
- data/vendor/longfellow-zk/lib/circuits/ecdsa/verify_circuit.h +371 -0
- data/vendor/longfellow-zk/lib/circuits/ecdsa/verify_external_test.cc +246 -0
- data/vendor/longfellow-zk/lib/circuits/ecdsa/verify_test.cc +587 -0
- data/vendor/longfellow-zk/lib/circuits/ecdsa/verify_witness.h +201 -0
- data/vendor/longfellow-zk/lib/circuits/logic/bit_adder.h +140 -0
- data/vendor/longfellow-zk/lib/circuits/logic/bit_adder_test.cc +64 -0
- data/vendor/longfellow-zk/lib/circuits/logic/bit_plucker.h +247 -0
- data/vendor/longfellow-zk/lib/circuits/logic/bit_plucker_constants.h +35 -0
- data/vendor/longfellow-zk/lib/circuits/logic/bit_plucker_encoder.h +72 -0
- data/vendor/longfellow-zk/lib/circuits/logic/bit_plucker_test.cc +183 -0
- data/vendor/longfellow-zk/lib/circuits/logic/compiler_backend.h +62 -0
- data/vendor/longfellow-zk/lib/circuits/logic/counter.h +171 -0
- data/vendor/longfellow-zk/lib/circuits/logic/counter_test.cc +102 -0
- data/vendor/longfellow-zk/lib/circuits/logic/evaluation_backend.h +94 -0
- data/vendor/longfellow-zk/lib/circuits/logic/logic.h +1232 -0
- data/vendor/longfellow-zk/lib/circuits/logic/logic_circuit_test.cc +310 -0
- data/vendor/longfellow-zk/lib/circuits/logic/logic_test.cc +521 -0
- data/vendor/longfellow-zk/lib/circuits/logic/memcmp.h +68 -0
- data/vendor/longfellow-zk/lib/circuits/logic/memcmp_test.cc +148 -0
- data/vendor/longfellow-zk/lib/circuits/logic/polynomial.h +94 -0
- data/vendor/longfellow-zk/lib/circuits/logic/polynomial_test.cc +62 -0
- data/vendor/longfellow-zk/lib/circuits/logic/routing.h +445 -0
- data/vendor/longfellow-zk/lib/circuits/logic/routing_test.cc +241 -0
- data/vendor/longfellow-zk/lib/circuits/logic/unary.h +55 -0
- data/vendor/longfellow-zk/lib/circuits/logic/unary_plucker.h +77 -0
- data/vendor/longfellow-zk/lib/circuits/logic/unary_plucker_constants.h +37 -0
- data/vendor/longfellow-zk/lib/circuits/logic/unary_plucker_test.cc +53 -0
- data/vendor/longfellow-zk/lib/circuits/logic/unary_size_test.cc +69 -0
- data/vendor/longfellow-zk/lib/circuits/logic/unary_test.cc +62 -0
- data/vendor/longfellow-zk/lib/circuits/mac/mac_circuit.h +193 -0
- data/vendor/longfellow-zk/lib/circuits/mac/mac_circuit_test.cc +223 -0
- data/vendor/longfellow-zk/lib/circuits/mac/mac_reference.h +72 -0
- data/vendor/longfellow-zk/lib/circuits/mac/mac_witness.h +94 -0
- data/vendor/longfellow-zk/lib/circuits/mdoc/circuit_maker.cc +242 -0
- data/vendor/longfellow-zk/lib/circuits/mdoc/mdoc_attribute_ids.h +311 -0
- data/vendor/longfellow-zk/lib/circuits/mdoc/mdoc_attribute_test.cc +64 -0
- data/vendor/longfellow-zk/lib/circuits/mdoc/mdoc_circuit_id.cc +85 -0
- data/vendor/longfellow-zk/lib/circuits/mdoc/mdoc_constants.h +85 -0
- data/vendor/longfellow-zk/lib/circuits/mdoc/mdoc_decompress.cc +41 -0
- data/vendor/longfellow-zk/lib/circuits/mdoc/mdoc_decompress.h +27 -0
- data/vendor/longfellow-zk/lib/circuits/mdoc/mdoc_examples.h +5232 -0
- data/vendor/longfellow-zk/lib/circuits/mdoc/mdoc_generate_circuit.cc +199 -0
- data/vendor/longfellow-zk/lib/circuits/mdoc/mdoc_hash.h +554 -0
- data/vendor/longfellow-zk/lib/circuits/mdoc/mdoc_signature.h +143 -0
- data/vendor/longfellow-zk/lib/circuits/mdoc/mdoc_signature_test.cc +444 -0
- data/vendor/longfellow-zk/lib/circuits/mdoc/mdoc_test_attributes.h +157 -0
- data/vendor/longfellow-zk/lib/circuits/mdoc/mdoc_witness.h +863 -0
- data/vendor/longfellow-zk/lib/circuits/mdoc/mdoc_zk.cc +693 -0
- data/vendor/longfellow-zk/lib/circuits/mdoc/mdoc_zk.h +216 -0
- data/vendor/longfellow-zk/lib/circuits/mdoc/mdoc_zk_test.cc +724 -0
- data/vendor/longfellow-zk/lib/circuits/mdoc/zk_spec.cc +100 -0
- data/vendor/longfellow-zk/lib/circuits/mdoc/zk_spec_test.cc +155 -0
- data/vendor/longfellow-zk/lib/circuits/sha/flatsha256_circuit.h +330 -0
- data/vendor/longfellow-zk/lib/circuits/sha/flatsha256_circuit_test.cc +607 -0
- data/vendor/longfellow-zk/lib/circuits/sha/flatsha256_io.h +26 -0
- data/vendor/longfellow-zk/lib/circuits/sha/flatsha256_witness.cc +163 -0
- data/vendor/longfellow-zk/lib/circuits/sha/flatsha256_witness.h +47 -0
- data/vendor/longfellow-zk/lib/circuits/sha/sha256_constants.cc +34 -0
- data/vendor/longfellow-zk/lib/circuits/sha/sha256_constants.h +27 -0
- data/vendor/longfellow-zk/lib/circuits/sha/sha256_test_values.h +389 -0
- data/vendor/longfellow-zk/lib/circuits/tests/anoncred/ptrcred.h +171 -0
- data/vendor/longfellow-zk/lib/circuits/tests/anoncred/small.h +218 -0
- data/vendor/longfellow-zk/lib/circuits/tests/anoncred/small_examples.h +118 -0
- data/vendor/longfellow-zk/lib/circuits/tests/anoncred/small_io.h +25 -0
- data/vendor/longfellow-zk/lib/circuits/tests/anoncred/small_test.cc +208 -0
- data/vendor/longfellow-zk/lib/circuits/tests/anoncred/small_witness.h +130 -0
- data/vendor/longfellow-zk/lib/circuits/tests/base64/decode.h +508 -0
- data/vendor/longfellow-zk/lib/circuits/tests/base64/decode_circuit_test.cc +95 -0
- data/vendor/longfellow-zk/lib/circuits/tests/base64/decode_test.cc +119 -0
- data/vendor/longfellow-zk/lib/circuits/tests/base64/decode_util.cc +47 -0
- data/vendor/longfellow-zk/lib/circuits/tests/base64/decode_util.h +29 -0
- data/vendor/longfellow-zk/lib/circuits/tests/ec/pk_circuit.h +231 -0
- data/vendor/longfellow-zk/lib/circuits/tests/ec/pk_circuit_test.cc +428 -0
- data/vendor/longfellow-zk/lib/circuits/tests/ec/pk_witness.h +102 -0
- data/vendor/longfellow-zk/lib/circuits/tests/jwt/jwt.h +190 -0
- data/vendor/longfellow-zk/lib/circuits/tests/jwt/jwt_constants.h +26 -0
- data/vendor/longfellow-zk/lib/circuits/tests/jwt/jwt_test.cc +559 -0
- data/vendor/longfellow-zk/lib/circuits/tests/jwt/jwt_witness.h +315 -0
- data/vendor/longfellow-zk/lib/circuits/tests/mdoc/mdoc_1f.h +411 -0
- data/vendor/longfellow-zk/lib/circuits/tests/mdoc/mdoc_1f_io.h +32 -0
- data/vendor/longfellow-zk/lib/circuits/tests/mdoc/mdoc_1f_test.cc +364 -0
- data/vendor/longfellow-zk/lib/circuits/tests/mdoc/mdoc_1f_witness.h +278 -0
- data/vendor/longfellow-zk/lib/circuits/tests/mdoc/mdoc_revocation.h +146 -0
- data/vendor/longfellow-zk/lib/circuits/tests/mdoc/mdoc_revocation_constants.h +25 -0
- data/vendor/longfellow-zk/lib/circuits/tests/mdoc/mdoc_revocation_test.cc +315 -0
- data/vendor/longfellow-zk/lib/circuits/tests/mdoc/mdoc_revocation_witness.h +136 -0
- data/vendor/longfellow-zk/lib/circuits/tests/pq/bitaddr/bitaddr.h +250 -0
- data/vendor/longfellow-zk/lib/circuits/tests/pq/bitaddr/bitaddr_test.cc +333 -0
- data/vendor/longfellow-zk/lib/circuits/tests/pq/bitaddr/bitaddr_witness.h +152 -0
- data/vendor/longfellow-zk/lib/circuits/tests/pq/ml_dsa/ml_dsa_44.h +903 -0
- data/vendor/longfellow-zk/lib/circuits/tests/pq/ml_dsa/ml_dsa_44_circuit_test.cc +274 -0
- data/vendor/longfellow-zk/lib/circuits/tests/pq/ml_dsa/ml_dsa_44_eval_test.cc +440 -0
- data/vendor/longfellow-zk/lib/circuits/tests/pq/ml_dsa/ml_dsa_44_examples.cc +8851 -0
- data/vendor/longfellow-zk/lib/circuits/tests/pq/ml_dsa/ml_dsa_44_examples.h +93 -0
- data/vendor/longfellow-zk/lib/circuits/tests/pq/ml_dsa/ml_dsa_44_types.cc +24 -0
- data/vendor/longfellow-zk/lib/circuits/tests/pq/ml_dsa/ml_dsa_44_types.h +118 -0
- data/vendor/longfellow-zk/lib/circuits/tests/pq/ml_dsa/ml_dsa_44_witness.h +453 -0
- data/vendor/longfellow-zk/lib/circuits/tests/pq/ml_dsa/ml_dsa_44_witness_test.cc +49 -0
- data/vendor/longfellow-zk/lib/circuits/tests/pq/ml_dsa/ml_dsa_ref.cc +458 -0
- data/vendor/longfellow-zk/lib/circuits/tests/pq/ml_dsa/ml_dsa_ref.h +150 -0
- data/vendor/longfellow-zk/lib/circuits/tests/pq/ml_dsa/ml_dsa_ref_test.cc +398 -0
- data/vendor/longfellow-zk/lib/circuits/tests/pq/ml_dsa/ml_dsa_ref_test_vectors.inc +3618 -0
- data/vendor/longfellow-zk/lib/circuits/tests/pq/ml_dsa/ml_dsa_ref_test_vectors_pkdecode.inc +689 -0
- data/vendor/longfellow-zk/lib/circuits/tests/pq/ml_dsa/ml_dsa_ref_test_vectors_sigdecode.inc +1501 -0
- data/vendor/longfellow-zk/lib/circuits/tests/pq/ml_dsa/sigdecode_test_vectors.inc +540 -0
- data/vendor/longfellow-zk/lib/circuits/tests/ripemd/ripemd_circuit.h +394 -0
- data/vendor/longfellow-zk/lib/circuits/tests/ripemd/ripemd_circuit_test.cc +577 -0
- data/vendor/longfellow-zk/lib/circuits/tests/ripemd/ripemd_constants.h +90 -0
- data/vendor/longfellow-zk/lib/circuits/tests/ripemd/ripemd_witness.cc +174 -0
- data/vendor/longfellow-zk/lib/circuits/tests/ripemd/ripemd_witness.h +140 -0
- data/vendor/longfellow-zk/lib/circuits/tests/sha3/sha3_circuit.h +351 -0
- data/vendor/longfellow-zk/lib/circuits/tests/sha3/sha3_circuit_test.cc +466 -0
- data/vendor/longfellow-zk/lib/circuits/tests/sha3/sha3_reference.cc +207 -0
- data/vendor/longfellow-zk/lib/circuits/tests/sha3/sha3_reference.h +59 -0
- data/vendor/longfellow-zk/lib/circuits/tests/sha3/sha3_reference_test.cc +153 -0
- data/vendor/longfellow-zk/lib/circuits/tests/sha3/sha3_round_constants.cc +39 -0
- data/vendor/longfellow-zk/lib/circuits/tests/sha3/sha3_round_constants.h +29 -0
- data/vendor/longfellow-zk/lib/circuits/tests/sha3/sha3_slicing.h +31 -0
- data/vendor/longfellow-zk/lib/circuits/tests/sha3/sha3_witness.cc +83 -0
- data/vendor/longfellow-zk/lib/circuits/tests/sha3/sha3_witness.h +72 -0
- data/vendor/longfellow-zk/lib/circuits/tests/sha3/shake_test_vectors.h +477 -0
- data/vendor/longfellow-zk/lib/ec/elliptic_curve.h +596 -0
- data/vendor/longfellow-zk/lib/ec/elliptic_curve_test.cc +548 -0
- data/vendor/longfellow-zk/lib/ec/p256.cc +36 -0
- data/vendor/longfellow-zk/lib/ec/p256.h +60 -0
- data/vendor/longfellow-zk/lib/ec/p256k1.cc +34 -0
- data/vendor/longfellow-zk/lib/ec/p256k1.h +60 -0
- data/vendor/longfellow-zk/lib/gf2k/gf2_128.h +503 -0
- data/vendor/longfellow-zk/lib/gf2k/gf2_128_bench.cc +48 -0
- data/vendor/longfellow-zk/lib/gf2k/gf2_128_test.cc +416 -0
- data/vendor/longfellow-zk/lib/gf2k/gf2poly.h +74 -0
- data/vendor/longfellow-zk/lib/gf2k/lch14.h +242 -0
- data/vendor/longfellow-zk/lib/gf2k/lch14_bench.cc +75 -0
- data/vendor/longfellow-zk/lib/gf2k/lch14_reed_solomon.h +127 -0
- data/vendor/longfellow-zk/lib/gf2k/lch14_reed_solomon_test.cc +110 -0
- data/vendor/longfellow-zk/lib/gf2k/lch14_test.cc +246 -0
- data/vendor/longfellow-zk/lib/gf2k/sysdep.h +329 -0
- data/vendor/longfellow-zk/lib/ligero/ligero_param.h +449 -0
- data/vendor/longfellow-zk/lib/ligero/ligero_prover.h +354 -0
- data/vendor/longfellow-zk/lib/ligero/ligero_test.cc +136 -0
- data/vendor/longfellow-zk/lib/ligero/ligero_transcript.h +67 -0
- data/vendor/longfellow-zk/lib/ligero/ligero_verifier.h +272 -0
- data/vendor/longfellow-zk/lib/merkle/merkle_commitment.h +104 -0
- data/vendor/longfellow-zk/lib/merkle/merkle_tree.h +216 -0
- data/vendor/longfellow-zk/lib/merkle/merkle_tree_test.cc +240 -0
- data/vendor/longfellow-zk/lib/proto/circuit.h +354 -0
- data/vendor/longfellow-zk/lib/proto/circuit_test.cc +202 -0
- data/vendor/longfellow-zk/lib/random/random.h +119 -0
- data/vendor/longfellow-zk/lib/random/random_test.cc +189 -0
- data/vendor/longfellow-zk/lib/random/secure_random_engine.h +37 -0
- data/vendor/longfellow-zk/lib/random/transcript.h +193 -0
- data/vendor/longfellow-zk/lib/random/transcript_test.cc +344 -0
- data/vendor/longfellow-zk/lib/sumcheck/circuit.h +148 -0
- data/vendor/longfellow-zk/lib/sumcheck/circuit_id.h +71 -0
- data/vendor/longfellow-zk/lib/sumcheck/equad.h +126 -0
- data/vendor/longfellow-zk/lib/sumcheck/hquad.h +115 -0
- data/vendor/longfellow-zk/lib/sumcheck/prover.h +59 -0
- data/vendor/longfellow-zk/lib/sumcheck/prover_layers.h +362 -0
- data/vendor/longfellow-zk/lib/sumcheck/quad.h +227 -0
- data/vendor/longfellow-zk/lib/sumcheck/quad_builder.h +211 -0
- data/vendor/longfellow-zk/lib/sumcheck/quad_test.cc +169 -0
- data/vendor/longfellow-zk/lib/sumcheck/sumcheck_test.cc +324 -0
- data/vendor/longfellow-zk/lib/sumcheck/testing.h +69 -0
- data/vendor/longfellow-zk/lib/sumcheck/transcript_sumcheck.h +85 -0
- data/vendor/longfellow-zk/lib/sumcheck/verifier.h +84 -0
- data/vendor/longfellow-zk/lib/sumcheck/verifier_layers.h +221 -0
- data/vendor/longfellow-zk/lib/testing/test_main.cc +50 -0
- data/vendor/longfellow-zk/lib/util/ceildiv.h +164 -0
- data/vendor/longfellow-zk/lib/util/ceildiv_test.cc +152 -0
- data/vendor/longfellow-zk/lib/util/crc64.h +45 -0
- data/vendor/longfellow-zk/lib/util/crypto.cc +39 -0
- data/vendor/longfellow-zk/lib/util/crypto.h +108 -0
- data/vendor/longfellow-zk/lib/util/log.cc +110 -0
- data/vendor/longfellow-zk/lib/util/log.h +33 -0
- data/vendor/longfellow-zk/lib/util/panic.h +40 -0
- data/vendor/longfellow-zk/lib/util/readbuffer.h +67 -0
- data/vendor/longfellow-zk/lib/util/serialization.h +54 -0
- data/vendor/longfellow-zk/lib/zk/zk_common.h +455 -0
- data/vendor/longfellow-zk/lib/zk/zk_proof.h +378 -0
- data/vendor/longfellow-zk/lib/zk/zk_prover.h +202 -0
- data/vendor/longfellow-zk/lib/zk/zk_test.cc +340 -0
- data/vendor/longfellow-zk/lib/zk/zk_testing.h +154 -0
- data/vendor/longfellow-zk/lib/zk/zk_verifier.h +109 -0
- 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_
|