Skip to content

Instantly share code, notes, and snippets.

@LevBravE
Created January 11, 2018 08:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save LevBravE/83b919017a1cf8ae463ba822afd7a5aa to your computer and use it in GitHub Desktop.
Save LevBravE/83b919017a1cf8ae463ba822afd7a5aa to your computer and use it in GitHub Desktop.
Пример подписи запросов для доступа к FuelUP сервису
import os
import requests
import time
import random
import logging
import sqlite3
import json
from Crypto.PublicKey import RSA
from Crypto.Signature import PKCS1_v1_5
from Crypto.Hash import SHA256
from base64 import b64encode
class FuelUP():
def __init__(self, url, private_key, gs, sleep=2):
self.private_key = private_key
self.sleep = sleep
self.url = url
self.gs = gs
self.conn = sqlite3.connect('gs.db')
def _requests(self):
timestamp = str(int(time.time()))
nonce = self.generate_nonce()
sing = self.gs['id'] + timestamp + nonce
session = requests.Session()
session.headers.update({
'gs-id': self.gs['id'],
'timestamp': timestamp,
'nonce': nonce,
'signature': self.sign_data(self.private_key, bytes(sing, 'utf-8'))
})
return session
def sign_data(self, private_key, data):
"""
param: private_key_loc Path to your private key
param: package Data to be signed
return: base64 encoded signature
"""
key = open(private_key, "r").read()
rsakey = RSA.importKey(key)
signer = PKCS1_v1_5.new(rsakey)
digest = SHA256.new()
# It's being assumed the data is base64 encoded, so it's decoded before updating the digest
digest.update(data)
sign = signer.sign(digest)
return b64encode(sign)
def generate_nonce(self, length=8):
"""
Generate pseudorandom number.
"""
return ''.join([str(random.randint(0, 9)) for i in range(length)])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment