// Copyright 2014 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 "chrome/browser/local_discovery/privetv3_crypto_provider.h" #include "base/logging.h" namespace local_discovery { namespace { // A stub session type used for development/debugging. const char kAuthMethodEmpty[] = "empty"; const char kHandshakeStateComplete[] = "complete"; const char kStubVerificationCode[] = "SAMPLE"; } class PrivetV3CryptoProviderEmpty : public PrivetV3CryptoProvider { public: PrivetV3CryptoProviderEmpty(); virtual ~PrivetV3CryptoProviderEmpty(); // PrivetV3CryptoProvider implementation. virtual HandshakeState GetState() OVERRIDE; virtual std::string GetAuthMethod() OVERRIDE; virtual HandshakeState GetNextStep(int* step, std::string* package) OVERRIDE; virtual HandshakeState SetStepResponse(int step, const std::string& state, const std::string& package) OVERRIDE; virtual std::string GetVerificationCode() OVERRIDE; virtual HandshakeState AcceptVerificationCode() OVERRIDE; virtual bool EncryptData(const std::string& input, std::string* output) OVERRIDE; private: HandshakeState state_; }; scoped_ptr Create( const std::vector& available_auth_methods) { for (size_t i = 0; i < available_auth_methods.size(); i++) { if (available_auth_methods[i] == kAuthMethodEmpty) { return scoped_ptr( new PrivetV3CryptoProviderEmpty()); } } return scoped_ptr(); } PrivetV3CryptoProviderEmpty::PrivetV3CryptoProviderEmpty() : state_(IN_PROGRESS) { } PrivetV3CryptoProviderEmpty::~PrivetV3CryptoProviderEmpty() { } PrivetV3CryptoProvider::HandshakeState PrivetV3CryptoProviderEmpty::GetState() { return state_; } std::string PrivetV3CryptoProviderEmpty::GetAuthMethod() { return kAuthMethodEmpty; } PrivetV3CryptoProvider::HandshakeState PrivetV3CryptoProviderEmpty::GetNextStep( int* step, std::string* package) { DCHECK(state_ == IN_PROGRESS); *step = 0; package->clear(); state_ = AWAITING_RESPONSE; return state_; } PrivetV3CryptoProvider::HandshakeState PrivetV3CryptoProviderEmpty::SetStepResponse(int step, const std::string& state, const std::string& package) { DCHECK(state_ == AWAITING_RESPONSE); bool success = (step == 0 && package.empty() && state == kHandshakeStateComplete); if (success) { state_ = AWAITING_USER_VERIFICATION; } else { state_ = HANDSHAKE_ERROR; } return state_; } std::string PrivetV3CryptoProviderEmpty::GetVerificationCode() { DCHECK(state_ == AWAITING_USER_VERIFICATION); return kStubVerificationCode; } PrivetV3CryptoProvider::HandshakeState PrivetV3CryptoProviderEmpty::AcceptVerificationCode() { DCHECK(state_ == AWAITING_USER_VERIFICATION); return (state_ = HANDSHAKE_COMPLETE); } bool PrivetV3CryptoProviderEmpty::EncryptData(const std::string& input, std::string* output) { *output = input; return true; } } // namespace local_discovery