Skip to content

Commit

Permalink
docs(s2n-tls-hyper): Add hyper client/server example
Browse files Browse the repository at this point in the history
  • Loading branch information
goatgoose committed Jan 28, 2025
1 parent 4b361d4 commit 639d791
Show file tree
Hide file tree
Showing 12 changed files with 280 additions and 60 deletions.
2 changes: 1 addition & 1 deletion bindings/rust-examples/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[workspace]
members = [
"client-hello-config-resolution", "tokio-server-client",
"client-hello-config-resolution", "hyper-server-client", "tokio-server-client",
]
resolver = "2"

Expand Down
20 changes: 10 additions & 10 deletions bindings/rust-examples/certs/ca-cert.pem
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
-----BEGIN CERTIFICATE-----
MIIB3DCCAWKgAwIBAgIUaAjZTaFhJNRyFtFQut1CdrY7RH0wCgYIKoZIzj0EAwMw
HDELMAkGA1UEBhMCVVMxDTALBgNVBAMMBHJvb3QwIBcNMjQwMTI3MDAwODQ4WhgP
MjIwMzA3MDQwMDA4NDhaMBwxCzAJBgNVBAYTAlVTMQ0wCwYDVQQDDARyb290MHYw
EAYHKoZIzj0CAQYFK4EEACIDYgAEclmOmfFLoQR+mupZSc7J3IfZ6OV0IphUHWwv
iH9BvkGh4OX+RZfafa4hw90A5fk0ps520Dt04tHwotLBNkdQcWDJunOhw8ydebIP
TaP0V8OgxFs+P4kpBkMVNB3H+PK6o2MwYTAdBgNVHQ4EFgQU2ic6pZKpiyOr5aPt
YhABB9hJC5QwHwYDVR0jBBgwFoAU2ic6pZKpiyOr5aPtYhABB9hJC5QwDwYDVR0T
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAgQwCgYIKoZIzj0EAwMDaAAwZQIxAMtZ
+QqC0LGdqUxdr2woMr6pUNAaZYaxm6APPqyKsjVqNaKadiSueNbbbc+seKJXbwIw
Zl0HNHzmoNAMkpgx5BCukjL1v07C571diSW4Z/P96t8tUzi/2rUOoFlJYU0B8cib
MIIB2zCCAWKgAwIBAgIUFGw6MYghVw9GrlpnQwZUmB0HHbwwCgYIKoZIzj0EAwMw
HDELMAkGA1UEBhMCVVMxDTALBgNVBAMMBHJvb3QwIBcNMjUwMTI4MjEyNDU2WhgP
MjIwNDA3MDUyMTI0NTZaMBwxCzAJBgNVBAYTAlVTMQ0wCwYDVQQDDARyb290MHYw
EAYHKoZIzj0CAQYFK4EEACIDYgAEAzmebLd0GPptVlLK68gdNVVxmzTqI/ppHwYs
rn8D+0yUvD2SZj8Pkxq+Ow/gVK16CC2pY9o24xagYRhJ9RUgIrocC9k0c61QquXq
Sz58dWyajw5/gBGFxryWlaoRiC4uo2MwYTAdBgNVHQ4EFgQUSvDRw0hufm/4UxQS
m97QrxknijwwHwYDVR0jBBgwFoAUSvDRw0hufm/4UxQSm97QrxknijwwDwYDVR0T
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAgQwCgYIKoZIzj0EAwMDZwAwZAIwCnoD
mXfz4EZaUBZpfKbYBg6GxdGbpURJkWD4TaYK75JqWSYsQNZQQpCOOBG5zjcGAjAl
i5bAyEtIJW33HzZUuCpZpc6rhFLv97b4HIRdDd1kgSMYBwUfi371de/H24vuC/s=
-----END CERTIFICATE-----
26 changes: 26 additions & 0 deletions bindings/rust-examples/certs/generate.sh
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,15 @@ openssl req -new -noenc \
-subj "/C=US/CN=kangaroo" \
-addext "subjectAltName = DNS:www.kangaroo.com"

