Beispiel #1
0
def encode_shader(shader):
    shader_size = len(shader)
    shader_hash = Math.hash_bkdr(shader)
    print(shader_size, shader_hash)
    print('-------------------------------------------')
    print(shader)
    print('-------------------------------------------')

    encrypt_keys = b'shader'
    encrypt_klen = len(encrypt_keys)
    hexes, array = '', []
    for i in range(shader_size):
        s = '0x%x' % (ord(shader[i]) ^ encrypt_keys[i % encrypt_klen])
        array.append(s)
        hexes += s + ','
        if (i + 1) % 32 == 0:
            hexes += '\n'
    encrypt_size = len(array)

    hexes = Bit.bytes2hex(encrypt_keys) + Bit.bytes2hex(
        Bit.u32_bytes(shader_hash)) + Bit.bytes2hex(
            Bit.u32_bytes(encrypt_size)) + '\n' + hexes[0:-1]
    encrypt_size += 14  # magic + hash + length
    print(('[%d]={\n' % encrypt_size) + hexes + '\n};')
    print('-------------------------------------------')
    shader = ''
    for c in array:
        shader += chr(int(c, 16))
    print(shader)
    print('-------------------------------------------')
Beispiel #2
0
 def _gen_header(self, filenum):
     header = bytearray()
     if self._blurer is None:
         header.append(0)
     else:
         self._blurer.submit(header)
     header.extend(Bit.u16_bytes(self._hseed))
     header.extend(Bit.u16_bytes(filenum))
     for hashcode in self._hashmap:
         info = self._hashmap[hashcode]
         header.extend(Bit.u32_bytes(hashcode))
         header.extend(Bit.u32_bytes(info[0]))
         header.extend(Bit.u32_bytes(info[1]))
     return header
Beispiel #3
0
 def _build(self, source, fillmb):
     taglist = self._load_taglist(source)
     filenum = len(taglist)
     assert filenum <= 0xFFFF, 'file nums exceeds %u' % 0xFFFF
     self._hashmap = {}
     self._fp.write(self._magic)
     self._fp.write(b'0000')
     if fillmb > 0:
         self._filler = AssetBuilder.Filler(fillmb, filenum + 2)
         self._filler.consume(self._fp)
     for tag in taglist:
         self._add_file(tag, os.path.join(source, tag))
     offset = self._fp.tell()
     print('header offset:', offset)
     self._fp.seek(len(self._magic))
     self._fp.write(Bit.u32_bytes(offset))
     self._fp.seek(offset)
     self._fp.write(self._gen_header(filenum))
     if self._filler is not None:
         self._filler.consume(self._fp)
Beispiel #4
0
 def submit(self, buffer):  # 将加密信息记录到资源包
     buffer.append(self._keylen)
     buffer.extend(self._key)
     buffer.extend(Bit.u32_bytes(self._let))