• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #ifndef CHROME_BROWSER_LOCAL_DISCOVERY_PRIVETV3_CRYPTO_PROVIDER_H_
6 #define CHROME_BROWSER_LOCAL_DISCOVERY_PRIVETV3_CRYPTO_PROVIDER_H_
7 
8 #include <string>
9 #include <vector>
10 
11 #include "base/memory/scoped_ptr.h"
12 
13 namespace local_discovery {
14 
15 class PrivetV3CryptoProvider {
16  public:
17   enum HandshakeState {
18     // Handshake still in progress. Call |GetNextStep| to send next handshake
19     // step.
20     IN_PROGRESS,
21     // Handshake in progress, waiting for response. Call |SetStepResponse| to
22     // set the step response.
23     AWAITING_RESPONSE,
24     // Handshake in progress, need to wait for user verification to
25     // continue. Call |GetVerificationCode| to get the verification code and
26     // |AcceptVerificationCode| to signify the code is accepted.
27     AWAITING_USER_VERIFICATION,
28     // Handshake complete. Call |EncryptData| to encrypt the data.
29     HANDSHAKE_COMPLETE,
30     // Handshake error.
31     HANDSHAKE_ERROR
32   };
33 
~PrivetV3CryptoProvider()34   virtual ~PrivetV3CryptoProvider() {}
35 
36   static scoped_ptr<PrivetV3CryptoProvider> Create(
37       const std::vector<std::string>& available_auth_methods);
38 
39   // Return the current state of the crypto provider.
40   virtual HandshakeState GetState() = 0;
41 
42   // Return the authentication method used.
43   virtual std::string GetAuthMethod() = 0;
44 
45   // Get the next handshake command. |step| is the step number to send,
46   // |package| is a base64-encoded package to send with the step. Return
47   // |true| if a package is generated or |false| in case of an error.
48   virtual HandshakeState GetNextStep(int* step, std::string* package) = 0;
49 
50   // Input the response to the handshake command. |step| is the received step
51   // number, |state| is the received state string, |package| is the received
52   // base64-encoded package. Return the current handshake state.
53   virtual HandshakeState SetStepResponse(int step,
54                                          const std::string& state,
55                                          const std::string& package) = 0;
56 
57   // Get the verification code to be displayed on the screen.
58   virtual std::string GetVerificationCode() = 0;
59 
60   // Signal that the verification code is accepted. Returns the current
61   // handshake state.
62   virtual HandshakeState AcceptVerificationCode() = 0;
63 
64   // Encrypt a string using the session key.
65   virtual bool EncryptData(const std::string& input, std::string* output) = 0;
66 };
67 
68 }  // namespace local_discovery
69 
70 #endif  // CHROME_BROWSER_LOCAL_DISCOVERY_PRIVETV3_CRYPTO_PROVIDER_H_
71