Example #1
0
	def initialize(self):
		if self.type == 'CDN':
			return True
			
		self.session_key = CryptoUtil.create_session_key()
		crypted_key = CryptoUtil.rsa_encrypt(self.session_key)

		url = "http://%s:%s/initsession/" % (self.host, self.port)
		
		payload = dict(sessionkey = crypted_key)
		
		if self.app_ticket:
			payload['appticket'] = CryptoUtil.symmetric_encrypt(self.app_ticket, self.session_key)
		else:
			payload['anonymoususer'] = 1
			payload['steamid'] = self.steamid.steamid

		r = self.session.post(url, payload)
		
		if r.status_code != 200:
			return False
			
		sessionkv = vdf.loads(r.content)['response']
		self.csid = sessionkv['csid']
		self.session_id = int(sessionkv['sessionid']) & 0xFFFFFFFFFFFFFFFF
		self.req_counter = int(sessionkv['req-counter'])
		return True
Example #2
0
    def channel_encrypt_request(self, msg):
        message = msg_base.Message(msg_base.MsgHdr, msg_base.ChannelEncryptRequest)
        message.parse(msg)

        if message.body.protocol_version != 1:
            raise ProtocolError('Unexpected channel encryption protocol')

        if message.body.universe != EUniverse.Public:
            raise ProtocolError('Unexpected universe in encryption request')

        session_key = CryptoUtil.create_session_key()
        crypted_key = CryptoUtil.rsa_encrypt(session_key)
        key_crc = binascii.crc32(crypted_key) & 0xFFFFFFFF

        response = msg_base.Message(msg_base.MsgHdr, msg_base.ChannelEncryptResponse, EMsg.ChannelEncryptResponse)
        response.body.protocol_version = 1
        response.body.key_size = len(crypted_key)
        response.payload = crypted_key + struct.pack('II', key_crc, 0)

        self.send_message(response)

        encrypt_result = self.client.wait_for_message(EMsg.ChannelEncryptResult)

        if encrypt_result.body.result != EResult.OK:
            raise ProtocolError('Unable to negotiate channel encryption')

        self.netfilter = NetEncryption(session_key)
        self.client.handle_connected()
    def channel_encrypt_request(self, msg):
        message = msg_base.Message(msg_base.MsgHdr, msg_base.ChannelEncryptRequest)
        message.parse(msg)

        if message.body.protocol_version != 1:
            raise ProtocolError('Unexpected channel encryption protocol')

        if message.body.universe != EUniverse.Public:
            raise ProtocolError('Unexpected universe in encryption request')

        session_key = CryptoUtil.create_session_key()
        crypted_key = CryptoUtil.rsa_encrypt(session_key)
        key_crc = binascii.crc32(crypted_key) & 0xFFFFFFFF

        response = msg_base.Message(msg_base.MsgHdr, msg_base.ChannelEncryptResponse, EMsg.ChannelEncryptResponse)
        response.body.protocol_version = 1
        response.body.key_size = len(crypted_key)
        response.payload = crypted_key + struct.pack('II', key_crc, 0)

        self.send_message(response)

        encrypt_result = self.client.wait_for_message(EMsg.ChannelEncryptResult)

        if encrypt_result.body.result != EResult.OK:
            raise ProtocolError('Unable to negotiate channel encryption')

        self.netfilter = NetEncryption(session_key)
        self.client.handle_connected()
Example #4
0
	def initialize(self):
		if self.type == 'CDN':
			return True
			
		self.session_key = CryptoUtil.create_session_key()
		crypted_key = CryptoUtil.rsa_encrypt(self.session_key)

		url = "http://%s:%s/initsession/" % (self.host, self.port)
		
		payload = dict(sessionkey = crypted_key)
		
		if self.app_ticket:
			payload['appticket'] = CryptoUtil.symmetric_encrypt(self.app_ticket, self.session_key)
		else:
			payload['anonymoususer'] = 1
			payload['steamid'] = self.steamid.steamid

		r = self.session.post(url, payload)
		
		if r.status_code != 200:
			return False
			
		sessionkv = vdf.loads(r.content)['response']
		self.csid = sessionkv['csid']
		self.session_id = int(sessionkv['sessionid']) & 0xFFFFFFFFFFFFFFFF
		self.req_counter = int(sessionkv['req-counter'])
		return True