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'))