echo "generating localhost private key and CSR"
openssl req -new -noenc \
-newkey ec \
-pkeyopt ec_paramgen_curve:P-384 \
-keyout localhost-key.pem \
-out localhost.csr \
-subj "/C=US/CN=localhost" \
-addext "subjectAltName = DNS:localhost"

echo "generating wombat server certificate and signing it"
openssl x509 -days 65536 \
-req -in wombat.csr \
Expand All @@ -56,6 +65,16 @@ openssl x509 -days 65536 \
-out kangaroo-cert.pem \
-copy_extensions=copyall

echo "generating localhost certificate and signing it"
openssl x509 -days 65536 \
-req -in localhost.csr \
-SHA384 \
-CA ca-cert.pem \
-CAkey ca-key.pem \
-CAcreateserial \
-out localhost-cert.pem \
-copy_extensions=copyall

touch wombat-chain.pem
cat wombat-cert.pem >> wombat-chain.pem
cat ca-cert.pem >> wombat-chain.pem
Expand All @@ -64,17 +83,24 @@ touch kangaroo-chain.pem
cat kangaroo-cert.pem >> kangaroo-chain.pem
cat ca-cert.pem >> kangaroo-chain.pem

touch localhost-chain.pem
cat localhost-cert.pem >> localhost-chain.pem
cat ca-cert.pem >> localhost-chain.pem

echo "verifying server certificates"
openssl verify -CAfile ca-cert.pem wombat-cert.pem
openssl verify -CAfile ca-cert.pem kangaroo-cert.pem
openssl verify -CAfile ca-cert.pem localhost-cert.pem

# certificate signing requests are never used after the certs are generated
rm wombat.csr
rm kangaroo.csr
rm localhost.csr
rm ca-cert.srl

# the private keys of the CA are never needed after signing
rm ca-key.pem
rm wombat-cert.pem
rm kangaroo-cert.pem
rm localhost-cert.pem

