示例#1
0
文件: phprpc.py 项目: mlzboy/resys
 def __invoke(self, name, args, byRef, encryptmode):
     data = {'result' : None, 'warning' : None, 'output' : ''}
     try:
         try :
             if encryptmode == None:
                 encryptmode = self.__encryptmode
             self.__lock1.acquire()
             try:
                 encryptmode = self.__key_exchange(encryptmode)
             finally:
                 self.__lock1.release()
             result = self.__post("phprpc_func=%s&phprpc_args=%s&phprpc_encrypt=%s&phprpc_ref=%s" % (
                 name,
                 base64.b64encode(self.__encrypt(phpformat.serialize(args), 1, encryptmode)).replace('+', '%2B'),
                 encryptmode,
                 str(byRef).lower()
             ))
             if result.has_key('phprpc_errstr') and result.has_key('phprpc_errno'):
                 if (int(result['phprpc_errno']) == 0):
                     warning = None
                 else:
                     warning = PHPRPC_Error(int(result['phprpc_errno']), base64.b64decode(result['phprpc_errstr']))
             elif result.has_key('phprpc_functions'):
                 warning = PHPRPC_Error(1, "PHPRPC server haven't received the POST data!")
             else:
                 warning = PHPRPC_Error(1, "PHPRPC server occured unknown error!")
             data['warning'] = warning
             if result.has_key('phprpc_output'):
                 output = base64.b64decode(result['phprpc_output'])
                 if self.__server_version >= 3: output = self.__decrypt(output, 3, encryptmode)
             else:
                 output = ''
             data['output'] = output
             if result.has_key('phprpc_result'):
                 if result.has_key('phprpc_args'):
                     #arguments = phpformat.unserialize(self.__decrypt(base64.b64decode(result['phprpc_arg']), 1, encryptmode))
                     arguments = phpformat.unserialize(self.__decrypt(base64.b64decode(result['phprpc_args']), 1, encryptmode))
                     #for key in arguments: args[key] = arguments[key]
                     if isinstance(args, types.ListType) :
                         for key in arguments: args[key] = arguments[key]
                 data['result'] = phpformat.unserialize(self.__decrypt(base64.b64decode(result['phprpc_result']), 2, encryptmode))
             else:
                 data['result'] = warning
         except PHPRPC_Error, e:
             data['result'] = e
         except Exception, ex:
             if ex is types.StringType:
                 data['result'] = PHPRPC_Error(1, ex)
             else:
                 e = tuple(ex)
                 if (len(e) == 2) and (type(e[0]) is types.IntType) and (type(e[1]) is types.StringType):
                     data['result'] = PHPRPC_Error(e[0], e[1])
                 else:
                     data['result'] = PHPRPC_Error(1, str(ex))
示例#2
0
文件: phprpc.py 项目: mlzboy/resys
 def __key_exchange(self, encryptmode):
     if (self.__key != None) or (encryptmode == 0):
         return encryptmode
     if (self.__key == None) and (self.__keyexchanged):
         return 0
     result = self.__post("phprpc_encrypt=true&phprpc_keylen=%i" % self.__keylength)
     if result.has_key('phprpc_keylen') :
         self.__keylength = int(result['phprpc_keylen'])
     else :
         self.__keylength = 128
     if result.has_key('phprpc_encrypt'):
         encrypt = phpformat.unserialize(base64.b64decode(result['phprpc_encrypt']))
         x = random.randint(1 << (self.__keylength - 2), 1 << (self.__keylength - 1))
         key = pow(long(encrypt['y']), x, long(encrypt['p']))
         if self.__keylength == 128:
             key = hex(key)[2:-1].rjust(32, '0')
             self.__key = ''.join((chr(int(key[i*2:i*2+2], 16)) for i in xrange(16)))
         else:
             self.__key = md5.new(str(key)).digest()
         y = pow(long(encrypt['g']), x, long(encrypt['p']))
         self.__post('phprpc_encrypt=%s' % y)
     else:
         self.__key = None
         self.__keyexchanged = True
         self.__encryptmode = 0
         encryptmode = 0
     return encryptmode
示例#3
0
class DHParams:

    lengths = [96, 128, 160, 192, 256, 512, 768, 1024, 1536, 2048, 3072, 4096]
    dhparams_gen = {}
    __dir__ = os.path.dirname(__file__)
    for length in lengths:
        dhparams_gen[length] = phpformat.unserialize(
            open("%s/dhparams/%s.dhp" % (__dir__, length), 'rb').read())

    def get_nearest(cls, n):
        j = 0
        m = abs(cls.lengths[0] - n)
        for i in xrange(len(cls.lengths)):
            t = abs(cls.lengths[i] - n)
            if m > t: (m, j) = (t, i)
        return cls.lengths[j]

    get_nearest = classmethod(get_nearest)

    def get(cls, length):
        length = cls.get_nearest(length)
        dhparams = cls.dhparams_gen[length]
        return [length, dhparams[random.randint(0, len(dhparams))]]

    get = classmethod(get)
