MD Downloads: prevent search text from overlapping with the cancel search (X)
[chromium-blink-merge.git] / remoting / protocol / negotiating_host_authenticator.h
blob16d45e7623c61f6e530681876ec0dd3fced98995
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.
5 #ifndef REMOTING_PROTOCOL_NEGOTIATING_HOST_AUTHENTICATOR_H_
6 #define REMOTING_PROTOCOL_NEGOTIATING_HOST_AUTHENTICATOR_H_
8 #include <string>
9 #include <vector>
11 #include "base/basictypes.h"
12 #include "base/memory/ref_counted.h"
13 #include "base/memory/scoped_ptr.h"
14 #include "remoting/protocol/authentication_method.h"
15 #include "remoting/protocol/authenticator.h"
16 #include "remoting/protocol/negotiating_authenticator_base.h"
17 #include "remoting/protocol/pairing_registry.h"
18 #include "remoting/protocol/third_party_host_authenticator.h"
20 namespace remoting {
22 class RsaKeyPair;
24 namespace protocol {
26 // Host-side implementation of NegotiatingAuthenticatorBase.
27 // See comments in negotiating_authenticator_base.h for a general explanation.
28 class NegotiatingHostAuthenticator : public NegotiatingAuthenticatorBase {
29 public:
30 ~NegotiatingHostAuthenticator() override;
32 // Creates a host authenticator, using a fixed shared secret/PIN hash.
33 // If |pairing_registry| is non-nullptr then the Spake2Pair method will
34 // be offered, supporting PIN-less authentication.
35 static scoped_ptr<Authenticator> CreateWithSharedSecret(
36 const std::string& local_cert,
37 scoped_refptr<RsaKeyPair> key_pair,
38 const std::string& shared_secret_hash,
39 AuthenticationMethod::HashFunction hash_function,
40 scoped_refptr<PairingRegistry> pairing_registry);
42 // Creates a host authenticator, using third party authentication.
43 static scoped_ptr<Authenticator> CreateWithThirdPartyAuth(
44 const std::string& local_cert,
45 scoped_refptr<RsaKeyPair> key_pair,
46 scoped_ptr<TokenValidator> token_validator);
48 // Overriden from Authenticator.
49 void ProcessMessage(const buzz::XmlElement* message,
50 const base::Closure& resume_callback) override;
51 scoped_ptr<buzz::XmlElement> GetNextMessage() override;
53 private:
54 NegotiatingHostAuthenticator(
55 const std::string& local_cert,
56 scoped_refptr<RsaKeyPair> key_pair);
58 // (Asynchronously) creates an authenticator, and stores it in
59 // |current_authenticator_|. Authenticators that can be started in either
60 // state will be created in |preferred_initial_state|.
61 // |resume_callback| is called after |current_authenticator_| is set.
62 void CreateAuthenticator(Authenticator::State preferred_initial_state,
63 const base::Closure& resume_callback);
65 std::string local_cert_;
66 scoped_refptr<RsaKeyPair> local_key_pair_;
68 // Used only for shared secret host authenticators.
69 std::string shared_secret_hash_;
71 // Used only for third party host authenticators.
72 scoped_ptr<TokenValidator> token_validator_;
74 // Used only for pairing authenticators.
75 scoped_refptr<PairingRegistry> pairing_registry_;
77 DISALLOW_COPY_AND_ASSIGN(NegotiatingHostAuthenticator);
80 } // namespace protocol
81 } // namespace remoting
83 #endif // REMOTING_PROTOCOL_NEGOTIATING_HOST_AUTHENTICATOR_H_