if challenge is not None: values = {} for kv in challenge.split(b'&'): key, value = kv.split(b'=') values[key] = value resp_data = { 'method': values[b'method'], 'v': '1.0', 'call_id': '1.0', 'nonce': values[b'nonce'], 'access_token': self.values['access_token'], 'api_key': self.values['api_key'] } for k, v in resp_data.items(): resp_data[k] = bytes(v).decode('utf-8') resp = '&'.join(['%s=%s' % (k, v) for k, v in resp_data.items()]) return bytes(resp) return b'' def okay(self): return True register_mechanism('X-FACEBOOK-PLATFORM', 40, X_FACEBOOK_PLATFORM, use_hashes=False)
if 'savepass' not in self.values: if self.sasl.sec_query(self, 'CLEAR-PASSWORD'): self.values['savepass'] = True if 'savepass' not in self.values: del self.values['password'] return True def process(self, challenge=None): """ Process a challenge request and return the response. :param challenge: A challenge issued by the server that must be answered for authentication. """ user = bytes(self.values['username']) password = bytes(self.values['password']) return b'\x00' + user + b'\x00' + password def okay(self): """ Mutual authentication is not supported by PLAIN. :returns: ``True`` """ return True register_mechanism('PLAIN', 5, PLAIN, use_hashes=False)
if "savepass" not in self.values: if self.sasl.sec_query(self, "CLEAR-PASSWORD"): self.values["savepass"] = True if "savepass" not in self.values: del self.values["password"] return True def process(self, challenge=None): """ Process a challenge request and return the response. :param challenge: A challenge issued by the server that must be answered for authentication. """ user = bytes(self.values["username"]) password = bytes(self.values["password"]) return b"\x00" + user + b"\x00" + password def okay(self): """ Mutual authentication is not supported by PLAIN. :returns: ``True`` """ return True register_mechanism("PLAIN", 1, PLAIN, use_hashes=False)
d = parse_challenge(challenge) if b'rspauth' in d: self.mutual_auth(d[b'rspauth']) else: if b'realm' not in d: d[b'realm'] = self.sasl.def_realm for key in ['nonce', 'realm']: if bytes(key) in d: self.values[key] = d[bytes(key)] self.values['nc'] = 0 self._qops = [b'auth'] if b'qop' in d: self._qops = [x.strip() for x in d[b'qop'].split(b',')] self.values['qops'] = self._qops if b'maxbuf' in d: self._max_buffer = int(d[b'maxbuf']) return self.response() def okay(self): """ """ if self._rspauth_okay and self._qop == b'auth-int': self._enc_key = self.hash(self._a1 + self.enc_magic).digest() self._dec_key = self.hash(self._a1 + self.dec_magic).digest() self.encoding = True return self._rspauth_okay register_mechanism('DIGEST-', 30, DIGEST_MD5)
""" """ def __init__(self, sasl, name): """ """ super(ANONYMOUS, self).__init__(sasl, name, 0) def get_values(self): """ """ return {} def process(self, challenge=None): """ """ return b'Anonymous, Suelta' def okay(self): """ """ return True def get_user(self): """ """ return 'anonymous' register_mechanism('ANONYMOUS', 0, ANONYMOUS, use_hashes=False)
class ANONYMOUS(Mechanism): """ """ def __init__(self, sasl, name): """ """ super(ANONYMOUS, self).__init__(sasl, name, 0) def get_values(self): """ """ return {} def process(self, challenge=None): """ """ return b'Anonymous, Suelta' def okay(self): """ """ return True def get_user(self): """ """ return 'anonymous' register_mechanism('ANONYMOUS', 0, ANONYMOUS, use_hashes=False)
from sleekxmpp.thirdparty.suelta.util import bytes from sleekxmpp.thirdparty.suelta.sasl import Mechanism, register_mechanism from sleekxmpp.thirdparty.suelta.exceptions import SASLError, SASLCancelled class X_GOOGLE_TOKEN(Mechanism): def __init__(self, sasl, name): super(X_GOOGLE_TOKEN, self).__init__(sasl, name) self.check_values(['email', 'access_token']) def process(self, challenge=None): email = bytes(self.values['email']) token = bytes(self.values['access_token']) return b'\x00' + email + b'\x00' + token def okay(self): return True register_mechanism('X-GOOGLE-TOKEN', 3, X_GOOGLE_TOKEN, use_hashes=False)
del self.values['password'] def process(self, challenge): """ """ if challenge is None: return None self.check_values(['username', 'password']) username = bytes(self.values['username']) password = bytes(self.values['password']) mac = hmac.HMAC(key=password, digestmod=self.hash) mac.update(challenge) return username + b' ' + bytes(mac.hexdigest()) def okay(self): """ """ return True def get_user(self): """ """ return self.values['username'] register_mechanism('CRAM-', 20, CRAM_MD5)
d = parse_challenge(challenge) if b"rspauth" in d: self.mutual_auth(d[b"rspauth"]) else: if b"realm" not in d: d[b"realm"] = self.sasl.def_realm for key in ["nonce", "realm"]: if bytes(key) in d: self.values[key] = d[bytes(key)] self.values["nc"] = 0 self._qops = [b"auth"] if b"qop" in d: self._qops = [x.strip() for x in d[b"qop"].split(b",")] self.values["qops"] = self._qops if b"maxbuf" in d: self._max_buffer = int(d[b"maxbuf"]) return self.response() def okay(self): """ """ if self._rspauth_okay and self._qop == b"auth-int": self._enc_key = self.hash(self._a1 + self.enc_magic).digest() self._dec_key = self.hash(self._a1 + self.dec_magic).digest() self.encoding = True return self._rspauth_okay register_mechanism("DIGEST-", 30, DIGEST_MD5)
from sleekxmpp.thirdparty.suelta.util import bytes from sleekxmpp.thirdparty.suelta.sasl import Mechanism, register_mechanism class X_MESSENGER_OAUTH2(Mechanism): def __init__(self, sasl, name): super(X_MESSENGER_OAUTH2, self).__init__(sasl, name) self.check_values(['access_token']) def process(self, challenge=None): return bytes(self.values['access_token']) def okay(self): return True register_mechanism('X-MESSENGER-OAUTH2', 10, X_MESSENGER_OAUTH2, use_hashes=False)
self.values['SaltedPassword'] = salted_pass salted_pass = self.values['SaltedPassword'] client_key = self.HMAC(salted_pass, b'Client Key') stored_key = self.H(client_key) client_sig = self.HMAC(stored_key, self._soup) client_proof = XOR(client_key, client_sig) r += b',p=' + b64encode(client_proof).replace(b'\n', b'') server_key = self.HMAC(self.values['SaltedPassword'], b'Server Key') self.server_sig = self.HMAC(server_key, self._soup) return r def process_three(self, challenge=None): """ """ data = parse_challenge(challenge) if b64decode(data[b'v']) == self.server_sig: self._rspauth = True def okay(self): """ """ return self._rspauth def get_user(self): return self.values['username'] register_mechanism('SCRAM-', 60, SCRAM_HMAC) register_mechanism('SCRAM-', 70, SCRAM_HMAC, extra='-PLUS')
super(X_FACEBOOK_PLATFORM, self).__init__(sasl, name) self.check_values(['access_token', 'api_key']) def process(self, challenge=None): if challenge is not None: values = {} for kv in challenge.split(b'&'): key, value = kv.split(b'=') values[key] = value resp_data = { 'method': values[b'method'], 'v': '1.0', 'call_id': '1.0', 'nonce': values[b'nonce'], 'access_token': self.values['access_token'], 'api_key': self.values['api_key'] } for k, v in resp_data.items(): resp_data[k] = bytes(v).decode('utf-8') resp = '&'.join(['%s=%s' % (k, v) for k, v in resp_data.items()]) return bytes(resp) return b'' def okay(self): return True register_mechanism('X-FACEBOOK-PLATFORM', 40, X_FACEBOOK_PLATFORM, use_hashes=False)
''' Created on Mar 19, 2012 @author: mpetyx ''' from sleekxmpp.thirdparty.suelta.sasl import Mechanism, register_mechanism class EXTERNAL(Mechanism): def __init__(self, sasl, name): super(EXTERNAL, self).__init__(sasl, name) def process(self, challenge=None): return '' def okay(self): return True register_mechanism('EXTERNAL', 90, EXTERNAL, use_hashes=False)
self.values["SaltedPassword"] = salted_pass salted_pass = self.values["SaltedPassword"] client_key = self.HMAC(salted_pass, b"Client Key") stored_key = self.H(client_key) client_sig = self.HMAC(stored_key, self._soup) client_proof = XOR(client_key, client_sig) r += b",p=" + b64encode(client_proof).replace(b"\n", b"") server_key = self.HMAC(self.values["SaltedPassword"], b"Server Key") self.server_sig = self.HMAC(server_key, self._soup) return r def process_three(self, challenge=None): """ """ data = parse_challenge(challenge) if b64decode(data[b"v"]) == self.server_sig: self._rspauth = True def okay(self): """ """ return self._rspauth def get_user(self): return self.values["username"] register_mechanism("SCRAM-", 60, SCRAM_HMAC) register_mechanism("SCRAM-", 70, SCRAM_HMAC, extra="-PLUS")