8000 Static site for rustls.dev, including home for performance reports by ctz · Pull Request #2201 · rustls/rustls · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Static site for rustls.dev, including home for performance reports #2201

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Nov 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 14 additions & 4 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,11 @@ jobs:
- name: Install rust toolchain
uses: dtolnay/rust-toolchain@nightly

- name: Install zola
uses: taiki-e/install-action@v2
with:
tool: zola@0.19.1

- name: Generate version information
run: |
echo >tag.html \
Expand All @@ -40,6 +45,10 @@ jobs:
env:
RUSTDOCFLAGS: -Dwarnings --cfg=docsrs --html-after-content tag.html

- name: Generate other pages
run: |
cd website && zola build --output-dir ../target/website/

- name: Restore lychee cache
uses: actions/cache@v4
with:
Expand All @@ -51,6 +60,7 @@ jobs:
uses: lycheeverse/lychee-action@v2
with:
args: >
--accept 200..=204,403,429,500
--cache
--max-cache-age 1d
'**/*.md'
Expand All @@ -61,13 +71,13 @@ jobs:
run: |
# lockfile causes deployment step to go wrong, due to permissions
rm -f target/doc/.lock
# make resulting url be more sensible
mv target/doc/rustls target/doc/prerelease
# move the result into website root
mv target/doc/rustls target/website/docs

- name: Package and upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: ./target/doc/
path: ./target/website/

deploy:
name: Deploy
Expand All @@ -76,7 +86,7 @@ jobs:
needs: generate
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}prerelease/
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Deploy to GitHub Pages
id: deployment
Expand Down
5 changes: 5 additions & 0 deletions website/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Source for the website at `https://rustls.dev/`

