1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "net/quic/crypto/local_strike_register_client.h" 6 7#include "net/quic/crypto/crypto_protocol.h" 8 9using base::StringPiece; 10using std::string; 11 12namespace net { 13 14LocalStrikeRegisterClient::LocalStrikeRegisterClient( 15 unsigned max_entries, 16 uint32 current_time_external, 17 uint32 window_secs, 18 const uint8 orbit[8], 19 StrikeRegister::StartupType startup) 20 : strike_register_(max_entries, current_time_external, window_secs, 21 orbit, startup) { 22} 23 24bool LocalStrikeRegisterClient::IsKnownOrbit(StringPiece orbit) const { 25 base::AutoLock lock(m_); 26 if (orbit.length() != kOrbitSize) { 27 return false; 28 } 29 return memcmp(orbit.data(), strike_register_.orbit(), kOrbitSize) == 0; 30} 31 32void LocalStrikeRegisterClient::VerifyNonceIsValidAndUnique( 33 StringPiece nonce, QuicWallTime now, ResultCallback* cb) { 34 bool nonce_is_valid_and_unique; 35 if (nonce.length() != kNonceSize) { 36 nonce_is_valid_and_unique = false; 37 } else { 38 base::AutoLock lock(m_); 39 nonce_is_valid_and_unique = strike_register_.Insert( 40 reinterpret_cast<const uint8*>(nonce.data()), 41 static_cast<uint32>(now.ToUNIXSeconds())); 42 } 43 44 // m_ must not be held when the ResultCallback runs. 45 cb->Run(nonce_is_valid_and_unique); 46} 47 48} // namespace net 49