Код Middle Криптография на практике и JWT обновлено

Проверка HMAC-подписи вебхука

Условие

Напишите verify_webhook(body, signature, secret). Партнёр подписывает тело запроса HMAC-SHA256 с общим секретом и передаёт подпись hex-строкой.

Верните True, если signature (без учёта регистра букв) совпадает с HMAC-SHA256 от body (строка в UTF-8) с ключом secret (строка в UTF-8). Некорректный hex и подпись не той длины дают False. Сравнение должно быть за постоянное время.

Примеры

verify_webhook("{\"event\":\"paid\",\"amount\":100}", "9c8ce9ee855e5f196c922e4c316754536ffd235415d1017b135431783c3ff108", "whsec_test") // true
verify_webhook("{\"event\":\"paid\",\"amount\":100}", "9C8CE9EE855E5F196C922E4C316754536FFD235415D1017B135431783C3FF108", "whsec_test") // true
verify_webhook("{\"event\":\"paid\",\"amount\":999}", "9c8ce9ee855e5f196c922e4c316754536ffd235415d1017b135431783c3ff108", "whsec_test") // false

Как подойти

Подсказки: 2
  1. Переведите hex в байты через bytes.fromhex внутри try.
  2. hmac.compare_digest(a, b) для сравнения.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.