void AuthContext::AppendHashes(WriteBuffer &theBuf, const RawBuffer &theChallengeSeed) { AutoCrit aCrit(mDataCrit); int aNumHashes = 0; int aNumHashPos = theBuf.length(); theBuf.SkipBytes(1); // put num hashes here AuthLoginCommunityMap::iterator anItr = mCommunityMap.begin(); while(anItr!=mCommunityMap.end()) { AuthLoginCommunityData &aData = anItr->second; if(!aData.mSimpleHash.empty()) { MD5Digest aKeyedHash; aKeyedHash.update(theChallengeSeed); aKeyedHash.update(aData.mKeyedHashData); RawBuffer aKeyedHashBuf = aKeyedHash.digest(); theBuf.AppendByte(1); // hash tag theBuf.AppendWString(anItr->first); // community theBuf.AppendBytes(aData.mSimpleHash.data(),aData.mSimpleHash.length()); theBuf.AppendBytes(aKeyedHashBuf.data(),aKeyedHashBuf.length()); aNumHashes++; } ++anItr; } theBuf.SetByte(aNumHashPos,aNumHashes); }
void AuthContext::AppendLoginSecrets(WriteBuffer &theBuf) { AutoCrit aCrit(mDataCrit); SecretList::iterator anItr = mSecretList.begin(); unsigned long aLenPos = theBuf.length(); unsigned char aNumSecrets = 0; theBuf.SkipBytes(1); while(anItr!=mSecretList.end() && aNumSecrets<256) { theBuf.AppendBytes(anItr->mSecret->data(), anItr->mSecret->length()); aNumSecrets++; ++anItr; } theBuf.SetByte(aLenPos,aNumSecrets); }