protocol-quic 0.0.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 (343) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +0 -0
  3. data/ext/ngtcp2/AUTHORS +44 -0
  4. data/ext/ngtcp2/CMakeLists.txt +431 -0
  5. data/ext/ngtcp2/CMakeOptions.txt +17 -0
  6. data/ext/ngtcp2/COPYING +22 -0
  7. data/ext/ngtcp2/ChangeLog +0 -0
  8. data/ext/ngtcp2/Makefile.am +60 -0
  9. data/ext/ngtcp2/NEWS +0 -0
  10. data/ext/ngtcp2/README +1 -0
  11. data/ext/ngtcp2/README.rst +258 -0
  12. data/ext/ngtcp2/ci/build_boringssl.sh +10 -0
  13. data/ext/ngtcp2/ci/build_nghttp3.sh +9 -0
  14. data/ext/ngtcp2/ci/build_openssl1.sh +8 -0
  15. data/ext/ngtcp2/ci/build_openssl1_cross.sh +9 -0
  16. data/ext/ngtcp2/ci/build_openssl3.sh +8 -0
  17. data/ext/ngtcp2/ci/build_picotls.sh +26 -0
  18. data/ext/ngtcp2/ci/build_wolfssl.sh +9 -0
  19. data/ext/ngtcp2/ci/gen-certificate.sh +8 -0
  20. data/ext/ngtcp2/cmake/ExtractValidFlags.cmake +31 -0
  21. data/ext/ngtcp2/cmake/FindCUnit.cmake +40 -0
  22. data/ext/ngtcp2/cmake/FindJemalloc.cmake +40 -0
  23. data/ext/ngtcp2/cmake/FindLibev.cmake +38 -0
  24. data/ext/ngtcp2/cmake/FindLibnghttp3.cmake +41 -0
  25. data/ext/ngtcp2/cmake/Findwolfssl.cmake +41 -0
  26. data/ext/ngtcp2/cmake/Version.cmake +11 -0
  27. data/ext/ngtcp2/cmakeconfig.h.in +36 -0
  28. data/ext/ngtcp2/configure.ac +755 -0
  29. data/ext/ngtcp2/crypto/CMakeLists.txt +56 -0
  30. data/ext/ngtcp2/crypto/Makefile.am +49 -0
  31. data/ext/ngtcp2/crypto/boringssl/CMakeLists.txt +64 -0
  32. data/ext/ngtcp2/crypto/boringssl/Makefile.am +39 -0
  33. data/ext/ngtcp2/crypto/boringssl/boringssl.c +630 -0
  34. data/ext/ngtcp2/crypto/boringssl/libngtcp2_crypto_boringssl.pc.in +33 -0
  35. data/ext/ngtcp2/crypto/gnutls/CMakeLists.txt +86 -0
  36. data/ext/ngtcp2/crypto/gnutls/Makefile.am +43 -0
  37. data/ext/ngtcp2/crypto/gnutls/gnutls.c +644 -0
  38. data/ext/ngtcp2/crypto/gnutls/libngtcp2_crypto_gnutls.pc.in +33 -0
  39. data/ext/ngtcp2/crypto/includes/CMakeLists.txt +56 -0
  40. data/ext/ngtcp2/crypto/includes/Makefile.am +45 -0
  41. data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto.h +893 -0
  42. data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_boringssl.h +104 -0
  43. data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_gnutls.h +107 -0
  44. data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_openssl.h +132 -0
  45. data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_picotls.h +246 -0
  46. data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_wolfssl.h +106 -0
  47. data/ext/ngtcp2/crypto/openssl/CMakeLists.txt +86 -0
  48. data/ext/ngtcp2/crypto/openssl/Makefile.am +43 -0
  49. data/ext/ngtcp2/crypto/openssl/libngtcp2_crypto_openssl.pc.in +33 -0
  50. data/ext/ngtcp2/crypto/openssl/openssl.c +807 -0
  51. data/ext/ngtcp2/crypto/picotls/CMakeLists.txt +65 -0
  52. data/ext/ngtcp2/crypto/picotls/Makefile.am +39 -0
  53. data/ext/ngtcp2/crypto/picotls/libngtcp2_crypto_picotls.pc.in +33 -0
  54. data/ext/ngtcp2/crypto/picotls/picotls.c +707 -0
  55. data/ext/ngtcp2/crypto/shared.c +1431 -0
  56. data/ext/ngtcp2/crypto/shared.h +350 -0
  57. data/ext/ngtcp2/crypto/wolfssl/CMakeLists.txt +84 -0
  58. data/ext/ngtcp2/crypto/wolfssl/Makefile.am +43 -0
  59. data/ext/ngtcp2/crypto/wolfssl/libngtcp2_crypto_wolfssl.pc.in +33 -0
  60. data/ext/ngtcp2/crypto/wolfssl/wolfssl.c +534 -0
  61. data/ext/ngtcp2/doc/Makefile.am +65 -0
  62. data/ext/ngtcp2/doc/make.bat +35 -0
  63. data/ext/ngtcp2/doc/mkapiref.py +356 -0
  64. data/ext/ngtcp2/doc/source/conf.py.in +94 -0
  65. data/ext/ngtcp2/doc/source/index.rst +22 -0
  66. data/ext/ngtcp2/doc/source/programmers-guide.rst +476 -0
  67. data/ext/ngtcp2/docker/Dockerfile +39 -0
  68. data/ext/ngtcp2/examples/CMakeLists.txt +361 -0
  69. data/ext/ngtcp2/examples/Makefile.am +228 -0
  70. data/ext/ngtcp2/examples/client.cc +3049 -0
  71. data/ext/ngtcp2/examples/client.h +192 -0
  72. data/ext/ngtcp2/examples/client_base.cc +202 -0
  73. data/ext/ngtcp2/examples/client_base.h +213 -0
  74. data/ext/ngtcp2/examples/debug.cc +298 -0
  75. data/ext/ngtcp2/examples/debug.h +124 -0
  76. data/ext/ngtcp2/examples/examplestest.cc +84 -0
  77. data/ext/ngtcp2/examples/gtlssimpleclient.c +720 -0
  78. data/ext/ngtcp2/examples/h09client.cc +2601 -0
  79. data/ext/ngtcp2/examples/h09client.h +196 -0
  80. data/ext/ngtcp2/examples/h09server.cc +3024 -0
  81. data/ext/ngtcp2/examples/h09server.h +237 -0
  82. data/ext/ngtcp2/examples/http.cc +138 -0
  83. data/ext/ngtcp2/examples/http.h +44 -0
  84. data/ext/ngtcp2/examples/network.h +80 -0
  85. data/ext/ngtcp2/examples/server.cc +3731 -0
  86. data/ext/ngtcp2/examples/server.h +256 -0
  87. data/ext/ngtcp2/examples/server_base.cc +58 -0
  88. data/ext/ngtcp2/examples/server_base.h +195 -0
  89. data/ext/ngtcp2/examples/shared.cc +385 -0
  90. data/ext/ngtcp2/examples/shared.h +96 -0
  91. data/ext/ngtcp2/examples/simpleclient.c +683 -0
  92. data/ext/ngtcp2/examples/template.h +71 -0
  93. data/ext/ngtcp2/examples/tests/README.rst +60 -0
  94. data/ext/ngtcp2/examples/tests/__init__.py +0 -0
  95. data/ext/ngtcp2/examples/tests/config.ini.in +32 -0
  96. data/ext/ngtcp2/examples/tests/conftest.py +28 -0
  97. data/ext/ngtcp2/examples/tests/ngtcp2test/__init__.py +6 -0
  98. data/ext/ngtcp2/examples/tests/ngtcp2test/certs.py +476 -0
  99. data/ext/ngtcp2/examples/tests/ngtcp2test/client.py +187 -0
  100. data/ext/ngtcp2/examples/tests/ngtcp2test/env.py +191 -0
  101. data/ext/ngtcp2/examples/tests/ngtcp2test/log.py +101 -0
  102. data/ext/ngtcp2/examples/tests/ngtcp2test/server.py +137 -0
  103. data/ext/ngtcp2/examples/tests/ngtcp2test/tls.py +983 -0
  104. data/ext/ngtcp2/examples/tests/test_01_handshake.py +30 -0
  105. data/ext/ngtcp2/examples/tests/test_02_resume.py +46 -0
  106. data/ext/ngtcp2/examples/tests/test_03_earlydata.py +56 -0
  107. data/ext/ngtcp2/examples/tests/test_04_clientcert.py +57 -0
  108. data/ext/ngtcp2/examples/tests/test_05_ciphers.py +46 -0
  109. data/ext/ngtcp2/examples/tls_client_context.h +52 -0
  110. data/ext/ngtcp2/examples/tls_client_context_boringssl.cc +126 -0
  111. data/ext/ngtcp2/examples/tls_client_context_boringssl.h +49 -0
  112. data/ext/ngtcp2/examples/tls_client_context_gnutls.cc +74 -0
  113. data/ext/ngtcp2/examples/tls_client_context_gnutls.h +50 -0
  114. data/ext/ngtcp2/examples/tls_client_context_openssl.cc +137 -0
  115. data/ext/ngtcp2/examples/tls_client_context_openssl.h +49 -0
  116. data/ext/ngtcp2/examples/tls_client_context_picotls.cc +158 -0
  117. data/ext/ngtcp2/examples/tls_client_context_picotls.h +53 -0
  118. data/ext/ngtcp2/examples/tls_client_context_wolfssl.cc +177 -0
  119. data/ext/ngtcp2/examples/tls_client_context_wolfssl.h +51 -0
  120. data/ext/ngtcp2/examples/tls_client_session.h +52 -0
  121. data/ext/ngtcp2/examples/tls_client_session_boringssl.cc +110 -0
  122. data/ext/ngtcp2/examples/tls_client_session_boringssl.h +52 -0
  123. data/ext/ngtcp2/examples/tls_client_session_gnutls.cc +190 -0
  124. data/ext/ngtcp2/examples/tls_client_session_gnutls.h +52 -0
  125. data/ext/ngtcp2/examples/tls_client_session_openssl.cc +113 -0
  126. data/ext/ngtcp2/examples/tls_client_session_openssl.h +52 -0
  127. data/ext/ngtcp2/examples/tls_client_session_picotls.cc +147 -0
  128. data/ext/ngtcp2/examples/tls_client_session_picotls.h +52 -0
  129. data/ext/ngtcp2/examples/tls_client_session_wolfssl.cc +160 -0
  130. data/ext/ngtcp2/examples/tls_client_session_wolfssl.h +52 -0
  131. data/ext/ngtcp2/examples/tls_server_context.h +52 -0
  132. data/ext/ngtcp2/examples/tls_server_context_boringssl.cc +257 -0
  133. data/ext/ngtcp2/examples/tls_server_context_boringssl.h +54 -0
  134. data/ext/ngtcp2/examples/tls_server_context_gnutls.cc +99 -0
  135. data/ext/ngtcp2/examples/tls_server_context_gnutls.h +59 -0
  136. data/ext/ngtcp2/examples/tls_server_context_openssl.cc +338 -0
  137. data/ext/ngtcp2/examples/tls_server_context_openssl.h +54 -0
  138. data/ext/ngtcp2/examples/tls_server_context_picotls.cc +321 -0
  139. data/ext/ngtcp2/examples/tls_server_context_picotls.h +58 -0
  140. data/ext/ngtcp2/examples/tls_server_context_wolfssl.cc +284 -0
  141. data/ext/ngtcp2/examples/tls_server_context_wolfssl.h +55 -0
  142. data/ext/ngtcp2/examples/tls_server_session.h +52 -0
  143. data/ext/ngtcp2/examples/tls_server_session_boringssl.cc +84 -0
  144. data/ext/ngtcp2/examples/tls_server_session_boringssl.h +47 -0
  145. data/ext/ngtcp2/examples/tls_server_session_gnutls.cc +155 -0
  146. data/ext/ngtcp2/examples/tls_server_session_gnutls.h +46 -0
  147. data/ext/ngtcp2/examples/tls_server_session_openssl.cc +54 -0
  148. data/ext/ngtcp2/examples/tls_server_session_openssl.h +47 -0
  149. data/ext/ngtcp2/examples/tls_server_session_picotls.cc +70 -0
  150. data/ext/ngtcp2/examples/tls_server_session_picotls.h +47 -0
  151. data/ext/ngtcp2/examples/tls_server_session_wolfssl.cc +55 -0
  152. data/ext/ngtcp2/examples/tls_server_session_wolfssl.h +47 -0
  153. data/ext/ngtcp2/examples/tls_session_base_gnutls.cc +87 -0
  154. data/ext/ngtcp2/examples/tls_session_base_gnutls.h +51 -0
  155. data/ext/ngtcp2/examples/tls_session_base_openssl.cc +54 -0
  156. data/ext/ngtcp2/examples/tls_session_base_openssl.h +52 -0
  157. data/ext/ngtcp2/examples/tls_session_base_picotls.cc +56 -0
  158. data/ext/ngtcp2/examples/tls_session_base_picotls.h +54 -0
  159. data/ext/ngtcp2/examples/tls_session_base_wolfssl.cc +54 -0
  160. data/ext/ngtcp2/examples/tls_session_base_wolfssl.h +54 -0
  161. data/ext/ngtcp2/examples/tls_shared_picotls.cc +59 -0
  162. data/ext/ngtcp2/examples/tls_shared_picotls.h +36 -0
  163. data/ext/ngtcp2/examples/util.cc +646 -0
  164. data/ext/ngtcp2/examples/util.h +361 -0
  165. data/ext/ngtcp2/examples/util_gnutls.cc +136 -0
  166. data/ext/ngtcp2/examples/util_openssl.cc +131 -0
  167. data/ext/ngtcp2/examples/util_test.cc +237 -0
  168. data/ext/ngtcp2/examples/util_test.h +45 -0
  169. data/ext/ngtcp2/examples/util_wolfssl.cc +130 -0
  170. data/ext/ngtcp2/fuzz/corpus/decode_frame/ack +0 -0
  171. data/ext/ngtcp2/fuzz/corpus/decode_frame/ack_ecn +0 -0
  172. data/ext/ngtcp2/fuzz/corpus/decode_frame/connection_close +0 -0
  173. data/ext/ngtcp2/fuzz/corpus/decode_frame/crypto +1 -0
  174. data/ext/ngtcp2/fuzz/corpus/decode_frame/data_blocked +1 -0
  175. data/ext/ngtcp2/fuzz/corpus/decode_frame/datagram +1 -0
  176. data/ext/ngtcp2/fuzz/corpus/decode_frame/datagram_len +1 -0
  177. data/ext/ngtcp2/fuzz/corpus/decode_frame/max_data +1 -0
  178. data/ext/ngtcp2/fuzz/corpus/decode_frame/max_stream_data +0 -0
  179. data/ext/ngtcp2/fuzz/corpus/decode_frame/max_streams +0 -0
  180. data/ext/ngtcp2/fuzz/corpus/decode_frame/new_connection_id +1 -0
  181. data/ext/ngtcp2/fuzz/corpus/decode_frame/new_token +1 -0
  182. data/ext/ngtcp2/fuzz/corpus/decode_frame/path_challenge +1 -0
  183. data/ext/ngtcp2/fuzz/corpus/decode_frame/path_response +1 -0
  184. data/ext/ngtcp2/fuzz/corpus/decode_frame/reset_stream +0 -0
  185. data/ext/ngtcp2/fuzz/corpus/decode_frame/retire_connection_id +1 -0
  186. data/ext/ngtcp2/fuzz/corpus/decode_frame/stop_sending +0 -0
  187. data/ext/ngtcp2/fuzz/corpus/decode_frame/stream +0 -0
  188. data/ext/ngtcp2/fuzz/corpus/decode_frame/stream_data_blocked +0 -0
  189. data/ext/ngtcp2/fuzz/corpus/decode_frame/stream_len +0 -0
  190. data/ext/ngtcp2/fuzz/corpus/decode_frame/streams_blocked +0 -0
  191. data/ext/ngtcp2/fuzz/corpus/ksl/random +0 -0
  192. data/ext/ngtcp2/fuzz/decode_frame.cc +25 -0
  193. data/ext/ngtcp2/fuzz/ksl.cc +77 -0
  194. data/ext/ngtcp2/interop/Dockerfile +39 -0
  195. data/ext/ngtcp2/interop/run_endpoint.sh +93 -0
  196. data/ext/ngtcp2/lib/CMakeLists.txt +110 -0
  197. data/ext/ngtcp2/lib/Makefile.am +122 -0
  198. data/ext/ngtcp2/lib/includes/CMakeLists.txt +4 -0
  199. data/ext/ngtcp2/lib/includes/Makefile.am +25 -0
  200. data/ext/ngtcp2/lib/includes/ngtcp2/ngtcp2.h +5843 -0
  201. data/ext/ngtcp2/lib/includes/ngtcp2/version.h.in +51 -0
  202. data/ext/ngtcp2/lib/libngtcp2.pc.in +33 -0
  203. data/ext/ngtcp2/lib/ngtcp2_acktr.c +335 -0
  204. data/ext/ngtcp2/lib/ngtcp2_acktr.h +221 -0
  205. data/ext/ngtcp2/lib/ngtcp2_addr.c +117 -0
  206. data/ext/ngtcp2/lib/ngtcp2_addr.h +69 -0
  207. data/ext/ngtcp2/lib/ngtcp2_balloc.c +90 -0
  208. data/ext/ngtcp2/lib/ngtcp2_balloc.h +91 -0
  209. data/ext/ngtcp2/lib/ngtcp2_bbr.c +693 -0
  210. data/ext/ngtcp2/lib/ngtcp2_bbr.h +157 -0
  211. data/ext/ngtcp2/lib/ngtcp2_bbr2.c +1490 -0
  212. data/ext/ngtcp2/lib/ngtcp2_bbr2.h +149 -0
  213. data/ext/ngtcp2/lib/ngtcp2_buf.c +56 -0
  214. data/ext/ngtcp2/lib/ngtcp2_buf.h +108 -0
  215. data/ext/ngtcp2/lib/ngtcp2_cc.c +616 -0
  216. data/ext/ngtcp2/lib/ngtcp2_cc.h +422 -0
  217. data/ext/ngtcp2/lib/ngtcp2_cid.c +147 -0
  218. data/ext/ngtcp2/lib/ngtcp2_cid.h +175 -0
  219. data/ext/ngtcp2/lib/ngtcp2_conn.c +13731 -0
  220. data/ext/ngtcp2/lib/ngtcp2_conn.h +1119 -0
  221. data/ext/ngtcp2/lib/ngtcp2_conn_stat.h +131 -0
  222. data/ext/ngtcp2/lib/ngtcp2_conv.c +291 -0
  223. data/ext/ngtcp2/lib/ngtcp2_conv.h +208 -0
  224. data/ext/ngtcp2/lib/ngtcp2_crypto.c +895 -0
  225. data/ext/ngtcp2/lib/ngtcp2_crypto.h +148 -0
  226. data/ext/ngtcp2/lib/ngtcp2_err.c +154 -0
  227. data/ext/ngtcp2/lib/ngtcp2_err.h +34 -0
  228. data/ext/ngtcp2/lib/ngtcp2_gaptr.c +167 -0
  229. data/ext/ngtcp2/lib/ngtcp2_gaptr.h +98 -0
  230. data/ext/ngtcp2/lib/ngtcp2_idtr.c +79 -0
  231. data/ext/ngtcp2/lib/ngtcp2_idtr.h +89 -0
  232. data/ext/ngtcp2/lib/ngtcp2_ksl.c +819 -0
  233. data/ext/ngtcp2/lib/ngtcp2_ksl.h +345 -0
  234. data/ext/ngtcp2/lib/ngtcp2_log.c +822 -0
  235. data/ext/ngtcp2/lib/ngtcp2_log.h +123 -0
  236. data/ext/ngtcp2/lib/ngtcp2_macro.h +58 -0
  237. data/ext/ngtcp2/lib/ngtcp2_map.c +336 -0
  238. data/ext/ngtcp2/lib/ngtcp2_map.h +136 -0
  239. data/ext/ngtcp2/lib/ngtcp2_mem.c +113 -0
  240. data/ext/ngtcp2/lib/ngtcp2_mem.h +72 -0
  241. data/ext/ngtcp2/lib/ngtcp2_net.h +136 -0
  242. data/ext/ngtcp2/lib/ngtcp2_objalloc.c +40 -0
  243. data/ext/ngtcp2/lib/ngtcp2_objalloc.h +140 -0
  244. data/ext/ngtcp2/lib/ngtcp2_opl.c +46 -0
  245. data/ext/ngtcp2/lib/ngtcp2_opl.h +65 -0
  246. data/ext/ngtcp2/lib/ngtcp2_path.c +77 -0
  247. data/ext/ngtcp2/lib/ngtcp2_path.h +49 -0
  248. data/ext/ngtcp2/lib/ngtcp2_pkt.c +2527 -0
  249. data/ext/ngtcp2/lib/ngtcp2_pkt.h +1235 -0
  250. data/ext/ngtcp2/lib/ngtcp2_pmtud.c +160 -0
  251. data/ext/ngtcp2/lib/ngtcp2_pmtud.h +123 -0
  252. data/ext/ngtcp2/lib/ngtcp2_ppe.c +230 -0
  253. data/ext/ngtcp2/lib/ngtcp2_ppe.h +153 -0
  254. data/ext/ngtcp2/lib/ngtcp2_pq.c +164 -0
  255. data/ext/ngtcp2/lib/ngtcp2_pq.h +126 -0
  256. data/ext/ngtcp2/lib/ngtcp2_pv.c +172 -0
  257. data/ext/ngtcp2/lib/ngtcp2_pv.h +194 -0
  258. data/ext/ngtcp2/lib/ngtcp2_qlog.c +1219 -0
  259. data/ext/ngtcp2/lib/ngtcp2_qlog.h +161 -0
  260. data/ext/ngtcp2/lib/ngtcp2_range.c +61 -0
  261. data/ext/ngtcp2/lib/ngtcp2_range.h +80 -0
  262. data/ext/ngtcp2/lib/ngtcp2_rcvry.h +40 -0
  263. data/ext/ngtcp2/lib/ngtcp2_ringbuf.c +121 -0
  264. data/ext/ngtcp2/lib/ngtcp2_ringbuf.h +132 -0
  265. data/ext/ngtcp2/lib/ngtcp2_rob.c +319 -0
  266. data/ext/ngtcp2/lib/ngtcp2_rob.h +197 -0
  267. data/ext/ngtcp2/lib/ngtcp2_rst.c +138 -0
  268. data/ext/ngtcp2/lib/ngtcp2_rst.h +86 -0
  269. data/ext/ngtcp2/lib/ngtcp2_rtb.c +1676 -0
  270. data/ext/ngtcp2/lib/ngtcp2_rtb.h +468 -0
  271. data/ext/ngtcp2/lib/ngtcp2_str.c +233 -0
  272. data/ext/ngtcp2/lib/ngtcp2_str.h +94 -0
  273. data/ext/ngtcp2/lib/ngtcp2_strm.c +698 -0
  274. data/ext/ngtcp2/lib/ngtcp2_strm.h +310 -0
  275. data/ext/ngtcp2/lib/ngtcp2_unreachable.c +71 -0
  276. data/ext/ngtcp2/lib/ngtcp2_unreachable.h +46 -0
  277. data/ext/ngtcp2/lib/ngtcp2_vec.c +243 -0
  278. data/ext/ngtcp2/lib/ngtcp2_vec.h +120 -0
  279. data/ext/ngtcp2/lib/ngtcp2_version.c +39 -0
  280. data/ext/ngtcp2/lib/ngtcp2_window_filter.c +99 -0
  281. data/ext/ngtcp2/lib/ngtcp2_window_filter.h +65 -0
  282. data/ext/ngtcp2/m4/ax_check_compile_flag.m4 +74 -0
  283. data/ext/ngtcp2/m4/ax_cxx_compile_stdcxx.m4 +1009 -0
  284. data/ext/ngtcp2/tests/CMakeLists.txt +68 -0
  285. data/ext/ngtcp2/tests/Makefile.am +94 -0
  286. data/ext/ngtcp2/tests/main.c +358 -0
  287. data/ext/ngtcp2/tests/ngtcp2_acktr_test.c +367 -0
  288. data/ext/ngtcp2/tests/ngtcp2_acktr_test.h +37 -0
  289. data/ext/ngtcp2/tests/ngtcp2_conn_test.c +9821 -0
  290. data/ext/ngtcp2/tests/ngtcp2_conn_test.h +104 -0
  291. data/ext/ngtcp2/tests/ngtcp2_conv_test.c +430 -0
  292. data/ext/ngtcp2/tests/ngtcp2_conv_test.h +46 -0
  293. data/ext/ngtcp2/tests/ngtcp2_crypto_test.c +667 -0
  294. data/ext/ngtcp2/tests/ngtcp2_crypto_test.h +35 -0
  295. data/ext/ngtcp2/tests/ngtcp2_gaptr_test.c +127 -0
  296. data/ext/ngtcp2/tests/ngtcp2_gaptr_test.h +36 -0
  297. data/ext/ngtcp2/tests/ngtcp2_idtr_test.c +79 -0
  298. data/ext/ngtcp2/tests/ngtcp2_idtr_test.h +34 -0
  299. data/ext/ngtcp2/tests/ngtcp2_ksl_test.c +502 -0
  300. data/ext/ngtcp2/tests/ngtcp2_ksl_test.h +39 -0
  301. data/ext/ngtcp2/tests/ngtcp2_map_test.c +206 -0
  302. data/ext/ngtcp2/tests/ngtcp2_map_test.h +38 -0
  303. data/ext/ngtcp2/tests/ngtcp2_pkt_test.c +1645 -0
  304. data/ext/ngtcp2/tests/ngtcp2_pkt_test.h +68 -0
  305. data/ext/ngtcp2/tests/ngtcp2_pmtud_test.c +153 -0
  306. data/ext/ngtcp2/tests/ngtcp2_pmtud_test.h +34 -0
  307. data/ext/ngtcp2/tests/ngtcp2_pv_test.c +129 -0
  308. data/ext/ngtcp2/tests/ngtcp2_pv_test.h +35 -0
  309. data/ext/ngtcp2/tests/ngtcp2_range_test.c +105 -0
  310. data/ext/ngtcp2/tests/ngtcp2_range_test.h +36 -0
  311. data/ext/ngtcp2/tests/ngtcp2_ringbuf_test.c +91 -0
  312. data/ext/ngtcp2/tests/ngtcp2_ringbuf_test.h +35 -0
  313. data/ext/ngtcp2/tests/ngtcp2_rob_test.c +552 -0
  314. data/ext/ngtcp2/tests/ngtcp2_rob_test.h +37 -0
  315. data/ext/ngtcp2/tests/ngtcp2_rtb_test.c +470 -0
  316. data/ext/ngtcp2/tests/ngtcp2_rtb_test.h +38 -0
  317. data/ext/ngtcp2/tests/ngtcp2_str_test.c +96 -0
  318. data/ext/ngtcp2/tests/ngtcp2_str_test.h +36 -0
  319. data/ext/ngtcp2/tests/ngtcp2_strm_test.c +575 -0
  320. data/ext/ngtcp2/tests/ngtcp2_strm_test.h +36 -0
  321. data/ext/ngtcp2/tests/ngtcp2_test_helper.c +404 -0
  322. data/ext/ngtcp2/tests/ngtcp2_test_helper.h +191 -0
  323. data/ext/ngtcp2/tests/ngtcp2_vec_test.c +426 -0
  324. data/ext/ngtcp2/tests/ngtcp2_vec_test.h +36 -0
  325. data/ext/ngtcp2/third-party/CMakeLists.txt +34 -0
  326. data/ext/ngtcp2/third-party/Makefile.am +31 -0
  327. data/ext/ngtcp2/third-party/http-parser/AUTHORS +68 -0
  328. data/ext/ngtcp2/third-party/http-parser/LICENSE-MIT +23 -0
  329. data/ext/ngtcp2/third-party/http-parser/Makefile +157 -0
  330. data/ext/ngtcp2/third-party/http-parser/README.md +246 -0
  331. data/ext/ngtcp2/third-party/http-parser/bench.c +111 -0
  332. data/ext/ngtcp2/third-party/http-parser/contrib/parsertrace.c +160 -0
  333. data/ext/ngtcp2/third-party/http-parser/contrib/url_parser.c +47 -0
  334. data/ext/ngtcp2/third-party/http-parser/http_parser.c +2419 -0
  335. data/ext/ngtcp2/third-party/http-parser/http_parser.gyp +111 -0
  336. data/ext/ngtcp2/third-party/http-parser/http_parser.h +431 -0
  337. data/ext/ngtcp2/third-party/http-parser/test.c +4411 -0
  338. data/lib/protocol/quic/version.rb +10 -0
  339. data/lib/protocol/quic.rb +9 -0
  340. data/license.md +21 -0
  341. data.tar.gz.sig +1 -0
  342. metadata +424 -0
  343. metadata.gz.sig +1 -0
