Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
BitgetLimited
GitHub Repository: BitgetLimited/V3-bitget-api-sdk
Path: blob/master/bitget-python-sdk-api/bitget/utils.py
732 views
1
import base64
2
import hmac
3
import time
4
5
from Crypto.Hash import SHA256
6
from Crypto.PublicKey import RSA
7
from Crypto.Signature import PKCS1_v1_5 as pk
8
9
from . import consts as c
10
11
12
def sign(message, secret_key):
13
mac = hmac.new(bytes(secret_key, encoding='utf8'), bytes(message, encoding='utf-8'), digestmod='sha256')
14
d = mac.digest()
15
return str(base64.b64encode(d), 'utf8')
16
17
def signByRSA(message, secret_key):
18
privatekey = RSA.importKey(secret_key)
19
h = SHA256.new(message.encode('utf-8'))
20
signer = pk.new(privatekey)
21
sign = signer.sign(h)
22
return str(base64.b64encode(sign), 'utf8')
23
24
25
def pre_hash(timestamp, method, request_path, body = ""):
26
return str(timestamp) + str.upper(method) + request_path + body
27
28
29
def get_header(api_key, sign, timestamp, passphrase):
30
header = dict()
31
header[c.CONTENT_TYPE] = c.APPLICATION_JSON
32
header[c.OK_ACCESS_KEY] = api_key
33
header[c.OK_ACCESS_SIGN] = sign
34
header[c.OK_ACCESS_TIMESTAMP] = str(timestamp)
35
header[c.OK_ACCESS_PASSPHRASE] = passphrase
36
header[c.LOCALE] = 'zh-CN'
37
38
return header
39
40
41
def parse_params_to_str(params):
42
params = [(key, val) for key, val in params.items()]
43
params.sort(key=lambda x: x[0])
44
# from urllib.parse import urlencode
45
# url = '?' +urlencode(params);
46
url = '?' +toQueryWithNoEncode(params);
47
if url == '?':
48
return ''
49
return url
50
# url = '?'
51
# for key, value in params.items():
52
# url = url + str(key) + '=' + str(value) + '&'
53
#
54
# return url[0:-1]
55
56
def toQueryWithNoEncode(params):
57
url = ''
58
for key, value in params:
59
url = url + str(key) + '=' + str(value) + '&'
60
return url[0:-1]
61
62
63
def get_timestamp():
64
return int(time.time() * 1000)
65
66
67
def signature(timestamp, method, request_path, body, secret_key):
68
if str(body) == '{}' or str(body) == 'None':
69
body = ''
70
message = str(timestamp) + str.upper(method) + request_path + str(body)
71
mac = hmac.new(bytes(secret_key, encoding='utf8'), bytes(message, encoding='utf-8'), digestmod='sha256')
72
d = mac.digest()
73
return base64.b64encode(d)
74
75
def check_none(value, msg=""):
76
if not value:
77
raise Exception(msg + " Invalid params!")
78