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.
- checksums.yaml +7 -0
- checksums.yaml.gz.sig +0 -0
- data/ext/ngtcp2/AUTHORS +44 -0
- data/ext/ngtcp2/CMakeLists.txt +431 -0
- data/ext/ngtcp2/CMakeOptions.txt +17 -0
- data/ext/ngtcp2/COPYING +22 -0
- data/ext/ngtcp2/ChangeLog +0 -0
- data/ext/ngtcp2/Makefile.am +60 -0
- data/ext/ngtcp2/NEWS +0 -0
- data/ext/ngtcp2/README +1 -0
- data/ext/ngtcp2/README.rst +258 -0
- data/ext/ngtcp2/ci/build_boringssl.sh +10 -0
- data/ext/ngtcp2/ci/build_nghttp3.sh +9 -0
- data/ext/ngtcp2/ci/build_openssl1.sh +8 -0
- data/ext/ngtcp2/ci/build_openssl1_cross.sh +9 -0
- data/ext/ngtcp2/ci/build_openssl3.sh +8 -0
- data/ext/ngtcp2/ci/build_picotls.sh +26 -0
- data/ext/ngtcp2/ci/build_wolfssl.sh +9 -0
- data/ext/ngtcp2/ci/gen-certificate.sh +8 -0
- data/ext/ngtcp2/cmake/ExtractValidFlags.cmake +31 -0
- data/ext/ngtcp2/cmake/FindCUnit.cmake +40 -0
- data/ext/ngtcp2/cmake/FindJemalloc.cmake +40 -0
- data/ext/ngtcp2/cmake/FindLibev.cmake +38 -0
- data/ext/ngtcp2/cmake/FindLibnghttp3.cmake +41 -0
- data/ext/ngtcp2/cmake/Findwolfssl.cmake +41 -0
- data/ext/ngtcp2/cmake/Version.cmake +11 -0
- data/ext/ngtcp2/cmakeconfig.h.in +36 -0
- data/ext/ngtcp2/configure.ac +755 -0
- data/ext/ngtcp2/crypto/CMakeLists.txt +56 -0
- data/ext/ngtcp2/crypto/Makefile.am +49 -0
- data/ext/ngtcp2/crypto/boringssl/CMakeLists.txt +64 -0
- data/ext/ngtcp2/crypto/boringssl/Makefile.am +39 -0
- data/ext/ngtcp2/crypto/boringssl/boringssl.c +630 -0
- data/ext/ngtcp2/crypto/boringssl/libngtcp2_crypto_boringssl.pc.in +33 -0
- data/ext/ngtcp2/crypto/gnutls/CMakeLists.txt +86 -0
- data/ext/ngtcp2/crypto/gnutls/Makefile.am +43 -0
- data/ext/ngtcp2/crypto/gnutls/gnutls.c +644 -0
- data/ext/ngtcp2/crypto/gnutls/libngtcp2_crypto_gnutls.pc.in +33 -0
- data/ext/ngtcp2/crypto/includes/CMakeLists.txt +56 -0
- data/ext/ngtcp2/crypto/includes/Makefile.am +45 -0
- data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto.h +893 -0
- data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_boringssl.h +104 -0
- data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_gnutls.h +107 -0
- data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_openssl.h +132 -0
- data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_picotls.h +246 -0
- data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_wolfssl.h +106 -0
- data/ext/ngtcp2/crypto/openssl/CMakeLists.txt +86 -0
- data/ext/ngtcp2/crypto/openssl/Makefile.am +43 -0
- data/ext/ngtcp2/crypto/openssl/libngtcp2_crypto_openssl.pc.in +33 -0
- data/ext/ngtcp2/crypto/openssl/openssl.c +807 -0
- data/ext/ngtcp2/crypto/picotls/CMakeLists.txt +65 -0
- data/ext/ngtcp2/crypto/picotls/Makefile.am +39 -0
- data/ext/ngtcp2/crypto/picotls/libngtcp2_crypto_picotls.pc.in +33 -0
- data/ext/ngtcp2/crypto/picotls/picotls.c +707 -0
- data/ext/ngtcp2/crypto/shared.c +1431 -0
- data/ext/ngtcp2/crypto/shared.h +350 -0
- data/ext/ngtcp2/crypto/wolfssl/CMakeLists.txt +84 -0
- data/ext/ngtcp2/crypto/wolfssl/Makefile.am +43 -0
- data/ext/ngtcp2/crypto/wolfssl/libngtcp2_crypto_wolfssl.pc.in +33 -0
- data/ext/ngtcp2/crypto/wolfssl/wolfssl.c +534 -0
- data/ext/ngtcp2/doc/Makefile.am +65 -0
- data/ext/ngtcp2/doc/make.bat +35 -0
- data/ext/ngtcp2/doc/mkapiref.py +356 -0
- data/ext/ngtcp2/doc/source/conf.py.in +94 -0
- data/ext/ngtcp2/doc/source/index.rst +22 -0
- data/ext/ngtcp2/doc/source/programmers-guide.rst +476 -0
- data/ext/ngtcp2/docker/Dockerfile +39 -0
- data/ext/ngtcp2/examples/CMakeLists.txt +361 -0
- data/ext/ngtcp2/examples/Makefile.am +228 -0
- data/ext/ngtcp2/examples/client.cc +3049 -0
- data/ext/ngtcp2/examples/client.h +192 -0
- data/ext/ngtcp2/examples/client_base.cc +202 -0
- data/ext/ngtcp2/examples/client_base.h +213 -0
- data/ext/ngtcp2/examples/debug.cc +298 -0
- data/ext/ngtcp2/examples/debug.h +124 -0
- data/ext/ngtcp2/examples/examplestest.cc +84 -0
- data/ext/ngtcp2/examples/gtlssimpleclient.c +720 -0
- data/ext/ngtcp2/examples/h09client.cc +2601 -0
- data/ext/ngtcp2/examples/h09client.h +196 -0
- data/ext/ngtcp2/examples/h09server.cc +3024 -0
- data/ext/ngtcp2/examples/h09server.h +237 -0
- data/ext/ngtcp2/examples/http.cc +138 -0
- data/ext/ngtcp2/examples/http.h +44 -0
- data/ext/ngtcp2/examples/network.h +80 -0
- data/ext/ngtcp2/examples/server.cc +3731 -0
- data/ext/ngtcp2/examples/server.h +256 -0
- data/ext/ngtcp2/examples/server_base.cc +58 -0
- data/ext/ngtcp2/examples/server_base.h +195 -0
- data/ext/ngtcp2/examples/shared.cc +385 -0
- data/ext/ngtcp2/examples/shared.h +96 -0
- data/ext/ngtcp2/examples/simpleclient.c +683 -0
- data/ext/ngtcp2/examples/template.h +71 -0
- data/ext/ngtcp2/examples/tests/README.rst +60 -0
- data/ext/ngtcp2/examples/tests/__init__.py +0 -0
- data/ext/ngtcp2/examples/tests/config.ini.in +32 -0
- data/ext/ngtcp2/examples/tests/conftest.py +28 -0
- data/ext/ngtcp2/examples/tests/ngtcp2test/__init__.py +6 -0
- data/ext/ngtcp2/examples/tests/ngtcp2test/certs.py +476 -0
- data/ext/ngtcp2/examples/tests/ngtcp2test/client.py +187 -0
- data/ext/ngtcp2/examples/tests/ngtcp2test/env.py +191 -0
- data/ext/ngtcp2/examples/tests/ngtcp2test/log.py +101 -0
- data/ext/ngtcp2/examples/tests/ngtcp2test/server.py +137 -0
- data/ext/ngtcp2/examples/tests/ngtcp2test/tls.py +983 -0
- data/ext/ngtcp2/examples/tests/test_01_handshake.py +30 -0
- data/ext/ngtcp2/examples/tests/test_02_resume.py +46 -0
- data/ext/ngtcp2/examples/tests/test_03_earlydata.py +56 -0
- data/ext/ngtcp2/examples/tests/test_04_clientcert.py +57 -0
- data/ext/ngtcp2/examples/tests/test_05_ciphers.py +46 -0
- data/ext/ngtcp2/examples/tls_client_context.h +52 -0
- data/ext/ngtcp2/examples/tls_client_context_boringssl.cc +126 -0
- data/ext/ngtcp2/examples/tls_client_context_boringssl.h +49 -0
- data/ext/ngtcp2/examples/tls_client_context_gnutls.cc +74 -0
- data/ext/ngtcp2/examples/tls_client_context_gnutls.h +50 -0
- data/ext/ngtcp2/examples/tls_client_context_openssl.cc +137 -0
- data/ext/ngtcp2/examples/tls_client_context_openssl.h +49 -0
- data/ext/ngtcp2/examples/tls_client_context_picotls.cc +158 -0
- data/ext/ngtcp2/examples/tls_client_context_picotls.h +53 -0
- data/ext/ngtcp2/examples/tls_client_context_wolfssl.cc +177 -0
- data/ext/ngtcp2/examples/tls_client_context_wolfssl.h +51 -0
- data/ext/ngtcp2/examples/tls_client_session.h +52 -0
- data/ext/ngtcp2/examples/tls_client_session_boringssl.cc +110 -0
- data/ext/ngtcp2/examples/tls_client_session_boringssl.h +52 -0
- data/ext/ngtcp2/examples/tls_client_session_gnutls.cc +190 -0
- data/ext/ngtcp2/examples/tls_client_session_gnutls.h +52 -0
- data/ext/ngtcp2/examples/tls_client_session_openssl.cc +113 -0
- data/ext/ngtcp2/examples/tls_client_session_openssl.h +52 -0
- data/ext/ngtcp2/examples/tls_client_session_picotls.cc +147 -0
- data/ext/ngtcp2/examples/tls_client_session_picotls.h +52 -0
- data/ext/ngtcp2/examples/tls_client_session_wolfssl.cc +160 -0
- data/ext/ngtcp2/examples/tls_client_session_wolfssl.h +52 -0
- data/ext/ngtcp2/examples/tls_server_context.h +52 -0
- data/ext/ngtcp2/examples/tls_server_context_boringssl.cc +257 -0
- data/ext/ngtcp2/examples/tls_server_context_boringssl.h +54 -0
- data/ext/ngtcp2/examples/tls_server_context_gnutls.cc +99 -0
- data/ext/ngtcp2/examples/tls_server_context_gnutls.h +59 -0
- data/ext/ngtcp2/examples/tls_server_context_openssl.cc +338 -0
- data/ext/ngtcp2/examples/tls_server_context_openssl.h +54 -0
- data/ext/ngtcp2/examples/tls_server_context_picotls.cc +321 -0
- data/ext/ngtcp2/examples/tls_server_context_picotls.h +58 -0
- data/ext/ngtcp2/examples/tls_server_context_wolfssl.cc +284 -0
- data/ext/ngtcp2/examples/tls_server_context_wolfssl.h +55 -0
- data/ext/ngtcp2/examples/tls_server_session.h +52 -0
- data/ext/ngtcp2/examples/tls_server_session_boringssl.cc +84 -0
- data/ext/ngtcp2/examples/tls_server_session_boringssl.h +47 -0
- data/ext/ngtcp2/examples/tls_server_session_gnutls.cc +155 -0
- data/ext/ngtcp2/examples/tls_server_session_gnutls.h +46 -0
- data/ext/ngtcp2/examples/tls_server_session_openssl.cc +54 -0
- data/ext/ngtcp2/examples/tls_server_session_openssl.h +47 -0
- data/ext/ngtcp2/examples/tls_server_session_picotls.cc +70 -0
- data/ext/ngtcp2/examples/tls_server_session_picotls.h +47 -0
- data/ext/ngtcp2/examples/tls_server_session_wolfssl.cc +55 -0
- data/ext/ngtcp2/examples/tls_server_session_wolfssl.h +47 -0
- data/ext/ngtcp2/examples/tls_session_base_gnutls.cc +87 -0
- data/ext/ngtcp2/examples/tls_session_base_gnutls.h +51 -0
- data/ext/ngtcp2/examples/tls_session_base_openssl.cc +54 -0
- data/ext/ngtcp2/examples/tls_session_base_openssl.h +52 -0
- data/ext/ngtcp2/examples/tls_session_base_picotls.cc +56 -0
- data/ext/ngtcp2/examples/tls_session_base_picotls.h +54 -0
- data/ext/ngtcp2/examples/tls_session_base_wolfssl.cc +54 -0
- data/ext/ngtcp2/examples/tls_session_base_wolfssl.h +54 -0
- data/ext/ngtcp2/examples/tls_shared_picotls.cc +59 -0
- data/ext/ngtcp2/examples/tls_shared_picotls.h +36 -0
- data/ext/ngtcp2/examples/util.cc +646 -0
- data/ext/ngtcp2/examples/util.h +361 -0
- data/ext/ngtcp2/examples/util_gnutls.cc +136 -0
- data/ext/ngtcp2/examples/util_openssl.cc +131 -0
- data/ext/ngtcp2/examples/util_test.cc +237 -0
- data/ext/ngtcp2/examples/util_test.h +45 -0
- data/ext/ngtcp2/examples/util_wolfssl.cc +130 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/ack +0 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/ack_ecn +0 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/connection_close +0 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/crypto +1 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/data_blocked +1 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/datagram +1 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/datagram_len +1 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/max_data +1 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/max_stream_data +0 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/max_streams +0 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/new_connection_id +1 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/new_token +1 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/path_challenge +1 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/path_response +1 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/reset_stream +0 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/retire_connection_id +1 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/stop_sending +0 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/stream +0 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/stream_data_blocked +0 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/stream_len +0 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/streams_blocked +0 -0
- data/ext/ngtcp2/fuzz/corpus/ksl/random +0 -0
- data/ext/ngtcp2/fuzz/decode_frame.cc +25 -0
- data/ext/ngtcp2/fuzz/ksl.cc +77 -0
- data/ext/ngtcp2/interop/Dockerfile +39 -0
- data/ext/ngtcp2/interop/run_endpoint.sh +93 -0
- data/ext/ngtcp2/lib/CMakeLists.txt +110 -0
- data/ext/ngtcp2/lib/Makefile.am +122 -0
- data/ext/ngtcp2/lib/includes/CMakeLists.txt +4 -0
- data/ext/ngtcp2/lib/includes/Makefile.am +25 -0
- data/ext/ngtcp2/lib/includes/ngtcp2/ngtcp2.h +5843 -0
- data/ext/ngtcp2/lib/includes/ngtcp2/version.h.in +51 -0
- data/ext/ngtcp2/lib/libngtcp2.pc.in +33 -0
- data/ext/ngtcp2/lib/ngtcp2_acktr.c +335 -0
- data/ext/ngtcp2/lib/ngtcp2_acktr.h +221 -0
- data/ext/ngtcp2/lib/ngtcp2_addr.c +117 -0
- data/ext/ngtcp2/lib/ngtcp2_addr.h +69 -0
- data/ext/ngtcp2/lib/ngtcp2_balloc.c +90 -0
- data/ext/ngtcp2/lib/ngtcp2_balloc.h +91 -0
- data/ext/ngtcp2/lib/ngtcp2_bbr.c +693 -0
- data/ext/ngtcp2/lib/ngtcp2_bbr.h +157 -0
- data/ext/ngtcp2/lib/ngtcp2_bbr2.c +1490 -0
- data/ext/ngtcp2/lib/ngtcp2_bbr2.h +149 -0
- data/ext/ngtcp2/lib/ngtcp2_buf.c +56 -0
- data/ext/ngtcp2/lib/ngtcp2_buf.h +108 -0
- data/ext/ngtcp2/lib/ngtcp2_cc.c +616 -0
- data/ext/ngtcp2/lib/ngtcp2_cc.h +422 -0
- data/ext/ngtcp2/lib/ngtcp2_cid.c +147 -0
- data/ext/ngtcp2/lib/ngtcp2_cid.h +175 -0
- data/ext/ngtcp2/lib/ngtcp2_conn.c +13731 -0
- data/ext/ngtcp2/lib/ngtcp2_conn.h +1119 -0
- data/ext/ngtcp2/lib/ngtcp2_conn_stat.h +131 -0
- data/ext/ngtcp2/lib/ngtcp2_conv.c +291 -0
- data/ext/ngtcp2/lib/ngtcp2_conv.h +208 -0
- data/ext/ngtcp2/lib/ngtcp2_crypto.c +895 -0
- data/ext/ngtcp2/lib/ngtcp2_crypto.h +148 -0
- data/ext/ngtcp2/lib/ngtcp2_err.c +154 -0
- data/ext/ngtcp2/lib/ngtcp2_err.h +34 -0
- data/ext/ngtcp2/lib/ngtcp2_gaptr.c +167 -0
- data/ext/ngtcp2/lib/ngtcp2_gaptr.h +98 -0
- data/ext/ngtcp2/lib/ngtcp2_idtr.c +79 -0
- data/ext/ngtcp2/lib/ngtcp2_idtr.h +89 -0
- data/ext/ngtcp2/lib/ngtcp2_ksl.c +819 -0
- data/ext/ngtcp2/lib/ngtcp2_ksl.h +345 -0
- data/ext/ngtcp2/lib/ngtcp2_log.c +822 -0
- data/ext/ngtcp2/lib/ngtcp2_log.h +123 -0
- data/ext/ngtcp2/lib/ngtcp2_macro.h +58 -0
- data/ext/ngtcp2/lib/ngtcp2_map.c +336 -0
- data/ext/ngtcp2/lib/ngtcp2_map.h +136 -0
- data/ext/ngtcp2/lib/ngtcp2_mem.c +113 -0
- data/ext/ngtcp2/lib/ngtcp2_mem.h +72 -0
- data/ext/ngtcp2/lib/ngtcp2_net.h +136 -0
- data/ext/ngtcp2/lib/ngtcp2_objalloc.c +40 -0
- data/ext/ngtcp2/lib/ngtcp2_objalloc.h +140 -0
- data/ext/ngtcp2/lib/ngtcp2_opl.c +46 -0
- data/ext/ngtcp2/lib/ngtcp2_opl.h +65 -0
- data/ext/ngtcp2/lib/ngtcp2_path.c +77 -0
- data/ext/ngtcp2/lib/ngtcp2_path.h +49 -0
- data/ext/ngtcp2/lib/ngtcp2_pkt.c +2527 -0
- data/ext/ngtcp2/lib/ngtcp2_pkt.h +1235 -0
- data/ext/ngtcp2/lib/ngtcp2_pmtud.c +160 -0
- data/ext/ngtcp2/lib/ngtcp2_pmtud.h +123 -0
- data/ext/ngtcp2/lib/ngtcp2_ppe.c +230 -0
- data/ext/ngtcp2/lib/ngtcp2_ppe.h +153 -0
- data/ext/ngtcp2/lib/ngtcp2_pq.c +164 -0
- data/ext/ngtcp2/lib/ngtcp2_pq.h +126 -0
- data/ext/ngtcp2/lib/ngtcp2_pv.c +172 -0
- data/ext/ngtcp2/lib/ngtcp2_pv.h +194 -0
- data/ext/ngtcp2/lib/ngtcp2_qlog.c +1219 -0
- data/ext/ngtcp2/lib/ngtcp2_qlog.h +161 -0
- data/ext/ngtcp2/lib/ngtcp2_range.c +61 -0
- data/ext/ngtcp2/lib/ngtcp2_range.h +80 -0
- data/ext/ngtcp2/lib/ngtcp2_rcvry.h +40 -0
- data/ext/ngtcp2/lib/ngtcp2_ringbuf.c +121 -0
- data/ext/ngtcp2/lib/ngtcp2_ringbuf.h +132 -0
- data/ext/ngtcp2/lib/ngtcp2_rob.c +319 -0
- data/ext/ngtcp2/lib/ngtcp2_rob.h +197 -0
- data/ext/ngtcp2/lib/ngtcp2_rst.c +138 -0
- data/ext/ngtcp2/lib/ngtcp2_rst.h +86 -0
- data/ext/ngtcp2/lib/ngtcp2_rtb.c +1676 -0
- data/ext/ngtcp2/lib/ngtcp2_rtb.h +468 -0
- data/ext/ngtcp2/lib/ngtcp2_str.c +233 -0
- data/ext/ngtcp2/lib/ngtcp2_str.h +94 -0
- data/ext/ngtcp2/lib/ngtcp2_strm.c +698 -0
- data/ext/ngtcp2/lib/ngtcp2_strm.h +310 -0
- data/ext/ngtcp2/lib/ngtcp2_unreachable.c +71 -0
- data/ext/ngtcp2/lib/ngtcp2_unreachable.h +46 -0
- data/ext/ngtcp2/lib/ngtcp2_vec.c +243 -0
- data/ext/ngtcp2/lib/ngtcp2_vec.h +120 -0
- data/ext/ngtcp2/lib/ngtcp2_version.c +39 -0
- data/ext/ngtcp2/lib/ngtcp2_window_filter.c +99 -0
- data/ext/ngtcp2/lib/ngtcp2_window_filter.h +65 -0
- data/ext/ngtcp2/m4/ax_check_compile_flag.m4 +74 -0
- data/ext/ngtcp2/m4/ax_cxx_compile_stdcxx.m4 +1009 -0
- data/ext/ngtcp2/tests/CMakeLists.txt +68 -0
- data/ext/ngtcp2/tests/Makefile.am +94 -0
- data/ext/ngtcp2/tests/main.c +358 -0
- data/ext/ngtcp2/tests/ngtcp2_acktr_test.c +367 -0
- data/ext/ngtcp2/tests/ngtcp2_acktr_test.h +37 -0
- data/ext/ngtcp2/tests/ngtcp2_conn_test.c +9821 -0
- data/ext/ngtcp2/tests/ngtcp2_conn_test.h +104 -0
- data/ext/ngtcp2/tests/ngtcp2_conv_test.c +430 -0
- data/ext/ngtcp2/tests/ngtcp2_conv_test.h +46 -0
- data/ext/ngtcp2/tests/ngtcp2_crypto_test.c +667 -0
- data/ext/ngtcp2/tests/ngtcp2_crypto_test.h +35 -0
- data/ext/ngtcp2/tests/ngtcp2_gaptr_test.c +127 -0
- data/ext/ngtcp2/tests/ngtcp2_gaptr_test.h +36 -0
- data/ext/ngtcp2/tests/ngtcp2_idtr_test.c +79 -0
- data/ext/ngtcp2/tests/ngtcp2_idtr_test.h +34 -0
- data/ext/ngtcp2/tests/ngtcp2_ksl_test.c +502 -0
- data/ext/ngtcp2/tests/ngtcp2_ksl_test.h +39 -0
- data/ext/ngtcp2/tests/ngtcp2_map_test.c +206 -0
- data/ext/ngtcp2/tests/ngtcp2_map_test.h +38 -0
- data/ext/ngtcp2/tests/ngtcp2_pkt_test.c +1645 -0
- data/ext/ngtcp2/tests/ngtcp2_pkt_test.h +68 -0
- data/ext/ngtcp2/tests/ngtcp2_pmtud_test.c +153 -0
- data/ext/ngtcp2/tests/ngtcp2_pmtud_test.h +34 -0
- data/ext/ngtcp2/tests/ngtcp2_pv_test.c +129 -0
- data/ext/ngtcp2/tests/ngtcp2_pv_test.h +35 -0
- data/ext/ngtcp2/tests/ngtcp2_range_test.c +105 -0
- data/ext/ngtcp2/tests/ngtcp2_range_test.h +36 -0
- data/ext/ngtcp2/tests/ngtcp2_ringbuf_test.c +91 -0
- data/ext/ngtcp2/tests/ngtcp2_ringbuf_test.h +35 -0
- data/ext/ngtcp2/tests/ngtcp2_rob_test.c +552 -0
- data/ext/ngtcp2/tests/ngtcp2_rob_test.h +37 -0
- data/ext/ngtcp2/tests/ngtcp2_rtb_test.c +470 -0
- data/ext/ngtcp2/tests/ngtcp2_rtb_test.h +38 -0
- data/ext/ngtcp2/tests/ngtcp2_str_test.c +96 -0
- data/ext/ngtcp2/tests/ngtcp2_str_test.h +36 -0
- data/ext/ngtcp2/tests/ngtcp2_strm_test.c +575 -0
- data/ext/ngtcp2/tests/ngtcp2_strm_test.h +36 -0
- data/ext/ngtcp2/tests/ngtcp2_test_helper.c +404 -0
- data/ext/ngtcp2/tests/ngtcp2_test_helper.h +191 -0
- data/ext/ngtcp2/tests/ngtcp2_vec_test.c +426 -0
- data/ext/ngtcp2/tests/ngtcp2_vec_test.h +36 -0
- data/ext/ngtcp2/third-party/CMakeLists.txt +34 -0
- data/ext/ngtcp2/third-party/Makefile.am +31 -0
- data/ext/ngtcp2/third-party/http-parser/AUTHORS +68 -0
- data/ext/ngtcp2/third-party/http-parser/LICENSE-MIT +23 -0
- data/ext/ngtcp2/third-party/http-parser/Makefile +157 -0
- data/ext/ngtcp2/third-party/http-parser/README.md +246 -0
- data/ext/ngtcp2/third-party/http-parser/bench.c +111 -0
- data/ext/ngtcp2/third-party/http-parser/contrib/parsertrace.c +160 -0
- data/ext/ngtcp2/third-party/http-parser/contrib/url_parser.c +47 -0
- data/ext/ngtcp2/third-party/http-parser/http_parser.c +2419 -0
- data/ext/ngtcp2/third-party/http-parser/http_parser.gyp +111 -0
- data/ext/ngtcp2/third-party/http-parser/http_parser.h +431 -0
- data/ext/ngtcp2/third-party/http-parser/test.c +4411 -0
- data/lib/protocol/quic/version.rb +10 -0
- data/lib/protocol/quic.rb +9 -0
- data/license.md +21 -0
- data.tar.gz.sig +1 -0
- metadata +424 -0
- 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 */
|