# `hmac` — Keyed-Hashing for Message Authentication

Вихідний код: Lib/hmac.py

Цей модуль реалізує алгоритм HMAC, як описано в RFC 2104.

`hmac.``new`(key, msg=None, digestmod='')

  Повернути новий об’єкт hmac. key — це об’єкт bytes або bytearray, що надає секретний ключ. Якщо присутній msg, виконується виклик методу `update(msg)`. digestmod — назва дайджесту, конструктор дайджесту або модуль для використання об’єктом HMAC. Це може бути будь-яке ім’я, яке підходить для `hashlib.new()`. Незважаючи на свою аргументовану позицію, вона потрібна.

  Змінено в версії 3.4: Параметр key може бути об’єктом bytes або bytearray. Параметр msg може бути будь-якого типу, який підтримується `hashlib`. Параметр digestmod може бути назвою хеш-алгоритму.

  Deprecated since version 3.4, removed in version 3.8: MD5 as implicit default digest for digestmod is deprecated. The digestmod parameter is now required. Pass it as a keyword argument to avoid awkwardness when you do not have an initial msg.

`hmac.``digest`(key, msg, digest)

  Повернути дайджест повідомлення для заданого секретного ключа та дайджесту. Функція еквівалентна `HMAC(key, msg, digest).digest()`, але використовує оптимізовану C або вбудовану реалізацію, яка є швидшою для повідомлень, які вміщуються в пам’ять. Параметри key, msg і digest мають те саме значення, що й у `new()`.

  Деталі реалізації CPython, оптимізована реалізація C використовується лише тоді, коли digest є рядком і назвою алгоритму дайджесту, який підтримується OpenSSL.

  Нове в версії 3.7.

Об’єкт HMAC має такі методи:

`HMAC.``update`(msg)

  Оновіть об’єкт hmac за допомогою msg. Повторні виклики еквівалентні одному виклику з конкатенацією всіх аргументів: `m.update(a); m.update(b)` еквівалентно `m.update(a + b)`.

  Змінено в версії 3.4: Параметр msg може бути будь-якого типу, який підтримується `hashlib`.

`HMAC.``digest`()

  Повертає дайджест байтів, переданих до цього моменту методу `update()`. Цей об’єкт bytes матиме таку саму довжину, що й digest_size дайджесту, наданого конструктору. Він може містити байти, відмінні від ASCII, включаючи байти NUL.

  Попередження

  When comparing the output of `digest()` to an externally supplied digest during a verification routine, it is recommended to use the `compare_digest()` function instead of the `==` operator to reduce the vulnerability to timing attacks.

`HMAC.``hexdigest`()

  Подібно до `digest()`, за винятком того, що дайджест повертається як рядок подвійної довжини, що містить лише шістнадцяткові цифри. Це можна використовувати для безпечного обміну значенням в електронній пошті чи в інших небінарних середовищах.

  Попередження

  When comparing the output of `hexdigest()` to an externally supplied digest during a verification routine, it is recommended to use the `compare_digest()` function instead of the `==` operator to reduce the vulnerability to timing attacks.

`HMAC.``copy`()

  Повертає копію («клон») об’єкта hmac. Це можна використовувати для ефективного обчислення дайджестів рядків, які мають спільний початковий підрядок.

Хеш-об’єкт має такі атрибути:

`HMAC.``digest_size`

  Розмір отриманого дайджесту HMAC у байтах.

`HMAC.``block_size`

  Розмір внутрішнього блоку хеш-алгоритму в байтах.

  Нове в версії 3.4.

`HMAC.``name`

  Канонічна назва цього HMAC, завжди в нижньому регістрі, напр. `hmac-md5`.

  Нове в версії 3.4.

Застаріло починаючи з версії 3.9: The undocumented attributes `HMAC.digest_cons`, `HMAC.inner`, and `HMAC.outer` are internal implementation details and will be removed in Python 3.10.

Цей модуль також надає такі допоміжні функції:

`hmac.``compare_digest`(a, b)

  Повернути `a == b`. Ця функція використовує підхід, призначений для запобігання аналізу часу шляхом уникнення короткого замикання на основі вмісту, що робить її придатною для криптографії. a і b мають бути одного типу: або `str` (тільки ASCII, як, наприклад, повертає `HMAC.hexdigest()`), або bytes-like object.

  Примітка

  Якщо a і b мають різну довжину або якщо сталася помилка, атака на синхронізацію теоретично може відкрити інформацію про типи та довжини a і b, але не їхні значення.

  Нове в версії 3.3.

  Змінено в версії 3.10: Функція внутрішньо використовує `CRYPTO_memcmp()` OpenSSL, якщо доступний.

Дивись також

Модуль `hashlib`

  Модуль Python, що забезпечує безпечні хеш-функції.