OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "remoting/protocol/v2_authenticator.h" | 5 #include "remoting/protocol/v2_authenticator.h" |
6 | 6 |
7 #include "base/base64.h" | 7 #include "base/base64.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "crypto/rsa_private_key.h" | |
10 #include "remoting/base/constants.h" | 9 #include "remoting/base/constants.h" |
11 #include "remoting/protocol/ssl_hmac_channel_authenticator.h" | 10 #include "remoting/protocol/ssl_hmac_channel_authenticator.h" |
12 #include "third_party/libjingle/source/talk/xmllite/xmlelement.h" | 11 #include "third_party/libjingle/source/talk/xmllite/xmlelement.h" |
13 | 12 |
14 using crypto::P224EncryptedKeyExchange; | 13 using crypto::P224EncryptedKeyExchange; |
15 | 14 |
16 #if defined(_WIN32) && defined(GetMessage) | 15 #if defined(_WIN32) && defined(GetMessage) |
17 #undef GetMessage | 16 #undef GetMessage |
18 #endif | 17 #endif |
19 | 18 |
(...skipping 18 matching lines...) Expand all Loading... |
38 scoped_ptr<Authenticator> V2Authenticator::CreateForClient( | 37 scoped_ptr<Authenticator> V2Authenticator::CreateForClient( |
39 const std::string& shared_secret, | 38 const std::string& shared_secret, |
40 Authenticator::State initial_state) { | 39 Authenticator::State initial_state) { |
41 return scoped_ptr<Authenticator>(new V2Authenticator( | 40 return scoped_ptr<Authenticator>(new V2Authenticator( |
42 P224EncryptedKeyExchange::kPeerTypeClient, shared_secret, initial_state)); | 41 P224EncryptedKeyExchange::kPeerTypeClient, shared_secret, initial_state)); |
43 } | 42 } |
44 | 43 |
45 // static | 44 // static |
46 scoped_ptr<Authenticator> V2Authenticator::CreateForHost( | 45 scoped_ptr<Authenticator> V2Authenticator::CreateForHost( |
47 const std::string& local_cert, | 46 const std::string& local_cert, |
48 const crypto::RSAPrivateKey& local_private_key, | 47 scoped_ptr<KeyPair> key_pair, |
49 const std::string& shared_secret, | 48 const std::string& shared_secret, |
50 Authenticator::State initial_state) { | 49 Authenticator::State initial_state) { |
51 scoped_ptr<V2Authenticator> result(new V2Authenticator( | 50 scoped_ptr<V2Authenticator> result(new V2Authenticator( |
52 P224EncryptedKeyExchange::kPeerTypeServer, shared_secret, initial_state)); | 51 P224EncryptedKeyExchange::kPeerTypeServer, shared_secret, initial_state)); |
53 result->local_cert_ = local_cert; | 52 result->local_cert_ = local_cert; |
54 result->local_private_key_.reset(local_private_key.Copy()); | 53 result->key_pair_ = key_pair.Pass(); |
55 return scoped_ptr<Authenticator>(result.Pass()); | 54 return scoped_ptr<Authenticator>(result.Pass()); |
56 } | 55 } |
57 | 56 |
58 V2Authenticator::V2Authenticator( | 57 V2Authenticator::V2Authenticator( |
59 crypto::P224EncryptedKeyExchange::PeerType type, | 58 crypto::P224EncryptedKeyExchange::PeerType type, |
60 const std::string& shared_secret, | 59 const std::string& shared_secret, |
61 Authenticator::State initial_state) | 60 Authenticator::State initial_state) |
62 : certificate_sent_(false), | 61 : certificate_sent_(false), |
63 key_exchange_impl_(type, shared_secret), | 62 key_exchange_impl_(type, shared_secret), |
64 state_(initial_state), | 63 state_(initial_state), |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
180 } | 179 } |
181 | 180 |
182 scoped_ptr<ChannelAuthenticator> | 181 scoped_ptr<ChannelAuthenticator> |
183 V2Authenticator::CreateChannelAuthenticator() const { | 182 V2Authenticator::CreateChannelAuthenticator() const { |
184 DCHECK_EQ(state(), ACCEPTED); | 183 DCHECK_EQ(state(), ACCEPTED); |
185 CHECK(!auth_key_.empty()); | 184 CHECK(!auth_key_.empty()); |
186 | 185 |
187 if (is_host_side()) { | 186 if (is_host_side()) { |
188 return scoped_ptr<ChannelAuthenticator>( | 187 return scoped_ptr<ChannelAuthenticator>( |
189 SslHmacChannelAuthenticator::CreateForHost( | 188 SslHmacChannelAuthenticator::CreateForHost( |
190 local_cert_, local_private_key_.get(), auth_key_).Pass()); | 189 local_cert_, key_pair_->Copy(), auth_key_).Pass()); |
191 } else { | 190 } else { |
192 return scoped_ptr<ChannelAuthenticator>( | 191 return scoped_ptr<ChannelAuthenticator>( |
193 SslHmacChannelAuthenticator::CreateForClient( | 192 SslHmacChannelAuthenticator::CreateForClient( |
194 remote_cert_, auth_key_).Pass()); | 193 remote_cert_, auth_key_).Pass()); |
195 } | 194 } |
196 } | 195 } |
197 | 196 |
198 bool V2Authenticator::is_host_side() const { | 197 bool V2Authenticator::is_host_side() const { |
199 return local_private_key_.get() != NULL; | 198 return key_pair_.get() != NULL; |
200 } | 199 } |
201 | 200 |
202 } // namespace protocol | 201 } // namespace protocol |
203 } // namespace remoting | 202 } // namespace remoting |
OLD | NEW |