diff options
author | NoDRM <[email protected]> | 2023-08-03 20:01:38 +0200 |
---|---|---|
committer | NoDRM <[email protected]> | 2023-08-03 20:01:38 +0200 |
commit | bc089ee46d3e5bbb458bc0dd7a503962495f9e2c (patch) | |
tree | b68bd2a21c80fbb3fa6758bd169ab9f3946cebc6 /DeDRM_plugin/alfcrypto.py | |
parent | e509b7d520d044a830c5e56ac75493142d05445d (diff) |
More Python2 bugfixes
Diffstat (limited to 'DeDRM_plugin/alfcrypto.py')
-rw-r--r-- | DeDRM_plugin/alfcrypto.py | 22 |
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() |