Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- from argparse import ArgumentParser
- from bottle import route, get, post, run, request, response
- import rsa as RSA
- def modular_inverse(a,n):
- t,newt,r,newr = 0,1,n,a
- while newr != 0:
- quotient = r // newr
- t, newt = newt, t - quotient * newt
- r, newr = newr, r - quotient * newr
- if r > 1: raise Exception('{0} is not invertible'.format(a))
- if t < 0: t = t + n
- return t
- p = 91835875656360904959684729882521632243899645927069504752930381994595658980777
- q = 104714417957934285964579236123378232965901835805951770916387998722825925126387
- n = p * q
- e = 65537
- d = modular_inverse(e,(p-1)*(q-1))
- class RSASigner:
- def __init__(self):
- self.private_key = RSA.PrivateKey(n,e,d,p,q)
- def generate_signature(self, message):
- signature = RSA.sign(message=message, priv_key=self.private_key, hash='MD5')
- return signature.hex()
- s = RSASigner()
- """@route("/hello")
- def hello():
- return "Hello World!"""
- @get("/rpc/obtainTicket.action")
- def obtainTicket():
- res = """<ObtainTicketResponse><message></message><prolongationPeriod>{0}
- </prolongationPeriod><responseCode>OK</responseCode><salt>{1}
- </salt><ticketId>1</ticketId><ticketProperties>licensee={2}
- \tlicenseType=0\t
- </ticketProperties></ObtainTicketResponse>""".replace(' ','').replace('\n','').format(
- 607875500,
- request.GET.get('salt', ''),
- request.GET.get('userName', '')
- )
- response.set_header('Content-Type','text/xml')
- return '<!-- {0} -->\n{1}'.format(s.generate_signature(res.encode()),res)
- @get("/rpc/ping.action")
- def ping():
- res = '<PingResponse><message></message><responseCode>OK</responseCode><salt>' + request.GET.get('salt', '') + '</salt></PingResponse>'
- response.set_header('Content-Type','text/xml')
- return '<!-- {0} -->\n{1}'.format(s.generate_signature(res.encode()),res)
- @get("/rpc/releaseTicket.action")
- def releaseTicket():
- response.status = "301 Not accept"
- return 'Not ok'
- pass
- if __name__=="__main__":
- ap = ArgumentParser()
- ap.add_argument("-p", "--port", type=int, default=35000, action="store")
- args = ap.parse_args()
- run(host="0.0.0.0", port=args.port, debug=True)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement