+def decode_signature(js_url, s):
+ script = urlopen(js_url).read()
+ func_name = re.search(R"\b([a-z]+)\([a-z]+\.s\);", script).groups()[0]
+ p1 = script.find("function " + func_name)
+ p2 = script.find("}", p1)
+ func_block = script[p1:p2+1]
+
+ p = subprocess.Popen(
+ ["js"],
+ stdin=subprocess.PIPE,
+ stdout=subprocess.PIPE
+ )
+ p.stdin.write(func_block + "\n")
+ p.stdin.write("console.log(%s('%s'));\n" % (func_name, s))
+ p.stdin.close()
+
+ signature = p.stdout.read().strip()
+ if p.wait() != 0:
+ raise Exception("js failed to execute: %d" % p.returncode)
+
+ return signature
+