This uses [Zola](https://www.getzola.org/).

Run `zola serve` in this directory to run a local copy.
19 changes: 19 additions & 0 deletions website/config.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# The URL the site will be built for
base_url = "https://rustls.dev/"

# Whether to automatically compile all Sass files in the sass directory
compile_sass = false

# Whether to build a search index to be used later on by a JavaScript library
build_search_index = false

[markdown]
# Whether to do syntax highlighting
# Theme can be customised by setting the `highlight_theme` variable to a theme supported by Zola
highlight_code = true

[slugify]
paths_keep_dates = true

[extra]
# Put all your custom variables here
109 changes: 109 additions & 0 deletions website/content/perf/2024-10-18-report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
+++
title = "Benchmarking rustls 0.23.15 vs OpenSSL 3.3.2 vs BoringSSL"
date = 2024-10-18
+++

### System configuration

We ran the benchmarks on a bare-metal server with the following characteristics:

- OS: Debian 12 (Bookworm).
- C/C++ toolchains: GCC 12.2.0 and Clang 14.0.6.
- CPU: [Xeon E-2386G](https://www.intel.com/content/www/us/en/products/sku/214806/intel-xeon-e2386g-processor-12m-cache-3-50-ghz/specifications.html) (supporting AVX-512).
- Memory: 32GB.
- Extra configuration: hyper-threading disabled, dynamic frequency scaling disabled, cpu scaling
governor set to performance for all cores.

### Versions
The benchmarking tool used for both OpenSSL and BoringSSL was [openssl-b 8000 ench d5de57d9](https://github.com/ctz/openssl-bench/tree/d5de57d92d483169cabf8ec22c351fe3819ba656).

This was built from source with its makefile.

#### BoringSSL
The tested version of BoringSSL is [76968bb3d5](https://github.com/google/boringssl/tree/76968bb3d5), which was the most recent point on master
when we started these measurements.

BoringSSL was built from source with `CC=clang CXX=clang++ cmake -DCMAKE_BUILD_TYPE=Release`.
clang is used here to [avoid potential performance deficits to GCC](https://issues.chromium.org/issues/42290529).

#### OpenSSL
The tested version of OpenSSL is [3.3.2](https://github.com/openssl/openssl/tree/openssl-3.3.2), which was the latest release at the time of writing.

OpenSSL was built from source with `./Configure ; make -j12`.

#### Rustls
The tested version of rustls was 0.23.15, which was the latest release at the time of writing.
This was used with aws-lc-rs 1.10.0 / aws-lc-sys 0.22.0.

Additionally the following two commits were included, which affect the benchmark tool but do not affect the core crate:

- https://github.com/rustls/rustls/commit/13144a0aa391bbec55aa92ee020e88c2bb8c3ea8
- https://github.com/rustls/rustls/commit/b553880a5f5caf58bbd2c43e4031e8c55d6da486

### Measurements

BoringSSL was tested with this command:

```shell
~/bench/openssl-bench
$ BENCH_MULTIPLIER=16 setarch -R make measure BORINGSSL=1
```

OpenSSL was tested with this command:

```shell
~/bench/openssl-bench
$ BENCH_MULTIPLIER=16 setarch -R make measure
```

rustls was tested with this command:

```shell
~/bench/rustls
$ BENCH_MULTIPLIER=16 setarch -R make -f admin/bench-measure.mk measure
```

## Results

Transfer measurements are in megabytes per second.
Handshake units are handshakes per second.

| | BoringSSL 76968bb3 | OpenSSL 3.3.2 | rustls 0.23.15 |
| -- | -- | -- | -- |
transfer, 1.2, aes-128-gcm, sending | 5043.04 | 6560.79 | 8154.27
transfer, 1.2, aes-128-gcm, receiving | 4429.26 | 7192.17 | 7436.88
transfer, 1.3, aes-256-gcm, sending | 4332.5 | 5982.18 | 7094.13
transfer, 1.3, aes-256-gcm, receiving | 3872.34 | 6521.2 | 7278.15
| | BoringSSL 76968bb3 | OpenSSL 3.3.2 | rustls 0.23.15 |
full handshakes, 1.2, rsa, client | 5470.01 | 3201.92 | 8227.61
full handshakes, 1.2, rsa, server | 1449.65 | 2159.59 | 2829.04
full handshakes, 1.2, ecdsa, client | 3451.51 | 2071.74 | 4369.39
full handshakes, 1.2, ecdsa, server | 9115.04 | 5196.8 | 12921.68
full handshakes, 1.3, rsa, client | 4813.91 | 2788.76 | 6803.93
full handshakes, 1.3, rsa, server | 1386.06 | 1913.38 | 2544.31
full handshakes, 1.3, ecdsa, client | 3177.49 | 1859.77 | 3937.7
full handshakes, 1.3, ecdsa, server | 7107.86 | 3938.47 | 8325.74
| | BoringSSL 76968bb3 | OpenSSL 3.3.2 | rustls 0.23.15 |
resumed handshakes, 1.2, client | 45547.6 | 20703.8 | 64722.55
resumed handshakes, 1.2, server | 43985.3 | 22268.1 | 71149.91
resumed handshakes, 1.3, client | 9818.4 | 5328.6 | 10912.87
resumed handshakes, 1.3, server | 8600.76 | 4866.2 | 9500.11

![graph of transfer speeds](/2024-10-18-transfer.png)

![graph of full handshakes](/2024-10-18-full-handshake.png)

![graph of resumed handshakes](/2024-10-18-resumed-handshake.png)


### Observations on results

AVX-512 support shows up twice in these results:

- rustls/aws-lc and OpenSSL's performance advantage in throughput tests is due to use of AVX-512F/VAES.
- rustls/aws-lc and OpenSSL's performance advantage in server-side full handshake tests is due to use of AVX-512IFMA-accelerated RSA.

This support was contributed to the respective projects by Intel.

TLS1.3 resumption is slower than TLS1.2 resumption because it includes a fresh key exchange.

9 changes: 9 additions & 0 deletions website/content/perf/_index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
+++
title = "Performance reports"
sort_by = "date"
template = "reports.html"
page_template = "report-page.html"
+++

See also: [documentation of other kinds of benchmarking we do](https://github.com/rustls/rustls/blob/main/BENCHMARKING.md).

Binary file added website/static/2024-10-18-full-handshake.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added website/static/2024-10-18-resumed-handshake.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added website/static/2024-10-18-transfer.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added website/static/GeneralSans-Variable.woff2
Binary file not shown.
Binary file added website/static/rustls-ferris.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
120 changes: 120 additions & 0 deletions website/static/style.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
@font-face {
font-family: 'GeneralSans-Variable';
src: url('GeneralSans-Variable.woff2') format('woff2');
font-weight: 200 700;
font-display: swap;
font-style: normal;
}
body {
background-image: linear-gradient(to right top, #2f4858, #2e4e6c, #3a517f, #54528e, #744e95);
font-family: 'GeneralSans-Variable', sans-serif;
margin: 0px;
}
* {
color: white;
}
img#baby-logo {
filter: drop-shadow(0px 0.1em 0.2em rgba(0, 0, 0, 0.2));
max-height: 10%;
max-width: 20%;
display: block;
margin-left: 1em;
margin-top: 1em;
}
img#logo {
filter: drop-shadow(0px 0px 10px rgba(255, 255, 255, 0.1));
max-height: 50%;
max-width: 80%;
display: block;
margin-left: auto;
margin-right: auto;
margin-top: 1em;
}
div.subtitle {
margin: 1em;
text-align: center;
font-size: 2.5em;
font-weight: 500;
}
section {
margin-top: 2em;
margin-bottom: 2em;
padding: 2em;
filter: drop-shadow(0px 0px 1em rgba(0, 0, 0, 0.25));
background-image: linear-gradient(to right, #a93400, #be4301, #d35201, #e76101, #fc7100);
}
div.box {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
div.link {
flex: 1 1 5em;
white-space: nowrap;
font-weight: bold;
padding: 10px 20px 10px 20px;
margin-left: 2em;
margin-right: 2em;
margin-bottom: 2em;
}
div.headline {
flex: 1 1 10em;
padding: 20px;
margin: 1em;
background: rgba(0, 0, 0, 0.05);
border-radius: 1em;
}
div.content {
flex: 1 1 100%;
padding: 20px;
margin: 1em;
background: rgba(0, 0, 0, 0.1);
border-radius: 1em;
}
p > code {
padding: 0.2em;
background: rgba(0, 0, 0, 0.1);
border-radius: 1em;
}
pre {
padding: 1em;
background: rgba(0, 0, 0, 0.1);
border-radius: 1em;
}
h1 {
filter: drop-shadow(0px 0.1em 0.1em rgba(0, 0, 0, 0.25));
}
div.headline > h1 {
margin-top: 0em;
text-align: center;
}
span.icon {
font-size: 1.5em;
vertical-align: middle;
}
svg.icon {
height: 1.7em;
max-width: 1.7em;
vertical-align: middle;
padding: 0.15em;
}
svg.icon > path {
fill: white;
}
table {
padding: 0.5em;
background: rgba(0, 0, 0, 0.1);
border-radius: 1em;
}
td {
background: rgba(255, 255, 255, 0.1);
padding: 0.5em;
}
th {
background: rgba(255, 255, 255, 0.2);
padding: 1em;
}
div.content img {
object-fit: contain;
max-width: 100%;
}
15 changes: 15 additions & 0 deletions website/templates/base.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<html>
<head>
<title>rustls: {{ page.title | default (value="a modern TLS library written in Rust") }}</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="/style.css">
</head>
<body>
<a href=".."><img id="baby-logo" src="/rustls-ferris.png"></a>
<div class="box">
<div class="content">
{% block content %} {% endblock %}
</div>
</div>
</body>
</html>
53 changes: 53 additions & 0 deletions website/templates/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
<html>
<head>
<title>rustls: a modern TLS library written in Rust</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="style.css">
</head>
<body>
<img id="logo" src="rustls-ferris.png">
<div class="subtitle">
A modern <span class="acronym" title="Transport Layer Security">TLS</span> library written in Rust
</div>
<section>
<div class="box">
<div class="headline">
<h1>Safe</h1>
All protocol processing is in 100% memory-safe Rust.

<p>We learned from past <a href="https://docs.rs/rustls/latest/rustls/manual/_02_tls_vulnerabilities/index.html">protocol</a> and <a href="https://docs.rs/rustls/latest/rustls/manual/_01_impl_vulnerabilities/index.html">implementation</a> vulnerabilities to avoid repeating the same mistakes.
</div>
<div class="headline">
<h1>Fast</h1>
rustls outperforms OpenSSL and BoringSSL when used with aws-lc-rs.

<p>See our <a href="perf/">technical reports on performance</a>.
</div>
<div class="headline">
<h1>Flexible</h1>
Choice of <a href="https://github.com/rustls/rustls?tab=readme-ov-file#cryptography-providers">cryptography providers</a>, including <a href="https://github.com/aws/aws-lc-rs">aws-lc-rs</a>, <a href="https://github.com/briansmith/ring">*ring*</a> and with several FIPS140-approved options.

<p>We have bindings for <a href="https://github.com/rustls/rustls-ffi">C/C++</a> and a limited drop-in replacement for <a href="https://github.com/rustls/rustls-openssl-compat">OpenSSL libssl</a>.
</div>
</div>
</section>
<div class="box">
<div class="link">
<svg class="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM265.8 407.7c0-1.8 0-6 .1-11.6c.1-11.4 .1-28.8 .1-43.7c0-15.6-5.2-25.5-11.3-30.7c37-4.1 76-9.2 76-73.1c0-18.2-6.5-27.3-17.1-39c1.7-4.3 7.4-22-1.7-45c-13.9-4.3-45.7 17.9-45.7 17.9c-13.2-3.7-27.5-5.6-41.6-5.6s-28.4 1.9-41.6 5.6c0 0-31.8-22.2-45.7-17.9c-9.1 22.9-3.5 40.6-1.7 45c-10.6 11.7-15.6 20.8-15.6 39c0 63.6 37.3 69 74.3 73.1c-4.8 4.3-9.1 11.7-10.6 22.3c-9.5 4.3-33.8 11.7-48.3-13.9c-9.1-15.8-25.5-17.1-25.5-17.1c-16.2-.2-1.1 10.2-1.1 10.2c10.8 5 18.4 24.2 18.4 24.2c9.7 29.7 56.1 19.7 56.1 19.7c0 9 .1 21.7 .1 30.6c0 4.8 .1 8.6 .1 10c0 4.3-3 9.5-11.5 8C106 393.6 59.8 330.8 59.8 257.4c0-91.8 70.2-161.5 162-161.5s166.2 69.7 166.2 161.5c.1 73.4-44.7 136.3-110.7 158.3c-8.4 1.5-11.5-3.7-11.5-8zm-90.5-54.8c-.2-1.5 1.1-2.8 3-3.2c1.9-.2 3.7 .6 3.9 1.9c.3 1.3-1 2.6-3 3c-1.9 .4-3.7-.4-3.9-1.7zm-9.1 3.2c-2.2 .2-3.7-.9-3.7-2.4c0-1.3 1.5-2.4 3.5-2.4c1.9-.2 3.7 .9 3.7 2.4c0 1.3-1.5 2.4-3.5 2.4zm-14.3-2.2c-1.9-.4-3.2-1.9-2.8-3.2s2.4-1.9 4.1-1.5c2 .6 3.3 2.1 2.8 3.4c-.4 1.3-2.4 1.9-4.1 1.3zm-12.5-7.3c-1.5-1.3-1.9-3.2-.9-4.1c.9-1.1 2.8-.9 4.3 .6c1.3 1.3 1.8 3.3 .9 4.1c-.9 1.1-2.8 .9-4.3-.6zm-8.5-10c-1.1-1.5-1.1-3.2 0-3.9c1.1-.9 2.8-.2 3.7 1.3c1.1 1.5 1.1 3.3 0 4.1c-.9 .6-2.6 0-3.7-1.5zm-6.3-8.8c-1.1-1.3-1.3-2.8-.4-3.5c.9-.9 2.4-.4 3.5 .6c1.1 1.3 1.3 2.8 .4 3.5c-.9 .9-2.4 .4-3.5-.6zm-6-6.4c-1.3-.6-1.9-1.7-1.5-2.6c.4-.6 1.5-.9 2.8-.4c1.3 .7 1.9 1.8 1.5 2.6c-.4 .9-1.7 1.1-2.8 .4z"/></svg>
<a href="https://github.com/rustls/rustls">GitHub</a>
</div>
<div class="link">
<svg class="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M508.5 249.8 486.7 236.2c-.2-2-.3-3.9-.6-5.9l18.7-17.5a7.4 7.4 0 0 0 -2.4-12.3l-24-9c-.5-1.9-1.1-3.8-1.7-5.6l15-20.8a7.4 7.4 0 0 0 -4.8-11.5l-25.4-4.2c-.9-1.7-1.8-3.5-2.7-5.2l10.7-23.4a7.4 7.4 0 0 0 -7-10.4l-25.8 .9q-1.8-2.2-3.6-4.4L439 81.8A7.4 7.4 0 0 0 430.2 73L405 78.9q-2.2-1.8-4.4-3.6l.9-25.8a7.4 7.4 0 0 0 -10.4-7L367.7 53.2c-1.7-.9-3.4-1.8-5.2-2.7L358.4 25.1a7.4 7.4 0 0 0 -11.5-4.8L326 35.3c-1.9-.6-3.8-1.1-5.6-1.7l-9-24a7.4 7.4 0 0 0 -12.3-2.4l-17.5 18.7c-2-.2-3.9-.4-5.9-.6L262.3 3.5a7.4 7.4 0 0 0 -12.5 0L236.2 25.3c-2 .2-3.9 .3-5.9 .6L212.9 7.1a7.4 7.4 0 0 0 -12.3 2.4l-9 24c-1.9 .6-3.8 1.1-5.7 1.7l-20.8-15a7.4 7.4 0 0 0 -11.5 4.8l-4.2 25.4c-1.7 .9-3.5 1.8-5.2 2.7L120.9 42.6a7.4 7.4 0 0 0 -10.4 7l.9 25.8c-1.5 1.2-3 2.4-4.4 3.6L81.8 73A7.4 7.4 0 0 0 73 81.8L78.9 107c-1.2 1.5-2.4 2.9-3.6 4.4l-25.8-.9a7.4 7.4 0 0 0 -6.4 3.3 7.4 7.4 0 0 0 -.6 7.1l10.7 23.4c-.9 1.7-1.8 3.4-2.7 5.2L25.1 153.6a7.4 7.4 0 0 0 -4.8 11.5l15 20.8c-.6 1.9-1.1 3.8-1.7 5.7l-24 9a7.4 7.4 0 0 0 -2.4 12.3l18.7 17.5c-.2 2-.4 3.9-.6 5.9L3.5 249.8a7.4 7.4 0 0 0 0 12.5L25.3 275.8c.2 2 .3 3.9 .6 5.9L7.1 299.1a7.4 7.4 0 0 0 2.4 12.3l24 9c.6 1.9 1.1 3.8 1.7 5.7l-15 20.8a7.4 7.4 0 0 0 4.8 11.5l25.4 4.2c.9 1.7 1.8 3.5 2.7 5.1L42.6 391.1a7.4 7.4 0 0 0 .6 7.1 7.1 7.1 0 0 0 6.4 3.3l25.8-.9q1.8 2.2 3.6 4.4L73 430.2A7.4 7.4 0 0 0 81.8 439L107 433.1q2.2 1.8 4.4 3.6l-.9 25.8a7.4 7.4 0 0 0 10.4 7l23.4-10.7c1.7 .9 3.4 1.8 5.1 2.7l4.2 25.4a7.3 7.3 0 0 0 11.5 4.8l20.8-15c1.9 .6 3.8 1.1 5.7 1.7l9 24a7.4 7.4 0 0 0 12.3 2.4l17.5-18.7c2 .2 3.9 .4 5.9 .6l13.5 21.8a7.4 7.4 0 0 0 12.5 0l13.5-21.8c2-.2 3.9-.3 5.9-.6l17.5 18.7a7.4 7.4 0 0 0 12.3-2.4l9-24c1.9-.6 3.8-1.1 5.7-1.7l20.8 15a7.3 7.3 0 0 0 11.5-4.8l4.2-25.4c1.7-.9 3.5-1.8 5.2-2.7l23.4 10.7a7.4 7.4 0 0 0 10.4-7l-.9-25.8q2.2-1.8 4.4-3.6L430.2 439a7.4 7.4 0 0 0 8.8-8.8L433.1 405q1.8-2.2 3.6-4.4l25.8 .9a7.2 7.2 0 0 0 6.4-3.3 7.4 7.4 0 0 0 .6-7.1L458.8 367.7c.9-1.7 1.8-3.4 2.7-5.2l25.4-4.2a7.4 7.4 0 0 0 4.8-11.5l-15-20.8c.6-1.9 1.1-3.8 1.7-5.7l24-9a7.4 7.4 0 0 0 2.4-12.3l-18.7-17.5c.2-2 .4-3.9 .6-5.9l21.8-13.5a7.4 7.4 0 0 0 0-12.5zm-151 129.1A13.9 13.9 0 0 0 341 389.5l-7.6 35.7A187.5 187.5 0 0 1 177 424.4l-7.6-35.7a13.9 13.9 0 0 0 -16.5-10.7l-31.5 6.8a187.4 187.4 0 0 1 -16.3-19.2H258.3c1.7 0 2.9-.3 2.9-1.9V309.6c0-1.6-1.2-1.9-2.9-1.9H213.5l.1-34.4H262c4.4 0 23.7 1.3 29.8 25.9 1.9 7.6 6.2 32.1 9.1 40 2.9 8.8 14.6 26.5 27.1 26.5H407a187.3 187.3 0 0 1 -17.3 20.1zm25.8 34.5A15.2 15.2 0 1 1 368 398.1h.4A15.2 15.2 0 0 1 383.2 413.3zm-225.6-.7a15.2 15.2 0 1 1 -15.3-15.3h.5A15.3 15.3 0 0 1 157.6 412.6zM69.6 234.2l32.8-14.6a13.9 13.9 0 0 0 7.1-18.3L102.7 186h26.6V305.7H75.7A187.7 187.7 0 0 1 69.6 234.2zM58.3 198.1a15.2 15.2 0 0 1 15.2-15.3H74a15.2 15.2 0 1 1 -15.7 15.2zm155.2 24.5 .1-35.3h63.3c3.3 0 23.1 3.8 23.1 18.6 0 12.3-15.2 16.7-27.7 16.7zM399 306.7c-9.8 1.1-20.6-4.1-22-10.1-5.8-32.5-15.4-39.4-30.6-51.4 18.9-12 38.5-29.6 38.5-53.3 0-25.5-17.5-41.6-29.4-49.5-16.8-11-35.3-13.2-40.3-13.2H116.3A187.5 187.5 0 0 1 221.2 70.1l23.5 24.6a13.8 13.8 0 0 0 19.6 .4l26.3-25a187.5 187.5 0 0 1 128.4 91.4l-18 40.6A14 14 0 0 0 408 220.4l34.6 15.3a187.1 187.1 0 0 1 .4 32.5H423.7c-1.9 0-2.7 1.3-2.7 3.1v8.8C421 301 409.3 305.6 399 306.7zM240 60.2A15.2 15.2 0 0 1 255.2 45h.5A15.2 15.2 0 1 1 240 60.2zM436.8 214a15.2 15.2 0 1 1 0-30.5h.4a15.2 15.2 0 0 1 -.4 30.5z"/></svg>
<a href="https://crates.io/crates/rustls">crates.io</a>
</div>
<div class="link">
<svg class="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M96 0C43 0 0 43 0 96L0 416c0 53 43 96 96 96l288 0 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-64c17.7 0 32-14.3 32-32l0-320c0-17.7-14.3-32-32-32L384 0 96 0zm0 384l256 0 0 64L96 448c-17.7 0-32-14.3-32-32s14.3-32 32-32zm32-240c0-8.8 7.2-16 16-16l192 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-192 0c-8.8 0-16-7.2-16-16zm16 48l192 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-192 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z"/></svg>
<a href="https://docs.rs/rustls">Docs</a>
</div>
<div class="link">
<svg class="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M524.5 69.8a1.5 1.5 0 0 0 -.8-.7A485.1 485.1 0 0 0 404.1 32a1.8 1.8 0 0 0 -1.9 .9 337.5 337.5 0 0 0 -14.9 30.6 447.8 447.8 0 0 0 -134.4 0 309.5 309.5 0 0 0 -15.1-30.6 1.9 1.9 0 0 0 -1.9-.9A483.7 483.7 0 0 0 116.1 69.1a1.7 1.7 0 0 0 -.8 .7C39.1 183.7 18.2 294.7 28.4 404.4a2 2 0 0 0 .8 1.4A487.7 487.7 0 0 0 176 479.9a1.9 1.9 0 0 0 2.1-.7A348.2 348.2 0 0 0 208.1 430.4a1.9 1.9 0 0 0 -1-2.6 321.2 321.2 0 0 1 -45.9-21.9 1.9 1.9 0 0 1 -.2-3.1c3.1-2.3 6.2-4.7 9.1-7.1a1.8 1.8 0 0 1 1.9-.3c96.2 43.9 200.4 43.9 295.5 0a1.8 1.8 0 0 1 1.9 .2c2.9 2.4 6 4.9 9.1 7.2a1.9 1.9 0 0 1 -.2 3.1 301.4 301.4 0 0 1 -45.9 21.8 1.9 1.9 0 0 0 -1 2.6 391.1 391.1 0 0 0 30 48.8 1.9 1.9 0 0 0 2.1 .7A486 486 0 0 0 610.7 405.7a1.9 1.9 0 0 0 .8-1.4C623.7 277.6 590.9 167.5 524.5 69.8zM222.5 337.6c-29 0-52.8-26.6-52.8-59.2S193.1 219.1 222.5 219.1c29.7 0 53.3 26.8 52.8 59.2C275.3 311 251.9 337.6 222.5 337.6zm195.4 0c-29 0-52.8-26.6-52.8-59.2S388.4 219.1 417.9 219.1c29.7 0 53.3 26.8 52.8 59.2C470.7 311 447.5 337.6 417.9 337.6z"/></svg>
<a href="https://discord.gg/MCSB76RU96">Discord</a>
</div>
</div>
</body>
</html>
Loading
Loading
0