42 changes: 21 additions & 21 deletions bindings/rust-examples/certs/kangaroo-chain.pem
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
-----BEGIN CERTIFICATE-----
MIIB3TCCAWKgAwIBAgIUJhUgxiGTEOtg0JBtu9SrS7PPvo0wCgYIKoZIzj0EAwMw
HDELMAkGA1UEBhMCVVMxDTALBgNVBAMMBHJvb3QwIBcNMjQwMTI3MDAwODQ4WhgP
MjIwMzA3MDQwMDA4NDhaMCAxCzAJBgNVBAYTAlVTMREwDwYDVQQDDAhrYW5nYXJv
bzB2MBAGByqGSM49AgEGBSuBBAAiA2IABCzesg6GHI5tMP4JuMvpiVHsc+CStyTy
JQQZ4jyj4fVfgqCcPVo6qJq6DjPepMRkm5tLtFrdavl8/ZZpiCi5vLSymUxliFXD
9DD8GO5naaBnW2EmuYCcNrB0FJJfKZurVKNfMF0wGwYDVR0RBBQwEoIQd3d3Lmth
bmdhcm9vLmNvbTAdBgNVHQ4EFgQUNmsIZH0IDGVlSy7V6BYZTE6NX1QwHwYDVR0j
BBgwFoAU2ic6pZKpiyOr5aPtYhABB9hJC5QwCgYIKoZIzj0EAwMDaQAwZgIxAJzE
GC8hKsqTmDxI4r7bewI/vjtKyEUf0BDJfRrSLixPySYRTbx950iHMo6kXB0DEwIx
AO02gaF9weybuklR+DZ/j6EEZk4HlaRvN575vKmdDYIUF4KpFcT/8f85+5klj9Tl
Hg==
MIIB3TCCAWKgAwIBAgIUIbygx2K+SoQizZPmr+WpBYAyC+UwCgYIKoZIzj0EAwMw
HDELMAkGA1UEBhMCVVMxDTALBgNVBAMMBHJvb3QwIBcNMjUwMTI4MjEyNDU2WhgP
MjIwNDA3MDUyMTI0NTZaMCAxCzAJBgNVBAYTAlVTMREwDwYDVQQDDAhrYW5nYXJv
bzB2MBAGByqGSM49AgEGBSuBBAAiA2IABJL7bfoMCdRnkr9f+OMYtZpoJ13hhGH8
JqSdDQGSy/SfwEo8AbmDEF6tc3HGkCpx0/K1Q5lENshft6y+3n4Qn8q+9uy4aI/c
+fm8FHKbooe748nwxdHo+GczlzJwPR3I9qNfMF0wGwYDVR0RBBQwEoIQd3d3Lmth
bmdhcm9vLmNvbTAdBgNVHQ4EFgQUaLUgNRONUSKhwjyLrkuYSvOGDoIwHwYDVR0j
BBgwFoAUSvDRw0hufm/4UxQSm97QrxknijwwCgYIKoZIzj0EAwMDaQAwZgIxAPqf
TV3w4egUT/MeS4BowJ4//N0NoBr0ohN+Ea2aAv5REiMJXJ/VfScvJMOfcGdzbQIx
ANO56JKO/54WKd/14Xft0yKiHKCkRaazqngDw9L9jZo5QA1gEcDkWETBzjSdJ4ys
0w==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIB3DCCAWKgAwIBAgIUaAjZTaFhJNRyFtFQut1CdrY7RH0wCgYIKoZIzj0EAwMw
HDELMAkGA1UEBhMCVVMxDTALBgNVBAMMBHJvb3QwIBcNMjQwMTI3MDAwODQ4WhgP
MjIwMzA3MDQwMDA4NDhaMBwxCzAJBgNVBAYTAlVTMQ0wCwYDVQQDDARyb290MHYw
EAYHKoZIzj0CAQYFK4EEACIDYgAEclmOmfFLoQR+mupZSc7J3IfZ6OV0IphUHWwv
iH9BvkGh4OX+RZfafa4hw90A5fk0ps520Dt04tHwotLBNkdQcWDJunOhw8ydebIP
TaP0V8OgxFs+P4kpBkMVNB3H+PK6o2MwYTAdBgNVHQ4EFgQU2ic6pZKpiyOr5aPt
YhABB9hJC5QwHwYDVR0jBBgwFoAU2ic6pZKpiyOr5aPtYhABB9hJC5QwDwYDVR0T
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAgQwCgYIKoZIzj0EAwMDaAAwZQIxAMtZ
+QqC0LGdqUxdr2woMr6pUNAaZYaxm6APPqyKsjVqNaKadiSueNbbbc+seKJXbwIw
Zl0HNHzmoNAMkpgx5BCukjL1v07C571diSW4Z/P96t8tUzi/2rUOoFlJYU0B8cib
MIIB2zCCAWKgAwIBAgIUFGw6MYghVw9GrlpnQwZUmB0HHbwwCgYIKoZIzj0EAwMw
HDELMAkGA1UEBhMCVVMxDTALBgNVBAMMBHJvb3QwIBcNMjUwMTI4MjEyNDU2WhgP
MjIwNDA3MDUyMTI0NTZaMBwxCzAJBgNVBAYTAlVTMQ0wCwYDVQQDDARyb290MHYw
EAYHKoZIzj0CAQYFK4EEACIDYgAEAzmebLd0GPptVlLK68gdNVVxmzTqI/ppHwYs
rn8D+0yUvD2SZj8Pkxq+Ow/gVK16CC2pY9o24xagYRhJ9RUgIrocC9k0c61QquXq
Sz58dWyajw5/gBGFxryWlaoRiC4uo2MwYTAdBgNVHQ4EFgQUSvDRw0hufm/4UxQS
m97QrxknijwwHwYDVR0jBBgwFoAUSvDRw0hufm/4UxQSm97QrxknijwwDwYDVR0T
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAgQwCgYIKoZIzj0EAwMDZwAwZAIwCnoD
mXfz4EZaUBZpfKbYBg6GxdGbpURJkWD4TaYK75JqWSYsQNZQQpCOOBG5zjcGAjAl
i5bAyEtIJW33HzZUuCpZpc6rhFLv97b4HIRdDd1kgSMYBwUfi371de/H24vuC/s=
-----END CERTIFICATE-----
8 changes: 4 additions & 4 deletions bindings/rust-examples/certs/kangaroo-key.pem
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
-----BEGIN PRIVATE KEY-----
MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDB8OJA0z/nzPkogIasW
B8xhhROb0sDbHEqYwStAdDKEWGCLGyy46/5sMprtht8bBpahZANiAAQs3rIOhhyO
bTD+CbjL6YlR7HPgkrck8iUEGeI8o+H1X4KgnD1aOqiaug4z3qTEZJubS7Ra3Wr5
fP2WaYgouby0splMZYhVw/Qw/BjuZ2mgZ1thJrmAnDawdBSSXymbq1Q=
MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDDQb27I4N/bli1Akl+n
t2jd6CEXwqQbpcgD9lgEXBYigObKYfXb08UNZDC3HH4VVNahZANiAASS+236DAnU
Z5K/X/jjGLWaaCdd4YRh/CaknQ0Bksv0n8BKPAG5gxBerXNxxpAqcdPytUOZRDbI
X7esvt5+EJ/KvvbsuGiP3Pn5vBRym6KHu+PJ8MXR6PhnM5cycD0dyPY=
-----END PRIVATE KEY-----
24 changes: 24 additions & 0 deletions bindings/rust-examples/certs/localhost-chain.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
-----BEGIN CERTIFICATE-----
MIIB1TCCAVygAwIBAgIUIbygx2K+SoQizZPmr+WpBYAyC+YwCgYIKoZIzj0EAwMw
HDELMAkGA1UEBhMCVVMxDTALBgNVBAMMBHJvb3QwIBcNMjUwMTI4MjEyNDU2WhgP
MjIwNDA3MDUyMTI0NTZaMCExCzAJBgNVBAYTAlVTMRIwEAYDVQQDDAlsb2NhbGhv
c3QwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAR2LB4AO/2VunUoHiAtRESZM+by7BGs
T9rYfTfRksznhwhutBT1uEFlCMJdUWt48DYDPiURi8p0Tyeb/eXTtVsvRmXcg99J
Fnih1VZj7EORZxi+ERGnRE26Um+5Ki/UORyjWDBWMBQGA1UdEQQNMAuCCWxvY2Fs
aG9zdDAdBgNVHQ4EFgQUEcK0db2ctmhGC17lC0irWUAeVDEwHwYDVR0jBBgwFoAU
SvDRw0hufm/4UxQSm97QrxknijwwCgYIKoZIzj0EAwMDZwAwZAIwMp8U0i0Ibwyk
JOWyY3ZC36xMask8C9jomulEikG96+6fJpGywxDc40ZIqTD0ze74AjBWF10vPSZh
mW6WtIZ0Xf4yRxXb9EY6+LMWbQMHVkE2ec5+WEvfUFf72bGUTWPKWSw=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIB2zCCAWKgAwIBAgIUFGw6MYghVw9GrlpnQwZUmB0HHbwwCgYIKoZIzj0EAwMw
HDELMAkGA1UEBhMCVVMxDTALBgNVBAMMBHJvb3QwIBcNMjUwMTI4MjEyNDU2WhgP
MjIwNDA3MDUyMTI0NTZaMBwxCzAJBgNVBAYTAlVTMQ0wCwYDVQQDDARyb290MHYw
EAYHKoZIzj0CAQYFK4EEACIDYgAEAzmebLd0GPptVlLK68gdNVVxmzTqI/ppHwYs
rn8D+0yUvD2SZj8Pkxq+Ow/gVK16CC2pY9o24xagYRhJ9RUgIrocC9k0c61QquXq
Sz58dWyajw5/gBGFxryWlaoRiC4uo2MwYTAdBgNVHQ4EFgQUSvDRw0hufm/4UxQS
m97QrxknijwwHwYDVR0jBBgwFoAUSvDRw0hufm/4UxQSm97QrxknijwwDwYDVR0T
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAgQwCgYIKoZIzj0EAwMDZwAwZAIwCnoD
mXfz4EZaUBZpfKbYBg6GxdGbpURJkWD4TaYK75JqWSYsQNZQQpCOOBG5zjcGAjAl
i5bAyEtIJW33HzZUuCpZpc6rhFLv97b4HIRdDd1kgSMYBwUfi371de/H24vuC/s=
-----END CERTIFICATE-----
6 changes: 6 additions & 0 deletions bindings/rust-examples/certs/localhost-key.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
-----BEGIN PRIVATE KEY-----
MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDDnJ1xbUHAxZthbja8u
7QZBCRQg+/lsKjZzswdK9EW6gzlL+RLg5JsMNAEHJgbRZcihZANiAAR2LB4AO/2V
unUoHiAtRESZM+by7BGsT9rYfTfRksznhwhutBT1uEFlCMJdUWt48DYDPiURi8p0
Tyeb/eXTtVsvRmXcg99JFnih1VZj7EORZxi+ERGnRE26Um+5Ki/UORw=
-----END PRIVATE KEY-----
40 changes: 20 additions & 20 deletions bindings/rust-examples/certs/wombat-chain.pem
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
-----BEGIN CERTIFICATE-----
MIIB2DCCAV6gAwIBAgIUJhUgxiGTEOtg0JBtu9SrS7PPvowwCgYIKoZIzj0EAwMw
HDELMAkGA1UEBhMCVVMxDTALBgNVBAMMBHJvb3QwIBcNMjQwMTI3MDAwODQ4WhgP
MjIwMzA3MDQwMDA4NDhaMB4xCzAJBgNVBAYTAlVTMQ8wDQYDVQQDDAZ3b21iYXQw
djAQBgcqhkjOPQIBBgUrgQQAIgNiAARUye9Qgw5N7T8nk6DFoUwPVzSnQy9v4v0V
8SOUZmRwBqmFSJ9Vm988BwAcPFHdmQ13Za4XTkDbQvMmgzntIIIziiyaJQAazRFG
Y2Ex4V/YBiIsuh5wPOXjtvOtgVMXBgijXTBbMBkGA1UdEQQSMBCCDnd3dy53b21i
YXQuY29tMB0GA1UdDgQWBBS+Tbl0gagSNimLM5q2EgeBIMEAfzAfBgNVHSMEGDAW
gBTaJzqlkqmLI6vlo+1iEAEH2EkLlDAKBggqhkjOPQQDAwNoADBlAjAKqbrvk9by
G278VLs7F8uvc1mFYYWv/ZnnQIEJT8srO+P57PtC5FBId5oK28P41EUCMQCim4LR
KzY/PcdY8NlAcHu/caWvGH2+FWm7jFyr8As5oXT0swbqYmMqpaK6E2EZNIk=
MIIB2DCCAV6gAwIBAgIUIbygx2K+SoQizZPmr+WpBYAyC+QwCgYIKoZIzj0EAwMw
HDELMAkGA1UEBhMCVVMxDTALBgNVBAMMBHJvb3QwIBcNMjUwMTI4MjEyNDU2WhgP
MjIwNDA3MDUyMTI0NTZaMB4xCzAJBgNVBAYTAlVTMQ8wDQYDVQQDDAZ3b21iYXQw
djAQBgcqhkjOPQIBBgUrgQQAIgNiAAS+0VxsqVGqGA00CH7TNweWiBQCo8077bxm
YL67K1IbKUL9A7/E0QvpXKX+ZL5avFf+Xuq73YwjHDluvciNfyYp7S2GOa9bB3Yj
X1O6VWye3LP2IPqDRPfrECsULfZ47rGjXTBbMBkGA1UdEQQSMBCCDnd3dy53b21i
YXQuY29tMB0GA1UdDgQWBBTQuywWPes6160/3Gkd99q/Ay+0BjAfBgNVHSMEGDAW
gBRK8NHDSG5+b/hTFBKb3tCvGSeKPDAKBggqhkjOPQQDAwNoADBlAjBUr2pSfpp+
nXtuaH371DPGycbZK+BiV4GsKd2JHhDc8+3j+lPqWfPzzmLwZjtqpCwCMQCQ5kvk
BT842pRPe8K5zsD3tw8cuQIMUUY2joifFG2YUcku7KMIrJzn3HmdglCh98E=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIB3DCCAWKgAwIBAgIUaAjZTaFhJNRyFtFQut1CdrY7RH0wCgYIKoZIzj0EAwMw
HDELMAkGA1UEBhMCVVMxDTALBgNVBAMMBHJvb3QwIBcNMjQwMTI3MDAwODQ4WhgP
MjIwMzA3MDQwMDA4NDhaMBwxCzAJBgNVBAYTAlVTMQ0wCwYDVQQDDARyb290MHYw
EAYHKoZIzj0CAQYFK4EEACIDYgAEclmOmfFLoQR+mupZSc7J3IfZ6OV0IphUHWwv
iH9BvkGh4OX+RZfafa4hw90A5fk0ps520Dt04tHwotLBNkdQcWDJunOhw8ydebIP
TaP0V8OgxFs+P4kpBkMVNB3H+PK6o2MwYTAdBgNVHQ4EFgQU2ic6pZKpiyOr5aPt
YhABB9hJC5QwHwYDVR0jBBgwFoAU2ic6pZKpiyOr5aPtYhABB9hJC5QwDwYDVR0T
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAgQwCgYIKoZIzj0EAwMDaAAwZQIxAMtZ
+QqC0LGdqUxdr2woMr6pUNAaZYaxm6APPqyKsjVqNaKadiSueNbbbc+seKJXbwIw
Zl0HNHzmoNAMkpgx5BCukjL1v07C571diSW4Z/P96t8tUzi/2rUOoFlJYU0B8cib
MIIB2zCCAWKgAwIBAgIUFGw6MYghVw9GrlpnQwZUmB0HHbwwCgYIKoZIzj0EAwMw
HDELMAkGA1UEBhMCVVMxDTALBgNVBAMMBHJvb3QwIBcNMjUwMTI4MjEyNDU2WhgP
MjIwNDA3MDUyMTI0NTZaMBwxCzAJBgNVBAYTAlVTMQ0wCwYDVQQDDARyb290MHYw
EAYHKoZIzj0CAQYFK4EEACIDYgAEAzmebLd0GPptVlLK68gdNVVxmzTqI/ppHwYs
rn8D+0yUvD2SZj8Pkxq+Ow/gVK16CC2pY9o24xagYRhJ9RUgIrocC9k0c61QquXq
Sz58dWyajw5/gBGFxryWlaoRiC4uo2MwYTAdBgNVHQ4EFgQUSvDRw0hufm/4UxQS
m97QrxknijwwHwYDVR0jBBgwFoAUSvDRw0hufm/4UxQSm97QrxknijwwDwYDVR0T
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAgQwCgYIKoZIzj0EAwMDZwAwZAIwCnoD
mXfz4EZaUBZpfKbYBg6GxdGbpURJkWD4TaYK75JqWSYsQNZQQpCOOBG5zjcGAjAl
i5bAyEtIJW33HzZUuCpZpc6rhFLv97b4HIRdDd1kgSMYBwUfi371de/H24vuC/s=
-----END CERTIFICATE-----
8 changes: 4 additions & 4 deletions bindings/rust-examples/certs/wombat-key.pem
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
-----BEGIN PRIVATE KEY-----
MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDDO2TkDRDnGfKAvjH9+
SliejJgLp6ONEdNAgfimOEDWgfMJiyYEPp9WhZkASDVTaB2hZANiAARUye9Qgw5N
7T8nk6DFoUwPVzSnQy9v4v0V8SOUZmRwBqmFSJ9Vm988BwAcPFHdmQ13Za4XTkDb
QvMmgzntIIIziiyaJQAazRFGY2Ex4V/YBiIsuh5wPOXjtvOtgVMXBgg=
MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDCKRIdzyeIA/FHH3W4p
ZsAyrZJgeJSwwAksPKP2gSzCfgk0xMETNLix0+2wwDfrFOChZANiAAS+0VxsqVGq
GA00CH7TNweWiBQCo8077bxmYL67K1IbKUL9A7/E0QvpXKX+ZL5avFf+Xuq73Ywj
HDluvciNfyYp7S2GOa9bB3YjX1O6VWye3LP2IPqDRPfrECsULfZ47rE=
-----END PRIVATE KEY-----
19 changes: 19 additions & 0 deletions bindings/rust-examples/hyper-server-client/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
[package]
name = "hyper-server-client"
version.workspace = true
authors.workspace = true
publish.workspace = true
license.workspace = true
edition.workspace = true

