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));
}
QByteArray QMessageAuthenticationCode::hash(const QByteArray &msg, const QByteArray &key,
QCryptographicHash::Algorithm method)
{
return hash(qToByteArrayViewIgnoringNull(msg),
qToByteArrayViewIgnoringNull(key), method);
}
#include "qstring.h"
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
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)
{
QMessageAuthenticationCodePrivate mac(method);

View File

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