# pandora.com v15 xmlrpc encrypt/decrypt routines
# for data sent to /radio/xmlrpc/v15 in a POST
# usage:
# _xmlrpc_request_ = pandora_decrypt(_POST_data_)
# _POST_data_ = pandora_encrypt(_xmlrpc_request_)
def blowfish_round_function(XL):
F = S[0][XL>>24]
F += S[1][(XL>>16)&0xff]
F &= 0xffffffff
F ^= S[2][(XL>>8)&0xff]
F += S[3][XL&0xff]
F &= 0xffffffff
return F
def blowfish_intlist_decrypt(Li):
Lo = []
for i in xrange(0, len(Li), 2):
Lo.extend(blowfish_block_decrypt(Li[i], Li[i+1]))
return Lo
def blowfish_intlist_encrypt(Li):
Lo = []
for i in xrange(0, len(Li), 2):
Lo.extend(blowfish_block_encrypt(Li[i], Li[i+1]))
return Lo
def hexstr_to_intlist(H):
L = []
Hl = len(H)
Hm = Hl%8
for i in xrange(0, Hl-Hm, 8):
L.append(int(H[i:i+8],16))
if Hm > 0:
L.append(int(H[Hl-Hm:]+('0'*(8-Hm)),16))
return L
def intlist_to_hexstr(L):
H = ""
for I in L:
s = hex(I).replace('0x','').replace('L','')
H += ('0'*(8-len(s)))+s
return H
def str_to_intlist(S):
L = []
Sl = len(s)
Sm = Sl%4
if Sm > 0:
S += chr(0)*(4-Sm)
for i in xrange(0, len(S), 4):
L.append((ord(S[i])<<24)+(ord(S[i+1])<<16)+(ord(S[i+2])<<8)+ord(S[i+3]))
return L
def intlist_to_str(L):
S = ""
for I in L:
S += chr(I>>24&0xff)+chr(I>>16&0xff)+chr(I>>8&0xff)+chr(I&0xff)
return S