signature.py
772 Bytes
# Winpay Signature Generator
import hashlib
import json
from .encrypt import sign_without_salt
def time_to_str(t: 'datetime with time zone'):
s = t.strftime('%Y-%m-%dT%H:%M:%S%z')
return s[:-2] + ':' + s[-2:]
def generator(
private_key: bytes, data: dict, timestamp: 'datetime with time zone',
http_method='POST',
end_point_url='/v1.0/transfer-va/create-va') -> bytes:
body = json.dumps(data, separators=(',', ':'))
body_byte = body.encode('utf-8')
body_hash = hashlib.sha256(body_byte).hexdigest().lower()
timestamp_str = time_to_str(timestamp)
sign_list = [http_method, end_point_url, body_hash, timestamp_str]
sign_str = ':'.join(sign_list)
return sign_without_salt(private_key, sign_str.encode('utf-8'))