summaryrefslogtreecommitdiffstats
path: root/DeDRM_plugin/alfcrypto.py
diff options
context:
space:
mode:
Diffstat (limited to 'DeDRM_plugin/alfcrypto.py')
-rw-r--r--DeDRM_plugin/alfcrypto.py22
1 files changed, 18 insertions, 4 deletions
diff --git a/DeDRM_plugin/alfcrypto.py b/DeDRM_plugin/alfcrypto.py
index ecb7916..3b9f319 100644
--- a/DeDRM_plugin/alfcrypto.py
+++ b/DeDRM_plugin/alfcrypto.py
@@ -8,6 +8,7 @@
# pbkdf2.py Copyright © 2009 Daniel Holth <[email protected]>
# pbkdf2.py This code may be freely used and modified for any purpose.
+import sys
import hmac
from struct import pack
import hashlib
@@ -25,7 +26,10 @@ class Pukall_Cipher(object):
raise Exception("PC1: Bad key length")
wkey = []
for i in range(8):
- wkey.append(key[i*2]<<8 | key[i*2+1])
+ if sys.version_info[0] == 2:
+ wkey.append(ord(key[i*2])<<8 | ord(key[i*2+1]))
+ else:
+ wkey.append(key[i*2]<<8 | key[i*2+1])
dst = bytearray(len(src))
for i in range(len(src)):
temp1 = 0;
@@ -37,7 +41,12 @@ class Pukall_Cipher(object):
sum2 = (sum2+sum1)&0xFFFF
temp1 = (temp1*20021+1)&0xFFFF
byteXorVal ^= temp1 ^ sum2
- curByte = src[i]
+
+ if sys.version_info[0] == 2:
+ curByte = ord(src[i])
+ else:
+ curByte = src[i]
+
if not decryption:
keyXorVal = curByte * 257;
curByte = ((curByte ^ (byteXorVal >> 8)) ^ byteXorVal) & 0xFF
@@ -45,7 +54,12 @@ class Pukall_Cipher(object):
keyXorVal = curByte * 257;
for j in range(8):
wkey[j] ^= keyXorVal;
- dst[i] = curByte
+
+ if sys.version_info[0] == 2:
+ dst[i] = chr(curByte)
+ else:
+ dst[i] = curByte
+
return bytes(dst)
class Topaz_Cipher(object):
@@ -103,7 +117,7 @@ class KeyIVGen(object):
def xorbytes( a, b ):
if len(a) != len(b):
raise Exception("xorbytes(): lengths differ")
- return bytes([x ^ y for x, y in zip(a, b)])
+ return bytes(bytearray([x ^ y for x, y in zip(a, b)]))
def prf( h, data ):
hm = h.copy()