in src/Microsoft.Azure.Relay/WebSockets/NetStandard20/AuthenticationHelper.Digest.cs [341:394]
private string GetNextKey(string data, int currentIndex, out int parsedIndex)
{
// Skip leading space or tab.
while (currentIndex < data.Length && CharIsSpaceOrTab(data[currentIndex]))
{
currentIndex++;
}
// Start parsing key
int start = currentIndex;
// Parse till '=' is encountered marking end of key.
// Key cannot contain space or tab, break if either is found.
while (currentIndex < data.Length && data[currentIndex] != '=' && !CharIsSpaceOrTab(data[currentIndex]))
{
currentIndex++;
}
if (currentIndex == data.Length)
{
// Key didn't terminate with '='
parsedIndex = currentIndex;
return null;
}
// Record end of key.
int length = currentIndex - start;
if (CharIsSpaceOrTab(data[currentIndex]))
{
// Key parsing terminated due to ' ' or '\t'.
// Parse till '=' is found.
while (currentIndex < data.Length && CharIsSpaceOrTab(data[currentIndex]))
{
currentIndex++;
}
if (currentIndex == data.Length || data[currentIndex] != '=')
{
// Key is invalid.
parsedIndex = currentIndex;
return null;
}
}
// Skip trailing space and tab and '='
while (currentIndex < data.Length && (CharIsSpaceOrTab(data[currentIndex]) || data[currentIndex] == '='))
{
currentIndex++;
}
// Set the parsedIndex to current valid char.
parsedIndex = currentIndex;
return data.Substring(start, length);
}