hmac – Keyed hashing for message authentication

This module implements a subset of the corresponding CPython module, as described below. For more information, refer to the original CPython documentation: cpython:hmac.

The key may be a bytes-like object or, where the port provides them, a hardwarekey.HardwareKey – so the same code works with a key in flash during development and a key held in hardware in production. The one exception: an empty message raises ValueError with a hardwarekey.HardwareKey (a hardware driver limitation), where it is valid with a bytes key.

Only "sha256" and "sha1" are supported for digestmod.

Available on these boards
  • 01Space 0.42 OLED ESP32C3
  • AITHinker ESP32-C3S_Kit
  • AITHinker ESP32-C3S_Kit_2M
  • ATMegaZero ESP32-S2
  • Adafruit Camera
  • Adafruit Feather ESP32 V2
  • Adafruit Feather ESP32-C6 4MB Flash No PSRAM
  • Adafruit Feather ESP32-S2 Reverse TFT
  • Adafruit Feather ESP32-S2 TFT
  • Adafruit Feather ESP32-S3 Reverse TFT
  • Adafruit Feather ESP32-S3 TFT
  • Adafruit Feather ESP32S2
  • Adafruit Feather ESP32S3 4MB Flash 2MB PSRAM
  • Adafruit Feather ESP32S3 No PSRAM
  • Adafruit Feather HUZZAH32
  • Adafruit FunHouse
  • Adafruit HUZZAH32 Breakout
  • Adafruit ItsyBitsy ESP32
  • Adafruit MagTag
  • Adafruit MatrixPortal S3
  • Adafruit Metro ESP32S2
  • Adafruit Metro ESP32S3
  • Adafruit Mini Sparkle Motion
  • Adafruit P4 GPIO
  • Adafruit QT Py ESP32 PICO
  • Adafruit QT Py ESP32-S3 4MB Flash 2MB PSRAM
  • Adafruit QT Py ESP32-S3 no psram
  • Adafruit QT Py ESP32C3
  • Adafruit QT Py ESP32S2
  • Adafruit Sparkle Motion
  • Adafruit Sparkle Motion Stick
  • Adafruit Vindie S2
  • Adafruit-Qualia-S3-RGB666
  • Ai Thinker ESP32-CAM
  • Arduino Nano ESP32
  • Artisense Reference Design RD00
  • AutosportLabs-ESP32-CAN-X2
  • BARDUINO 4.0.2
  • BLING!
  • BPI-Bit-S2
  • BPI-Leaf-S3
  • BPI-PicoW-S3
  • BastWiFi
  • Bee-Data-Logger
  • Bee-Motion-S3
  • Bee-S3
  • BlizzardS3
  • CRCibernetica IdeaBoard
  • CircuitART Zero S3
  • ColumbiaDSL-Sensor-Board-V1
  • CrowPanel 4.2 EPaper
  • CrumpS2
  • Cytron EDU PICO 2
  • Cytron EDU PICO W
  • Cytron Maker Feather AIoT S3
  • DFRobot Beetle ESP32-C3
  • DFRobot FireBeetle 2 ESP32-S3
  • Deneyap Kart
  • Deneyap Kart 1A
  • Deneyap Kart 1A v2
  • Deneyap Kart G
  • Deneyap Mini
  • Deneyap Mini v2
  • EDGES3D
  • ES3ink
  • ESP 12k NodeMCU
  • ESP32 Devkit V1
  • ESP32-C3-DevKitM-1
  • ESP32-C3-Lyra-V2
  • ESP32-C5-DevKitC-1-N8R8
  • ESP32-C6-DevKitC-1-N8
  • ESP32-C6-DevKitM-1
  • ESP32-C61-DevKitC-1-N8R2
  • ESP32-H2-DevKitM-1
  • ESP32-P4 Stamp XL
  • ESP32-P4-Function-EV
  • ESP32-P4X-Function-EV
  • ESP32-S2-DevKitC-1-N4
  • ESP32-S2-DevKitC-1-N4R2
  • ESP32-S2-DevKitC-1-N8R2
  • ESP32-S3-Box-2.5
  • ESP32-S3-Box-3
  • ESP32-S3-Box-Lite
  • ESP32-S3-DevKitC-1-N16
  • ESP32-S3-DevKitC-1-N32R16
  • ESP32-S3-DevKitC-1-N32R8
  • ESP32-S3-DevKitC-1-N8
  • ESP32-S3-DevKitC-1-N8R2
  • ESP32-S3-DevKitC-1-N8R2 (ROS version)
  • ESP32-S3-DevKitC-1-N8R8
  • ESP32-S3-DevKitC-1-N8R8-with-HACKTABLET
  • ESP32-S3-DevKitM-1-N8
  • ESP32-S3-EYE
  • ESP32-S3-USB-OTG-N8
  • ESP32-S31-Korvo-1
  • ESP8684-DevKitC-02-N4
  • Elecrow CrowPanel
  • Eliobot
  • Espressif ESP32 DevKitc V4 WROOM-32E
  • Espressif ESP32 DevKitc V4 WROVER
  • Espressif ESP32 TTGO T8 v1.7
  • Espressif ESP32-EYE
  • Espressif ESP32-LyraT
  • Espressif-ESP32-S3-LCD-EV-Board
  • Espressif-ESP32-S3-LCD-EV-Board_v1.5
  • FeatherS2
  • FeatherS2 Neo
  • FeatherS2 PreRelease
  • FeatherS3
  • FeatherS3 Neo
  • Flipper Zero Wi-Fi Dev
  • Franzininho WIFI w/Wroom
  • Franzininho WIFI w/Wrover
  • Freenove ESP32 Display 3.5 inch
  • Freenove ESP32-WROVER-DEV-CAM
  • Generic ESP32S3 Supermini
  • Gravitech Cucumber M
  • Gravitech Cucumber MS
  • Gravitech Cucumber R
  • Gravitech Cucumber RS
  • HMI-DevKit-1.1
  • Hardkernel Odroid Go
  • Heltec ESP32-S3-WIFI-LoRa-V3
  • Heltec Vison Master E290
  • Heltec Wireless Paper
  • HexKyS2
  • IDE-TUDelft RealPicoExpander
  • Ikea Alpstuga Drop-In ESP32S3 4MB Flash 2MB PSRAM
  • IoTs2
  • Kaluga 1
  • LILYGO T-DISPLAY S3 v1.2
  • LILYGO T-Deck (Plus)
  • LILYGO T-Display S3 Pro
  • LILYGO T-Dongle S3
  • LILYGO T-QT PRO NO PSRAM
  • LILYGO T-QT PRO PSRAM
  • LILYGO T-Watch-S3
  • LILYGO TEMBED ESP32S3
  • LILYGO TTGO T-01C3
  • LILYGO TTGO T-DISPLAY v1.1
  • LILYGO TTGO T-DISPLAY v1.1 4M
  • LILYGO TTGO T-OI PLUS
  • LILYGO TTGO T8 ESP32-S2
  • LILYGO TTGO T8 ESP32-S2 w/Display
  • LOLIN S3 16MB Flash 8MB PSRAM
  • LOLIN S3 MINI 4MB Flash 2MB PSRAM
  • LOLIN S3 MINI PRO 4MB Flash 2MB PSRAM
  • LOLIN S3 PRO 16MB Flash 8MB PSRAM
  • Lilygo T-watch 2020 V3
  • Luatos Core-ESP32C3
  • M5STACK STAMP-C3
  • M5Stack Atom Echo
  • M5Stack Atom Lite
  • M5Stack Atom Matrix
  • M5Stack Atom U
  • M5Stack AtomS3
  • M5Stack AtomS3 Lite
  • M5Stack AtomS3U
  • M5Stack Cardputer
  • M5Stack Cardputer (ROS version)
  • M5Stack Core Basic
  • M5Stack Core Fire
  • M5Stack Core2
  • M5Stack CoreS3
  • M5Stack CoreS3 SE
  • M5Stack Dial
  • M5Stack DinMeter
  • M5Stack M5Paper
  • M5Stack Stamp-S3
  • M5Stack Stick C
  • M5Stack Stick C Plus
  • M5Stack Stick C Plus2
  • M5Stack Tab5
  • M5Stack Timer Camera X
  • MORPHEANS MorphESP-240
  • MagiClick S3 N4R2
  • Maker Go ESP32C3 Supermini
  • Maker Go ESP32C6 Supermini
  • Maker badge by Czech maker
  • MakerFabs-ESP32-S3-Parallel-TFT-With-Touch-7inch
  • MicroDev microC3
  • MicroDev microS2
  • MixGo CE
  • NHB Systems JL401-S3 4MB Flash 2MB PSRAM
  • NanoS3
  • Neuron
  • NodeMcu-ESP32-C2
  • OMGS3
  • Oak Dev Tech PixelWing ESP32S2
  • Oxocard Artwork
  • Oxocard Connect
  • Oxocard Galaxy
  • Oxocard Science
  • PCBCupid GLYPH C3
  • PCBCupid GLYPH S3
  • Pajenicko PicoPad
  • Pcbcupid GLYPH C6
  • Pcbcupid GLYPH H2
  • Pimoroni Badger 2040 W
  • Pimoroni Badger 2350
  • Pimoroni Inky Frame 5.7
  • Pimoroni Inky Frame 7.3
  • Pimoroni Pico DV Base W
  • Pimoroni Pico Plus 2 W
  • Pimoroni Plasma 2040W
  • Pimoroni Plasma 2350W
  • ProS3
  • Prokyber Ai-On-The-Edge-Cam
  • RGBTouch Mini
  • Raspberry Pi Pico 2 W
  • Raspberry Pi Pico W
  • Red S2-WROOM
  • S2Mini
  • S2Pico
  • SQFMI Watchy
  • Saola 1 w/Wroom
  • Saola 1 w/Wrover
  • Seeed Studio XIAO ESP32C3
  • Seeed Xiao ESP32-C6 4MB Flash 512KB SRAM
  • Seeed Xiao ESP32-S3 Sense
  • Seeed Xiao ESP32-S3 Trmnl DIY Kit
  • SparkFun Thing Plus RP2350
  • Spotpear ESP32C3 LCD 1.44
  • Spotpear ESP32C3 LCD 1.69
  • Sunton ESP32-2424S012
  • Sunton-ESP32-8048S050
  • Sunton-ESP32-8048S070
  • TTGO T8 ESP32-S2-WROOM
  • Targett Module Clip w/Wroom
  • Targett Module Clip w/Wrover
  • ThingPulse Pendrive S3
  • TinyC6
  • TinyPICO
  • TinyPICO Nano
  • TinyS2
  • TinyS3
  • TinyWATCH S3
  • VCC-GND YD-ESP32-S3 (N16R8)
  • VCC-GND YD-ESP32-S3 (N8R8)
  • VIDI X V1.1
  • W5100S-EVB-Pico
  • W5100S-EVB-Pico2
  • W5500-EVB-Pico
  • W5500-EVB-Pico2
  • W55RP20-EVB-Pico
  • Waveshare ESP32-C5 LCD 1.47
  • Waveshare ESP32-C6 LCD 1.47
  • Waveshare ESP32-S2-Pico
  • Waveshare ESP32-S2-Pico-LCD
  • Waveshare ESP32-S3 LCD 1.47
  • Waveshare ESP32-S3 Touch LCD 1.47
  • Waveshare ESP32-S3 Touch LCD 2.8
  • Waveshare ESP32-S3-ETH
  • Waveshare ESP32-S3-GEEK
  • Waveshare ESP32-S3-Matrix
  • Waveshare ESP32-S3-Pico
  • Waveshare ESP32-S3-Tiny
  • Waveshare ESP32-S3-Tiny-N8R8
  • Waveshare ESP32-S3-Touch-AMOLED-2.41
  • Waveshare ESP32-S3-Touch-LCD-1.69
  • Waveshare ESP32-S3-Touch-LCD-2.1
  • Waveshare ESP32-S3-Zero
  • Waveshare ESP32S3 LCD 1.28
  • Waveshare ESP32S3 Touch LCD 2
  • WeAct ESP32-C6 (4MB)
  • WeAct ESP32-C6 (8MB)
  • WeMos LOLIN32 Lite
  • Wemos Lolin C3 Mini
  • Wemos Lolin C3 Pico
  • Xteink X4
  • Yoto Mini 2024
  • Yoto Player V3
  • cezerio dev ESP32C6
  • nanoESP32-S2 w/Wrover
  • nanoESP32-S2 w/Wroom
  • senseBox MCU Eye ESP32S3
  • senseBox MCU-S2 ESP32S2
  • sunton_esp32_2432S024C
  • sunton_esp32_2432S028
  • sunton_esp32_2432S032C
  • uGame S3

