QCryptographicHash: move SmallByteArray out of Private
Rename it to QSmallByteArray, and make the maximum size a template argument. Initialize m_size to 0, to avoid a partially-formed default-constructed objects (default-constructed containers should always be in the empty state). As a drive-by, fix placement of some {'s. Don't move it into a header of its own, yet, as it lacks a lot of features expected of a generally-reusable class. Maybe one day. This is in preparation of re-using the class to hold the key in QMessageAuthenticationCode. Pick-to: 6.5 Change-Id: Iee77e03e50afdf2ebc5889feeead344bef8ab3e8 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
9a18ca59ff
commit
29050fa65b
@ -121,6 +121,28 @@ static inline int SHA384_512AddLength(SHA512Context *context, unsigned int lengt
|
|||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
template <size_t N>
|
||||||
|
class QSmallByteArray
|
||||||
|
{
|
||||||
|
std::array<quint8, N> m_data;
|
||||||
|
static_assert(N <= std::numeric_limits<std::uint8_t>::max());
|
||||||
|
quint8 m_size = 0;
|
||||||
|
public:
|
||||||
|
// all SMFs are ok!
|
||||||
|
quint8 *data() noexcept { return m_data.data(); }
|
||||||
|
qsizetype size() const noexcept { return qsizetype{m_size}; }
|
||||||
|
bool isEmpty() const noexcept { return size() == 0; }
|
||||||
|
void clear() noexcept { m_size = 0; }
|
||||||
|
void resizeForOverwrite(qsizetype s)
|
||||||
|
{
|
||||||
|
Q_ASSERT(s >= 0);
|
||||||
|
Q_ASSERT(size_t(s) <= N);
|
||||||
|
m_size = std::uint8_t(s);
|
||||||
|
}
|
||||||
|
QByteArrayView toByteArrayView() const noexcept
|
||||||
|
{ return QByteArrayView{m_data.data(), size()}; }
|
||||||
|
};
|
||||||
|
|
||||||
static constexpr qsizetype MaxHashLength = 64;
|
static constexpr qsizetype MaxHashLength = 64;
|
||||||
|
|
||||||
static constexpr int hashLengthInternal(QCryptographicHash::Algorithm method) noexcept
|
static constexpr int hashLengthInternal(QCryptographicHash::Algorithm method) noexcept
|
||||||
@ -273,26 +295,9 @@ public:
|
|||||||
void sha3Finish(int bitCount, Sha3Variant sha3Variant);
|
void sha3Finish(int bitCount, Sha3Variant sha3Variant);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
class SmallByteArray {
|
|
||||||
std::array<quint8, MaxHashLength> m_data;
|
|
||||||
static_assert(MaxHashLength <= std::numeric_limits<std::uint8_t>::max());
|
|
||||||
quint8 m_size;
|
|
||||||
public:
|
|
||||||
quint8 *data() noexcept { return m_data.data(); }
|
|
||||||
qsizetype size() const noexcept { return qsizetype{m_size}; }
|
|
||||||
bool isEmpty() const noexcept { return size() == 0; }
|
|
||||||
void clear() noexcept { m_size = 0; }
|
|
||||||
void resizeForOverwrite(qsizetype s) {
|
|
||||||
Q_ASSERT(s >= 0);
|
|
||||||
Q_ASSERT(s <= MaxHashLength);
|
|
||||||
m_size = std::uint8_t(s);
|
|
||||||
}
|
|
||||||
QByteArrayView toByteArrayView() const noexcept
|
|
||||||
{ return QByteArrayView{m_data.data(), size()}; }
|
|
||||||
};
|
|
||||||
// protects result in finalize()
|
// protects result in finalize()
|
||||||
QBasicMutex finalizeMutex;
|
QBasicMutex finalizeMutex;
|
||||||
SmallByteArray result;
|
QSmallByteArray<MaxHashLength> result;
|
||||||
|
|
||||||
const QCryptographicHash::Algorithm method;
|
const QCryptographicHash::Algorithm method;
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user