Skip to content

Instantly share code, notes, and snippets.

@evtn
Created November 8, 2020 18:58
Show Gist options
  • Select an option

  • Save evtn/fa2c5a8bbb7799113ce8a642a29b3fe2 to your computer and use it in GitHub Desktop.

Select an option

Save evtn/fa2c5a8bbb7799113ce8a642a29b3fe2 to your computer and use it in GitHub Desktop.
Better sign check example (works in Python 3.6+)
from base64 import b64encode
from hashlib import sha256
from hmac import HMAC
from urllib.parse import urlparse, parse_qsl, urlencode
def sign_checker(query: dict, secret: str) -> bool:
"""Check VK Apps signature"""
vk_subset = filter(
lambda key: key.startswith("vk_"),
query
)
ordered = {k: query[k] for k in sorted(vk_subset)}
hash_code = b64encode(
HMAC(
secret.encode(),
urlencode(ordered, doseq=True).encode(),
sha256
).digest()
).decode("utf-8")
fixed_hash = hash_code[:-1 if hash_code[-1] == "=" else None].replace('+', '-').replace('/', '_')
return query.get("sign") == fixed_hash
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment