<pre style='margin:0'>
Perry E. Metzger (pmetzger) pushed a commit to branch master
in repository macports-ports.
</pre>
<p><a href="https://github.com/macports/macports-ports/commit/678c04bdaa1fa00fb89c6afaa0364e0883cbbf8f">https://github.com/macports/macports-ports/commit/678c04bdaa1fa00fb89c6afaa0364e0883cbbf8f</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 678c04bdaa1fa00fb89c6afaa0364e0883cbbf8f
</span>Author: barracuda156 <vital.had@gmail.com>
AuthorDate: Fri Jan 12 07:40:46 2024 +0800
<span style='display:block; white-space:pre;color:#404040;'> fizz: update to 2024.01.08.00
</span>---
devel/fizz/Portfile | 18 ++-
...-b64-encoded-ECH-Config-List-in-fizz-clie.patch | 129 +++++++++++++++++++++
...-235358c8b2e613b85d47b2088c21f7bd344910ec.patch | 104 +++++++++++++++++
3 files changed, 245 insertions(+), 6 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/fizz/Portfile b/devel/fizz/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 9add38f135e..e4443e1da72 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/devel/fizz/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/devel/fizz/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -13,11 +13,11 @@ legacysupport.newest_darwin_requires_legacy 10
</span>
boost.version 1.81
<span style='display:block; white-space:pre;background:#ffe0e0;'>-github.setup facebookincubator fizz 2023.05.15.00 v
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-revision 3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-checksums rmd160 52bc1b0451ff1c2e3da601b589a4629a27370f59 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sha256 468eca89b75b632ae16f06d4f3e3fb50d8ca145cce64d6c48260997df7770114 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size 654780
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+github.setup facebookincubator fizz 2024.01.08.00 v
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+revision 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+checksums rmd160 1ada4432177892ea54580be6bdaaced8f0bc2c75 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sha256 ec2dc1b2238e654e8b40b63157cfe343f44e05a59da53e095aadd5e4ec627144 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size 680888
</span>
categories devel
license BSD
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -30,7 +30,7 @@ github.tarball_from releases
</span> distname ${name}-v${version}
extract.mkdir yes
<span style='display:block; white-space:pre;background:#ffe0e0;'>-set port_libfmt libfmt9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set port_libfmt libfmt10
</span> cmake.module_path-append \
${prefix}/lib/${port_libfmt}/cmake
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -49,6 +49,12 @@ depends_lib-append port:bzip2 \
</span>
cmake.source_dir ${worksrcpath}/${name}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+platform darwin powerpc {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ patchfiles-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 0001-Revert-Read-b64-encoded-ECH-Config-List-in-fizz-clie.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 0002-Revert-235358c8b2e613b85d47b2088c21f7bd344910ec.patch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> # Fix error: invalid output constraint '=@ccc' in asm
compiler.blacklist-append \
{clang < 1200}
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/fizz/files/0001-Revert-Read-b64-encoded-ECH-Config-List-in-fizz-clie.patch b/devel/fizz/files/0001-Revert-Read-b64-encoded-ECH-Config-List-in-fizz-clie.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..4fb00362ba3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/devel/fizz/files/0001-Revert-Read-b64-encoded-ECH-Config-List-in-fizz-clie.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,129 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This fails to build, so for now revert until fixed properly.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From ab7f198d2edb9494e45800e401d43be1ed7ff168 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Sergey Fedorov <vital.had@gmail.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Fri, 12 Jan 2024 09:34:52 +0800
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] Revert "Read b64 encoded ECH Config List in fizz client
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ command tool"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This reverts commit 6efc106e48e4f7d9c63f7b52b14e596fe8b7c741.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ fizz/tool/FizzCommandCommon.cpp | 24 +++-------------------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ fizz/tool/FizzCommandCommon.h | 11 ----------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ fizz/tool/test/FizzCommandCommonTest.cpp | 26 ------------------------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 3 files changed, 3 insertions(+), 58 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git fizz/tool/FizzCommandCommon.cpp fizz/tool/FizzCommandCommon.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index b4d188cc..39d6e6a1 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- fizz/tool/FizzCommandCommon.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ fizz/tool/FizzCommandCommon.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -14,7 +14,6 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <fizz/tool/FizzCommandCommon.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <folly/FileUtil.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <folly/String.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#include <folly/base64.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <fstream>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -144,20 +143,15 @@ hpke::KEMId getKEMId(std::string kemStr) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ throw std::runtime_error("Input doesn't match any KEM id");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-std::string tryReadFile(const std::string& echFile) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++folly::Optional<folly::dynamic> readECHConfigsJson(std::string echFile) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (echFile.empty()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ throw std::runtime_error("No file provided");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- std::string echConfigStr;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (!folly::readFile(echFile.c_str(), echConfigStr)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ std::string echConfigJson;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!folly::readFile(echFile.c_str(), echConfigJson)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ throw std::runtime_error("Unable to read file provided");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- return echConfigStr;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-folly::Optional<folly::dynamic> readECHConfigsJson(std::string echFile) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- auto echConfigJson = tryReadFile(echFile);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ auto json = folly::parseJson(echConfigJson);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!json.isObject()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -170,18 +164,6 @@ folly::Optional<folly::dynamic> readECHConfigsJson(std::string echFile) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return json;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-folly::Optional<ech::ECHConfigList> parseECHConfigsBase64(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- std::string echConfigListBase64) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- std::vector<ech::ECHConfig> echConfigs;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- echConfigListBase64.erase(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- std::remove(echConfigListBase64.begin(), echConfigListBase64.end(), '\n'),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- echConfigListBase64.cend());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- auto configBuf =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- folly::IOBuf::copyBuffer(folly::base64Decode(echConfigListBase64));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- folly::io::Cursor cursor(configBuf.get());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- return decode<ech::ECHConfigList>(cursor);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ folly::Optional<ech::ECHConfigList> parseECHConfigs(folly::dynamic json) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ auto getKDFId = [](std::string kdfStr) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (kdfStr == "Sha256") {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git fizz/tool/FizzCommandCommon.h fizz/tool/FizzCommandCommon.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index dbc1af7f..7f024999 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- fizz/tool/FizzCommandCommon.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ fizz/tool/FizzCommandCommon.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -35,17 +35,6 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ namespace fizz {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ namespace tool {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-std::string tryReadFile(const std::string& echFile);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-/** Parses base64 encoded ECH config list.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- * @param echConfigListBase64 ECH config list encoded in base64. It must use
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- * the format specified in the ECH RFC
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- *(https://www.ietf.org/archive/id/draft-ietf-tls-esni-16.html#name-encrypted-clienthello-confi)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- * @return Parsed ECH config list.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- **/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-folly::Optional<ech::ECHConfigList> parseECHConfigsBase64(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- std::string echConfigListBase64);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ folly::Optional<ech::ECHConfigList> parseECHConfigs(folly::dynamic json);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ folly::Optional<folly::dynamic> readECHConfigsJson(std::string echFile);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git fizz/tool/test/FizzCommandCommonTest.cpp fizz/tool/test/FizzCommandCommonTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 59689964..bab9e227 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- fizz/tool/test/FizzCommandCommonTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ fizz/tool/test/FizzCommandCommonTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -17,32 +17,6 @@ namespace fizz {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ namespace tool {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ namespace test {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-TEST(FizzCommandCommonTest, TestParseECHConfigsBase64) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- auto echConfig64 =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "AEj+DQBEAQAgACAX5SnnUbopIr5I/MqIqLWuSAZckHI2sR+aIr0slN2uGAAEAAEAAWQVZWNoLXB1YmxpYy5hdG1ldGEuY29tAAA=";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- auto expectedPubKey =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "17e529e751ba2922be48fcca88a8b5ae48065c907236b11f9a22bd2c94ddae18";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- auto echConfigs = parseECHConfigsBase64(echConfig64);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ASSERT_EQ(echConfigs->configs.size(), 1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- auto firstConfig = echConfigs->configs[0];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ASSERT_EQ(firstConfig.version, ech::ECHVersion::Draft15);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- folly::io::Cursor cursor(firstConfig.ech_config_content.get());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- auto echConfigContent = decode<ech::ECHConfigContentDraft>(cursor);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ASSERT_TRUE(folly::IOBufEqualTo()(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- echConfigContent.public_name,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- folly::IOBuf::copyBuffer("ech-public.atmeta.com")));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ASSERT_EQ(echConfigContent.key_config.kem_id, hpke::KEMId::x25519);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ASSERT_EQ(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- echConfigContent.key_config.cipher_suites[0].kdf_id, hpke::KDFId::Sha256);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ASSERT_EQ(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- echConfigContent.key_config.cipher_suites[0].aead_id,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- hpke::AeadId::TLS_AES_128_GCM_SHA256);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ASSERT_EQ(echConfigContent.maximum_name_length, 100);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ASSERT_TRUE(folly::IOBufEqualTo()(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- echConfigContent.key_config.public_key,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- folly::IOBuf::copyBuffer(folly::unhexlify(expectedPubKey))));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ TEST(FizzCommandCommonTest, TestValidHostPortFromString) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ struct ExpectedValues {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ std::string input;
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/fizz/files/0002-Revert-235358c8b2e613b85d47b2088c21f7bd344910ec.patch b/devel/fizz/files/0002-Revert-235358c8b2e613b85d47b2088c21f7bd344910ec.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..f4f5fbc6b2a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/devel/fizz/files/0002-Revert-235358c8b2e613b85d47b2088c21f7bd344910ec.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,104 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 8da95253f706a9de52c3d89b2d5a1488815d14ff Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Sergey Fedorov <vital.had@gmail.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Fri, 12 Jan 2024 09:57:06 +0800
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] Revert 235358c8b2e613b85d47b2088c21f7bd344910ec
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ fizz/tool/FizzClientCommand.cpp | 32 +++++++++-----------------------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ fizz/tool/FizzServerCommand.cpp | 4 ++--
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 2 files changed, 11 insertions(+), 25 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git fizz/tool/FizzClientCommand.cpp fizz/tool/FizzClientCommand.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 02ee86a4..69eb31de 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- fizz/tool/FizzClientCommand.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ fizz/tool/FizzClientCommand.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -83,8 +83,6 @@ void printUsage() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ << " (JSON format: {echconfigs: [${your ECH config here with all the fields..}]})\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ << " (See FizzCommandCommonTest for an example.)\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ << " (Note: Setting ech configs implicitly enables ECH.)\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- << " -echbase64 echConfigList (base64 encoded string of echconfigs.)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- << " (The echconfigs file argument must match the ECH Config List format specified in the ECH RFC.)\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifdef FIZZ_TOOL_ENABLE_OQS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ << " -hybridkex (Use experimental hybrid key exchange. Currently the only supported named groups under\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ << " this mode are secp384r1_bikel3 and secp521r1_x25519)\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -542,7 +540,6 @@ int fizzClientCommand(const std::vector<std::string>& args) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bool delegatedCredentials = false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bool ech = false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ std::string echConfigsFile;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- std::string echConfigsBase64;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bool uring = false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bool uringAsync = false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bool uringRegisterFds = false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -616,9 +613,6 @@ int fizzClientCommand(const std::vector<std::string>& args) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }}},
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {"-echconfigs", {true, [&echConfigsFile](const std::string& arg) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ echConfigsFile = arg;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- }}},
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- {"-echbase64", {true, [&echConfigsBase64](const std::string& arg) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- echConfigsBase64 = arg;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifdef FIZZ_TOOL_ENABLE_OQS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ,{"-hybridkex", {false, [&useHybridKexFactory](const std::string&) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -794,26 +788,22 @@ int fizzClientCommand(const std::vector<std::string>& args) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ clientContext->getSupportedSigSchemes());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- folly::Optional<ech::ECHConfigList> echConfigList = folly::none;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ folly::Optional<std::vector<ech::ECHConfig>> echConfigs = folly::none;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (ech) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Use default ECH config values.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- auto echConfigContents = getDefaultECHConfigs();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- echConfigList->configs = std::move(echConfigContents);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- } else if (!echConfigsBase64.empty()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- echConfigList = parseECHConfigsBase64(echConfigsBase64);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (!echConfigList.has_value()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- LOG(ERROR) << "Unable to parse ECHConfigList base64.";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- return 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- } else if (!echConfigsFile.empty()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ echConfigs = getDefaultECHConfigs();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!echConfigsFile.empty()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // Parse user set ECH configs.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ auto echConfigsJson = readECHConfigsJson(echConfigsFile);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!echConfigsJson.has_value()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ LOG(ERROR) << "Unable to load ECH configs from json file";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- echConfigList = parseECHConfigs(echConfigsJson.value());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (!echConfigList.has_value()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ auto gotECHConfigs = parseECHConfigs(echConfigsJson.value());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!gotECHConfigs.has_value()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ LOG(ERROR)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ << "Unable to parse JSON file and make ECH config."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ << "Ensure the format matches what is expected."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -821,11 +811,7 @@ int fizzClientCommand(const std::vector<std::string>& args) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ << "See FizzCommandCommonTest for a more concrete example.";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- folly::Optional<std::vector<ech::ECHConfig>> echConfigs;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (echConfigList.has_value()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- echConfigs = std::move(echConfigList->configs);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ echConfigs = std::move(gotECHConfigs.value().configs);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ try {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git fizz/tool/FizzServerCommand.cpp fizz/tool/FizzServerCommand.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index e2da1621..18fd0e26 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- fizz/tool/FizzServerCommand.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ fizz/tool/FizzServerCommand.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -597,8 +597,8 @@ std::shared_ptr<ech::Decrypter> setupDecrypterFromInputs(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ std::string privKeyStrHex;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ folly::readFile(echPrivateKeyFile.c_str(), privKeyStrHex);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- folly::ByteRange privKeyBuf(folly::trimWhitespace(privKeyStrHex));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ auto privKeyStr = folly::unhexlify(privKeyStrHex);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ folly::ByteRange privKeyBuf((folly::StringPiece(privKeyStr)));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Create a key exchange and set the private key
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ auto kexWithPrivateKey =
</span></pre><pre style='margin:0'>
</pre>