[dependencies]
s2n-tls = { path = "../../rust/extended/s2n-tls" }
s2n-tls-tokio = { path = "../../rust/extended/s2n-tls-tokio" }
s2n-tls-hyper = { path = "../../rust/standard/s2n-tls-hyper" }
tokio = { version = "1", features = ["full"] }
hyper = { version = "1" }
hyper-util = { version = "0.1", features = ["client-legacy", "server", "tokio", "http1", "http2"]}
http-body-util = { version = "0.1" }
clap = { version = "4", features = ["derive"]}
http = { version = "1" }
bytes = { version = "1" }
67 changes: 67 additions & 0 deletions bindings/rust-examples/hyper-server-client/src/bin/client.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

use bytes::Bytes;
use clap::Parser;
use http_body_util::{BodyExt, Full};
use hyper_util::{client::legacy::Client, rt::TokioExecutor};
use std::error::Error;
use std::str::FromStr;

/// NOTE: this CA is to be used for demonstration purposes only!
const CA: &[u8] = include_bytes!(concat!(env!("CARGO_MANIFEST_DIR"), "/../certs/ca-cert.pem"));

#[derive(Parser)]
struct Args {
#[clap(short, long, default_value = "localhost:1142")]
addr: String,
#[clap(short, long, default_value = "")]
body: String,
}