@@ -0,0 +1,237 @@
1
+ /*
2
+ * ngtcp2
3
+ *
4
+ * Copyright (c) 2018 ngtcp2 contributors
5
+ *
6
+ * Permission is hereby granted, free of charge, to any person obtaining
7
+ * a copy of this software and associated documentation files (the
8
+ * "Software"), to deal in the Software without restriction, including
9
+ * without limitation the rights to use, copy, modify, merge, publish,
10
+ * distribute, sublicense, and/or sell copies of the Software, and to
11
+ * permit persons to whom the Software is furnished to do so, subject to
12
+ * the following conditions:
13
+ *
14
+ * The above copyright notice and this permission notice shall be
15
+ * included in all copies or substantial portions of the Software.
16
+ *
17
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
21
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24
+ */
25
+ #include "util_test.h"
26
+
27
+ #include <limits>
28
+
29
+ #include <CUnit/CUnit.h>
30
+
31
+ #include "util.h"
32
+
33
+ namespace ngtcp2 {
34
+
35
+ void test_util_format_durationf() {
36
+ CU_ASSERT("0ns" == util::format_durationf(0));
37
+ CU_ASSERT("999ns" == util::format_durationf(999));
38
+ CU_ASSERT("1.00us" == util::format_durationf(1000));
39
+ CU_ASSERT("1.00us" == util::format_durationf(1004));
40
+ CU_ASSERT("1.00us" == util::format_durationf(1005));
41
+ CU_ASSERT("1.02us" == util::format_durationf(1015));
42
+ CU_ASSERT("2.00us" == util::format_durationf(1999));
43
+ CU_ASSERT("1.00ms" == util::format_durationf(999999));
44
+ CU_ASSERT("3.50ms" == util::format_durationf(3500111));
45
+ CU_ASSERT("9999.99s" == util::format_durationf(9999990000000llu));
46
+ }
47
+
48
+ void test_util_format_uint() {
49
+ CU_ASSERT("0" == util::format_uint(0));
50
+ CU_ASSERT("18446744073709551615" ==
51
+ util::format_uint(18446744073709551615ull));
52
+ }
53
+
54
+ void test_util_format_uint_iec() {
55
+ CU_ASSERT("0" == util::format_uint_iec(0));
56
+ CU_ASSERT("1023" == util::format_uint_iec((1 << 10) - 1));
57
+ CU_ASSERT("1K" == util::format_uint_iec(1 << 10));
58
+ CU_ASSERT("1M" == util::format_uint_iec(1 << 20));
59
+ CU_ASSERT("1G" == util::format_uint_iec(1 << 30));
60
+ CU_ASSERT("18446744073709551615" ==
61
+ util::format_uint_iec(std::numeric_limits<uint64_t>::max()));
62
+ CU_ASSERT("1025K" == util::format_uint_iec((1 << 20) + (1 << 10)));
63
+ }
64
+
65
+ void test_util_format_duration() {
66
+ CU_ASSERT("0ns" == util::format_duration(0));
67
+ CU_ASSERT("999ns" == util::format_duration(999));
68
+ CU_ASSERT("1us" == util::format_duration(1000));
69
+ CU_ASSERT("1ms" == util::format_duration(1000000));
70
+ CU_ASSERT("1s" == util::format_duration(1000000000));
71
+ CU_ASSERT("1m" == util::format_duration(60000000000ull));
72
+ CU_ASSERT("1h" == util::format_duration(3600000000000ull));
73
+ CU_ASSERT("18446744073709551615ns" ==
74
+ util::format_duration(std::numeric_limits<uint64_t>::max()));
75
+ CU_ASSERT("61s" == util::format_duration(61000000000ull));
76
+ }
77
+
78
+ void test_util_parse_uint() {
79
+ {
80
+ auto res = util::parse_uint("0");
81
+ CU_ASSERT(res.has_value());
82
+ CU_ASSERT(0 == *res);
83
+ }
84
+ {
85
+ auto res = util::parse_uint("1");
86
+ CU_ASSERT(res.has_value());
87
+ CU_ASSERT(1 == *res);
88
+ }
89
+ {
90
+ auto res = util::parse_uint("18446744073709551615");
91
+ CU_ASSERT(res.has_value());
92
+ CU_ASSERT(18446744073709551615ull == *res);
93
+ }
94
+ {
95
+ auto res = util::parse_uint("18446744073709551616");
96
+ CU_ASSERT(!res.has_value());
97
+ }
98
+ {
99
+ auto res = util::parse_uint("a");
100
+ CU_ASSERT(!res.has_value());
101
+ }
102
+ {
103
+ auto res = util::parse_uint("1a");
104
+ CU_ASSERT(!res.has_value());
105
+ }
106
+ }
107
+
108
+ void test_util_parse_uint_iec() {
109
+ {
110
+ auto res = util::parse_uint_iec("0");
111
+ CU_ASSERT(res.has_value());
112
+ CU_ASSERT(0 == *res);
113
+ }
114
+ {
115
+ auto res = util::parse_uint_iec("1023");
116
+ CU_ASSERT(res.has_value());
117
+ CU_ASSERT(1023 == *res);
118
+ }
119
+ {
120
+ auto res = util::parse_uint_iec("1K");
121
+ CU_ASSERT(res.has_value());
122
+ CU_ASSERT(1 << 10 == *res);
123
+ }
124
+ {
125
+ auto res = util::parse_uint_iec("1M");
126
+ CU_ASSERT(res.has_value());
127
+ CU_ASSERT(1 << 20 == *res);
128
+ }
129
+ {
130
+ auto res = util::parse_uint_iec("1G");
131
+ CU_ASSERT(res.has_value());
132
+ CU_ASSERT(1 << 30 == *res);
133
+ }
134
+ {
135
+ auto res = util::parse_uint_iec("11G");
136
+ CU_ASSERT(res.has_value());
137
+ CU_ASSERT((1ull << 30) * 11 == *res);
138
+ }
139
+ {
140
+ auto res = util::parse_uint_iec("18446744073709551616");
141
+ CU_ASSERT(!res.has_value());
142
+ }
143
+ {
144
+ auto res = util::parse_uint_iec("1x");
145
+ CU_ASSERT(!res.has_value());
146
+ }
147
+ {
148
+ auto res = util::parse_uint_iec("1Gx");
149
+ CU_ASSERT(!res.has_value());
150
+ }
151
+ }
152
+
153
+ void test_util_parse_duration() {
154
+ {
155
+ auto res = util::parse_duration("0");
156
+ CU_ASSERT(res.has_value());
157
+ CU_ASSERT(0 == *res);
158
+ }
159
+ {
160
+ auto res = util::parse_duration("1");
161
+ CU_ASSERT(res.has_value());
162
+ CU_ASSERT(NGTCP2_SECONDS == *res);
163
+ }
164
+ {
165
+ auto res = util::parse_duration("0ns");
166
+ CU_ASSERT(res.has_value());
167
+ CU_ASSERT(0 == *res);
168
+ }
169
+ {
170
+ auto res = util::parse_duration("1ns");
171
+ CU_ASSERT(res.has_value());
172
+ CU_ASSERT(1 == *res);
173
+ }
174
+ {
175
+ auto res = util::parse_duration("1us");
176
+ CU_ASSERT(res.has_value());
177
+ CU_ASSERT(NGTCP2_MICROSECONDS == *res);
178
+ }
179
+ {
180
+ auto res = util::parse_duration("1ms");
181
+ CU_ASSERT(res.has_value());
182
+ CU_ASSERT(NGTCP2_MILLISECONDS == *res);
183
+ }
184
+ {
185
+ auto res = util::parse_duration("1s");
186
+ CU_ASSERT(res.has_value());
187
+ CU_ASSERT(NGTCP2_SECONDS == *res);
188
+ }
189
+ {
190
+ auto res = util::parse_duration("1m");
191
+ CU_ASSERT(res.has_value());
192
+ CU_ASSERT(60 * NGTCP2_SECONDS == *res);
193
+ }
194
+ {
195
+ auto res = util::parse_duration("1h");
196
+ CU_ASSERT(res.has_value());
197
+ CU_ASSERT(3600 * NGTCP2_SECONDS == *res);
198
+ }
199
+ {
200
+ auto res = util::parse_duration("2h");
201
+ CU_ASSERT(res.has_value());
202
+ CU_ASSERT(2 * 3600 * NGTCP2_SECONDS == *res);
203
+ }
204
+ {
205
+ auto res = util::parse_duration("18446744073709551616");
206
+ CU_ASSERT(!res.has_value());
207
+ }
208
+ {
209
+ auto res = util::parse_duration("1x");
210
+ CU_ASSERT(!res.has_value());
211
+ }
212
+ {
213
+ auto res = util::parse_duration("1mx");
214
+ CU_ASSERT(!res.has_value());
215
+ }
216
+ {
217
+ auto res = util::parse_duration("1mxy");
218
+ CU_ASSERT(!res.has_value());
219
+ }
220
+ }
221
+
222
+ void test_util_normalize_path() {
223
+ CU_ASSERT("/" == util::normalize_path("/"));
224
+ CU_ASSERT("/" == util::normalize_path("//"));
225
+ CU_ASSERT("/foo" == util::normalize_path("/foo"));
226
+ CU_ASSERT("/foo/bar/" == util::normalize_path("/foo/bar/"));
227
+ CU_ASSERT("/foo/bar/" == util::normalize_path("/foo/abc/../bar/"));
228
+ CU_ASSERT("/foo/bar/" == util::normalize_path("/../foo/abc/../bar/"));
229
+ CU_ASSERT("/foo/bar/" ==
230
+ util::normalize_path("/./foo/././abc///.././bar/./"));
231
+ CU_ASSERT("/foo/" == util::normalize_path("/foo/."));
232
+ CU_ASSERT("/foo/bar" == util::normalize_path("/foo/./bar"));
233
+ CU_ASSERT("/bar" == util::normalize_path("/foo/./../bar"));
234
+ CU_ASSERT("/bar" == util::normalize_path("/../../bar"));
235
+ }
236
+
237
+ } // namespace ngtcp2
@@ -0,0 +1,45 @@
1
+ /*
2
+ * ngtcp2
3
+ *
4
+ * Copyright (c) 2018 ngtcp2 contributors
5
+ *
6
+ * Permission is hereby granted, free of charge, to any person obtaining
7
+ * a copy of this software and associated documentation files (the
8
+ * "Software"), to deal in the Software without restriction, including
9
+ * without limitation the rights to use, copy, modify, merge, publish,
10
+ * distribute, sublicense, and/or sell copies of the Software, and to
11
+ * permit persons to whom the Software is furnished to do so, subject to
12
+ * the following conditions:
13
+ *
14
+ * The above copyright notice and this permission notice shall be
15
+ * included in all copies or substantial portions of the Software.
16
+ *
17
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
21
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24
+ */
25
+ #ifndef UTIL_TEST_H
26
+ #define UTIL_TEST_H
27
+
28
+ #ifdef HAVE_CONFIG_H
29
+ # include "config.h"
30
+ #endif // HAVE_CONFIG_H
31
+
32
+ namespace ngtcp2 {
33
+
34
+ void test_util_format_durationf();
35
+ void test_util_format_uint();
36
+ void test_util_format_uint_iec();
37
+ void test_util_format_duration();
38
+ void test_util_parse_uint();
39
+ void test_util_parse_uint_iec();
40
+ void test_util_parse_duration();
41
+ void test_util_normalize_path();
42
+
43
+ } // namespace ngtcp2
44
+
45
+ #endif // UTIL_TEST_H
@@ -0,0 +1,130 @@
1
+ /*
2
+ * ngtcp2
3
+ *
4
+ * Copyright (c) 2020 ngtcp2 contributors
5
+ *
6
+ * Permission is hereby granted, free of charge, to any person obtaining
7
+ * a copy of this software and associated documentation files (the
8
+ * "Software"), to deal in the Software without restriction, including
9
+ * without limitation the rights to use, copy, modify, merge, publish,
10
+ * distribute, sublicense, and/or sell copies of the Software, and to
11
+ * permit persons to whom the Software is furnished to do so, subject to
12
+ * the following conditions:
13
+ *
14
+ * The above copyright notice and this permission notice shall be
15
+ * included in all copies or substantial portions of the Software.
16
+ *
17
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
21
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24
+ */
25
+ #include "util.h"
26
+
27
+ #include <cassert>
28
+ #include <iostream>
29
+ #include <array>
30
+
31
+ #include <ngtcp2/ngtcp2_crypto.h>
32
+
33
+ #include <wolfssl/options.h>
34
+ #include <wolfssl/ssl.h>
35
+ #include <wolfssl/openssl/pem.h>
36
+
37
+ #include "template.h"
38
+
39
+ namespace ngtcp2 {
40
+
41
+ namespace util {
42
+
43
+ int generate_secure_random(uint8_t *data, size_t datalen) {
44
+ if (wolfSSL_RAND_bytes(data, static_cast<int>(datalen)) != 1) {
45
+ return -1;
46
+ }
47
+
48
+ return 0;
49
+ }
50
+
51
+ int generate_secret(uint8_t *secret, size_t secretlen) {
52
+ std::array<uint8_t, 16> rand;
53
+ std::array<uint8_t, 32> md;
54
+
55
+ assert(md.size() == secretlen);
56
+
57
+ if (generate_secure_random(rand.data(), rand.size()) != 0) {
58
+ return -1;
59
+ }
60
+
61
+ auto ctx = wolfSSL_EVP_MD_CTX_new();
62
+ if (ctx == nullptr) {
63
+ return -1;
64
+ }
65
+
66
+ unsigned int mdlen = md.size();
67
+ if (!wolfSSL_EVP_DigestInit_ex(ctx, EVP_sha256(), nullptr) ||
68
+ !wolfSSL_EVP_DigestUpdate(ctx, rand.data(), rand.size()) ||
69
+ !wolfSSL_EVP_DigestFinal_ex(ctx, md.data(), &mdlen)) {
70
+ wolfSSL_EVP_MD_CTX_free(ctx);
71
+ return -1;
72
+ }
73
+
74
+ std::copy_n(std::begin(md), secretlen, secret);
75
+ wolfSSL_EVP_MD_CTX_free(ctx);
76
+ return 0;
77
+ }
78
+
79
+ std::optional<std::string> read_token(const std::string_view &filename) {
80
+ auto f = wolfSSL_BIO_new_file(filename.data(), "r");
81
+ if (f == nullptr) {
82
+ std::cerr << "Could not open token file " << filename << std::endl;
83
+ return {};
84
+ }
85
+
86
+ char *name, *header;
87
+ unsigned char *data;
88
+ long datalen;
89
+ std::string token;
90
+ if (wolfSSL_PEM_read_bio(f, &name, &header, &data, &datalen) != 1) {
91
+ std::cerr << "Could not read token file " << filename << std::endl;
92
+ wolfSSL_BIO_free(f);
93
+ return {};
94
+ }
95
+ wolfSSL_BIO_free(f);
96
+
97
+ wolfSSL_OPENSSL_free(name);
98
+ wolfSSL_OPENSSL_free(header);
99
+
100
+ auto res = std::string{data, data + datalen};
101
+
102
+ wolfSSL_OPENSSL_free(data);
103
+
104
+ return res;
105
+ }
106
+
107
+ int write_token(const std::string_view &filename, const uint8_t *token,
108
+ size_t tokenlen) {
109
+ auto f = wolfSSL_BIO_new_file(filename.data(), "w");
110
+ if (f == nullptr) {
111
+ std::cerr << "Could not write token in " << filename << std::endl;
112
+ return -1;
113
+ }
114
+
115
+ wolfSSL_PEM_write_bio(f, "QUIC TOKEN", "", token, tokenlen);
116
+ wolfSSL_BIO_free(f);
117
+
118
+ return 0;
119
+ }
120
+
121
+ const char *crypto_default_ciphers() {
122
+ return "TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_"
123
+ "SHA256:TLS_AES_128_CCM_SHA256";
124
+ }
125
+
126
+ const char *crypto_default_groups() { return "X25519:P-256:P-384:P-521"; }
127
+
128
+ } // namespace util
129
+
130
+ } // namespace ngtcp2
@@ -0,0 +1 @@
1
+ ��������0123456789abcdef1
@@ -0,0 +1 @@
1
+ ��������
@@ -0,0 +1 @@
1
+ 00123456789abcdef3
@@ -0,0 +1 @@
1
+ 10123456789abcdef3
@@ -0,0 +1 @@
1
+ ��������
@@ -0,0 +1 @@
1
+ ��� @��������������������������������
@@ -0,0 +1 @@
1
+ 0123456789abcdef2
@@ -0,0 +1 @@
1
+ 
@@ -0,0 +1 @@
1
+ 
Binary file
@@ -0,0 +1,25 @@
1
+ #ifdef __cplusplus
2
+ extern "C" {
3
+ #endif
4
+
5
+ #include "ngtcp2_conn.h"
6
+
7
+ #ifdef __cplusplus
8
+ }
9
+ #endif
10
+
11
+ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
12
+ for (; size;) {
13
+ ngtcp2_max_frame mfr{};
14
+
15
+ auto nread = ngtcp2_pkt_decode_frame(&mfr.fr, data, size);
16
+ if (nread < 0) {
17
+ return 0;
18
+ }
19
+
20
+ data += nread;
21
+ size -= nread;
22
+ }
23
+
24
+ return 0;
25
+ }
@@ -0,0 +1,77 @@
1
+ #include <byteswap.h>
2
+
3
+ #include <cstring>
4
+ #include <memory>
5
+
6
+ #ifdef __cplusplus
7
+ extern "C" {
8
+ #endif
9
+
10
+ #include "ngtcp2_ksl.h"
11
+
12
+ #ifdef __cplusplus
13
+ }
14
+ #endif
15
+
16
+ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
17
+ using KeyType = uint16_t;
18
+ using DataType = int64_t;
19
+ constexpr size_t keylen = sizeof(KeyType);
20
+
21
+ auto compar = [](auto *lhs, auto *rhs) -> int {
22
+ return *static_cast<const KeyType *>(lhs) <
23
+ *static_cast<const KeyType *>(rhs);
24
+ };
25
+
26
+ ngtcp2_ksl ksl;
27
+
28
+ ngtcp2_ksl_init(&ksl, compar, keylen, ngtcp2_mem_default());
29
+
30
+ for (; size >= keylen; ++data, --size) {
31
+ KeyType d;
32
+
33
+ memcpy(&d, data, keylen);
34
+
35
+ for (size_t i = 0; i < 2; ++i) {
36
+ auto add = (d & 0x8000) != 0;
37
+ auto key = static_cast<KeyType>(d & 0x7fff);
38
+
39
+ if (add) {
40
+ auto data = std::make_unique<DataType>(key);
41
+ auto rv = ngtcp2_ksl_insert(&ksl, nullptr, &key, data.get());
42
+ if (rv != 0) {
43
+ continue;
44
+ }
45
+
46
+ data.release();
47
+ ngtcp2_ksl_lower_bound(&ksl, &key);
48
+
49
+ continue;
50
+ }
51
+
52
+ auto it = ngtcp2_ksl_lower_bound(&ksl, &key);
53
+ if (ngtcp2_ksl_it_end(&it)) {
54
+ continue;
55
+ }
56
+
57
+ if (*static_cast<KeyType *>(ngtcp2_ksl_it_key(&it)) != key) {
58
+ continue;
59
+ }
60
+
61
+ delete static_cast<DataType *>(ngtcp2_ksl_it_get(&it));
62
+
63
+ ngtcp2_ksl_remove(&ksl, nullptr, &key);
64
+
65
+ d = bswap_16(d);
66
+ }
67
+ }
68
+
69
+ for (auto it = ngtcp2_ksl_begin(&ksl); !ngtcp2_ksl_it_end(&it);
70
+ ngtcp2_ksl_it_next(&it)) {
71
+ delete static_cast<DataType *>(ngtcp2_ksl_it_get(&it));
72
+ }
73
+
74
+ ngtcp2_ksl_free(&ksl);
75
+
76
+ return 0;
77
+ }
@@ -0,0 +1,39 @@
1
+ FROM martenseemann/quic-network-simulator-endpoint:latest
2
+
3
+ RUN apt-get update && \
4
+ apt-get install -y --no-install-recommends \
5
+ git gcc clang-12 make binutils autoconf automake autotools-dev libtool \
6
+ pkg-config libev-dev libjemalloc-dev \
7
+ libev4 libjemalloc2 ca-certificates mime-support \
8
+ llvm-12 libasan5 libubsan1 && \
9
+ git clone --depth 1 -b OpenSSL_1_1_1t+quic https://github.com/quictls/openssl && \
10
+ cd openssl && ./config --openssldir=/etc/ssl && make -j$(nproc) && make install_sw && cd .. && rm -rf openssl && \
11
+ git clone --depth 1 https://github.com/ngtcp2/nghttp3 && \
12
+ cd nghttp3 && autoreconf -i && \
13
+ ./configure --enable-lib-only \
14
+ CC=clang-12 \
15
+ CXX=clang++-12 \
16
+ LDFLAGS="-fsanitize=address,undefined -fno-sanitize-recover=undefined" \
17
+ CPPFLAGS="-fsanitize=address,undefined -fno-sanitize-recover=undefined -g3" && \
18
+ make -j$(nproc) && make install && cd .. && rm -rf nghttp3 && \
19
+ git clone --depth 1 https://github.com/ngtcp2/ngtcp2 && \
20
+ cd ngtcp2 && autoreconf -i && \
21
+ ./configure \
22
+ CC=clang-12 \
23
+ CXX=clang++-12 \
24
+ LDFLAGS="-fsanitize=address,undefined -fno-sanitize-recover=undefined" \
25
+ CPPFLAGS="-fsanitize=address,undefined -fno-sanitize-recover=undefined -g3" && \
26
+ make -j$(nproc) && make install && \
27
+ cp examples/server examples/client examples/h09server examples/h09client /usr/local/bin && \
28
+ cd .. && \
29
+ rm -rf ngtcp2 && \
30
+ rm -rf /usr/local/lib/libssl.so /usr/local/lib/libcrypto.so /usr/local/lib/libssl.a /usr/local/lib/libcrypto.a /usr/local/lib/pkgconfig/*ssl.pc /usr/local/include/openssl/* && \
31
+ apt-get -y purge git g++ clang-12 make binutils autoconf automake \
32
+ autotools-dev libtool pkg-config \
33
+ libev-dev libjemalloc-dev && \
34
+ apt-get -y autoremove --purge && \
35
+ rm -rf /var/log/*
36
+
37
+ COPY run_endpoint.sh .
38
+ RUN chmod +x run_endpoint.sh
39
+ ENTRYPOINT [ "./run_endpoint.sh" ]