190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// found in the LICENSE file.
490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#ifndef REMOTING_PROTOCOL_PAIRING_CLIENT_AUTHENTICATOR_H_
690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define REMOTING_PROTOCOL_PAIRING_CLIENT_AUTHENTICATOR_H_
790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/memory/weak_ptr.h"
990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "remoting/protocol/pairing_authenticator_base.h"
1090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace remoting {
1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace protocol {
1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class PairingClientAuthenticator : public PairingAuthenticatorBase {
1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) public:
1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  PairingClientAuthenticator(
1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      const std::string& client_id,
1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      const std::string& paired_secret,
1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      const FetchSecretCallback& fetch_pin_callback,
2090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      const std::string& authentication_tag);
2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual ~PairingClientAuthenticator();
2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) private:
2490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // PairingAuthenticatorBase interface.
2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual void CreateV2AuthenticatorWithPIN(
2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      State initial_state,
2790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      const SetAuthenticatorCallback& callback) OVERRIDE;
2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual void AddPairingElements(buzz::XmlElement* message) OVERRIDE;
2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void OnPinFetched(State initial_state,
3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                    const SetAuthenticatorCallback& callback,
3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                    const std::string& pin);
3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // Protocol state.
3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  bool sent_client_id_;
3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  std::string client_id_;
3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  const std::string& paired_secret_;
3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  FetchSecretCallback fetch_pin_callback_;
3990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  std::string authentication_tag_;
4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  base::WeakPtrFactory<PairingClientAuthenticator> weak_factory_;
4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PairingClientAuthenticator);
4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)};
4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
4690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}  // namespace protocol
4790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}  // namespace remoting
4890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
4990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif  // REMOTING_PROTOCOL_PAIRING_AUTHENTICATOR_H_
50