blob: 1d009a947e19302085aa3243faf5f4ab7e128b9c [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "net/quic/crypto/local_strike_register_client.h"
#include "net/quic/crypto/crypto_protocol.h"
using base::StringPiece;
using std::string;
namespace net {
LocalStrikeRegisterClient::LocalStrikeRegisterClient(
unsigned max_entries,
uint32_t current_time_external,
uint32_t window_secs,
const uint8_t orbit[8],
StrikeRegister::StartupType startup)
: strike_register_(max_entries,
current_time_external,
window_secs,
orbit,
startup) {}
bool LocalStrikeRegisterClient::IsKnownOrbit(StringPiece orbit) const {
base::AutoLock lock(m_);
if (orbit.length() != kOrbitSize) {
return false;
}
return memcmp(orbit.data(), strike_register_.orbit(), kOrbitSize) == 0;
}
void LocalStrikeRegisterClient::VerifyNonceIsValidAndUnique(
StringPiece nonce,
QuicWallTime now,
ResultCallback* cb) {
InsertStatus nonce_error;
if (nonce.length() != kNonceSize) {
nonce_error = NONCE_INVALID_FAILURE;
} else {
base::AutoLock lock(m_);
nonce_error =
strike_register_.Insert(reinterpret_cast<const uint8_t*>(nonce.data()),
static_cast<uint32_t>(now.ToUNIXSeconds()));
}
// m_ must not be held when the ResultCallback runs.
cb->Run((nonce_error == NONCE_OK), nonce_error);
}
} // namespace net