#include <cstring>
#include <stdexcept>
#include <sodium.h>
#include <folly/crypto/detail/LtHashInternal.h>
#include <folly/lang/Bits.h>
namespace folly {
namespace crypto {
namespace detail {
template <std::size_t B>
struct Bits { … };
template <>
inline constexpr uint64_t Bits<16>::kDataMask() { … }
template <>
inline constexpr bool Bits<16>::needsPadding() { … }
template <>
inline constexpr uint64_t Bits<20>::kDataMask() { … }
template <>
inline constexpr bool Bits<20>::needsPadding() { … }
template <>
inline constexpr uint64_t Bits<32>::kDataMask() { … }
template <>
inline constexpr bool Bits<32>::needsPadding() { … }
template <std::size_t B>
constexpr size_t getElementsPerUint64() { … }
template <std::size_t B, std::size_t N>
constexpr size_t getChecksumSizeBytes() { … }
}
template <std::size_t B, std::size_t N>
LtHash<B, N>::LtHash(const folly::IOBuf& initialChecksum)
: … { … }
template <std::size_t B, std::size_t N>
LtHash<B, N>::LtHash(std::unique_ptr<folly::IOBuf> initialChecksum)
: … { … }
template <std::size_t B, std::size_t N>
LtHash<B, N>::LtHash(const LtHash<B, N>& that)
: … { … }
template <std::size_t B, std::size_t N>
LtHash<B, N>& LtHash<B, N>::operator=(const LtHash<B, N>& that) { … }
template <std::size_t B, std::size_t N>
LtHash<B, N>::~LtHash() { … }
template <std::size_t B, std::size_t N>
void LtHash<B, N>::setKey(folly::ByteRange key) { … }
template <std::size_t B, std::size_t N>
void LtHash<B, N>::clearKey() { … }
template <std::size_t B, std::size_t N>
LtHash<B, N>& LtHash<B, N>::operator+=(const LtHash<B, N>& rhs) { … }
template <std::size_t B, std::size_t N>
LtHash<B, N>& LtHash<B, N>::operator-=(const LtHash<B, N>& rhs) { … }
template <std::size_t B, std::size_t N>
bool LtHash<B, N>::operator==(const LtHash<B, N>& that) const { … }
template <std::size_t B, std::size_t N>
bool LtHash<B, N>::checksumEquals(folly::ByteRange otherChecksum) const { … }
template <std::size_t B, std::size_t N>
bool LtHash<B, N>::operator!=(const LtHash<B, N>& that) const { … }
template <std::size_t B, std::size_t N>
void LtHash<B, N>::reset() { … }
template <std::size_t B, std::size_t N>
void LtHash<B, N>::setChecksum(const folly::IOBuf& checksum) { … }
template <std::size_t B, std::size_t N>
void LtHash<B, N>::setChecksum(std::unique_ptr<folly::IOBuf> checksum) { … }
template <std::size_t B, std::size_t N>
template <typename... Args>
void LtHash<B, N>::hashObject(
folly::MutableByteRange out,
folly::ByteRange firstRange,
Args&&... moreRanges) { … }
template <std::size_t B, std::size_t N>
template <typename... Args>
void LtHash<B, N>::updateDigest(
Blake2xb& digest, folly::ByteRange firstRange, Args&&... moreRanges) { … }
template <std::size_t B, std::size_t N>
void LtHash<B, N>::updateDigest(Blake2xb& ) { … }
template <std::size_t B, std::size_t N>
template <typename... Args>
LtHash<B, N>& LtHash<B, N>::addObject(
folly::ByteRange firstRange, Args&&... moreRanges) { … }
template <std::size_t B, std::size_t N>
template <typename... Args>
LtHash<B, N>& LtHash<B, N>::removeObject(
folly::ByteRange firstRange, Args&&... moreRanges) { … }
template <std::size_t B, std::size_t N>
constexpr size_t LtHash<B, N>::getChecksumSizeBytes() { … }
template <std::size_t B, std::size_t N>
constexpr size_t LtHash<B, N>::getElementSizeInBits() { … }
template <std::size_t B, std::size_t N>
constexpr size_t LtHash<B, N>::getElementsPerUint64() { … }
template <std::size_t B, std::size_t N>
constexpr size_t LtHash<B, N>::getElementCount() { … }
template <std::size_t B, std::size_t N>
constexpr bool LtHash<B, N>::hasPaddingBits() { … }
template <std::size_t B, std::size_t N>
std::unique_ptr<folly::IOBuf> LtHash<B, N>::getChecksum() const { … }
template <std::size_t B, std::size_t N>
bool LtHash<B, N>::keysEqual(const LtHash<B, N>& h1, const LtHash<B, N>& h2) { … }
}
}