async fn run_client(addr: &str, request_body: Vec<u8>) -> Result<(), Box<dyn Error>> {
// Configure the s2n-tls client.
let config = {
let mut builder = s2n_tls::config::Builder::new();
builder.trust_pem(CA)?;
builder.build()?
};

// Create a hyper-util client with this configuration, using the s2n-tls-hyper HttpsConnector.
let connector = s2n_tls_hyper::connector::HttpsConnector::new(config);
let client: Client<_, Full<Bytes>> = Client::builder(TokioExecutor::new()).build(connector);

// Create an HTTP request to send to the server.
let uri = http::Uri::from_str(format!("https://{addr}/").as_str())?;
let request: http::Request<Full<Bytes>> = http::Request::builder()
.method(http::Method::GET)
.uri(uri)
.body(Full::from(request_body.clone()))?;

// Send the request to the server.
let response = client.request(request).await?;
assert_eq!(response.status(), http::StatusCode::OK);

// s2n-tls-hyper will always attempt to negotiate HTTP/2. Since the example server enables
// HTTP/2, assert that it was negotiated.
assert_eq!(response.version(), http::Version::HTTP_2);

// Get the response body.
let response_body = response.into_body().collect().await?.to_bytes();
println!(
"Response body: \n{}",
String::from_utf8_lossy(&response_body)
);

// The example server echos the request body back to the client.
assert_eq!(response_body.to_vec(), request_body);

Ok(())
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
let args = Args::parse();
run_client(&args.addr, args.body.into_bytes()).await?;
Ok(())
}
Loading

0 comments on commit 639d791

Please sign in to comment.