Home | History | Annotate | Download | only in crypto
      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, 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