diff options
Diffstat (limited to 'Swiften/SASL/SCRAMSHA1ClientAuthenticator.cpp')
-rw-r--r-- | Swiften/SASL/SCRAMSHA1ClientAuthenticator.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/Swiften/SASL/SCRAMSHA1ClientAuthenticator.cpp b/Swiften/SASL/SCRAMSHA1ClientAuthenticator.cpp index 41e8f72..15c8ab6 100644 --- a/Swiften/SASL/SCRAMSHA1ClientAuthenticator.cpp +++ b/Swiften/SASL/SCRAMSHA1ClientAuthenticator.cpp @@ -87,8 +87,20 @@ std::map<char, String> SCRAMSHA1ClientAuthenticator::parseMap(const String& s) { } ByteArray SCRAMSHA1ClientAuthenticator::getInitialBareClientMessage() const { - // TODO: Replace , and = - return ByteArray(String("n=" + getAuthenticationID() + ",r=" + clientnonce)); + String authenticationID = getAuthenticationID(); + String escapedAuthenticationID; + for (size_t i = 0; i < authenticationID.getUTF8Size(); ++i) { + if (authenticationID[i] == ',') { + escapedAuthenticationID += "=2C"; + } + else if (authenticationID[i] == '=') { + escapedAuthenticationID += "=3D"; + } + else { + escapedAuthenticationID += authenticationID[i]; + } + } + return ByteArray(String("n=" + escapedAuthenticationID + ",r=" + clientnonce)); } } |