diff options
| author | tobtoht <tob@featherwallet.org> | 2026-03-28 19:50:38 +0000 |
|---|---|---|
| committer | tobtoht <tob@featherwallet.org> | 2026-03-28 19:50:38 +0000 |
| commit | 6af49ec83c4098a6e0e166de2ba527441e8f5974 (patch) | |
| tree | ce21760d0c890ccfecf74deccf2d1530c53e353b /contrib/epee/src/http_auth.cpp | |
| parent | 9b1239dc56ef2048a6c5123df9d47549f5f2e2cc (diff) | |
| parent | f355f85e6f7bea4a4f68c7880b2b995a3c225882 (diff) | |
| download | monzero-core-6af49ec83c4098a6e0e166de2ba527441e8f5974.tar.gz monzero-core-6af49ec83c4098a6e0e166de2ba527441e8f5974.tar.xz monzero-core-6af49ec83c4098a6e0e166de2ba527441e8f5974.zip | |
Merge pull request #10364
f355f85 Harden HTTP client auth (Lee *!* Clagett)
Diffstat (limited to 'contrib/epee/src/http_auth.cpp')
| -rw-r--r-- | contrib/epee/src/http_auth.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/contrib/epee/src/http_auth.cpp b/contrib/epee/src/http_auth.cpp index 614004ffa..dfde408cb 100644 --- a/contrib/epee/src/http_auth.cpp +++ b/contrib/epee/src/http_auth.cpp @@ -64,6 +64,7 @@ #include <iterator> #include <limits> #include <openssl/evp.h> +#include <openssl/rand.h> #include <tuple> #include <type_traits> @@ -296,13 +297,21 @@ namespace std::array<char, 8> nc{{}}; boost::copy(out, nc.data()); + + std::array<uint8_t, 16> rbuf{{}}; + if (RAND_bytes(rbuf.data(), rbuf.size()) != 1) + return {}; + + const std::string cnonce = epee::string_encoding::base64_encode(rbuf.data(), rbuf.size()); const auto response = digest( - generate_a1(digest, user), u8":", user.server.nonce, u8":", nc, u8"::auth:", digest(method, u8":", uri) + generate_a1(digest, user), u8":", user.server.nonce, u8":", nc, u8":", cnonce, u8":auth:", digest(method, u8":", uri) ); + out.clear(); init_client_value(out, Digest::name, user, uri, response); add_field(out, u8"qop", ceref(u8"auth")); add_field(out, u8"nc", nc); + add_field(out, u8"cnonce", quoted_(cnonce)); return out; } @@ -592,7 +601,7 @@ namespace boost::equals((*digest).name, request.algorithm, ascii_iequal) ); if (request.qop.empty()) - value_generator = old_algorithm<digest_type>{*digest}; + index = boost::fusion::size(digest_algorithms); else { for (auto elem = boost::make_split_iterator(request.qop, boost::token_finder(http_list_separator)); |
