OLD | NEW |
(Empty) | |
| 1 // Copyright 2014 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. |
| 4 |
| 5 #include "chrome/browser/local_discovery/privetv3_crypto_provider.h" |
| 6 |
| 7 #include "base/logging.h" |
| 8 |
| 9 namespace local_discovery { |
| 10 |
| 11 namespace { |
| 12 |
| 13 // A stub session type used for development/debugging. |
| 14 const char kAuthMethodEmpty[] = "empty"; |
| 15 |
| 16 const char kHandshakeStateComplete[] = "complete"; |
| 17 const char kStubVerificationCode[] = "SAMPLE"; |
| 18 } |
| 19 |
| 20 class PrivetV3CryptoProviderEmpty : public PrivetV3CryptoProvider { |
| 21 public: |
| 22 PrivetV3CryptoProviderEmpty(); |
| 23 virtual ~PrivetV3CryptoProviderEmpty(); |
| 24 |
| 25 // PrivetV3CryptoProvider implementation. |
| 26 virtual HandshakeState GetState() OVERRIDE; |
| 27 virtual std::string GetAuthMethod() OVERRIDE; |
| 28 virtual HandshakeState GetNextStep(int* step, std::string* package) OVERRIDE; |
| 29 virtual HandshakeState SetStepResponse(int step, |
| 30 const std::string& state, |
| 31 const std::string& package) OVERRIDE; |
| 32 virtual std::string GetVerificationCode() OVERRIDE; |
| 33 virtual HandshakeState AcceptVerificationCode() OVERRIDE; |
| 34 virtual bool EncryptData(const std::string& input, |
| 35 std::string* output) OVERRIDE; |
| 36 |
| 37 private: |
| 38 HandshakeState state_; |
| 39 }; |
| 40 |
| 41 scoped_ptr<PrivetV3CryptoProvider> Create( |
| 42 const std::vector<std::string>& available_auth_methods) { |
| 43 for (size_t i = 0; i < available_auth_methods.size(); i++) { |
| 44 if (available_auth_methods[i] == kAuthMethodEmpty) { |
| 45 return scoped_ptr<PrivetV3CryptoProvider>( |
| 46 new PrivetV3CryptoProviderEmpty()); |
| 47 } |
| 48 } |
| 49 |
| 50 return scoped_ptr<PrivetV3CryptoProvider>(); |
| 51 } |
| 52 |
| 53 PrivetV3CryptoProviderEmpty::PrivetV3CryptoProviderEmpty() |
| 54 : state_(IN_PROGRESS) { |
| 55 } |
| 56 |
| 57 PrivetV3CryptoProviderEmpty::~PrivetV3CryptoProviderEmpty() { |
| 58 } |
| 59 |
| 60 PrivetV3CryptoProvider::HandshakeState PrivetV3CryptoProviderEmpty::GetState() { |
| 61 return state_; |
| 62 } |
| 63 |
| 64 std::string PrivetV3CryptoProviderEmpty::GetAuthMethod() { |
| 65 return kAuthMethodEmpty; |
| 66 } |
| 67 |
| 68 PrivetV3CryptoProvider::HandshakeState PrivetV3CryptoProviderEmpty::GetNextStep( |
| 69 int* step, |
| 70 std::string* package) { |
| 71 DCHECK(state_ == IN_PROGRESS); |
| 72 *step = 0; |
| 73 package->clear(); |
| 74 state_ = AWAITING_RESPONSE; |
| 75 |
| 76 return state_; |
| 77 } |
| 78 |
| 79 PrivetV3CryptoProvider::HandshakeState |
| 80 PrivetV3CryptoProviderEmpty::SetStepResponse(int step, |
| 81 const std::string& state, |
| 82 const std::string& package) { |
| 83 DCHECK(state_ == AWAITING_RESPONSE); |
| 84 |
| 85 bool success = |
| 86 (step == 0 && package.empty() && state == kHandshakeStateComplete); |
| 87 |
| 88 if (success) { |
| 89 state_ = AWAITING_USER_VERIFICATION; |
| 90 } else { |
| 91 state_ = HANDSHAKE_ERROR; |
| 92 } |
| 93 |
| 94 return state_; |
| 95 } |
| 96 |
| 97 std::string PrivetV3CryptoProviderEmpty::GetVerificationCode() { |
| 98 DCHECK(state_ == AWAITING_USER_VERIFICATION); |
| 99 return kStubVerificationCode; |
| 100 } |
| 101 |
| 102 PrivetV3CryptoProvider::HandshakeState |
| 103 PrivetV3CryptoProviderEmpty::AcceptVerificationCode() { |
| 104 DCHECK(state_ == AWAITING_USER_VERIFICATION); |
| 105 return (state_ = HANDSHAKE_COMPLETE); |
| 106 } |
| 107 |
| 108 bool PrivetV3CryptoProviderEmpty::EncryptData(const std::string& input, |
| 109 std::string* output) { |
| 110 *output = input; |
| 111 return true; |
| 112 } |
| 113 |
| 114 } // namespace local_discovery |
OLD | NEW |