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:03:56.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:44:36.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/debian/control /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/debian/control --- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/debian/control 2026-08-16 01:03:56.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/debian/control 2026-08-16 00:44:36.000000000 +0000 @@ -3,5 +3,5 @@ Priority: optional Maintainer: r4sas -Build-Depends: debhelper (>= 12~), libboost-program-options-dev (>= 1.46), libboost-json-dev (>= 1.75), libminiupnpc-dev, libssl-dev, zlib1g-dev +Build-Depends: debhelper (>= 12~), libboost-program-options-dev (>= 1.46), libboost-json-dev (>= 1.75) | libboost-json1.81-dev, libminiupnpc-dev, libssl-dev, zlib1g-dev Standards-Version: 4.3.0 Homepage: http://i2pd.website/ 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:03:56.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:44:36.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:03:56.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:44:36.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:03:56.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:44:36.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/HTTPProxy.cpp /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd_client/HTTPProxy.cpp --- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd_client/HTTPProxy.cpp 2026-08-16 01:03:56.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd_client/HTTPProxy.cpp 2026-08-16 00:44:36.000000000 +0000 @@ -7,5 +7,4 @@ */ -#include #include #include @@ -16,5 +15,4 @@ #include #include -#include #include #include @@ -795,18 +793,6 @@ const std::string & outproxy, bool addresshelper, bool senduseragent, std::shared_ptr localDestination): TCPIPAcceptor (address, port, localDestination ? localDestination : i2p::client::context.GetSharedLocalDestination ()), - m_Name (name), m_NextOutproxy (0), m_Addresshelper (addresshelper), m_SendUserAgent (senduseragent) + m_Name (name), m_OutproxyUrl (outproxy), m_Addresshelper (addresshelper), m_SendUserAgent (senduseragent) { - // outproxy is a comma separated list, the same way a client tunnel takes several destinations - boost::split (m_OutproxyUrls, outproxy, boost::is_any_of (","), boost::token_compress_on); - for (auto& it: m_OutproxyUrls) boost::trim (it); - m_OutproxyUrls.erase (std::remove (m_OutproxyUrls.begin (), m_OutproxyUrls.end (), ""), m_OutproxyUrls.end ()); - } - - std::string HTTPProxy::GetOutproxyURL () - { - if (m_OutproxyUrls.empty ()) return ""; - auto url = m_OutproxyUrls[m_NextOutproxy]; - m_NextOutproxy = (m_NextOutproxy + 1) % m_OutproxyUrls.size (); - return url; } diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd_client/HTTPProxy.h /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd_client/HTTPProxy.h --- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd_client/HTTPProxy.h 2026-08-16 01:03:56.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd_client/HTTPProxy.h 2026-08-16 00:44:36.000000000 +0000 @@ -24,6 +24,5 @@ ~HTTPProxy() {}; - // picks the next outproxy, so several of them are used in turn - std::string GetOutproxyURL(); + std::string GetOutproxyURL() const { return m_OutproxyUrl; } bool GetHelperSupport() const { return m_Addresshelper; } bool GetSendUserAgent () const { return m_SendUserAgent; } @@ -38,6 +37,5 @@ std::string m_Name; - std::vector m_OutproxyUrls; - size_t m_NextOutproxy; + std::string m_OutproxyUrl; bool m_Addresshelper, m_SendUserAgent; };