hmac.new(key: circuitpython_typing.ReadableBuffer | hardwarekey.HardwareKey, msg: circuitpython_typing.ReadableBuffer = b'', digestmod: str = ...) → HMAC

Create a new HMAC object.

Parameters:
  • key – the secret key – a bytes-like object, or a hardwarekey.HardwareKey on ports that provide it

  • msg (ReadableBuffer) – initial data to authenticate; add more with HMAC.update()

  • digestmod (str) – the digest name, "sha256" or "sha1". Required.

hmac.digest(key: circuitpython_typing.ReadableBuffer | hardwarekey.HardwareKey, msg: circuitpython_typing.ReadableBuffer, digest: str) → bytes

Return the HMAC of msg under key for the named digest, in one call.

Equivalent to new(key, msg, digestmod=digest).digest() but does not build an intermediate object.

hmac.compare_digest(a: circuitpython_typing.ReadableBuffer, b: circuitpython_typing.ReadableBuffer) → bool

Return a == b using a constant-time comparison, to avoid leaking timing information about a MAC check.

class hmac.HMAC

An HMAC object, in progress. Created by hmac.new(); it has no user-visible constructor.

update(msg: circuitpython_typing.ReadableBuffer) → None

Feed more data into the HMAC.

Raises RuntimeError if called after digest() or hexdigest() – unlike CPython’s hmac, this cannot be resumed once a digest has been taken.

digest() → bytes

Return the HMAC of the data fed so far, as digest_size bytes.

The first call finishes the underlying MAC computation and caches the result; later calls just return the cached bytes. update() can no longer be called after this, unlike CPython’s hmac.

hexdigest() → str

Like digest() but returns the MAC as a string of hexadecimal digits.

copy() → HMAC

Not supported; always raises NotImplementedError.

PSA Crypto’s multipart MAC API has no way to duplicate an in-progress MAC operation (unlike a plain hash, which can be cloned), so this HMAC object cannot be copied.

digest_size: int

The size of the MAC in bytes (32 for sha256, 20 for sha1). (read-only)

block_size: int

The internal block size of the hash algorithm in bytes. (read-only)

name: str

The canonical name of this HMAC, e.g. "hmac-sha256". (read-only)