示例#4
0
 def __key_exchange(self, encryptmode):
     if (self.__key != None) or (encryptmode == 0):
         return encryptmode
     if (self.__key == None) and (self.__keyexchanged):
         return 0
     result = self.__post("phprpc_encrypt=true&phprpc_keylen=%i" %
                          self.__keylength)
     if result.has_key('phprpc_keylen'):
         self.__keylength = int(result['phprpc_keylen'])
     else:
         self.__keylength = 128
     if result.has_key('phprpc_encrypt'):
         encrypt = phpformat.unserialize(
             base64.b64decode(result['phprpc_encrypt']))
         x = random.randint(1 << (self.__keylength - 2), 1 <<
                            (self.__keylength - 1))
         key = pow(long(encrypt['y']), x, long(encrypt['p']))
         if self.__keylength == 128:
             key = hex(key)[2:-1].rjust(32, '0')
             self.__key = ''.join(
                 (chr(int(key[i * 2:i * 2 + 2], 16)) for i in xrange(16)))
         else:
             self.__key = md5.new(str(key)).digest()
         y = pow(long(encrypt['g']), x, long(encrypt['p']))
         self.__post('phprpc_encrypt=%s' % y)
     else:
         self.__key = None
         self.__keyexchanged = True
         self.__encryptmode = 0
         encryptmode = 0
     return encryptmode
示例#5
0
文件: phprpc.py 项目: mlzboy/resys
 def __args(self, s, key, encrypt):
     #return phpformat.dict_to_list(phpformat.unserialize(
     #    self.__decrypt_string(base64.b64decode(s), key, 1, encrypt)
     #)) if s else []
     result = []
     if s :
         result = phpformat.dict_to_list(phpformat.unserialize( self.__decrypt_string(base64.b64decode(s), key, 1, encrypt)))
     return result
示例#6
0
 def __args(self, s, key, encrypt):
     #return phpformat.dict_to_list(phpformat.unserialize(
     #    self.__decrypt_string(base64.b64decode(s), key, 1, encrypt)
     #)) if s else []
     result = []
     if s:
         result = phpformat.dict_to_list(
             phpformat.unserialize(
                 self.__decrypt_string(base64.b64decode(s), key, 1,
                                       encrypt)))
     return result
示例#7
0
文件: phprpc.py 项目: mlzboy/resys
 def __session(self, session, cid, hash = None):
     if hash:
         session[cid] = phpformat.serialize(hash)
     else:
         return phpformat.unserialize(session.get(cid, 'a:0:{}'))
示例#8
0
 def __session(self, session, cid, hash=None):
     if hash:
         session[cid] = phpformat.serialize(hash)
     else:
         return phpformat.unserialize(session.get(cid, 'a:0:{}'))
示例#9
0
 def __invoke(self, name, args, byRef, encryptmode):
     data = {'result': None, 'warning': None, 'output': ''}
     try:
         try:
             if encryptmode == None:
                 encryptmode = self.__encryptmode
             self.__lock1.acquire()
             try:
                 encryptmode = self.__key_exchange(encryptmode)
             finally:
                 self.__lock1.release()
             result = self.__post(
                 "phprpc_func=%s&phprpc_args=%s&phprpc_encrypt=%s&phprpc_ref=%s"
                 % (name,
                    base64.b64encode(
                        self.__encrypt(phpformat.serialize(args), 1,
                                       encryptmode)).replace('+', '%2B'),
                    encryptmode, str(byRef).lower()))
             if result.has_key('phprpc_errstr') and result.has_key(
                     'phprpc_errno'):
                 if (int(result['phprpc_errno']) == 0):
                     warning = None
                 else:
                     warning = PHPRPC_Error(
                         int(result['phprpc_errno']),
                         base64.b64decode(result['phprpc_errstr']))
             elif result.has_key('phprpc_functions'):
                 warning = PHPRPC_Error(
                     1, "PHPRPC server haven't received the POST data!")
             else:
                 warning = PHPRPC_Error(
                     1, "PHPRPC server occured unknown error!")
             data['warning'] = warning
             if result.has_key('phprpc_output'):
                 output = base64.b64decode(result['phprpc_output'])
                 if self.__server_version >= 3:
                     output = self.__decrypt(output, 3, encryptmode)
             else:
                 output = ''
             data['output'] = output
             if result.has_key('phprpc_result'):
                 if result.has_key('phprpc_args'):
                     #arguments = phpformat.unserialize(self.__decrypt(base64.b64decode(result['phprpc_arg']), 1, encryptmode))
                     arguments = phpformat.unserialize(
                         self.__decrypt(
                             base64.b64decode(result['phprpc_args']), 1,
                             encryptmode))
                     #for key in arguments: args[key] = arguments[key]
                     if isinstance(args, types.ListType):
                         for key in arguments:
                             args[key] = arguments[key]
                 data['result'] = phpformat.unserialize(
                     self.__decrypt(
                         base64.b64decode(result['phprpc_result']), 2,
                         encryptmode))
             else:
                 data['result'] = warning
         except PHPRPC_Error, e:
             data['result'] = e
         except Exception, ex:
             if ex is types.StringType:
                 data['result'] = PHPRPC_Error(1, ex)
             else:
                 e = tuple(ex)
                 if (len(e) == 2) and (type(e[0]) is types.IntType) and (
                         type(e[1]) is types.StringType):
                     data['result'] = PHPRPC_Error(e[0], e[1])
                 else:
                     data['result'] = PHPRPC_Error(1, str(ex))