Browse Source

implemented crypto module for client

pull/18/merge
Rossen Georgiev 9 years ago
parent
commit
b416c6c163
  1. 1
      setup.py
  2. 0
      steam/client/__init__.py
  3. 35
      steam/client/crypto.py

1
setup.py

@ -14,6 +14,7 @@ with open(path.join(here, 'steam/__init__.py'), encoding='utf-8') as f:
install_requires = [
'requests',
'vdf',
'pycrypto',
]
if sys.version_info < (3, 4):

0
steam/client/__init__.py

35
steam/client/crypto.py

@ -0,0 +1,35 @@
from base64 import b64decode
from Crypto import Random
from Crypto.Cipher import PKCS1_OAEP, AES
from Crypto.PublicKey import RSA
public_key = """
MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDf7BrWLBBmLBc1OhSwfFkRf53T
2Ct64+AVzRkeRuh7h3SiGEYxqQMUeYKO6UWiSRKpI2hzic9pobFhRr3Bvr/WARvY
gdTckPv+T1JzZsuVcNfFjrocejN1oWI0Rrtgt4Bo+hOneoo3S57G9F1fOpn5nsQ6
6WOiu4gZKODnFMBCiQIBEQ==
"""
BS = AES.block_size
pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS)
unpad = lambda s: s[0:-ord(s[-1])]
def generate_session_key():
session_key = Random.new().read(32)
cipher = PKCS1_OAEP.new(RSA.importKey(b64decode(public_key)))
encrypted_session_key = cipher.encrypt(session_key)
return (session_key, encrypted_session_key)
def encrypt(message, key):
iv = Random.new().read(BS)
encrypted_iv = AES.new(key, AES.MODE_ECB).encrypt(iv)
cyphertext = AES.new(key, AES.MODE_CBC, iv).encrypt(pad(message))
return encrypted_iv + cyphertext
def decrypt(cyphertext, key):
iv = AES.new(key, AES.MODE_ECB).decrypt(cyphertext[:BS])
message = AES.new(key, AES.MODE_CBC, iv).decrypt(cyphertext[BS:])
return unpad(message)
Loading…
Cancel
Save