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,216 @@
|
|
|
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_MDOC_MDOC_ZK_H_
|
|
16
|
+
#define PRIVACY_PROOFS_ZK_LIB_CIRCUITS_MDOC_MDOC_ZK_H_
|
|
17
|
+
|
|
18
|
+
#include <stddef.h>
|
|
19
|
+
#include <stdint.h>
|
|
20
|
+
|
|
21
|
+
#ifdef __cplusplus
|
|
22
|
+
extern "C" {
|
|
23
|
+
#endif
|
|
24
|
+
|
|
25
|
+
// This package implements C interfaces that allow external programs to call
|
|
26
|
+
// the zk mdoc-based prover and verifier.
|
|
27
|
+
//
|
|
28
|
+
// It also contains a helper method that produces a byte representation
|
|
29
|
+
// of a circuit which verifies the mdoc with regards to specific properties,
|
|
30
|
+
// for example age_over_18. The circuit generation can be run once, and the
|
|
31
|
+
// result cached for subsequent use in the prover and verifier.
|
|
32
|
+
|
|
33
|
+
const size_t kLigeroRate = 4;
|
|
34
|
+
const size_t kLigeroNreq = 128; // 86+ bits statistical security
|
|
35
|
+
|
|
36
|
+
const size_t kLigeroRatev7 = 7;
|
|
37
|
+
const size_t kLigeroNreqv7 = 132; // ~109 bits statistical security
|
|
38
|
+
|
|
39
|
+
/* This struct allows a verifier to express which attribute and value the prover
|
|
40
|
+
* must claim. The value should be passed as the raw bytes of the CBOR value.
|
|
41
|
+
*/
|
|
42
|
+
typedef struct {
|
|
43
|
+
uint8_t namespace_id[64];
|
|
44
|
+
uint8_t id[32];
|
|
45
|
+
uint8_t cbor_value[64];
|
|
46
|
+
size_t namespace_len, id_len, cbor_value_len;
|
|
47
|
+
} RequestedAttribute;
|
|
48
|
+
|
|
49
|
+
// Return codes for the run_mdoc_prover method.
|
|
50
|
+
typedef enum {
|
|
51
|
+
MDOC_PROVER_SUCCESS = 0,
|
|
52
|
+
MDOC_PROVER_NULL_INPUT,
|
|
53
|
+
MDOC_PROVER_INVALID_INPUT,
|
|
54
|
+
MDOC_PROVER_CIRCUIT_PARSING_FAILURE,
|
|
55
|
+
MDOC_PROVER_HASH_PARSING_FAILURE,
|
|
56
|
+
MDOC_PROVER_WITNESS_CREATION_FAILURE,
|
|
57
|
+
MDOC_PROVER_GENERAL_FAILURE,
|
|
58
|
+
MDOC_PROVER_MEMORY_ALLOCATION_FAILURE,
|
|
59
|
+
MDOC_PROVER_INVALID_ZK_SPEC_VERSION,
|
|
60
|
+
MDOC_PROVER_ROOT_DECODING_FAILURE,
|
|
61
|
+
MDOC_PROVER_DOCUMENTS_MISSING,
|
|
62
|
+
MDOC_PROVER_DOCUMENT_0_MISSING,
|
|
63
|
+
MDOC_PROVER_DOCTYPE_MISSING,
|
|
64
|
+
MDOC_PROVER_ISSUER_SIGNED_MISSING,
|
|
65
|
+
MDOC_PROVER_ISSUER_AUTH_MISSING,
|
|
66
|
+
MDOC_PROVER_MSO_MISSING,
|
|
67
|
+
MDOC_PROVER_NSIG_MISSING,
|
|
68
|
+
MDOC_PROVER_NAMESPACES_MISSING,
|
|
69
|
+
MDOC_PROVER_DEVICE_SIGNED_MISSING,
|
|
70
|
+
MDOC_PROVER_DEVICE_AUTH_MISSING,
|
|
71
|
+
MDOC_PROVER_DEVICE_SIGNATURE_MISSING,
|
|
72
|
+
MDOC_PROVER_DEVICE_KEY_MISSING,
|
|
73
|
+
MDOC_PROVER_MSO_DECODING_FAILURE,
|
|
74
|
+
MDOC_PROVER_VALIDITY_INFO_MISSING,
|
|
75
|
+
MDOC_PROVER_DEVICE_KEY_INFO_MISSING,
|
|
76
|
+
MDOC_PROVER_ATTRIBUTE_DECODE_FAILURE,
|
|
77
|
+
MDOC_PROVER_ATTRIBUTE_EI_MISSING,
|
|
78
|
+
MDOC_PROVER_ATTRIBUTE_EV_MISSING,
|
|
79
|
+
MDOC_PROVER_ATTRIBUTE_DID_MISSING,
|
|
80
|
+
MDOC_PROVER_SIGNATURE_FAILURE,
|
|
81
|
+
MDOC_PROVER_DEVICE_SIGNATURE_FAILURE,
|
|
82
|
+
MDOC_PROVER_ATTRIBUTE_NOT_FOUND,
|
|
83
|
+
MDOC_PROVER_ATTRIBUTE_TOO_LONG,
|
|
84
|
+
MDOC_PROVER_TAGGED_MSO_TOO_BIG,
|
|
85
|
+
MDOC_PROVER_VERSION_NOT_SUPPORTED,
|
|
86
|
+
MDOC_PROVER_ATTRIBUTE_RANDOM_MISSING,
|
|
87
|
+
} MdocProverErrorCode;
|
|
88
|
+
|
|
89
|
+
// Return codes for the run_mdoc_verifier method.
|
|
90
|
+
typedef enum {
|
|
91
|
+
MDOC_VERIFIER_SUCCESS = 0,
|
|
92
|
+
MDOC_VERIFIER_CIRCUIT_PARSING_FAILURE,
|
|
93
|
+
MDOC_VERIFIER_PROOF_TOO_SMALL,
|
|
94
|
+
MDOC_VERIFIER_HASH_PARSING_FAILURE,
|
|
95
|
+
MDOC_VERIFIER_SIGNATURE_PARSING_FAILURE,
|
|
96
|
+
MDOC_VERIFIER_GENERAL_FAILURE,
|
|
97
|
+
MDOC_VERIFIER_NULL_INPUT,
|
|
98
|
+
MDOC_VERIFIER_INVALID_INPUT,
|
|
99
|
+
MDOC_VERIFIER_ARGUMENTS_TOO_SMALL,
|
|
100
|
+
MDOC_VERIFIER_ATTRIBUTE_NUMBER_MISMATCH,
|
|
101
|
+
MDOC_VERIFIER_INVALID_ZK_SPEC_VERSION,
|
|
102
|
+
MDOC_VERIFIER_INVALID_CBOR,
|
|
103
|
+
} MdocVerifierErrorCode;
|
|
104
|
+
|
|
105
|
+
// Return codes for the generate_circuit method.
|
|
106
|
+
typedef enum {
|
|
107
|
+
CIRCUIT_GENERATION_SUCCESS = 0,
|
|
108
|
+
CIRCUIT_GENERATION_NULL_INPUT,
|
|
109
|
+
CIRCUIT_GENERATION_ZLIB_FAILURE,
|
|
110
|
+
CIRCUIT_GENERATION_GENERAL_FAILURE,
|
|
111
|
+
CIRCUIT_GENERATION_INVALID_ZK_SPEC_VERSION,
|
|
112
|
+
} CircuitGenerationErrorCode;
|
|
113
|
+
|
|
114
|
+
// This structure represents a version of ZK specification supported by this
|
|
115
|
+
// library. It is passed into all the methods for circuit generation, running
|
|
116
|
+
// the prover and verifier.
|
|
117
|
+
// It allows us to version the specification of the ZK system. The prover and
|
|
118
|
+
// the verifier are supposed to negotiate the version of the specification they
|
|
119
|
+
// both support before executing digital credential presentment.
|
|
120
|
+
typedef struct {
|
|
121
|
+
// The ZK system name and version- "longfellow-libzk-v*" for Google library.
|
|
122
|
+
const char* system;
|
|
123
|
+
// The hash of the compressed circuit (the way it's generated and passed to
|
|
124
|
+
// prover/verifier)
|
|
125
|
+
const char circuit_hash[65];
|
|
126
|
+
// The number of attributes that the circuit supports.
|
|
127
|
+
size_t num_attributes;
|
|
128
|
+
// The version of the ZK specification.
|
|
129
|
+
size_t version;
|
|
130
|
+
// The block_enc parameter for the ZK proof.
|
|
131
|
+
size_t block_enc_hash, block_enc_sig;
|
|
132
|
+
} ZkSpecStruct;
|
|
133
|
+
|
|
134
|
+
static const char kDefaultDocType[] = "org.iso.18013.5.1.mDL";
|
|
135
|
+
|
|
136
|
+
// An upper-bound on the decompressed circuit size. It is better to make this
|
|
137
|
+
// bound tight to avoid memory failure in the resource restricted Android
|
|
138
|
+
// gmscore environment.
|
|
139
|
+
static const size_t kCircuitSizeMax = 130000000;
|
|
140
|
+
|
|
141
|
+
// The run_mdoc2_prover method takes byte-oriented inputs that describe a
|
|
142
|
+
// circuit, mdoc, the public key of the issuer for the mdoc, a transcript
|
|
143
|
+
// for the mdoc request operation, an array of RequestedAttribute that
|
|
144
|
+
// represents claims that you want to prove, and a 20-char representation of the
|
|
145
|
+
// current time. It writes the proof and its length into the input parameter prf
|
|
146
|
+
// and proof_len. It is the responsibility of the caller to later free the proof
|
|
147
|
+
// memory. If the prover fails to produce a proof, e.g., because the mdoc is
|
|
148
|
+
// invalid, or the now time does not satisfy the validFrom and validUntil
|
|
149
|
+
// constraints, then the prover returns an error code.
|
|
150
|
+
// The following lines document how attributes can be opened in ZK.
|
|
151
|
+
// {(uint8_t *)"family_name", 11, (uint8_t *)"Mustermann", 10},
|
|
152
|
+
// {(uint8_t *)"height", 6, (uint8_t *)"\x18\xaf", 2},
|
|
153
|
+
// {(uint8_t *)"birth_date", 10, (uint8_t *)"\xD9\x03\xEC\x6A" "1971-09-01",
|
|
154
|
+
// 14},
|
|
155
|
+
// {(uint8_t *)"issue_date", 10, (uint8_t *)"\xD9\x03\xEC\x6A" "2024-03-15",
|
|
156
|
+
// 14},
|
|
157
|
+
MdocProverErrorCode run_mdoc_prover(
|
|
158
|
+
const uint8_t* bcp, size_t bcsz, /* circuit data */
|
|
159
|
+
const uint8_t* mdoc, size_t mdoc_len, /* full mdoc */
|
|
160
|
+
const char* pkx, const char* pky, /* string rep of public key */
|
|
161
|
+
const uint8_t* transcript, size_t tr_len, /* session transcript */
|
|
162
|
+
const RequestedAttribute* attrs, size_t attrs_len,
|
|
163
|
+
const char* now, /* time formatted as "2023-11-02T09:00:00Z" */
|
|
164
|
+
uint8_t** prf, size_t* proof_len, const ZkSpecStruct* zk_spec_version);
|
|
165
|
+
|
|
166
|
+
// The run_mdoc2_verifier method accepts a byte representation of the circuit,
|
|
167
|
+
// the public key of the issuer, the transcript, an array of RequestedAttribute
|
|
168
|
+
// that represents claims that you want to verify, and a 20-char representation
|
|
169
|
+
// of the time, as well as the proof and its length.
|
|
170
|
+
MdocVerifierErrorCode run_mdoc_verifier(
|
|
171
|
+
const uint8_t* bcp, size_t bcsz, /* circuit data */
|
|
172
|
+
const char* pkx, const char* pky, /* string rep of public key */
|
|
173
|
+
const uint8_t* transcript, size_t tr_len, /* session transcript */
|
|
174
|
+
const RequestedAttribute* attrs, size_t attrs_len,
|
|
175
|
+
const char* now, /* time formatted as "2023-11-02T09:00:00Z" */
|
|
176
|
+
const uint8_t* zkproof, size_t proof_len, const char* docType,
|
|
177
|
+
const ZkSpecStruct* zk_spec_version);
|
|
178
|
+
|
|
179
|
+
// Produces a compressed version of the circuit bytes for the specified number
|
|
180
|
+
// of attributes. The generator only supports the latest version of the ZKSpec
|
|
181
|
+
// for a number of attributes. Attempt to generate older circuits will result in
|
|
182
|
+
// an error.
|
|
183
|
+
CircuitGenerationErrorCode generate_circuit(const ZkSpecStruct* zk_spec_version,
|
|
184
|
+
uint8_t** cb, size_t* clen);
|
|
185
|
+
|
|
186
|
+
// Produces an identifier for a pair of circuits (c_1, c_2) over (Fp256, f_128)
|
|
187
|
+
// respectively. This method parses the input bytes into two circuits, computes
|
|
188
|
+
// the circuit's ids of each, and then computes the SHA256 hash of the two ids.
|
|
189
|
+
// This method is used to identify "circuit bundles" consisting of multiple
|
|
190
|
+
// circuits.
|
|
191
|
+
int circuit_id(uint8_t id[/*kSHA256DigestSize*/], const uint8_t* bcp,
|
|
192
|
+
size_t bcsz, const ZkSpecStruct* zk_spec);
|
|
193
|
+
|
|
194
|
+
enum { kNumZkSpecs = 12 };
|
|
195
|
+
// This is a hardcoded list of all the ZK specifications supported by this
|
|
196
|
+
// library. Every time a new breaking change is introduced in either the circuit
|
|
197
|
+
// format or its interpretation, a new version must be added here.
|
|
198
|
+
// It is possible to remove old versions, if we're sure that they are not used
|
|
199
|
+
// by either provers of verifiers in the wild.
|
|
200
|
+
extern const ZkSpecStruct kZkSpecs[kNumZkSpecs];
|
|
201
|
+
|
|
202
|
+
// Returns a static pointer to the ZkSpecStruct that matches the given system
|
|
203
|
+
// name and circuit hash. Returns nullptr if no matching ZkSpecStruct is found.
|
|
204
|
+
const ZkSpecStruct* find_zk_spec(const char* system_name,
|
|
205
|
+
const char* circuit_hash);
|
|
206
|
+
|
|
207
|
+
#ifdef __cplusplus
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
namespace proofs {
|
|
211
|
+
// Function is private, but it is declared here for testing.
|
|
212
|
+
bool cbor_validate(const uint8_t* in, size_t len);
|
|
213
|
+
} // namespace proofs
|
|
214
|
+
#endif
|
|
215
|
+
|
|
216
|
+
#endif // PRIVACY_PROOFS_ZK_LIB_CIRCUITS_MDOC_MDOC_ZK_H_
|