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,104 @@
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
+ #ifndef NGTCP2_CRYPTO_BORINGSSL_H
26
+ #define NGTCP2_CRYPTO_BORINGSSL_H
27
+
28
+ #include <ngtcp2/ngtcp2.h>
29
+
30
+ #include <openssl/ssl.h>
31
+
32
+ #ifdef __cplusplus
33
+ extern "C" {
34
+ #endif
35
+
36
+ /**
37
+ * @function
38
+ *
39
+ * `ngtcp2_crypto_boringssl_from_ssl_encryption_level` translates
40
+ * |ssl_level| to :type:`ngtcp2_crypto_level`. This function is only
41
+ * available for BoringSSL backend.
42
+ */
43
+ NGTCP2_EXTERN ngtcp2_crypto_level
44
+ ngtcp2_crypto_boringssl_from_ssl_encryption_level(
45
+ enum ssl_encryption_level_t ssl_level);
46
+
47
+ /**
48
+ * @function
49
+ *
50
+ * `ngtcp2_crypto_boringssl_from_ngtcp2_crypto_level` translates
51
+ * |crypto_level| to ssl_encryption_level_t. This function is only
52
+ * available for BoringSSL backend.
53
+ */
54
+ NGTCP2_EXTERN enum ssl_encryption_level_t
55
+ ngtcp2_crypto_boringssl_from_ngtcp2_crypto_level(
56
+ ngtcp2_crypto_level crypto_level);
57
+
58
+ /**
59
+ * @function
60
+ *
61
+ * `ngtcp2_crypto_boringssl_configure_server_context` configures
62
+ * |ssl_ctx| for server side QUIC connection. It performs the
63
+ * following modifications:
64
+ *
65
+ * - Set minimum and maximum TLS version to TLSv1.3.
66
+ * - Set SSL_QUIC_METHOD by calling SSL_CTX_set_quic_method.
67
+ *
68
+ * Application must set a pointer to :type:`ngtcp2_crypto_conn_ref` to
69
+ * SSL object by calling SSL_set_app_data, and
70
+ * :type:`ngtcp2_crypto_conn_ref` object must have
71
+ * :member:`ngtcp2_crypto_conn_ref.get_conn` field assigned to get
72
+ * :type:`ngtcp2_conn`.
73
+ *
74
+ * It returns 0 if it succeeds, or -1.
75
+ */
76
+ NGTCP2_EXTERN int
77
+ ngtcp2_crypto_boringssl_configure_server_context(SSL_CTX *ssl_ctx);
78
+
79
+ /**
80
+ * @function
81
+ *
82
+ * `ngtcp2_crypto_boringssl_configure_client_context` configures
83
+ * |ssl_ctx| for client side QUIC connection. It performs the
84
+ * following modifications:
85
+ *
86
+ * - Set minimum and maximum TLS version to TLSv1.3.
87
+ * - Set SSL_QUIC_METHOD by calling SSL_CTX_set_quic_method.
88
+ *
89
+ * Application must set a pointer to :type:`ngtcp2_crypto_conn_ref` to
90
+ * SSL object by calling SSL_set_app_data, and
91
+ * :type:`ngtcp2_crypto_conn_ref` object must have
92
+ * :member:`ngtcp2_crypto_conn_ref.get_conn` field assigned to get
93
+ * :type:`ngtcp2_conn`.
94
+ *
95
+ * It returns 0 if it succeeds, or -1.
96
+ */
97
+ NGTCP2_EXTERN int
98
+ ngtcp2_crypto_boringssl_configure_client_context(SSL_CTX *ssl_ctx);
99
+
100
+ #ifdef __cplusplus
101
+ }
102
+ #endif
103
+
104
+ #endif /* NGTCP2_CRYPTO_BORINGSSL_H */
@@ -0,0 +1,107 @@
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
+ #ifndef NGTCP2_CRYPTO_GNUTLS_H
26
+ #define NGTCP2_CRYPTO_GNUTLS_H
27
+
28
+ #include <ngtcp2/ngtcp2.h>
29
+
30
+ #include <gnutls/gnutls.h>
31
+
32
+ #ifdef __cplusplus
33
+ extern "C" {
34
+ #endif
35
+
36
+ /**
37
+ * @function
38
+ *
39
+ * `ngtcp2_crypto_gnutls_from_gnutls_record_encryption_level`
40
+ * translates |gtls_level| to :type:`ngtcp2_crypto_level`. This
41
+ * function is only available for GnuTLS backend.
42
+ */
43
+ NGTCP2_EXTERN ngtcp2_crypto_level
44
+ ngtcp2_crypto_gnutls_from_gnutls_record_encryption_level(
45
+ gnutls_record_encryption_level_t gtls_level);
46
+
47
+ /**
48
+ * @function
49
+ *
50
+ * `ngtcp2_crypto_gnutls_from_ngtcp2_crypto_level` translates
51
+ * |crypto_level| to gnutls_record_encryption_level_t. This function
52
+ * is only available for GnuTLS backend.
53
+ */
54
+ NGTCP2_EXTERN gnutls_record_encryption_level_t
55
+ ngtcp2_crypto_gnutls_from_ngtcp2_level(ngtcp2_crypto_level crypto_level);
56
+
57
+ /**
58
+ * @function
59
+ *
60
+ * `ngtcp2_crypto_gnutls_configure_server_session` configures
61
+ * |session| for server side QUIC connection. It performs the
62
+ * following modifications:
63
+ *
64
+ * - Set gnutls_handshake_set_secret_function.
65
+ * - Set gnutls_handshake_set_read_function.
66
+ * - Set gnutls_alert_set_read_function.
67
+ * - Register a TLS extension handler for QUIC Transport Parameters.
68
+ *
69
+ * Application must set a pointer to :type:`ngtcp2_crypto_conn_ref` to
70
+ * gnutls_session_t object by calling gnutls_session_set_ptr, and
71
+ * :type:`ngtcp2_crypto_conn_ref` object must have
72
+ * :member:`ngtcp2_crypto_conn_ref.get_conn` field assigned to get
73
+ * :type:`ngtcp2_conn`.
74
+ *
75
+ * It returns 0 if it succeeds, or -1.
76
+ */
77
+ NGTCP2_EXTERN int
78
+ ngtcp2_crypto_gnutls_configure_server_session(gnutls_session_t session);
79
+
80
+ /**
81
+ * @function
82
+ *
83
+ * `ngtcp2_crypto_gnutls_configure_client_session` configures
84
+ * |session| for client side QUIC connection. It performs the
85
+ * following modifications:
86
+ *
87
+ * - Set gnutls_handshake_set_secret_function.
88
+ * - Set gnutls_handshake_set_read_function.
89
+ * - Set gnutls_alert_set_read_function.
90
+ * - Register a TLS extension handler for QUIC Transport Parameters.
91
+ *
92
+ * Application must set a pointer to :type:`ngtcp2_crypto_conn_ref` to
93
+ * gnutls_session_t object by calling gnutls_session_set_ptr, and
94
+ * :type:`ngtcp2_crypto_conn_ref` object must have
95
+ * :member:`ngtcp2_crypto_conn_ref.get_conn` field assigned to get
96
+ * :type:`ngtcp2_conn`.
97
+ *
98
+ * It returns 0 if it succeeds, or -1.
99
+ */
100
+ NGTCP2_EXTERN int
101
+ ngtcp2_crypto_gnutls_configure_client_session(gnutls_session_t session);
102
+
103
+ #ifdef __cplusplus
104
+ }
105
+ #endif
106
+
107
+ #endif /* NGTCP2_CRYPTO_GNUTLS_H */
@@ -0,0 +1,132 @@
1
+ /*
2
+ * ngtcp2
3
+ *
4
+ * Copyright (c) 2019 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 NGTCP2_CRYPTO_OPENSSL_H
26
+ #define NGTCP2_CRYPTO_OPENSSL_H
27
+
28
+ #include <ngtcp2/ngtcp2.h>
29
+
30
+ #include <openssl/ssl.h>
31
+
32
+ #ifdef __cplusplus
33
+ extern "C" {
34
+ #endif
35
+
36
+ /**
37
+ * @macrosection
38
+ *
39
+ * OpenSSL specific error codes
40
+ */
41
+
42
+ /**
43
+ * @macro
44
+ *
45
+ * :macro:`NGTCP2_CRYPTO_OPENSSL_ERR_TLS_WANT_X509_LOOKUP` is the
46
+ * error code which indicates that TLS handshake routine is
47
+ * interrupted by X509 certificate lookup. See
48
+ * :macro:`SSL_ERROR_WANT_X509_LOOKUP` error description from
49
+ * `SSL_do_handshake`.
50
+ */
51
+ #define NGTCP2_CRYPTO_OPENSSL_ERR_TLS_WANT_X509_LOOKUP -10001
52
+
53
+ /**
54
+ * @macro
55
+ *
56
+ * :macro:`NGTCP2_CRYPTO_OPENSSL_ERR_TLS_WANT_CLIENT_HELLO_CB` is the
57
+ * error code which indicates that TLS handshake routine is
58
+ * interrupted by client hello callback. See
59
+ * :macro:`SSL_ERROR_WANT_CLIENT_HELLO_CB` error description from
60
+ * `SSL_do_handshake`.
61
+ */
62
+ #define NGTCP2_CRYPTO_OPENSSL_ERR_TLS_WANT_CLIENT_HELLO_CB -10002
63
+
64
+ /**
65
+ * @function
66
+ *
67
+ * `ngtcp2_crypto_openssl_from_ossl_encryption_level` translates
68
+ * |ossl_level| to :type:`ngtcp2_crypto_level`. This function is only
69
+ * available for OpenSSL backend.
70
+ */
71
+ NGTCP2_EXTERN ngtcp2_crypto_level
72
+ ngtcp2_crypto_openssl_from_ossl_encryption_level(
73
+ OSSL_ENCRYPTION_LEVEL ossl_level);
74
+
75
+ /**
76
+ * @function
77
+ *
78
+ * `ngtcp2_crypto_openssl_from_ngtcp2_crypto_level` translates
79
+ * |crypto_level| to OSSL_ENCRYPTION_LEVEL. This function is only
80
+ * available for OpenSSL backend.
81
+ */
82
+ NGTCP2_EXTERN OSSL_ENCRYPTION_LEVEL
83
+ ngtcp2_crypto_openssl_from_ngtcp2_crypto_level(
84
+ ngtcp2_crypto_level crypto_level);
85
+
86
+ /**
87
+ * @function
88
+ *
89
+ * `ngtcp2_crypto_openssl_configure_server_context` configures
90
+ * |ssl_ctx| for server side QUIC connection. It performs the
91
+ * following modifications:
92
+ *
93
+ * - Set minimum and maximum TLS version to TLSv1.3.
94
+ * - Set SSL_QUIC_METHOD by calling SSL_CTX_set_quic_method.
95
+ *
96
+ * Application must set a pointer to :type:`ngtcp2_crypto_conn_ref` to
97
+ * SSL object by calling SSL_set_app_data, and
98
+ * :type:`ngtcp2_crypto_conn_ref` object must have
99
+ * :member:`ngtcp2_crypto_conn_ref.get_conn` field assigned to get
100
+ * :type:`ngtcp2_conn`.
101
+ *
102
+ * It returns 0 if it succeeds, or -1.
103
+ */
104
+ NGTCP2_EXTERN int
105
+ ngtcp2_crypto_openssl_configure_server_context(SSL_CTX *ssl_ctx);
106
+
107
+ /**
108
+ * @function
109
+ *
110
+ * `ngtcp2_crypto_openssl_configure_client_context` configures
111
+ * |ssl_ctx| for client side QUIC connection. It performs the
112
+ * following modifications:
113
+ *
114
+ * - Set minimum and maximum TLS version to TLSv1.3.
115
+ * - Set SSL_QUIC_METHOD by calling SSL_CTX_set_quic_method.
116
+ *
117
+ * Application must set a pointer to :type:`ngtcp2_crypto_conn_ref` to
118
+ * SSL object by calling SSL_set_app_data, and
119
+ * :type:`ngtcp2_crypto_conn_ref` object must have
120
+ * :member:`ngtcp2_crypto_conn_ref.get_conn` field assigned to get
121
+ * :type:`ngtcp2_conn`.
122
+ *
123
+ * It returns 0 if it succeeds, or -1.
124
+ */
125
+ NGTCP2_EXTERN int
126
+ ngtcp2_crypto_openssl_configure_client_context(SSL_CTX *ssl_ctx);
127
+
128
+ #ifdef __cplusplus
129
+ }
130
+ #endif
131
+
132
+ #endif /* NGTCP2_CRYPTO_OPENSSL_H */
@@ -0,0 +1,246 @@
1
+ /*
2
+ * ngtcp2
3
+ *
4
+ * Copyright (c) 2022 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 NGTCP2_CRYPTO_PICOTLS_H
26
+ #define NGTCP2_CRYPTO_PICOTLS_H
27
+
28
+ #include <ngtcp2/ngtcp2.h>
29
+
30
+ #include <picotls.h>
31
+
32
+ #ifdef __cplusplus
33
+ extern "C" {
34
+ #endif
35
+
36
+ /**
37
+ * @struct
38
+ *
39
+ * :type:`ngtcp2_crypto_picotls_ctx` contains per-connection state
40
+ * of Picotls objects and must be an object to bet set to
41
+ * `ngtcp2_conn_set_tls_native_handle`.
42
+ */
43
+ typedef struct ngtcp2_crypto_picotls_ctx {
44
+ /**
45
+ * :member:`ptls` is a pointer to ptls_t object.
46
+ */
47
+ ptls_t *ptls;
48
+ /**
49
+ * :member:`handshake_properties` is a set of configurations used
50
+ * during this particular TLS handshake.
51
+ */
52
+ ptls_handshake_properties_t handshake_properties;
53
+ } ngtcp2_crypto_picotls_ctx;
54
+
55
+ /**
56
+ * @function
57
+ *
58
+ * `ngtcp2_crypto_picotls_ctx_init` initializes the object pointed by
59
+ * |cptls|. |cptls| must not be NULL.
60
+ */
61
+ NGTCP2_EXTERN void
62
+ ngtcp2_crypto_picotls_ctx_init(ngtcp2_crypto_picotls_ctx *cptls);
63
+
64
+ /**
65
+ * @function
66
+ *
67
+ * `ngtcp2_crypto_picotls_from_epoch` translates |epoch| to
68
+ * :type:`ngtcp2_crypto_level`. This function is only available for
69
+ * Picotls backend.
70
+ */
71
+ NGTCP2_EXTERN ngtcp2_crypto_level
72
+ ngtcp2_crypto_picotls_from_epoch(size_t epoch);
73
+
74
+ /**
75
+ * @function
76
+ *
77
+ * `ngtcp2_crypto_picotls_from_ngtcp2_crypto_level` translates
78
+ * |crypto_level| to epoch. This function is only available for
79
+ * Picotls backend.
80
+ */
81
+ NGTCP2_EXTERN size_t ngtcp2_crypto_picotls_from_ngtcp2_crypto_level(
82
+ ngtcp2_crypto_level crypto_level);
83
+
84
+ /**
85
+ * @function
86
+ *
87
+ * `ngtcp2_crypto_picotls_configure_server_context` configures |ctx|
88
+ * for server side QUIC connection. It performs the following
89
+ * modifications:
90
+ *
91
+ * - Set max_early_data_size to UINT32_MAX.
92
+ * - Set omit_end_of_early_data to 1.
93
+ * - Set update_traffic_key callback.
94
+ *
95
+ * Application must set a pointer to :type:`ngtcp2_crypto_conn_ref` to
96
+ * ptls_t object by assigning the pointer using ptls_get_data_ptr, and
97
+ * :type:`ngtcp2_crypto_conn_ref` object must have
98
+ * :member:`ngtcp2_crypto_conn_ref.get_conn` field assigned to get
99
+ * :type:`ngtcp2_conn`.
100
+ *
101
+ * It returns 0 if it succeeds, or -1.
102
+ */
103
+ NGTCP2_EXTERN int
104
+ ngtcp2_crypto_picotls_configure_server_context(ptls_context_t *ctx);
105
+
106
+ /**
107
+ * @function
108
+ *
109
+ * `ngtcp2_crypto_picotls_configure_client_context` configures |ctx|
110
+ * for client side QUIC connection. It performs the following
111
+ * modifications:
112
+ *
113
+ * - Set omit_end_of_early_data to 1.
114
+ * - Set update_traffic_key callback.
115
+ *
116
+ * Application must set a pointer to :type:`ngtcp2_crypto_conn_ref` to
117
+ * ptls_t object by assigning the pointer using ptls_get_data_ptr, and
118
+ * :type:`ngtcp2_crypto_conn_ref` object must have
119
+ * :member:`ngtcp2_crypto_conn_ref.get_conn` field assigned to get
120
+ * :type:`ngtcp2_conn`.
121
+ *
122
+ * It returns 0 if it succeeds, or -1.
123
+ */
124
+ NGTCP2_EXTERN int
125
+ ngtcp2_crypto_picotls_configure_client_context(ptls_context_t *ctx);
126
+
127
+ /**
128
+ * @function
129
+ *
130
+ * `ngtcp2_crypto_picotls_configure_server_session` configures |cptls|
131
+ * for server side QUIC connection. It performs the following
132
+ * modifications:
133
+ *
134
+ * - Set handshake_properties.collect_extension to
135
+ * `ngtcp2_crypto_picotls_collect_extension`.
136
+ * - Set handshake_properties.collected_extensions to
137
+ * `ngtcp2_crypto_picotls_collected_extensions`.
138
+ *
139
+ * The callbacks set by this function only handle QUIC Transport
140
+ * Parameters TLS extension. If an application needs to handle the
141
+ * other TLS extensions, set its own callbacks and call
142
+ * `ngtcp2_crypto_picotls_collect_extension` and
143
+ * `ngtcp2_crypto_picotls_collected_extensions` form them.
144
+ *
145
+ * During the QUIC handshake, the first element of
146
+ * handshake_properties.additional_extensions is assigned to send QUIC
147
+ * Transport Parameter TLS extension. Therefore, an application must
148
+ * allocate at least 2 elements for
149
+ * handshake_properties.additional_extensions.
150
+ *
151
+ * Call `ngtcp2_crypto_picotls_deconfigure_session` to free up the
152
+ * resources.
153
+ *
154
+ * Application must set a pointer to :type:`ngtcp2_crypto_conn_ref` to
155
+ * ptls_t object by assigning the pointer using ptls_get_data_ptr, and
156
+ * :type:`ngtcp2_crypto_conn_ref` object must have
157
+ * :member:`ngtcp2_crypto_conn_ref.get_conn` field assigned to get
158
+ * :type:`ngtcp2_conn`.
159
+ *
160
+ * It returns 0 if it succeeds, or -1.
161
+ */
162
+ NGTCP2_EXTERN int ngtcp2_crypto_picotls_configure_server_session(
163
+ ngtcp2_crypto_picotls_ctx *cptls);
164
+
165
+ /**
166
+ * @function
167
+ *
168
+ * `ngtcp2_crypto_picotls_configure_client_session` configures |cptls|
169
+ * for client side QUIC connection. It performs the following
170
+ * modifications:
171
+ *
172
+ * - Set handshake_properties.max_early_data_size to a pointer to
173
+ * uint32_t, which is allocated dynamically by this function.
174
+ * - Set handshake_properties.collect_extension to
175
+ * `ngtcp2_crypto_picotls_collect_extension`.
176
+ * - Set handshake_properties.collected_extensions to
177
+ * `ngtcp2_crypto_picotls_collected_extensions`.
178
+ * - Set handshake_properties.additional_extensions[0].data to the
179
+ * dynamically allocated buffer which contains QUIC Transport
180
+ * Parameters TLS extension. An application must allocate at least
181
+ * 2 elements for handshake_properties.additional_extensions.
182
+ *
183
+ * The callbacks set by this function only handle QUIC Transport
184
+ * Parameters TLS extension. If an application needs to handle the
185
+ * other TLS extensions, set its own callbacks and call
186
+ * `ngtcp2_crypto_picotls_collect_extension` and
187
+ * `ngtcp2_crypto_picotls_collected_extensions` form them.
188
+ *
189
+ * Call `ngtcp2_crypto_picotls_deconfigure_session` to free up the
190
+ * resources.
191
+ *
192
+ * Application must set a pointer to :type:`ngtcp2_crypto_conn_ref` to
193
+ * ptls_t object by assigning the pointer using ptls_get_data_ptr, and
194
+ * :type:`ngtcp2_crypto_conn_ref` object must have
195
+ * :member:`ngtcp2_crypto_conn_ref.get_conn` field assigned to get
196
+ * :type:`ngtcp2_conn`.
197
+ *
198
+ * It returns 0 if it succeeds, or -1.
199
+ */
200
+ NGTCP2_EXTERN int
201
+ ngtcp2_crypto_picotls_configure_client_session(ngtcp2_crypto_picotls_ctx *cptls,
202
+ ngtcp2_conn *conn);
203
+
204
+ /**
205
+ * @function
206
+ *
207
+ * `ngtcp2_crypto_picotls_deconfigure_session` frees the resources
208
+ * allocated for |cptls| during QUIC connection. It frees the
209
+ * following data using :manpage:`free(3)`.
210
+ *
211
+ * - handshake_properties.max_early_data_size
212
+ * - handshake_properties.additional_extensions[0].data.base
213
+ *
214
+ * If |cptls| is NULL, this function does nothing.
215
+ */
216
+ NGTCP2_EXTERN void
217
+ ngtcp2_crypto_picotls_deconfigure_session(ngtcp2_crypto_picotls_ctx *cptls);
218
+
219
+ /**
220
+ * @function
221
+ *
222
+ * `ngtcp2_crypto_picotls_collect_extension` is a callback function
223
+ * which only returns nonzero if |type| ==
224
+ * :macro:`NGTCP2_TLSEXT_QUIC_TRANSPORT_PARAMETERS_V1`.
225
+ */
226
+ NGTCP2_EXTERN int ngtcp2_crypto_picotls_collect_extension(
227
+ ptls_t *ptls, struct st_ptls_handshake_properties_t *properties,
228
+ uint16_t type);
229
+
230
+ /**
231
+ * @function
232
+ *
233
+ * `ngtcp2_crypto_picotls_collected_extensions` is a callback function
234
+ * which only handles the extension of type
235
+ * :macro:`NGTCP2_TLSEXT_QUIC_TRANSPORT_PARAMETERS_V1`. The other
236
+ * extensions are ignored.
237
+ */
238
+ NGTCP2_EXTERN int ngtcp2_crypto_picotls_collected_extensions(
239
+ ptls_t *ptls, struct st_ptls_handshake_properties_t *properties,
240
+ ptls_raw_extension_t *extensions);
241
+
242
+ #ifdef __cplusplus
243
+ }
244
+ #endif
245
+
246
+ #endif /* NGTCP2_CRYPTO_PICOTLS_H */
@@ -0,0 +1,106 @@
1
+ /*
2
+ * ngtcp2
3
+ *
4
+ * Copyright (c) 2022 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 NGTCP2_CRYPTO_WOLFSSL_H
26
+ #define NGTCP2_CRYPTO_WOLFSSL_H
27
+
28
+ #include <ngtcp2/ngtcp2.h>
29
+
30
+ #include <wolfssl/options.h>
31
+ #include <wolfssl/ssl.h>
32
+ #include <wolfssl/quic.h>
33
+
34
+ #ifdef __cplusplus
35
+ extern "C" {
36
+ #endif
37
+
38
+ /**
39
+ * @function
40
+ *
41
+ * `ngtcp2_crypto_wolfssl_from_wolfssl_encryption_level` translates
42
+ * |wolfssl_level| to :type:`ngtcp2_crypto_level`. This function is only
43
+ * available for wolfSSL backend.
44
+ */
45
+ NGTCP2_EXTERN ngtcp2_crypto_level
46
+ ngtcp2_crypto_wolfssl_from_wolfssl_encryption_level(
47
+ WOLFSSL_ENCRYPTION_LEVEL wolfssl_level);
48
+
49
+ /**
50
+ * @function
51
+ *
52
+ * `ngtcp2_crypto_wolfssl_from_ngtcp2_crypto_level` translates
53
+ * |crypto_level| to WOLFSSL_ENCRYPTION_LEVEL. This function is only
54
+ * available for wolfSSL backend.
55
+ */
56
+ NGTCP2_EXTERN WOLFSSL_ENCRYPTION_LEVEL
57
+ ngtcp2_crypto_wolfssl_from_ngtcp2_crypto_level(
58
+ ngtcp2_crypto_level crypto_level);
59
+
60
+ /**
61
+ * @function
62
+ *
63
+ * `ngtcp2_crypto_wolfssl_configure_server_context` configures
64
+ * |ssl_ctx| for server side QUIC connection. It performs the
65
+ * following modifications:
66
+ *
67
+ * - Set minimum and maximum TLS version to TLSv1.3.
68
+ * - Set WOLFSSL_QUIC_METHOD by calling wolfSSL_CTX_set_quic_method.
69
+ *
70
+ * Application must set a pointer to :type:`ngtcp2_crypto_conn_ref` to
71
+ * WOLFSSL object by calling wolfSSL_set_app_data, and
72
+ * :type:`ngtcp2_crypto_conn_ref` object must have
73
+ * :member:`ngtcp2_crypto_conn_ref.get_conn` field assigned to get
74
+ * :type:`ngtcp2_conn`.
75
+ *
76
+ * It returns 0 if it succeeds, or -1.
77
+ */
78
+ NGTCP2_EXTERN int
79
+ ngtcp2_crypto_wolfssl_configure_server_context(WOLFSSL_CTX *ssl_ctx);
80
+
81
+ /**
82
+ * @function
83
+ *
84
+ * `ngtcp2_crypto_wolfssl_configure_client_context` configures
85
+ * |ssl_ctx| for client side QUIC connection. It performs the
86
+ * following modifications:
87
+ *
88
+ * - Set minimum and maximum TLS version to TLSv1.3.
89
+ * - Set WOLFSSL_QUIC_METHOD by calling wolfSSL_CTX_set_quic_method.
90
+ *
91
+ * Application must set a pointer to :type:`ngtcp2_crypto_conn_ref` to
92
+ * SSL object by calling wolfSSL_set_app_data, and
93
+ * :type:`ngtcp2_crypto_conn_ref` object must have
94
+ * :member:`ngtcp2_crypto_conn_ref.get_conn` field assigned to get
95
+ * :type:`ngtcp2_conn`.
96
+ *
97
+ * It returns 0 if it succeeds, or -1.
98
+ */
99
+ NGTCP2_EXTERN int
100
+ ngtcp2_crypto_wolfssl_configure_client_context(WOLFSSL_CTX *ssl_ctx);
101
+
102
+ #ifdef __cplusplus
103
+ }
104
+ #endif
105
+
106
+ #endif /* NGTCP2_CRYPTO_WOLFSSL_H */