QMessageAuthenticationCode#

The QMessageAuthenticationCode class provides a way to generate hash-based message authentication codes. More

Synopsis#

Functions#

Static functions#

  • def hash (message, key, method)

Note

This documentation may contain snippets that were automatically translated from C++ to Python. We always welcome contributions to the snippet translation. If you see an issue with the translation, you can also let us know by creating a ticket on https:/bugreports.qt.io/projects/PYSIDE

Detailed Description#

Warning

This section contains snippets that were automatically translated from C++ to Python and may contain errors.

Use the QMessageAuthenticationCode class to generate hash-based message authentication codes (HMACs). The class supports all cryptographic hash algorithms from QCryptographicHash (see also Algorithm ).

To generate a message authentication code, pass a suitable hash algorithm and secret key to the constructor. Then process the message data by calling addData() one or more times. After the full message has been processed, get the final authentication code via the result() function:

key = "key"
message = "The quick brown fox jumps over the lazy dog"            ...

code = QMessageAuthenticationCode(QCryptographicHash.Sha256, key)
code.addData(message)
code.result().toHex() # returns "f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8"

For simple cases like above, you can also use the static hash() function:

QMessageAuthenticationCode.hash(message, key, QCryptographicHash.Sha256).toHex()

Note

The cryptographic strength of the HMAC depends upon the size of the secret key, and the security of the underlying hash function.

See also

QCryptographicHash Algorithm

class PySide6.QtCore.QMessageAuthenticationCode(method[, key={}])#
Parameters:
  • methodAlgorithm

  • keyQByteArrayView

Constructs an object that can be used to create a cryptographic hash from data using method method and key key.

Note

In Qt versions prior to 6.6, this function took its arguments as QByteArray , not QByteArrayView . If you experience compile errors, it’s because your code is passing objects that are implicitly convertible to QByteArray , but not QByteArrayView . Wrap the corresponding argument in QByteArray{~~~} to make the cast explicit. This is backwards-compatible with old Qt versions.

PySide6.QtCore.QMessageAuthenticationCode.addData(data)#
Parameters:

dataQByteArrayView

Adds data to the message.

Note

In Qt versions prior to 6.6, this function took its arguments as QByteArray , not QByteArrayView . If you experience compile errors, it’s because your code is passing objects that are implicitly convertible to QByteArray , but not QByteArrayView . Wrap the corresponding argument in QByteArray{~~~} to make the cast explicit. This is backwards-compatible with old Qt versions.

PySide6.QtCore.QMessageAuthenticationCode.addData(device)
Parameters:

devicePySide6.QtCore.QIODevice

Return type:

bool

Reads the data from the open QIODevice device until it ends and adds it to message. Returns true if reading was successful.

Note

device must be already opened.

PySide6.QtCore.QMessageAuthenticationCode.addData(data, length)
Parameters:
  • data – str

  • length – int

This is an overloaded function.

Adds the first length chars of data to the message.

static PySide6.QtCore.QMessageAuthenticationCode.hash(message, key, method)#
Parameters:
  • messageQByteArrayView

  • keyQByteArrayView

  • methodAlgorithm

Return type:

PySide6.QtCore.QByteArray

Returns the authentication code for the message message using the key key and the method method.

Note

In Qt versions prior to 6.6, this function took its arguments as QByteArray , not QByteArrayView . If you experience compile errors, it’s because your code is passing objects that are implicitly convertible to QByteArray , but not QByteArrayView . Wrap the corresponding argument in QByteArray{~~~} to make the cast explicit. This is backwards-compatible with old Qt versions.

PySide6.QtCore.QMessageAuthenticationCode.reset()#

Resets message data. Calling this function doesn’t affect the key.

PySide6.QtCore.QMessageAuthenticationCode.result()#
Return type:

PySide6.QtCore.QByteArray

Returns the final authentication code.

PySide6.QtCore.QMessageAuthenticationCode.resultView()#
Return type:

QByteArrayView

Returns the final hash value.

Note that the returned view remains valid only as long as the QMessageAuthenticationCode object is not modified by other means.

See also

result()

PySide6.QtCore.QMessageAuthenticationCode.setKey(key)#
Parameters:

keyQByteArrayView

Sets secret key. Calling this function automatically resets the object state.

For optimal performance, call this function only to change the active key, not to set an initial key, as in

QMessageAuthenticationCode mac(method);
mac.setKey(key); // does extra work
use(mac);

Prefer to pass initial keys as the constructor argument:

QMessageAuthenticationCode mac(method, key); // OK, optimal
use(mac);

You can use std::optional to delay construction of a QMessageAuthenticationCode until you know the key:

std::optional<QMessageAuthenticationCode> mac;
~~~
key = ~~~;
mac.emplace(method, key);
use(*mac);

Note

In Qt versions prior to 6.6, this function took its arguments as QByteArray , not QByteArrayView . If you experience compile errors, it’s because your code is passing objects that are implicitly convertible to QByteArray , but not QByteArrayView . Wrap the corresponding argument in QByteArray{~~~} to make the cast explicit. This is backwards-compatible with old Qt versions.

PySide6.QtCore.QMessageAuthenticationCode.swap(other)#
Parameters:

otherPySide6.QtCore.QMessageAuthenticationCode

Swaps message authentication code other with this message authentication code. This operation is very fast and never fails.