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 9 using base::StringPiece; 10 using std::string; 11 12 namespace net { 13 14 LocalStrikeRegisterClient::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 24 bool 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 32 void LocalStrikeRegisterClient::VerifyNonceIsValidAndUnique( 33 StringPiece nonce, 34 QuicWallTime now, 35 ResultCallback* cb) { 36 InsertStatus nonce_error; 37 if (nonce.length() != kNonceSize) { 38 nonce_error = NONCE_INVALID_FAILURE; 39 } else { 40 base::AutoLock lock(m_); 41 nonce_error = strike_register_.Insert( 42 reinterpret_cast<const uint8*>(nonce.data()), 43 static_cast<uint32>(now.ToUNIXSeconds())); 44 } 45 46 // m_ must not be held when the ResultCallback runs. 47 cb->Run((nonce_error == NONCE_OK), nonce_error); 48 } 49 50 } // namespace net 51