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)