QMessageAuthenticationCode: port to QByteArrayView [3/3]: static hash()

The class is not used frequently enough to warrant the overhead of a
Q_WEAK_ QByteArray overload to fix the SiC Type A for users that pass
objects that implicitly convert to QByteArray, esp. since we'd need
_four_ overloads to handle the two byte array arguments here, and
still cause ambiguities, because there's only one level of "weakness"
in Q_WEAK_OVERLOAD, but we'd need two.  QCryptographicHash::hash()
also doesn't have it.

[ChangeLog][QtCore][QMessageAuthenticationCode] The constructor,
setKey(), addData() methods as well as the static hash() function take
arguments by QByteArrayView instead of QByteArray now.

[ChangeLog][Potentially Source-Incompatible Changes] More APIs now
take QByteArrayView instead of QByteArray. You will now get a compile
error when your code passes to such functions objects that implicitly
convert to QByteArray, but not QByteArrayView. Wrapping such arguments
in QByteArray{~~~} to make the cast explicit is a backwards-compatible
way to avoid this problem.

Fixes: QTBUG-111676
Change-Id: Iaff832df3b315ca2eee7bff93720b6681182036f
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
This commit is contained in:
Marc Mutz 2023-03-02 19:05:16 +01:00
parent 6a6e9337c7
commit c19f9716fb
3 changed files with 14 additions and 1 deletions

View File

@ -502,6 +502,13 @@ void QMessageAuthenticationCode::addData(const QByteArray &data)
addData(qToByteArrayViewIgnoringNull(data)); addData(qToByteArrayViewIgnoringNull(data));
} }
QByteArray QMessageAuthenticationCode::hash(const QByteArray &msg, const QByteArray &key,
QCryptographicHash::Algorithm method)
{
return hash(qToByteArrayViewIgnoringNull(msg),
qToByteArrayViewIgnoringNull(key), method);
}
#include "qstring.h" #include "qstring.h"
qsizetype QString::toUcs4_helper(const ushort *uc, qsizetype length, uint *out) qsizetype QString::toUcs4_helper(const ushort *uc, qsizetype length, uint *out)

View File

@ -1436,8 +1436,10 @@ void QMessageAuthenticationCodePrivate::finalizeUnchecked() noexcept
/*! /*!
Returns the authentication code for the message \a message using Returns the authentication code for the message \a message using
the key \a key and the method \a method. the key \a key and the method \a method.
\include qcryptographichash.cpp {qba-to-qbav-6.6}
*/ */
QByteArray QMessageAuthenticationCode::hash(const QByteArray &message, const QByteArray &key, QByteArray QMessageAuthenticationCode::hash(QByteArrayView message, QByteArrayView key,
QCryptographicHash::Algorithm method) QCryptographicHash::Algorithm method)
{ {
QMessageAuthenticationCodePrivate mac(method); QMessageAuthenticationCodePrivate mac(method);

View File

@ -48,8 +48,12 @@ public:
QByteArrayView resultView() const noexcept; QByteArrayView resultView() const noexcept;
QByteArray result() const; QByteArray result() const;
#if QT_CORE_REMOVED_SINCE(6, 6)
static QByteArray hash(const QByteArray &message, const QByteArray &key, static QByteArray hash(const QByteArray &message, const QByteArray &key,
QCryptographicHash::Algorithm method); QCryptographicHash::Algorithm method);
#endif
static QByteArray hash(QByteArrayView message, QByteArrayView key,
QCryptographicHash::Algorithm method);
private: private:
Q_DISABLE_COPY(QMessageAuthenticationCode) Q_DISABLE_COPY(QMessageAuthenticationCode)