Advertisement
GoodiesHQ

jbls_server.py

Jun 19th, 2017
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.28 KB | None | 0 0
  1. #!/usr/bin/env python3
  2. from argparse import ArgumentParser
  3. from bottle import route, get, post, run, request, response
  4. import rsa as RSA
  5.  
  6. def modular_inverse(a,n):
  7.     t,newt,r,newr = 0,1,n,a
  8.     while newr != 0:
  9.         quotient = r // newr
  10.         t, newt = newt, t - quotient * newt
  11.         r, newr = newr, r - quotient * newr
  12.     if r > 1: raise Exception('{0} is not invertible'.format(a))
  13.     if t < 0: t = t + n
  14.     return t
  15.  
  16. p = 91835875656360904959684729882521632243899645927069504752930381994595658980777
  17. q = 104714417957934285964579236123378232965901835805951770916387998722825925126387
  18. n = p * q
  19. e = 65537
  20. d = modular_inverse(e,(p-1)*(q-1))
  21.  
  22. class RSASigner:
  23.     def __init__(self):
  24.         self.private_key = RSA.PrivateKey(n,e,d,p,q)
  25.  
  26.     def generate_signature(self, message):
  27.         signature = RSA.sign(message=message, priv_key=self.private_key, hash='MD5')
  28.         return signature.hex()
  29.  
  30. s = RSASigner()
  31.  
  32. """@route("/hello")
  33. def hello():
  34.    return "Hello World!"""
  35.  
  36. @get("/rpc/obtainTicket.action")
  37. def obtainTicket():
  38.     res = """<ObtainTicketResponse><message></message><prolongationPeriod>{0}
  39.          </prolongationPeriod><responseCode>OK</responseCode><salt>{1}
  40.          </salt><ticketId>1</ticketId><ticketProperties>licensee={2}
  41.          \tlicenseType=0\t
  42.          </ticketProperties></ObtainTicketResponse>""".replace(' ','').replace('\n','').format(
  43.             607875500,
  44.             request.GET.get('salt', ''),
  45.             request.GET.get('userName', '')
  46.           )
  47.     response.set_header('Content-Type','text/xml')
  48.     return '<!-- {0} -->\n{1}'.format(s.generate_signature(res.encode()),res)
  49.  
  50. @get("/rpc/ping.action")
  51. def ping():
  52.     res = '<PingResponse><message></message><responseCode>OK</responseCode><salt>' + request.GET.get('salt', '') + '</salt></PingResponse>'
  53.     response.set_header('Content-Type','text/xml')
  54.     return '<!-- {0} -->\n{1}'.format(s.generate_signature(res.encode()),res)
  55.  
  56. @get("/rpc/releaseTicket.action")
  57. def releaseTicket():
  58.     response.status = "301 Not accept"
  59.     return 'Not ok'
  60.     pass
  61.  
  62. if __name__=="__main__":
  63.     ap = ArgumentParser()
  64.     ap.add_argument("-p", "--port", type=int, default=35000, action="store")
  65.     args = ap.parse_args()
  66.     run(host="0.0.0.0", port=args.port, debug=True)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement