예제 #1
0
        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)
예제 #2
0
파일: plain.py 프로젝트: AmiZya/emesene
        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)
예제 #3
0
        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)
예제 #4
0
        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)
예제 #5
0
파일: anonymous.py 프로젝트: AmiZya/emesene
    """
    """

    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)
예제 #6
0
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)
예제 #7
0
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)
예제 #8
0
            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)
예제 #9
0
        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)
예제 #10
0
        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)
예제 #11
0
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)
예제 #12
0
            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')
예제 #13
0
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)
예제 #14
0
            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')
예제 #15
0
        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)
예제 #16
0
파일: plain.py 프로젝트: stlcours/emesene
        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)
'''
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)

예제 #18
0
파일: cram_md5.py 프로젝트: Petraea/jsonbot
            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)
예제 #19
0
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)
예제 #20
0
            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")