// SPDX-FileCopyrightText: 2022 Linus Jahn // // SPDX-License-Identifier: LGPL-2.1-or-later #ifndef QXMPPHASHING_H #define QXMPPHASHING_H #include "QXmppError.h" #include "QXmppGlobal.h" #include "QXmppHash.h" #include #include #include #include template class QFuture; class QXmppHash; namespace QXmpp::Private { struct HashingResult { using Result = std::variant, Cancelled, QXmppError>; HashingResult(Result result, std::unique_ptr data) : result(std::move(result)), data(std::move(data)) { } Result result; std::unique_ptr data; }; struct HashVerificationResult { struct NoStrongHashes { }; struct NotMatching { }; struct Verified { }; using Result = std::variant; HashVerificationResult(Result result, std::unique_ptr data) : result(std::move(result)), data(std::move(data)) { } Result result; std::unique_ptr data; }; using HashingResultPtr = std::shared_ptr; using HashVerificationResultPtr = std::shared_ptr; bool isHashingAlgorithmSecure(HashAlgorithm algorithm); uint16_t hashPriority(HashAlgorithm algorithm); // QXMPP_EXPORT for unit tests QXMPP_EXPORT QFuture calculateHashes(std::unique_ptr data, std::vector hashes); QFuture verifyHashes(std::unique_ptr data, std::vector hashes); } // namespace QXmpp::Private #endif // QXMPPHASHING_H