is_mac_valid¶
The is_mac_valid() function checks if a provided message with a MAC (Message Authentication Code) is valid. This is useful for validating signed URLs or requests.
Syntax¶
Parameters¶
secret: The secret key used for MAC generation (bytes, literal).message_mac: The message with the MAC to validate (bytes, field/expression).ttl: Time-to-live in seconds (integer, literal).timestamp: UNIX timestamp (integer, typicallyhttp.request.timestamp.sec).separator_len: Length of the separator between the message and the MAC (integer, optional, defaults to 0).
Return Value¶
Returns a boolean value: true if the MAC is valid and the timestamp is within the TTL, false otherwise.
MAC Message Format¶
The expected format of the message_mac is [message][separator][timestamp]-[mac].
For example, in a signed URL:
/data/?mac=169344654-P%2FfCbpJGVlevtLtYDMY%2FO0%2FNU8Wjg82PTZmuyxrimuA%3D
- Message:
/data/ - Separator:
?mac=(length is 5) - Timestamp:
169344654 - MAC:
P%2FfCbpJGVlevtLtYDMY%2FO0%2FNU8Wjg82PTZmuyxrimuA%3D
The MAC value itself is an HMAC with SHA256, base64 encoded, and may also be URL-encoded. The function handles decoding automatically.
Example¶
# Validating a signed URL where the MAC is in the query string
is_mac_valid(
"my_secret_key",
http.request.uri,
3600,
http.request.timestamp.sec,
5
)
separator_len is 5, which is the length of ?mac=.
Use Cases¶
- Validating signed URLs to grant temporary access to resources.
- Authenticating API requests without exposing a persistent token in the URL.
- Ensuring message integrity and preventing tampering in custom communication protocols.