diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/daemon/HTTPServer.cpp /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/daemon/HTTPServer.cpp --- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/daemon/HTTPServer.cpp 2026-08-16 01:12:08.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/daemon/HTTPServer.cpp 2026-08-16 00:46:31.000000000 +0000 @@ -1276,5 +1276,5 @@ if (provided.length () > 0) { - std::string expected = i2p::http::CreateBasicAuthorizationString (user, pass); + std::string expected = "Basic " + i2p::data::ToBase64Standard (user + ":" + pass); if (expected == provided) return true; } diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/Base.cpp /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/Base.cpp --- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/Base.cpp 2026-08-16 01:12:08.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/Base.cpp 2026-08-16 00:46:31.000000000 +0000 @@ -202,4 +202,15 @@ } + std::string ToBase64Standard (std::string_view in) + { + auto str = ByteStreamToBase64 ((const uint8_t *)in.data (), in.length ()); + // replace '-' by '+' and '~' by '/' + for (auto& ch: str) + if (ch == '-') + ch = '+'; + else if (ch == '~') + ch = '/'; + return str; + } /* diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/Base.h /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/Base.h --- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/Base.h 2026-08-16 01:12:08.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/Base.h 2026-08-16 00:46:31.000000000 +0000 @@ -46,4 +46,5 @@ } + std::string ToBase64Standard (std::string_view in); // using standard table, for Proxy-Authorization } // data diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/HTTP.cpp /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/HTTP.cpp --- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/HTTP.cpp 2026-08-16 01:12:08.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/HTTP.cpp 2026-08-16 00:46:31.000000000 +0000 @@ -12,5 +12,4 @@ #include #include -#include #include "util.h" #include "Base.h" @@ -627,8 +626,5 @@ { if (user.empty () && pass.empty ()) return ""; - auto credentials = user + ":" + pass; - std::string encoded (boost::beast::detail::base64::encoded_size (credentials.length ()), 0); - encoded.resize (boost::beast::detail::base64::encode (encoded.data (), credentials.data (), credentials.length ())); - return "Basic " + encoded; + return "Basic " + i2p::data::ToBase64Standard (user + ":" + pass); } diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd_client/SAM.cpp /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd_client/SAM.cpp --- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd_client/SAM.cpp 2026-08-16 01:12:08.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd_client/SAM.cpp 2026-08-16 00:46:31.000000000 +0000 @@ -879,5 +879,5 @@ auto params = ExtractParams (buf); std::string_view id = params[SAM_PARAM_ID]; - if (masterSession->subsessions.count (id) > 0) + if (masterSession->subsessions.count (id) > 1) { // session exists