50#include <netplus/crypto/sha.h>
51#include <netplus/random.h>
56namespace checksumtest {
58inline std::string sha256Hex(
const char *data,
size_t len) {
59 std::vector<uint8_t> buf(
reinterpret_cast<const uint8_t *
>(data),
60 reinterpret_cast<const uint8_t *
>(data) + len);
61 std::vector<uint8_t> digest = netplus::sha256_hash(buf);
62 static const char *hexd =
"0123456789abcdef";
64 out.reserve(digest.size() * 2);
65 for (uint8_t b : digest) {
66 out.push_back(hexd[b >> 4]);
67 out.push_back(hexd[b & 0x0f]);
72inline std::string sha256Hex(
const std::vector<char> &data) {
73 return sha256Hex(data.data(), data.size());
76inline std::vector<char> randomBuffer(
size_t len) {
77 std::vector<char> buf(len);
79 netplus::fillRandomBytes(
reinterpret_cast<uint8_t *
>(buf.data()), len);
87inline const std::vector<size_t> &sweepSizes() {
88 static const std::vector<size_t> sizes = {0, 1, 4096, 65536, 1048576};
101 explicit ChecksumEvent(std::vector<netplus::socket *> serversocket)
106 const std::string &url = req.getRequestURL();
108 if (url.rfind(
"/gen/", 0) == 0) {
110 try { len =
static_cast<size_t>(std::stoull(url.substr(5))); }
111 catch (...) { len = 0; }
113 std::vector<char> body = randomBuffer(len);
114 std::string hash = sha256Hex(body);
117 res.setContentType(
"application/octet-stream");
118 res.setHeaderData(
"x-sha256")->push_back(hash);
119 res.send(req, body,
static_cast<int>(body.size()));
123 if (url ==
"/echo") {
124 std::vector<char> body(req.RecvData.data(),
125 req.RecvData.data() + req.RecvData.size());
126 std::string hash = sha256Hex(body);
129 res.setContentType(
"application/octet-stream");
130 res.setHeaderData(
"x-sha256")->push_back(hash);
131 res.send(req, body,
static_cast<int>(body.size()));
136 res.setState(
"404 Not Found");
137 res.send(req, std::string(
"not found"), 9);
139 std::cerr <<
"[ChecksumEvent] " << e.what() << std::endl;
154 if (t && t->joinable()) {
155 netplus::event::Running =
false;
Definition checksum_common.h:99
Definition exception.h:43
Definition checksum_common.h:151