| import hashlib |
| import hmac |
|
|
|
|
| def verify_meta_signature(body: bytes, signature_header: str | None, app_secret: str) -> bool: |
| if not signature_header or not signature_header.startswith("sha256="): |
| return False |
|
|
| expected = "sha256=" + hmac.new( |
| app_secret.encode("utf-8"), |
| body, |
| hashlib.sha256, |
| ).hexdigest() |
| return hmac.compare_digest(expected, signature_header) |
|
|
|
|
| def verify_webhook_challenge( |
| mode: str | None, |
| verify_token: str | None, |
| expected_verify_token: str, |
| ) -> bool: |
| return mode == "subscribe" and verify_token == expected_verify_token |
|
|