13345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Copyright (c) 2010 The Chromium Authors. All rights reserved. 23345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Use of this source code is governed by a BSD-style license that can be 33345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// found in the LICENSE file. 43345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 53345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "net/base/ssl_false_start_blacklist.h" 63345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merricknamespace net { 83345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 93345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// static 103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickbool SSLFalseStartBlacklist::IsMember(const char* host) { 113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const char* last_two_labels = LastTwoLabels(host); 123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (!last_two_labels) 133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return false; 143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const unsigned bucket = Hash(last_two_labels) & (kBuckets - 1); 15513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const uint32 start = kHashTable[bucket]; 16513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const uint32 end = kHashTable[bucket + 1]; 173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const size_t len = strlen(host); 183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick for (size_t i = start; i < end;) { 203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const size_t blacklist_entry_len = static_cast<uint8>(kHashData[i]); 213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (len >= blacklist_entry_len && 223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick memcmp(&host[len - blacklist_entry_len], &kHashData[i + 1], 233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick blacklist_entry_len) == 0 && 243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick (len == blacklist_entry_len || 253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick host[len - blacklist_entry_len - 1] == '.')) { 263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return true; 273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick i += blacklist_entry_len + 1; 293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return false; 323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} // namespace net 35