Exemple #1
0
        /// <inheritdoc/>
        public async Task <XmppXElement> AuthenticateClientAsync(XmppClient xmppClient, CancellationToken cancellationToken)
        {
            var scramHelper = new ScramHelper();

            var username = xmppClient.Username;

#if STRINGPREP
            var password = StringPrep.SaslPrep(xmppClient.Password);
#else
            var password = xmppClient.Password;
#endif

            string msg         = ToB64String(scramHelper.GenerateFirstClientMessage(username));
            var    authMessage = new Auth(SaslMechanism.ScramSha1, msg);

            var ret1 = await xmppClient.SendAsync <Failure, Challenge>(authMessage, cancellationToken);

            if (ret1 is Challenge)
            {
                var resp = GenerateFinalMessage(ret1 as Challenge, scramHelper, password);
                var ret2 = await xmppClient.SendAsync <Failure, Success>(resp, cancellationToken);

                return(ret2);
            }

            return(ret1);
        }
Exemple #2
0
        private Response GenerateFinalMessage(Challenge ch, ScramHelper scramHelper, string password)
        {
            byte[] b = ch.Bytes;
            string firstServerMessage = Encoding.UTF8.GetString(b, 0, b.Length);
            string clientFinalMessage = scramHelper.GenerateFinalClientMessage(firstServerMessage, password);

            return(new Response(ToB64String(clientFinalMessage)));
        }