signature.py
1.08 KB
# 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 create_data(
data: dict, timestamp: 'datetime with time zone',
http_method='POST', end_point_url='/v1.0/transfer-va/create-va'):
body = json.dumps(data, separators=(',', ':'))
body_byte = body.encode('utf-8')
body_hash = hashlib.sha256(body_byte).hexdigest().lower()
if isinstance(timestamp, str):
timestamp_str = timestamp
else:
timestamp_str = time_to_str(timestamp)
sign_data = [http_method, end_point_url, body_hash, timestamp_str]
sign_data = ':'.join(sign_data)
return sign_data.encode('utf-8')
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:
sign_data = create_data(data, timestamp, http_method, end_point_url)
return sign_without_salt(private_key, sign_data)