]> code.delx.au - monosys/blob - scripts/psi-password.py
3b4d34a083e6a2d0f50a5819d15b9ada3b6bd249
[monosys] / scripts / psi-password.py
1 #!/usr/bin/env python
2 # Copyright 2007 James Bunton <jamesbunton@fastmail.fm>
3 # Licensed for distribution under the GPL version 2, check COPYING for details
4 # Decodes a password taken from a Psi config.xml file
5
6
7 import sys
8
9 def decodePassword(passwd, key):
10 if not key:
11 return passwd
12
13 result = ""
14 n1 = n2 = 0
15 while n1 < len(passwd):
16 x = 0
17 if n1 + 4 > len(passwd):
18 break
19 x += int(passwd[n1+0], 16) * 4096
20 x += int(passwd[n1+1], 16) * 256
21 x += int(passwd[n1+2], 16) * 16
22 x += int(passwd[n1+3], 16) * 1
23 result += chr(x ^ ord(key[n2]))
24 n1 += 4
25 n2 += 1
26 if n2 >= len(key):
27 n2 = 0
28
29 return result
30
31 if __name__ == "__main__":
32 try:
33 passwd = sys.argv[1]
34 key = sys.argv[2]
35 except:
36 print >> sys.stderr, "Usage: %s passwd jid" % sys.argv[0]
37 sys.exit(1)
38 print decodePassword(passwd, key)
39