{"id":21035191,"url":"https://github.com/mpiraux/rapido","last_synced_at":"2025-09-25T09:54:54.648Z","repository":{"id":77392726,"uuid":"412026346","full_name":"mpiraux/rapido","owner":"mpiraux","description":"rapido is a minimal implementation of TCPLS atop picotls","archived":false,"fork":false,"pushed_at":"2024-07-25T11:37:51.000Z","size":5980,"stargazers_count":9,"open_issues_count":5,"forks_count":1,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-05-15T13:44:59.966Z","etag":null,"topics":["tcp","tls","transport"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mpiraux.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-09-30T10:50:15.000Z","updated_at":"2024-11-28T08:31:34.000Z","dependencies_parsed_at":"2025-05-15T13:54:31.235Z","dependency_job_id":null,"html_url":"https://github.com/mpiraux/rapido","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mpiraux/rapido","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mpiraux%2Frapido","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mpiraux%2Frapido/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mpiraux%2Frapido/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mpiraux%2Frapido/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mpiraux","download_url":"https://codeload.github.com/mpiraux/rapido/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mpiraux%2Frapido/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":276896552,"owners_count":25724047,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-25T02:00:09.612Z","response_time":80,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["tcp","tls","transport"],"created_at":"2024-11-19T13:09:55.299Z","updated_at":"2025-09-25T09:54:54.643Z","avatar_url":"https://github.com/mpiraux.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"rapido\n===\n\nrapido is a minimal implementation of TCPLS atop picotls. It follows the [TCPLS IETF draft](https://datatracker.ietf.org/doc/draft-piraux-tcpls/) specification.\n\nBuilding rapido\n---\n\nIf you have cloned rapido from git then ensure that you have initialised the submodules:\n```\n% git submodule update --init\n```\n\nBuild using cmake:\n```\n% cmake .\n% make rapido\n% make check\n```\n\nUsing the rapido command\n---\n\nRun the test server (at 127.0.0.1:8443):\n```\n% ./rapido -c /path/to/certificate.pem -k /path/to/private-key.pem  127.0.0.1 8443\n```\n\nConnect to the test server:\n```\n% ./rapido 127.0.0.1 8443\n```\n\nOther options are documented in the command:\n```\n% ./rapido -h\n```\n\nPublic test server\n---\n\nWe host a public server running an instance of the test server at 130.104.229.29 and 2001:6a8:308f:9:0:82ff:fe68:e51d on port 443. Be aware that it can only accept a single TCPLS session at a time. This test server is here for researchers to test their own implementation of TCPLS. After establishing a session, the server will continuously send data on its first stream until the client terminates the session.\n\nTo connect over IPv4 to the server:\n```\n./rapido -s 10 -n localhost 130.104.229.29 443\n```\n\nDocumentation \u0026 API\n---\n\nThe documentation and API can be found at https://mpiraux.github.io/rapido/. The `rapido.h` header file defines the functions and data structures available to the application leveraging TCPLS. \n\npicotls\n===\n\nPicotls is a [TLS 1.3 (RFC 8446)](https://tools.ietf.org/html/rfc8446) protocol stack written in C, with the following features:\n* support for three crypto engines\n  * \"OpenSSL\" backend using libcrypto for crypto and X.509 operations\n  * \"minicrypto\" backend using [cifra](https://github.com/ctz/cifra) for most crypto and [micro-ecc](https://github.com/kmackay/micro-ecc) for secp256r1\n  * [\"fusion\" AES-GCM engine, optimized for QUIC and other protocols that use short AEAD blocks](https://github.com/h2o/picotls/pull/310)\n* support for PSK, PSK-DHE resumption using 0-RTT\n* API for dealing directly with TLS handshake messages (essential for QUIC)\n* supported extensions:\n  * RFC 7250 (raw public keys)\n  * RFC 8879 (certificate compression)\n  * Encrypted SNI (wg-draft-02)\n\nPrimary goal of the project is to create a fast, tiny, low-latency TLS 1.3 implementation that can be used with the HTTP/2 protocol stack and the upcoming QUIC stack of the [H2O HTTP/2 server](https://h2o.examp1e.net).\n\nThe TLS protocol implementation of picotls is licensed under the MIT license.\n\nLicense and the cryptographic algorithms supported by the crypto bindings are as follows:\n\n| Binding | License | Key Exchange | Certificate | AEAD cipher |\n|:-----:|:-----:|:-----:|:-----:|:-----:|\n| minicrypto | [CC0](https://github.com/ctz/cifra/) / [2-clause BSD](https://github.com/kmackay/micro-ecc) | secp256r1, x25519 | ECDSA (secp256r1)\u003csup\u003e1\u003c/sup\u003e | AES-128-GCM, chacha20-poly1305 |\n| OpenSSL | OpenSSL | secp256r1, secp384r1, secp521r1, x25519 | RSA, ECDSA (secp256r1, secp384r1, secp521r1), ed25519 | AES-128-GCM, AES-256-GCM, chacha20-poly1305 |\n\nNote 1: Minicrypto binding is capable of signing a handshake using the certificate's key, but cannot verify a signature sent by the peer.\n\nBuilding picotls\n---\n\nIf you have cloned picotls from git then ensure that you have initialised the submodules:\n```\n% git submodule init\n% git submodule update\n```\n\nBuild using cmake:\n```\n% cmake .\n% make\n% make check\n```\n\nA dedicated documentation for using picotls with Visual Studio can be found in [WindowsPort.md](WindowsPort.md).\n\nDeveloper documentation\n---\n\nDeveloper documentation should be available on [the wiki](https://github.com/h2o/picotls/wiki).\n\nUsing the cli command\n---\n\nRun the test server (at 127.0.0.1:8443):\n```\n% ./cli -c /path/to/certificate.pem -k /path/to/private-key.pem  127.0.0.1 8443\n```\n\nConnect to the test server:\n```\n% ./cli 127.0.0.1 8443\n```\n\nUsing resumption:\n```\n% ./cli -s session-file 127.0.0.1 8443\n```\nThe session-file is read-write.\nThe cli server implements a single-entry session cache.\nThe cli server sends NewSessionTicket when it first sends application data after receiving ClientFinished.\n\nUsing early-data:\n```\n% ./cli -s session-file -e 127.0.0.1 8443\n```\nWhen `-e` option is used, client first waits for user input, and then sends CLIENT_HELLO along with the early-data.\n\nLicense\n---\n\nThe software is provided under the MIT license.\nNote that additional licences apply if you use the minicrypto binding (see above).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmpiraux%2Frapido","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmpiraux%2Frapido","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmpiraux%2Frapido/lists"}