diff --git a/src/corelib/tools/qmessageauthenticationcode.cpp b/src/corelib/tools/qmessageauthenticationcode.cpp index 4ff48fc822e..8f131e45a07 100644 --- a/src/corelib/tools/qmessageauthenticationcode.cpp +++ b/src/corelib/tools/qmessageauthenticationcode.cpp @@ -75,6 +75,9 @@ public: bool messageHashInited; void initMessageHash(); + void finalize(); + + void finalizeUnchecked(); }; void QMessageAuthenticationCodePrivate::initMessageHash() @@ -208,27 +211,35 @@ bool QMessageAuthenticationCode::addData(QIODevice *device) */ QByteArray QMessageAuthenticationCode::result() const { - if (!d->result.isEmpty()) - return d->result; + d->finalize(); + return d->result; +} - d->initMessageHash(); +void QMessageAuthenticationCodePrivate::finalize() +{ + if (!result.isEmpty()) + return; + initMessageHash(); + finalizeUnchecked(); +} - const int blockSize = qt_hash_block_size(d->method); +void QMessageAuthenticationCodePrivate::finalizeUnchecked() +{ + const int blockSize = qt_hash_block_size(method); - QByteArrayView hashedMessage = d->messageHash.resultView(); + QByteArrayView hashedMessage = messageHash.resultView(); QVarLengthArray oKeyPad(blockSize); - const char * const keyData = d->key.constData(); + const char * const keyData = key.constData(); for (int i = 0; i < blockSize; ++i) oKeyPad[i] = keyData[i] ^ 0x5c; - QCryptographicHash hash(d->method); + QCryptographicHash hash(method); hash.addData(oKeyPad); hash.addData(hashedMessage); - d->result = hash.result(); - return d->result; + result = hash.result(); } /*!