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,541 @@
1
+ // Copyright 2026 Google LLC.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #include "cbor/host_decoder.h"
16
+
17
+ #include <cstddef>
18
+ #include <cstdint>
19
+ #include <vector>
20
+
21
+ #include "gtest/gtest.h"
22
+
23
+ namespace proofs {
24
+ namespace {
25
+
26
+ // helper function to encode CBOR input bytes
27
+ static inline uint8_t X(uint8_t type, uint8_t count) {
28
+ return (type << 5) | count;
29
+ }
30
+
31
+ TEST(HostDecoderTest, DecodeHost) {
32
+ struct testcase {
33
+ bool valid;
34
+ std::vector<uint8_t> bytes;
35
+ };
36
+
37
+ struct testcase tests[31] = {
38
+ // small atom tests
39
+ {true, {0}},
40
+ {true, {X(0, 22), 1}},
41
+ {true, {X(0, 23), 0}},
42
+ {true, {X(0, 24), 33}},
43
+ {true, {X(0, 24), 34}},
44
+ // Primitives
45
+ {true, {X(7, 20)}},
46
+ {true, {X(7, 21)}},
47
+ {true, {X(7, 22)}},
48
+
49
+ // a short string
50
+ {true, {X(2, 3), 'f', 'o', 'o'}},
51
+
52
+ // a long string: header + next byte + string
53
+ {true, {X(2, 24), 3, 0xff, 25, 31}},
54
+
55
+ // TAG for date
56
+ {true,
57
+ {0xD9, 0x03, 0xEC, 0x6a, 0x31, 0x39, 0x37, 0x31, 0x2D, 0x30, 0x39, 0x2D,
58
+ 0x30, 0x31}},
59
+
60
+ // uint type
61
+ {true, {0x18, 0xAF}},
62
+
63
+ // array with 4 string elements
64
+ {true,
65
+ {X(4, 4), 0x62, 'x', 'y', 0x63, '1', '.', '0', 0x62, 'a', 'b', 0x61,
66
+ 'c'}},
67
+
68
+ // map with 3 entries, {string, int}
69
+ {true, {X(5, 3), 0x62, 'x', 'y', 0x8, 0x61, 'a', 0x9, 0x61, 'b', 0xa}},
70
+
71
+ // large map with 2 entries {int, array} with large array elements
72
+ {true, {X(5, 0x18), 2, 0, 0x58, 0x2, 'a', 'b', 1, 0x58, 2, 'b', 'c'}},
73
+
74
+ // recursive map of maps, keys of different types
75
+ {true, {0xA2, 0xA1, 0xA1, 1, 1, 0xF4, 0x61, 'a', 0x61, 'b', 3, 4}},
76
+
77
+ // real world example, 483b MSO from an MDOC
78
+ {true,
79
+ {0xA6, 0x67, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x63, 0x31, 0x2E,
80
+ 0x30, 0x6F, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x41, 0x6C, 0x67, 0x6F,
81
+ 0x72, 0x69, 0x74, 0x68, 0x6D, 0x67, 0x53, 0x48, 0x41, 0x2D, 0x32, 0x35,
82
+ 0x36, 0x67, 0x64, 0x6F, 0x63, 0x54, 0x79, 0x70, 0x65, 0x75, 0x6F, 0x72,
83
+ 0x67, 0x2E, 0x69, 0x73, 0x6F, 0x2E, 0x31, 0x38, 0x30, 0x31, 0x33, 0x2E,
84
+ 0x35, 0x2E, 0x31, 0x2E, 0x6D, 0x44, 0x4C, 0x6C, 0x76, 0x61, 0x6C, 0x75,
85
+ 0x65, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0xA1, 0x71, 0x6F, 0x72,
86
+ 0x67, 0x2E, 0x69, 0x73, 0x6F, 0x2E, 0x31, 0x38, 0x30, 0x31, 0x33, 0x2E,
87
+ 0x35, 0x2E, 0x31, 0xA5, 0x01, 0x58, 0x20, 0xAD, 0xF6, 0xA3, 0x33, 0x03,
88
+ 0x6A, 0xDE, 0xFC, 0x48, 0x90, 0xDF, 0x38, 0xE0, 0xF7, 0x37, 0x22, 0x90,
89
+ 0x85, 0xA9, 0xB0, 0xBA, 0x7C, 0x07, 0x19, 0xD3, 0x92, 0x40, 0x5D, 0x74,
90
+ 0x46, 0x23, 0x77, 0x02, 0x58, 0x20, 0xA0, 0xA1, 0x4A, 0x5A, 0xA1, 0xB3,
91
+ 0x36, 0x84, 0x4D, 0x8F, 0x8D, 0x14, 0x8E, 0xD4, 0x4F, 0xD2, 0xCC, 0xC6,
92
+ 0x6F, 0x54, 0xD8, 0x78, 0x2B, 0x70, 0xFB, 0x77, 0x13, 0xFB, 0x3C, 0x93,
93
+ 0xF5, 0x56, 0x03, 0x58, 0x20, 0x97, 0xB0, 0x18, 0x4E, 0xDD, 0xE3, 0x99,
94
+ 0xCB, 0x7D, 0xEA, 0x2D, 0x7D, 0x27, 0x9A, 0x45, 0x69, 0x90, 0xD9, 0xF3,
95
+ 0x12, 0x46, 0x71, 0x63, 0x78, 0x7E, 0x1B, 0xA7, 0x66, 0x0A, 0x5C, 0x08,
96
+ 0x6F, 0x04, 0x58, 0x20, 0xAF, 0x0B, 0x9F, 0xE7, 0x24, 0x5C, 0xA9, 0xA5,
97
+ 0x9F, 0x64, 0xB1, 0xAA, 0x82, 0xCC, 0x2C, 0x1A, 0xB1, 0x38, 0x6F, 0x77,
98
+ 0x95, 0x64, 0x93, 0x83, 0x62, 0x97, 0xC8, 0xA8, 0x4D, 0x2A, 0xE0, 0xB4,
99
+ 0x00, 0x58, 0x20, 0x0D, 0x98, 0x54, 0xDB, 0x51, 0x48, 0x6F, 0xF4, 0x49,
100
+ 0x07, 0xBC, 0x61, 0x4F, 0xFA, 0xEA, 0x93, 0xDA, 0xE1, 0xA8, 0x9E, 0xAD,
101
+ 0x40, 0x26, 0x3F, 0x90, 0x1A, 0xE6, 0xCE, 0x41, 0x26, 0x46, 0x21, 0x6D,
102
+ 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4B, 0x65, 0x79, 0x49, 0x6E, 0x66,
103
+ 0x6F, 0xA1, 0x69, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4B, 0x65, 0x79,
104
+ 0xA4, 0x01, 0x02, 0x20, 0x01, 0x21, 0x58, 0x20, 0xC3, 0x14, 0xA7, 0xAB,
105
+ 0xBA, 0x07, 0xE4, 0x0E, 0x64, 0xAE, 0x87, 0xDB, 0x4A, 0xD9, 0x71, 0x80,
106
+ 0x13, 0xFD, 0x39, 0x8E, 0x6E, 0x23, 0x17, 0xB3, 0x04, 0xF5, 0x7F, 0xC9,
107
+ 0xAC, 0xCA, 0xB9, 0xF5, 0x22, 0x58, 0x20, 0xED, 0xB8, 0xB0, 0x23, 0x0C,
108
+ 0xCC, 0x98, 0xDD, 0x42, 0xCD, 0xFF, 0x89, 0xA8, 0xD1, 0xE2, 0x5F, 0xF8,
109
+ 0xD1, 0xA7, 0xFA, 0x38, 0x9E, 0x92, 0xDC, 0x8F, 0x01, 0xAF, 0x98, 0x5A,
110
+ 0x79, 0xEF, 0xCC, 0x6C, 0x76, 0x61, 0x6C, 0x69, 0x64, 0x69, 0x74, 0x79,
111
+ 0x49, 0x6E, 0x66, 0x6F, 0xA3, 0x66, 0x73, 0x69, 0x67, 0x6E, 0x65, 0x64,
112
+ 0xC0, 0x74, 0x32, 0x30, 0x32, 0x34, 0x2D, 0x30, 0x31, 0x2D, 0x32, 0x35,
113
+ 0x54, 0x32, 0x31, 0x3A, 0x31, 0x32, 0x3A, 0x35, 0x39, 0x5A, 0x69, 0x76,
114
+ 0x61, 0x6C, 0x69, 0x64, 0x46, 0x72, 0x6F, 0x6D, 0xC0, 0x74, 0x32, 0x30,
115
+ 0x32, 0x34, 0x2D, 0x30, 0x31, 0x2D, 0x32, 0x35, 0x54, 0x32, 0x31, 0x3A,
116
+ 0x31, 0x32, 0x3A, 0x35, 0x39, 0x5A, 0x6A, 0x76, 0x61, 0x6C, 0x69, 0x64,
117
+ 0x55, 0x6E, 0x74, 0x69, 0x6C, 0xC0, 0x74, 0x32, 0x30, 0x32, 0x34, 0x2D,
118
+ 0x30, 0x32, 0x2D, 0x32, 0x34, 0x54, 0x32, 0x31, 0x3A, 0x31, 0x32, 0x3A,
119
+ 0x35, 0x39, 0x5a}},
120
+
121
+ // Attribute encoding with date_of_birth:full-date
122
+ {true,
123
+ {0xA4, 0x68, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x49, 0x44, 0x18, 0x24,
124
+ 0x66, 0x72, 0x61, 0x6E, 0x64, 0x6F, 0x6D, 0x50, 0xAC, 0x3E, 0x67, 0x95,
125
+ 0xBA, 0xE2, 0x02, 0x37, 0x4D, 0xEE, 0xA4, 0x78, 0xE9, 0x37, 0x7E, 0xE5,
126
+ 0x71, 0x65, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x49, 0x64, 0x65, 0x6E,
127
+ 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x6A, 0x62, 0x69, 0x72, 0x74, 0x68,
128
+ 0x5F, 0x64, 0x61, 0x74, 0x65, 0x6C, 0x65, 0x6C, 0x65, 0x6D, 0x65, 0x6E,
129
+ 0x74, 0x56, 0x61, 0x6C, 0x75, 0x65, 0xD9, 0x03, 0xEC, 0x6A, 0x31, 0x39,
130
+ 0x37, 0x31, 0x2D, 0x30, 0x39, 0x2D, 0x30, 0x31}},
131
+
132
+ // Attribute encoding with Height:uint
133
+ {true, {0xA4, 0x68, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x49, 0x44, 0x18,
134
+ 0x23, 0x66, 0x72, 0x61, 0x6E, 0x64, 0x6F, 0x6D, 0x50, 0x1D, 0x77,
135
+ 0xDC, 0x10, 0x24, 0xD7, 0xC0, 0xC9, 0x63, 0x8B, 0x21, 0x60, 0x42,
136
+ 0xB9, 0x1C, 0xA3, 0x71, 0x65, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74,
137
+ 0x49, 0x64, 0x65, 0x6E, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x66,
138
+ 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x6C, 0x65, 0x6C, 0x65, 0x6D,
139
+ 0x65, 0x6E, 0x74, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x18, 0xAF}},
140
+
141
+ // Attribute encoding with issue_date:fulldate
142
+ {true,
143
+ {0xA4, 0x68, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x49, 0x44, 0x18, 0x1E,
144
+ 0x66, 0x72, 0x61, 0x6E, 0x64, 0x6F, 0x6D, 0x50, 0xDD, 0xD2, 0x56, 0x45,
145
+ 0xC2, 0xA3, 0xDD, 0x69, 0xF8, 0x9F, 0xBF, 0x01, 0x72, 0x99, 0x53, 0x81,
146
+ 0x71, 0x65, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x49, 0x64, 0x65, 0x6E,
147
+ 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x6A, 0x69, 0x73, 0x73, 0x75, 0x65,
148
+ 0x5F, 0x64, 0x61, 0x74, 0x65, 0x6C, 0x65, 0x6C, 0x65, 0x6D, 0x65, 0x6E,
149
+ 0x74, 0x56, 0x61, 0x6C, 0x75, 0x65, 0xD9, 0x03, 0xEC, 0x6A, 0x32, 0x30,
150
+ 0x32, 0x34, 0x2D, 0x30, 0x33, 0x2D, 0x31, 0x35}},
151
+
152
+ // Complex mdoc device response
153
+ {true,
154
+ {0xa3, 0x67, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x63, 0x31, 0x2e,
155
+ 0x30, 0x69, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x81,
156
+ 0xa3, 0x67, 0x64, 0x6f, 0x63, 0x54, 0x79, 0x70, 0x65, 0x75, 0x6f, 0x72,
157
+ 0x67, 0x2e, 0x69, 0x73, 0x6f, 0x2e, 0x31, 0x38, 0x30, 0x31, 0x33, 0x2e,
158
+ 0x35, 0x2e, 0x31, 0x2e, 0x6d, 0x44, 0x4c, 0x6c, 0x69, 0x73, 0x73, 0x75,
159
+ 0x65, 0x72, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0xa2, 0x6a, 0x6e, 0x61,
160
+ 0x6d, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0xa1, 0x71, 0x6f, 0x72,
161
+ 0x67, 0x2e, 0x69, 0x73, 0x6f, 0x2e, 0x31, 0x38, 0x30, 0x31, 0x33, 0x2e,
162
+ 0x35, 0x2e, 0x31, 0x84, 0xd8, 0x18, 0x58, 0x59, 0xa4, 0x68, 0x64, 0x69,
163
+ 0x67, 0x65, 0x73, 0x74, 0x49, 0x44, 0x04, 0x66, 0x72, 0x61, 0x6e, 0x64,
164
+ 0x6f, 0x6d, 0x50, 0xdb, 0x33, 0x69, 0x71, 0x1c, 0x0b, 0xc9, 0x1d, 0x0a,
165
+ 0xee, 0x22, 0x50, 0x1c, 0x02, 0xe5, 0x25, 0x71, 0x65, 0x6c, 0x65, 0x6d,
166
+ 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65,
167
+ 0x72, 0x6b, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x5f, 0x6e, 0x61, 0x6d,
168
+ 0x65, 0x6c, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c,
169
+ 0x75, 0x65, 0x6a, 0x4d, 0x75, 0x73, 0x74, 0x65, 0x72, 0x6d, 0x61, 0x6e,
170
+ 0x6e, 0xd8, 0x18, 0x58, 0x53, 0xa4, 0x68, 0x64, 0x69, 0x67, 0x65, 0x73,
171
+ 0x74, 0x49, 0x44, 0x02, 0x66, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x50,
172
+ 0x43, 0x04, 0x12, 0x81, 0xc0, 0x63, 0x1c, 0x50, 0x59, 0x35, 0x91, 0x39,
173
+ 0x77, 0x4f, 0x1e, 0xb4, 0x71, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
174
+ 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x6a, 0x67,
175
+ 0x69, 0x76, 0x65, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x6c, 0x65, 0x6c,
176
+ 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x65, 0x45,
177
+ 0x72, 0x69, 0x6b, 0x61, 0xd8, 0x18, 0x58, 0x5c, 0xa4, 0x68, 0x64, 0x69,
178
+ 0x67, 0x65, 0x73, 0x74, 0x49, 0x44, 0x18, 0x24, 0x66, 0x72, 0x61, 0x6e,
179
+ 0x64, 0x6f, 0x6d, 0x50, 0xac, 0x3e, 0x67, 0x95, 0xba, 0xe2, 0x02, 0x37,
180
+ 0x4d, 0xee, 0xa4, 0x78, 0xe9, 0x37, 0x7e, 0xe5, 0x71, 0x65, 0x6c, 0x65,
181
+ 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69,
182
+ 0x65, 0x72, 0x6a, 0x62, 0x69, 0x72, 0x74, 0x68, 0x5f, 0x64, 0x61, 0x74,
183
+ 0x65, 0x6c, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c,
184
+ 0x75, 0x65, 0xd9, 0x03, 0xec, 0x6a, 0x31, 0x39, 0x37, 0x31, 0x2d, 0x30,
185
+ 0x39, 0x2d, 0x30, 0x31, 0xd8, 0x18, 0x58, 0x4f, 0xa4, 0x68, 0x64, 0x69,
186
+ 0x67, 0x65, 0x73, 0x74, 0x49, 0x44, 0x07, 0x66, 0x72, 0x61, 0x6e, 0x64,
187
+ 0x6f, 0x6d, 0x50, 0xc5, 0xf0, 0x66, 0x8b, 0xb8, 0x48, 0x23, 0x5c, 0x8d,
188
+ 0x73, 0x79, 0x05, 0xa1, 0x01, 0x4f, 0x18, 0x71, 0x65, 0x6c, 0x65, 0x6d,
189
+ 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65,
190
+ 0x72, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x32,
191
+ 0x31, 0x6c, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c,
192
+ 0x75, 0x65, 0xf5, 0x6a, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x41, 0x75,
193
+ 0x74, 0x68, 0x84, 0x43, 0xa1, 0x01, 0x26, 0xa1, 0x18, 0x21, 0x59, 0x02,
194
+ 0x83, 0x30, 0x82, 0x02, 0x7f, 0x30, 0x82, 0x02, 0x25, 0xa0, 0x03, 0x02,
195
+ 0x01, 0x02, 0x02, 0x10, 0x35, 0x00, 0xba, 0x9b, 0xef, 0xd9, 0x1c, 0xb9,
196
+ 0xda, 0x79, 0x05, 0xff, 0xef, 0x18, 0xbe, 0x8a, 0x30, 0x0a, 0x06, 0x08,
197
+ 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x30, 0x39, 0x31, 0x0b,
198
+ 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x54, 0x31,
199
+ 0x2a, 0x30, 0x28, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x21, 0x4f, 0x57,
200
+ 0x46, 0x20, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x43,
201
+ 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x20, 0x54, 0x45,
202
+ 0x53, 0x54, 0x20, 0x49, 0x41, 0x43, 0x41, 0x30, 0x1e, 0x17, 0x0d, 0x32,
203
+ 0x34, 0x30, 0x39, 0x30, 0x32, 0x31, 0x37, 0x32, 0x31, 0x31, 0x33, 0x5a,
204
+ 0x17, 0x0d, 0x32, 0x35, 0x30, 0x39, 0x30, 0x32, 0x31, 0x37, 0x32, 0x31,
205
+ 0x31, 0x33, 0x5a, 0x30, 0x37, 0x31, 0x28, 0x30, 0x26, 0x06, 0x03, 0x55,
206
+ 0x04, 0x03, 0x0c, 0x1f, 0x4f, 0x57, 0x46, 0x20, 0x49, 0x64, 0x65, 0x6e,
207
+ 0x74, 0x69, 0x74, 0x79, 0x20, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74,
208
+ 0x69, 0x61, 0x6c, 0x20, 0x54, 0x45, 0x53, 0x54, 0x20, 0x44, 0x53, 0x31,
209
+ 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x54,
210
+ 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02,
211
+ 0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03,
212
+ 0x42, 0x00, 0x04, 0xdc, 0x1c, 0x1f, 0x55, 0xcf, 0xf4, 0xcd, 0x5c, 0x76,
213
+ 0xcf, 0x41, 0x69, 0x27, 0x8f, 0x72, 0x17, 0x66, 0x7f, 0x86, 0xee, 0x81,
214
+ 0xd8, 0x66, 0x9b, 0x63, 0xf2, 0xe1, 0x9b, 0xc1, 0x2a, 0x0c, 0x9f, 0x12,
215
+ 0x35, 0x5d, 0xd0, 0x38, 0x5f, 0xed, 0x3b, 0xc3, 0x3b, 0xed, 0xc9, 0x78,
216
+ 0x1b, 0x9a, 0xad, 0x47, 0xb3, 0x3e, 0x4c, 0x24, 0x70, 0x4b, 0x8d, 0x14,
217
+ 0x28, 0x8b, 0x1b, 0x3c, 0xb4, 0x5c, 0x28, 0xa3, 0x82, 0x01, 0x0f, 0x30,
218
+ 0x82, 0x01, 0x0b, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16,
219
+ 0x04, 0x14, 0x13, 0x09, 0xce, 0x86, 0x0b, 0x9d, 0xff, 0xbc, 0x85, 0x99,
220
+ 0x28, 0x3a, 0x1d, 0xd9, 0xc1, 0xf3, 0x55, 0x6a, 0x63, 0xf1, 0x30, 0x1f,
221
+ 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x3c,
222
+ 0xc0, 0x46, 0x99, 0x0e, 0x93, 0x42, 0x85, 0x46, 0x6d, 0xf6, 0xc6, 0xe0,
223
+ 0x9a, 0xe3, 0xe3, 0x68, 0xdf, 0x2b, 0x0e, 0x30, 0x0e, 0x06, 0x03, 0x55,
224
+ 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x07, 0x80, 0x30,
225
+ 0x15, 0x06, 0x03, 0x55, 0x1d, 0x25, 0x01, 0x01, 0xff, 0x04, 0x0b, 0x30,
226
+ 0x09, 0x06, 0x07, 0x28, 0x81, 0x8c, 0x5d, 0x05, 0x01, 0x02, 0x30, 0x54,
227
+ 0x06, 0x03, 0x55, 0x1d, 0x1f, 0x04, 0x4d, 0x04, 0x4b, 0x30, 0x49, 0x30,
228
+ 0x47, 0xa0, 0x45, 0xa0, 0x43, 0x86, 0x41, 0x68, 0x74, 0x74, 0x70, 0x73,
229
+ 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f,
230
+ 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74,
231
+ 0x2d, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d,
232
+ 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74,
233
+ 0x79, 0x2d, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c,
234
+ 0x30, 0x4c, 0x06, 0x03, 0x55, 0x1d, 0x12, 0x04, 0x45, 0x04, 0x43, 0x86,
235
+ 0x41, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74,
236
+ 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e,
237
+ 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2d, 0x66, 0x6f, 0x75, 0x6e, 0x64,
238
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x69,
239
+ 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2d, 0x63, 0x72, 0x65, 0x64,
240
+ 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86,
241
+ 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x03, 0x48, 0x00, 0x30, 0x45, 0x02,
242
+ 0x21, 0x00, 0xcc, 0x61, 0x2d, 0xb2, 0xda, 0x22, 0x60, 0x9b, 0xf0, 0xa9,
243
+ 0xeb, 0xea, 0x39, 0xa9, 0x05, 0x74, 0xfa, 0xc6, 0xd1, 0xb0, 0xed, 0x8b,
244
+ 0x8b, 0xe0, 0x45, 0x27, 0x3e, 0xc7, 0x27, 0x6f, 0x64, 0x0c, 0x02, 0x20,
245
+ 0x7f, 0x21, 0x44, 0x30, 0x13, 0x45, 0x54, 0x40, 0x93, 0x53, 0xb4, 0xb7,
246
+ 0x4c, 0x4b, 0x64, 0x52, 0x64, 0x15, 0x81, 0x6d, 0x2f, 0xcb, 0x43, 0x29,
247
+ 0x57, 0x0c, 0x62, 0xd5, 0x56, 0x27, 0x2b, 0x54, 0x59, 0x06, 0xea, 0xd8,
248
+ 0x18, 0x59, 0x06, 0xe5, 0xa6, 0x67, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
249
+ 0x6e, 0x63, 0x31, 0x2e, 0x30, 0x6f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74,
250
+ 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x67, 0x53, 0x48,
251
+ 0x41, 0x2d, 0x32, 0x35, 0x36, 0x67, 0x64, 0x6f, 0x63, 0x54, 0x79, 0x70,
252
+ 0x65, 0x75, 0x6f, 0x72, 0x67, 0x2e, 0x69, 0x73, 0x6f, 0x2e, 0x31, 0x38,
253
+ 0x30, 0x31, 0x33, 0x2e, 0x35, 0x2e, 0x31, 0x2e, 0x6d, 0x44, 0x4c, 0x6c,
254
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73,
255
+ 0xa2, 0x71, 0x6f, 0x72, 0x67, 0x2e, 0x69, 0x73, 0x6f, 0x2e, 0x31, 0x38,
256
+ 0x30, 0x31, 0x33, 0x2e, 0x35, 0x2e, 0x31, 0xb8, 0x22, 0x04, 0x58, 0x20,
257
+ 0x89, 0x34, 0x22, 0xe8, 0xf3, 0xb6, 0xc5, 0xa2, 0x8d, 0xb0, 0x97, 0xe7,
258
+ 0x9f, 0x4e, 0xf6, 0x10, 0x0b, 0xe5, 0xdb, 0x8a, 0x50, 0x34, 0xa4, 0xc2,
259
+ 0x94, 0x8d, 0x56, 0xf3, 0x66, 0x2a, 0x49, 0xa8, 0x02, 0x58, 0x20, 0x89,
260
+ 0x92, 0x53, 0x94, 0xa6, 0x4d, 0x6e, 0xe7, 0x84, 0x33, 0x51, 0x43, 0x4c,
261
+ 0xc8, 0x31, 0x81, 0xac, 0x7a, 0x67, 0xb0, 0x4d, 0x9d, 0xc7, 0x98, 0x2b,
262
+ 0x82, 0xf7, 0x4a, 0x7e, 0x1b, 0x15, 0x44, 0x18, 0x24, 0x58, 0x20, 0xa1,
263
+ 0xb6, 0x69, 0xb9, 0x04, 0xc3, 0xad, 0x1d, 0x80, 0x69, 0xe4, 0xaf, 0x7c,
264
+ 0x68, 0x4d, 0xa9, 0xa9, 0xcc, 0xc1, 0x28, 0x1e, 0x4c, 0x42, 0xbf, 0xad,
265
+ 0x9b, 0x2b, 0xc2, 0xe6, 0xb0, 0x51, 0x52, 0x18, 0x22, 0x58, 0x20, 0x39,
266
+ 0x74, 0x12, 0xc0, 0xf7, 0x1b, 0x7a, 0xda, 0xa3, 0xc1, 0x3b, 0x92, 0x24,
267
+ 0xcb, 0xb4, 0xdb, 0xd7, 0x01, 0x10, 0xb0, 0x52, 0x20, 0x94, 0xab, 0xb8,
268
+ 0x65, 0xb6, 0x7a, 0x48, 0xe1, 0xd3, 0xc2, 0x17, 0x58, 0x20, 0x1c, 0xf5,
269
+ 0x5e, 0x81, 0x24, 0xc8, 0xf6, 0x68, 0x33, 0x8b, 0xec, 0xe3, 0x44, 0x85,
270
+ 0x58, 0x7e, 0x40, 0x4a, 0x90, 0xd8, 0x13, 0xd4, 0x18, 0xb1, 0xe5, 0xf5,
271
+ 0xf0, 0x18, 0x70, 0xd1, 0x73, 0xc1, 0x18, 0x18, 0x58, 0x20, 0x6b, 0xdf,
272
+ 0xb7, 0xbe, 0x77, 0xee, 0xa4, 0x3b, 0x94, 0xbc, 0x18, 0x26, 0x5c, 0x67,
273
+ 0xf6, 0xbe, 0xa0, 0x63, 0xd5, 0x51, 0xc6, 0xbb, 0xf4, 0x1f, 0x88, 0x1d,
274
+ 0xeb, 0x0e, 0xe9, 0x13, 0x8e, 0xda, 0x0d, 0x58, 0x20, 0x80, 0x31, 0xa8,
275
+ 0xa1, 0x70, 0xf8, 0xab, 0x9f, 0x93, 0x63, 0xbe, 0xc8, 0x69, 0x48, 0xe5,
276
+ 0x3e, 0x17, 0x0a, 0x3d, 0xf6, 0x14, 0x09, 0x36, 0x81, 0x92, 0x0e, 0x4b,
277
+ 0xf1, 0xd9, 0x52, 0xe6, 0x2d, 0x11, 0x58, 0x20, 0x7f, 0x5b, 0xf8, 0x80,
278
+ 0x9b, 0x20, 0xad, 0xd4, 0x02, 0x0e, 0x5e, 0xac, 0xa1, 0x8e, 0x0e, 0xc2,
279
+ 0x85, 0x4f, 0xfe, 0xfe, 0x53, 0x24, 0x66, 0xb8, 0xf5, 0xc9, 0x39, 0xee,
280
+ 0x32, 0x58, 0x1c, 0x47, 0x03, 0x58, 0x20, 0xf7, 0x50, 0xec, 0xb0, 0xd8,
281
+ 0x6d, 0x8e, 0xf4, 0x2b, 0x5a, 0xed, 0x30, 0x1d, 0xfe, 0x0f, 0x99, 0x90,
282
+ 0x91, 0x04, 0x43, 0x3d, 0x87, 0x35, 0x74, 0xc4, 0x04, 0x35, 0x38, 0x20,
283
+ 0x62, 0xcd, 0x16, 0x05, 0x58, 0x20, 0x06, 0x64, 0xee, 0xc2, 0x65, 0x78,
284
+ 0x1c, 0xb9, 0xf4, 0x4b, 0x53, 0xc1, 0x3e, 0xfd, 0xb5, 0x15, 0xb6, 0x77,
285
+ 0x7e, 0xa1, 0xd0, 0xee, 0x8c, 0x74, 0xdf, 0x1f, 0x00, 0xaa, 0x4a, 0x3e,
286
+ 0x32, 0xeb, 0x18, 0x19, 0x58, 0x20, 0x79, 0xa3, 0xa9, 0x89, 0x9c, 0x85,
287
+ 0xb5, 0x99, 0xcc, 0x65, 0xd8, 0xfd, 0xb0, 0x3a, 0x9e, 0x5c, 0x46, 0x68,
288
+ 0x64, 0x14, 0xea, 0x29, 0x5c, 0x79, 0xe8, 0x30, 0xfe, 0x60, 0xed, 0xa5,
289
+ 0x4f, 0x2f, 0x14, 0x58, 0x20, 0x4b, 0xe3, 0x95, 0xcd, 0x0a, 0x82, 0x60,
290
+ 0x2d, 0x55, 0x7a, 0xce, 0xd8, 0xc0, 0x1f, 0x61, 0xb9, 0x07, 0x84, 0x60,
291
+ 0xe5, 0x2b, 0x5a, 0x29, 0x1b, 0x30, 0x1d, 0x6a, 0x4e, 0xeb, 0xec, 0xc2,
292
+ 0x08, 0x18, 0x26, 0x58, 0x20, 0xbb, 0xf6, 0x1b, 0x0d, 0x24, 0xc7, 0x4b,
293
+ 0x96, 0x2f, 0x2c, 0x66, 0x85, 0x66, 0x2b, 0x1e, 0x13, 0xe8, 0xb5, 0xcf,
294
+ 0xd2, 0x00, 0xbf, 0x90, 0xd8, 0x7e, 0x51, 0x16, 0xc5, 0x99, 0x7e, 0x2c,
295
+ 0x2d, 0x00, 0x58, 0x20, 0x99, 0x1c, 0xb2, 0x52, 0xdd, 0x19, 0xb3, 0x4e,
296
+ 0x4a, 0x0b, 0x2b, 0xa9, 0xe4, 0xe6, 0x98, 0xc7, 0x48, 0xfe, 0x95, 0x2c,
297
+ 0x69, 0x82, 0x5e, 0x1d, 0xfa, 0xca, 0x6b, 0x98, 0xa2, 0x64, 0x3f, 0x68,
298
+ 0x18, 0x21, 0x58, 0x20, 0x80, 0xc6, 0x19, 0xc1, 0xf6, 0x3c, 0x18, 0x27,
299
+ 0x27, 0x60, 0x9c, 0x07, 0xc0, 0x49, 0x2d, 0x0c, 0x0d, 0xf9, 0xd3, 0xfe,
300
+ 0x76, 0xd5, 0x0c, 0x61, 0x66, 0x75, 0x0e, 0xab, 0x0a, 0x5c, 0x12, 0xf0,
301
+ 0x16, 0x58, 0x20, 0x43, 0x76, 0x35, 0x23, 0xa3, 0x39, 0x98, 0xb0, 0x8b,
302
+ 0x7d, 0x60, 0x82, 0x10, 0x90, 0x24, 0x06, 0xb1, 0x6b, 0xd1, 0x5a, 0x38,
303
+ 0x01, 0xed, 0x9e, 0x83, 0xa5, 0x80, 0xc3, 0x19, 0xd7, 0xc7, 0xa8, 0x0f,
304
+ 0x58, 0x20, 0x53, 0x58, 0xce, 0xea, 0xca, 0x35, 0x04, 0xa8, 0x74, 0x48,
305
+ 0xae, 0x86, 0x4d, 0x5c, 0x47, 0x2f, 0x2c, 0x46, 0xcd, 0x6c, 0x27, 0xb1,
306
+ 0x7e, 0x15, 0x1a, 0x03, 0x14, 0xd9, 0x6c, 0xf9, 0x07, 0x5d, 0x18, 0x23,
307
+ 0x58, 0x20, 0x42, 0x8b, 0xa3, 0xd6, 0x22, 0x4e, 0x62, 0xc6, 0x38, 0x66,
308
+ 0xb3, 0x61, 0xb3, 0x85, 0x2f, 0x2c, 0x2d, 0xc6, 0x7f, 0x4c, 0x3f, 0x72,
309
+ 0x00, 0x2b, 0xdf, 0x1b, 0xbb, 0x83, 0x11, 0x22, 0x50, 0xc8, 0x0e, 0x58,
310
+ 0x20, 0xb3, 0xdd, 0xfc, 0x41, 0x84, 0x91, 0x37, 0x16, 0x8d, 0xd9, 0xb3,
311
+ 0x08, 0xfd, 0x10, 0x3e, 0x1d, 0x6d, 0x27, 0x2e, 0xca, 0x73, 0x5f, 0x16,
312
+ 0xda, 0x2d, 0xdb, 0xb7, 0x3b, 0xaf, 0x2d, 0x35, 0x18, 0x18, 0x1b, 0x58,
313
+ 0x20, 0xf4, 0x0f, 0x8d, 0x7d, 0x0e, 0xad, 0xcf, 0xc2, 0x43, 0x47, 0xec,
314
+ 0xa8, 0x48, 0x7d, 0x0f, 0xc7, 0xf7, 0x38, 0xcf, 0xfd, 0x6b, 0x09, 0xe2,
315
+ 0x03, 0x4b, 0x61, 0xef, 0x65, 0x27, 0x5f, 0x2c, 0x30, 0x18, 0x20, 0x58,
316
+ 0x20, 0x94, 0xb3, 0xaf, 0xfc, 0x59, 0xda, 0x35, 0x4e, 0xf1, 0xbf, 0x76,
317
+ 0xbd, 0xb7, 0xad, 0xf1, 0x32, 0x18, 0x28, 0x06, 0xd8, 0x51, 0x24, 0x3d,
318
+ 0xea, 0xb4, 0x6b, 0xb7, 0xac, 0x67, 0xbb, 0x3b, 0xc3, 0x10, 0x58, 0x20,
319
+ 0xcd, 0x7e, 0x15, 0x02, 0xb2, 0x23, 0x2c, 0x24, 0x71, 0x43, 0x92, 0x52,
320
+ 0x0c, 0xd8, 0xa7, 0x92, 0x49, 0xbd, 0x1b, 0x9c, 0x1a, 0xbc, 0xf3, 0x2e,
321
+ 0x28, 0x3f, 0x9c, 0x02, 0xe9, 0x15, 0xc1, 0xa6, 0x0c, 0x58, 0x20, 0x00,
322
+ 0xbd, 0x49, 0x19, 0xa3, 0x16, 0xca, 0x8e, 0xa5, 0xde, 0x98, 0x6a, 0xe3,
323
+ 0x06, 0xa7, 0xef, 0x28, 0xdd, 0x65, 0x1e, 0x04, 0x57, 0xc2, 0x33, 0x99,
324
+ 0x9f, 0xe1, 0x45, 0xf4, 0x88, 0x2b, 0xba, 0x01, 0x58, 0x20, 0x96, 0x41,
325
+ 0x79, 0x66, 0x91, 0x03, 0x63, 0x3f, 0x18, 0xd4, 0x91, 0x09, 0x1d, 0xf2,
326
+ 0x6e, 0x64, 0xe6, 0xb8, 0xa3, 0x77, 0xdf, 0xfa, 0x1e, 0xf2, 0xd3, 0x4e,
327
+ 0x90, 0x45, 0x37, 0x57, 0xae, 0xaf, 0x07, 0x58, 0x20, 0xbe, 0xa8, 0x0e,
328
+ 0x5d, 0x01, 0x4b, 0x55, 0xa0, 0x14, 0xae, 0x12, 0x6d, 0xa9, 0x87, 0x36,
329
+ 0x41, 0x1a, 0x27, 0x1f, 0x01, 0x8d, 0x8e, 0x33, 0x93, 0x45, 0x4b, 0xaa,
330
+ 0x71, 0x88, 0x72, 0x8c, 0x36, 0x09, 0x58, 0x20, 0xfc, 0xa3, 0xc9, 0x2b,
331
+ 0x41, 0x6f, 0xd5, 0x23, 0x02, 0x48, 0xa2, 0xe7, 0x0a, 0x05, 0x44, 0x1e,
332
+ 0x11, 0x9c, 0x7e, 0xe3, 0x6b, 0x6f, 0x28, 0x1e, 0xad, 0x7f, 0xe5, 0x92,
333
+ 0xb3, 0x25, 0x87, 0x48, 0x13, 0x58, 0x20, 0xa8, 0xe8, 0x1d, 0x42, 0x7e,
334
+ 0x2e, 0x94, 0xe1, 0xd3, 0xc1, 0x0b, 0xef, 0xe0, 0xec, 0x08, 0xa6, 0x5b,
335
+ 0x44, 0xad, 0xf6, 0xc1, 0xb1, 0x4d, 0x49, 0x34, 0xca, 0x73, 0xc7, 0x68,
336
+ 0xe3, 0x42, 0xf9, 0x06, 0x58, 0x20, 0x89, 0xaf, 0xc8, 0xbc, 0xd0, 0xe8,
337
+ 0x81, 0xdd, 0xb2, 0xff, 0x5f, 0x0a, 0x4d, 0x80, 0x26, 0x63, 0xba, 0x39,
338
+ 0x4c, 0xdf, 0xee, 0x69, 0xd6, 0xf9, 0xc6, 0xa9, 0x5f, 0x06, 0xfb, 0xb9,
339
+ 0x99, 0x3e, 0x15, 0x58, 0x20, 0x42, 0xb1, 0x0a, 0xba, 0xaf, 0x7d, 0x58,
340
+ 0xec, 0x3f, 0xee, 0xa1, 0xc9, 0x53, 0xd7, 0x2f, 0xa5, 0x78, 0xa7, 0x42,
341
+ 0xb6, 0xcd, 0xc2, 0x8d, 0xe4, 0xc3, 0x58, 0x61, 0xfc, 0x4c, 0xf4, 0xf8,
342
+ 0x00, 0x0b, 0x58, 0x20, 0x43, 0x7e, 0xb6, 0xb4, 0x97, 0x64, 0xb8, 0xff,
343
+ 0xe7, 0x29, 0x21, 0x1c, 0x21, 0x78, 0x8a, 0x33, 0x24, 0x05, 0xcf, 0xc4,
344
+ 0x7d, 0xdf, 0x57, 0x45, 0x71, 0xbb, 0x00, 0xab, 0x6c, 0x8b, 0x79, 0x46,
345
+ 0x18, 0x1d, 0x58, 0x20, 0x9a, 0xf5, 0x3e, 0x84, 0xc9, 0xeb, 0x09, 0xf8,
346
+ 0x06, 0xbd, 0x48, 0xe8, 0xe4, 0xe0, 0x1b, 0xbb, 0x1e, 0x28, 0x15, 0x88,
347
+ 0xc1, 0xea, 0xf4, 0xc8, 0xd0, 0xd9, 0xce, 0x7f, 0x59, 0x03, 0x0c, 0x1a,
348
+ 0x18, 0x1e, 0x58, 0x20, 0x87, 0x23, 0x69, 0xa2, 0x27, 0x12, 0x59, 0x32,
349
+ 0xa7, 0x61, 0x4d, 0x98, 0x63, 0x21, 0x5c, 0xfe, 0xbf, 0x20, 0xfc, 0xba,
350
+ 0x82, 0x30, 0x33, 0x85, 0x71, 0xf3, 0x29, 0x8b, 0xf0, 0xb7, 0x14, 0x42,
351
+ 0x18, 0x1f, 0x58, 0x20, 0xce, 0x6c, 0xea, 0x8a, 0x0a, 0x14, 0xc0, 0xb0,
352
+ 0x37, 0x04, 0xe9, 0x81, 0x55, 0x3a, 0xf3, 0x7c, 0x34, 0x55, 0x48, 0xfe,
353
+ 0xbb, 0x39, 0x85, 0x0d, 0x8e, 0x21, 0x03, 0x58, 0x75, 0xe0, 0x88, 0xcb,
354
+ 0x0a, 0x58, 0x20, 0x41, 0xb0, 0x8d, 0xaf, 0x52, 0xc4, 0xb0, 0x9d, 0x9d,
355
+ 0x60, 0xb8, 0x75, 0x33, 0xe8, 0xb9, 0xa1, 0x2a, 0x2a, 0xe9, 0xb3, 0x11,
356
+ 0x10, 0x59, 0x4e, 0x0e, 0xa9, 0x55, 0xdc, 0x0b, 0x00, 0x6b, 0xc0, 0x77,
357
+ 0x6f, 0x72, 0x67, 0x2e, 0x69, 0x73, 0x6f, 0x2e, 0x31, 0x38, 0x30, 0x31,
358
+ 0x33, 0x2e, 0x35, 0x2e, 0x31, 0x2e, 0x61, 0x61, 0x6d, 0x76, 0x61, 0xa6,
359
+ 0x18, 0x1c, 0x58, 0x20, 0x10, 0x31, 0xf1, 0x32, 0x64, 0xa8, 0xa5, 0xb7,
360
+ 0x8b, 0xfa, 0x18, 0x78, 0x99, 0x45, 0x29, 0xbe, 0xed, 0x7d, 0x52, 0x8b,
361
+ 0xf2, 0xa0, 0x01, 0xc3, 0x29, 0xdf, 0x54, 0x79, 0x6b, 0xda, 0x79, 0xc4,
362
+ 0x18, 0x27, 0x58, 0x20, 0x29, 0xc3, 0xee, 0xdc, 0x37, 0x04, 0x79, 0xa1,
363
+ 0xed, 0x0b, 0x57, 0x37, 0x3a, 0xe0, 0xfa, 0xed, 0x5d, 0x7d, 0xc7, 0x74,
364
+ 0xdd, 0x75, 0xbd, 0xfd, 0xa2, 0x48, 0xc8, 0xb8, 0x6d, 0x97, 0x20, 0xed,
365
+ 0x08, 0x58, 0x20, 0x9e, 0x5b, 0x95, 0x44, 0x7a, 0xe9, 0xf0, 0x50, 0x99,
366
+ 0x4b, 0xaf, 0x8a, 0xdb, 0x81, 0x97, 0x84, 0xe6, 0x23, 0xc0, 0x39, 0xe9,
367
+ 0x78, 0x29, 0x57, 0x4f, 0x41, 0x26, 0x40, 0x0e, 0x09, 0x77, 0x1c, 0x18,
368
+ 0x25, 0x58, 0x20, 0xd0, 0x53, 0x75, 0x45, 0xb5, 0x9c, 0x9d, 0x00, 0xbc,
369
+ 0x4a, 0x64, 0xe7, 0x6b, 0x1a, 0x7d, 0x5d, 0xd1, 0x14, 0x43, 0xa4, 0xf0,
370
+ 0x7e, 0xff, 0x47, 0xdc, 0xaa, 0xa5, 0x09, 0xc3, 0x1c, 0xf3, 0x19, 0x12,
371
+ 0x58, 0x20, 0xde, 0xfb, 0x65, 0x3b, 0x79, 0xb2, 0xa2, 0x43, 0x2f, 0x1f,
372
+ 0xb5, 0x67, 0xa2, 0x9d, 0x27, 0xa9, 0xef, 0xf7, 0xe2, 0x5c, 0x83, 0x2d,
373
+ 0xb1, 0x64, 0xc8, 0xcb, 0xbe, 0xfc, 0xba, 0x7a, 0x54, 0x6a, 0x18, 0x1a,
374
+ 0x58, 0x20, 0x60, 0x49, 0x24, 0x62, 0x3f, 0x82, 0xf6, 0x37, 0x8b, 0xaa,
375
+ 0x34, 0x3e, 0xb6, 0x2d, 0x0e, 0x25, 0xba, 0xab, 0x41, 0xd1, 0x1f, 0x69,
376
+ 0x23, 0x19, 0xed, 0x61, 0xf5, 0x5b, 0xcf, 0x2e, 0xf1, 0x1b, 0x6d, 0x64,
377
+ 0x65, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x49, 0x6e, 0x66, 0x6f,
378
+ 0xa1, 0x69, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x65, 0x79, 0xa4,
379
+ 0x01, 0x02, 0x20, 0x01, 0x21, 0x58, 0x20, 0x4e, 0x9c, 0x8a, 0xa8, 0x54,
380
+ 0x7a, 0x51, 0x52, 0x0b, 0x39, 0xa3, 0xcb, 0x6c, 0x0f, 0x09, 0x9b, 0x23,
381
+ 0x49, 0x55, 0xc6, 0x1d, 0x5f, 0x8b, 0x3d, 0xa2, 0x11, 0x29, 0xde, 0x4b,
382
+ 0x8d, 0x04, 0x19, 0x22, 0x58, 0x20, 0xa0, 0x88, 0x4a, 0xed, 0xb1, 0x25,
383
+ 0xe5, 0x09, 0x7e, 0x86, 0xbf, 0xaa, 0xfa, 0x0c, 0x27, 0xd3, 0xc2, 0x39,
384
+ 0x2e, 0x67, 0x82, 0x25, 0x27, 0x33, 0xa6, 0x8f, 0x51, 0x3c, 0xee, 0x78,
385
+ 0x55, 0xb7, 0x6c, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x69, 0x74, 0x79, 0x49,
386
+ 0x6e, 0x66, 0x6f, 0xa3, 0x66, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0xc0,
387
+ 0x78, 0x18, 0x32, 0x30, 0x32, 0x34, 0x2d, 0x30, 0x39, 0x2d, 0x32, 0x36,
388
+ 0x54, 0x31, 0x37, 0x3a, 0x35, 0x33, 0x3a, 0x34, 0x31, 0x2e, 0x39, 0x33,
389
+ 0x38, 0x5a, 0x69, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x46, 0x72, 0x6f, 0x6d,
390
+ 0xc0, 0x78, 0x18, 0x32, 0x30, 0x32, 0x34, 0x2d, 0x30, 0x39, 0x2d, 0x32,
391
+ 0x36, 0x54, 0x31, 0x37, 0x3a, 0x35, 0x33, 0x3a, 0x34, 0x31, 0x2e, 0x39,
392
+ 0x33, 0x38, 0x5a, 0x6a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x55, 0x6e, 0x74,
393
+ 0x69, 0x6c, 0xc0, 0x78, 0x18, 0x32, 0x30, 0x32, 0x35, 0x2d, 0x30, 0x39,
394
+ 0x2d, 0x32, 0x36, 0x54, 0x31, 0x37, 0x3a, 0x35, 0x33, 0x3a, 0x34, 0x31,
395
+ 0x2e, 0x39, 0x33, 0x38, 0x5a, 0x58, 0x40, 0xf4, 0x77, 0x60, 0x04, 0x2a,
396
+ 0x49, 0x4c, 0x44, 0x0e, 0x81, 0x52, 0x5b, 0x53, 0xa4, 0xff, 0x30, 0x6b,
397
+ 0x7d, 0x45, 0x8e, 0x9f, 0xa2, 0xfe, 0x40, 0xe4, 0x89, 0x3a, 0x09, 0xd7,
398
+ 0x3a, 0xbc, 0x23, 0xfd, 0x62, 0x39, 0xef, 0x89, 0xac, 0xf1, 0xb2, 0xe7,
399
+ 0xe2, 0xb0, 0xa8, 0xd2, 0x5d, 0x8f, 0x27, 0x12, 0xee, 0x60, 0x3c, 0xcb,
400
+ 0x0a, 0xd5, 0x6e, 0xeb, 0x5c, 0xb7, 0xfd, 0x78, 0x04, 0xdc, 0xc8, 0x6c,
401
+ 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64,
402
+ 0xa2, 0x6a, 0x6e, 0x61, 0x6d, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73,
403
+ 0xd8, 0x18, 0x41, 0xa0, 0x6a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41,
404
+ 0x75, 0x74, 0x68, 0xa1, 0x6f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53,
405
+ 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x84, 0x43, 0xa1, 0x01,
406
+ 0x26, 0xa0, 0xf6, 0x58, 0x40, 0xe7, 0x6e, 0x50, 0x02, 0x7d, 0xd7, 0x6d,
407
+ 0xa9, 0x12, 0x3c, 0x73, 0x92, 0xbd, 0x4d, 0x64, 0xa9, 0x21, 0x46, 0x85,
408
+ 0xdf, 0x7e, 0xf8, 0xdd, 0xca, 0xd9, 0xdc, 0x44, 0xc0, 0xe3, 0x09, 0xa7,
409
+ 0x70, 0xda, 0xee, 0x35, 0xe9, 0xe2, 0x49, 0xea, 0xd5, 0x9d, 0x42, 0xaa,
410
+ 0x02, 0x0f, 0x4f, 0xaa, 0x0b, 0xdb, 0x78, 0xf0, 0xb8, 0x1d, 0x83, 0xc6,
411
+ 0x89, 0xb0, 0x7b, 0x83, 0xce, 0x48, 0x7b, 0x5d, 0x93, 0x66, 0x73, 0x74,
412
+ 0x61, 0x74, 0x75, 0x73, 0x00}},
413
+
414
+ // ========= Test cases that should fail ==============================
415
+
416
+ {false, {X(0, 27), 0x1}}, // invalid count structure
417
+ {false, {X(0, 28), 0x1}},
418
+ {false, {X(0, 29), 0x1}},
419
+ {false, {X(0, 30), 0x1}},
420
+ {false, {X(0, 31), 0x1}},
421
+ {false, {X(5, 3), 0x62}}, // map too short b/c not enough keys
422
+ {false, {X(5, 2), 0x61, 'a', 0x63, 'b', 'c'}}, // map too short
423
+ // array too short, bad key parsing
424
+ {false,
425
+ {X(4, 4), 0x62, 'u', 0x63, 't', 't', 't', 0x62, 'v', 'v', 0x61, 'z'}},
426
+ // failed recursive map of maps
427
+ {false, {0xA1, 0xA1, 0xA1, 1, 1, 0xF4}},
428
+ // invalid date tag len
429
+ {false,
430
+ {0xD9, 0x03, 0xEC, 0x69, 0x31, 0x39, 0x37, 0x31, 0x2D, 0x30, 0x39, 0x2D,
431
+ 0x30}},
432
+ };
433
+
434
+ for (const auto &test : tests) {
435
+ CborDoc root;
436
+ size_t pos = 0;
437
+ bool got = root.decode(&test.bytes[0], test.bytes.size(), pos, 0);
438
+ EXPECT_EQ(test.valid, got);
439
+ EXPECT_LE(pos, test.bytes.size());
440
+ }
441
+ }
442
+
443
+ TEST(HostDecoderTest, Lookup) {
444
+ CborDoc croot;
445
+ std::vector<uint8_t> mso = {
446
+ 0xA6, 0x67, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x63, 0x31, 0x2E,
447
+ 0x30, 0x6F, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x41, 0x6C, 0x67, 0x6F,
448
+ 0x72, 0x69, 0x74, 0x68, 0x6D, 0x67, 0x53, 0x48, 0x41, 0x2D, 0x32, 0x35,
449
+ 0x36, 0x67, 0x64, 0x6F, 0x63, 0x54, 0x79, 0x70, 0x65, 0x75, 0x6F, 0x72,
450
+ 0x67, 0x2E, 0x69, 0x73, 0x6F, 0x2E, 0x31, 0x38, 0x30, 0x31, 0x33, 0x2E,
451
+ 0x35, 0x2E, 0x31, 0x2E, 0x6D, 0x44, 0x4C, 0x6C, 0x76, 0x61, 0x6C, 0x75,
452
+ 0x65, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0xA1, 0x71, 0x6F, 0x72,
453
+ 0x67, 0x2E, 0x69, 0x73, 0x6F, 0x2E, 0x31, 0x38, 0x30, 0x31, 0x33, 0x2E,
454
+ 0x35, 0x2E, 0x31, 0xA5, 0x01, 0x58, 0x20, 0xAD, 0xF6, 0xA3, 0x33, 0x03,
455
+ 0x6A, 0xDE, 0xFC, 0x48, 0x90, 0xDF, 0x38, 0xE0, 0xF7, 0x37, 0x22, 0x90,
456
+ 0x85, 0xA9, 0xB0, 0xBA, 0x7C, 0x07, 0x19, 0xD3, 0x92, 0x40, 0x5D, 0x74,
457
+ 0x46, 0x23, 0x77, 0x02, 0x58, 0x20, 0xA0, 0xA1, 0x4A, 0x5A, 0xA1, 0xB3,
458
+ 0x36, 0x84, 0x4D, 0x8F, 0x8D, 0x14, 0x8E, 0xD4, 0x4F, 0xD2, 0xCC, 0xC6,
459
+ 0x6F, 0x54, 0xD8, 0x78, 0x2B, 0x70, 0xFB, 0x77, 0x13, 0xFB, 0x3C, 0x93,
460
+ 0xF5, 0x56, 0x03, 0x58, 0x20, 0x97, 0xB0, 0x18, 0x4E, 0xDD, 0xE3, 0x99,
461
+ 0xCB, 0x7D, 0xEA, 0x2D, 0x7D, 0x27, 0x9A, 0x45, 0x69, 0x90, 0xD9, 0xF3,
462
+ 0x12, 0x46, 0x71, 0x63, 0x78, 0x7E, 0x1B, 0xA7, 0x66, 0x0A, 0x5C, 0x08,
463
+ 0x6F, 0x04, 0x58, 0x20, 0xAF, 0x0B, 0x9F, 0xE7, 0x24, 0x5C, 0xA9, 0xA5,
464
+ 0x9F, 0x64, 0xB1, 0xAA, 0x82, 0xCC, 0x2C, 0x1A, 0xB1, 0x38, 0x6F, 0x77,
465
+ 0x95, 0x64, 0x93, 0x83, 0x62, 0x97, 0xC8, 0xA8, 0x4D, 0x2A, 0xE0, 0xB4,
466
+ 0x00, 0x58, 0x20, 0x0D, 0x98, 0x54, 0xDB, 0x51, 0x48, 0x6F, 0xF4, 0x49,
467
+ 0x07, 0xBC, 0x61, 0x4F, 0xFA, 0xEA, 0x93, 0xDA, 0xE1, 0xA8, 0x9E, 0xAD,
468
+ 0x40, 0x26, 0x3F, 0x90, 0x1A, 0xE6, 0xCE, 0x41, 0x26, 0x46, 0x21, 0x6D,
469
+ 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4B, 0x65, 0x79, 0x49, 0x6E, 0x66,
470
+ 0x6F, 0xA1, 0x69, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4B, 0x65, 0x79,
471
+ 0xA4, 0x01, 0x02, 0x20, 0x01, 0x21, 0x58, 0x20, 0xC3, 0x14, 0xA7, 0xAB,
472
+ 0xBA, 0x07, 0xE4, 0x0E, 0x64, 0xAE, 0x87, 0xDB, 0x4A, 0xD9, 0x71, 0x80,
473
+ 0x13, 0xFD, 0x39, 0x8E, 0x6E, 0x23, 0x17, 0xB3, 0x04, 0xF5, 0x7F, 0xC9,
474
+ 0xAC, 0xCA, 0xB9, 0xF5, 0x22, 0x58, 0x20, 0xED, 0xB8, 0xB0, 0x23, 0x0C,
475
+ 0xCC, 0x98, 0xDD, 0x42, 0xCD, 0xFF, 0x89, 0xA8, 0xD1, 0xE2, 0x5F, 0xF8,
476
+ 0xD1, 0xA7, 0xFA, 0x38, 0x9E, 0x92, 0xDC, 0x8F, 0x01, 0xAF, 0x98, 0x5A,
477
+ 0x79, 0xEF, 0xCC, 0x6C, 0x76, 0x61, 0x6C, 0x69, 0x64, 0x69, 0x74, 0x79,
478
+ 0x49, 0x6E, 0x66, 0x6F, 0xA3, 0x66, 0x73, 0x69, 0x67, 0x6E, 0x65, 0x64,
479
+ 0xC0, 0x74, 0x32, 0x30, 0x32, 0x34, 0x2D, 0x30, 0x31, 0x2D, 0x32, 0x35,
480
+ 0x54, 0x32, 0x31, 0x3A, 0x31, 0x32, 0x3A, 0x35, 0x39, 0x5A, 0x69, 0x76,
481
+ 0x61, 0x6C, 0x69, 0x64, 0x46, 0x72, 0x6F, 0x6D, 0xC0, 0x74, 0x32, 0x30,
482
+ 0x32, 0x34, 0x2D, 0x30, 0x31, 0x2D, 0x32, 0x35, 0x54, 0x32, 0x31, 0x3A,
483
+ 0x31, 0x32, 0x3A, 0x35, 0x39, 0x5A, 0x6A, 0x76, 0x61, 0x6C, 0x69, 0x64,
484
+ 0x55, 0x6E, 0x74, 0x69, 0x6C, 0xC0, 0x74, 0x32, 0x30, 0x32, 0x34, 0x2D,
485
+ 0x30, 0x32, 0x2D, 0x32, 0x34, 0x54, 0x32, 0x31, 0x3A, 0x31, 0x32, 0x3A,
486
+ 0x35, 0x39, 0x5a};
487
+
488
+ size_t pos = 0;
489
+ bool ret = croot.decode(&mso[0], mso.size(), pos, 0);
490
+ EXPECT_TRUE(ret);
491
+
492
+ // Perform lookups that should succeed
493
+ size_t ndx;
494
+ std::vector<std::vector<uint8_t>> keys = {
495
+ {'v', 'e', 'r', 's', 'i', 'o', 'n'},
496
+ {'d', 'i', 'g', 'e', 's', 't', 'A', 'l', 'g', 'o', 'r', 'i', 't', 'h',
497
+ 'm'},
498
+ };
499
+ for (const auto &key : keys) {
500
+ const CborDoc *got = croot.lookup(mso.data(), key.size(), &key[0], ndx);
501
+ EXPECT_NE(got, nullptr);
502
+ }
503
+
504
+ // Perform a cascading series of lookups
505
+ const uint8_t dki[13] = {'d', 'e', 'v', 'i', 'c', 'e', 'K',
506
+ 'e', 'y', 'I', 'n', 'f', 'o'};
507
+ const CborDoc *c_dki = croot.lookup(mso.data(), sizeof(dki), dki, ndx);
508
+ EXPECT_NE(c_dki, nullptr);
509
+ EXPECT_EQ(4u, ndx);
510
+
511
+ const uint8_t dk[9] = {'d', 'e', 'v', 'i', 'c', 'e', 'K', 'e', 'y'};
512
+ const CborDoc *c_dk = c_dki[1].lookup(mso.data(), sizeof(dk), dk, ndx);
513
+ EXPECT_NE(c_dk, nullptr);
514
+ EXPECT_EQ(0u, ndx);
515
+
516
+ const CborDoc *c_pkx = c_dk[1].lookup_negative(-1, ndx);
517
+ EXPECT_NE(c_pkx, nullptr);
518
+ EXPECT_EQ(2u, ndx);
519
+
520
+ const CborDoc *c_00 = c_dk[1].lookup_unsigned(1, ndx);
521
+ EXPECT_NE(c_00, nullptr);
522
+ EXPECT_EQ(0u, ndx);
523
+
524
+ // Perform lookups that should fail
525
+ std::vector<std::vector<uint8_t>> not_keys = {
526
+ {'v', 'e', 'r', 's', 'i', 'a', 'n'},
527
+ {'d', 'o', 'g', 'e', 's', 't', 'A', 'l', 'g', 'o', 'r', 'i', 't', 'h',
528
+ 'm'},
529
+ };
530
+ for (const auto &key : not_keys) {
531
+ const CborDoc *got = croot.lookup(mso.data(), key.size(), &key[0], ndx);
532
+ EXPECT_EQ(got, nullptr);
533
+ }
534
+ const CborDoc *ptr = c_dk[1].lookup_negative(-4, ndx);
535
+ EXPECT_EQ(ptr, nullptr);
536
+ ptr = c_dk[1].lookup_unsigned(6, ndx);
537
+ EXPECT_EQ(ptr, nullptr);
538
+ }
539
+
540
+ } // namespace
541
+ } // namespace proofs