| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 #ifndef COMPONENTS_CRYPTAUTH_DEVICE_TO_DEVICE_INITIATOR_OPERATIONS_H_ | 5 #ifndef COMPONENTS_CRYPTAUTH_DEVICE_TO_DEVICE_INITIATOR_OPERATIONS_H_ |
| 6 #define COMPONENTS_CRYPTAUTH_DEVICE_TO_DEVICE_INITIATOR_OPERATIONS_H_ | 6 #define COMPONENTS_CRYPTAUTH_DEVICE_TO_DEVICE_INITIATOR_OPERATIONS_H_ |
| 7 | 7 |
| 8 #include <memory> |
| 8 #include <string> | 9 #include <string> |
| 9 | 10 |
| 10 #include "base/callback_forward.h" | 11 #include "base/callback_forward.h" |
| 11 #include "base/macros.h" | 12 #include "base/macros.h" |
| 12 | 13 |
| 13 namespace cryptauth { | 14 namespace cryptauth { |
| 14 | 15 |
| 15 class SecureMessageDelegate; | 16 class SecureMessageDelegate; |
| 17 class SessionKeys; |
| 16 | 18 |
| 17 // Utility class containing operations in the DeviceToDevice protocol that the | 19 // Utility class containing operations in the DeviceToDevice protocol that the |
| 18 // initiator needs to perform. For Smart Lock, in which a phone unlocks a | 20 // initiator needs to perform. For Smart Lock, in which a phone unlocks a |
| 19 // laptop, the initiator is laptop. | 21 // laptop, the initiator is laptop. |
| 20 // | 22 // |
| 21 // All operations are asynchronous because we use the SecureMessageDelegate for | 23 // All operations are asynchronous because we use the SecureMessageDelegate for |
| 22 // crypto operations, whose implementation may be asynchronous. | 24 // crypto operations, whose implementation may be asynchronous. |
| 23 // | 25 // |
| 24 // In the DeviceToDevice protocol, the initiator needs to send two messages to | 26 // In the DeviceToDevice protocol, the initiator needs to send two messages to |
| 25 // the responder and parse one message from the responder: | 27 // the responder and parse one message from the responder: |
| (...skipping 10 matching lines...) Expand all Loading... |
| 36 class DeviceToDeviceInitiatorOperations { | 38 class DeviceToDeviceInitiatorOperations { |
| 37 public: | 39 public: |
| 38 // Callback for operations that create a message. Invoked with the serialized | 40 // Callback for operations that create a message. Invoked with the serialized |
| 39 // SecureMessage upon success or the empty string upon failure. | 41 // SecureMessage upon success or the empty string upon failure. |
| 40 typedef base::Callback<void(const std::string&)> MessageCallback; | 42 typedef base::Callback<void(const std::string&)> MessageCallback; |
| 41 | 43 |
| 42 // Callback for ValidateResponderAuthMessage. The first argument will be | 44 // Callback for ValidateResponderAuthMessage. The first argument will be |
| 43 // called with the validation outcome. If validation succeeded, then the | 45 // called with the validation outcome. If validation succeeded, then the |
| 44 // second argument will contain the session symmetric key derived from the | 46 // second argument will contain the session symmetric key derived from the |
| 45 // [Responder Auth] message. | 47 // [Responder Auth] message. |
| 46 typedef base::Callback<void(bool, const std::string&)> | 48 typedef base::Callback<void(bool, std::unique_ptr<SessionKeys>)> |
| 47 ValidateResponderAuthCallback; | 49 ValidateResponderAuthCallback; |
| 48 | 50 |
| 49 // Creates the [Hello] message, which is the first message that is sent: | 51 // Creates the [Hello] message, which is the first message that is sent: |
| 50 // |session_public_key|: This session public key will be stored in plaintext | 52 // |session_public_key|: This session public key will be stored in plaintext |
| 51 // (but signed) so the responder can parse it. | 53 // (but signed) so the responder can parse it. |
| 52 // |persistent_symmetric_key|: The long-term symmetric key that is shared by | 54 // |persistent_symmetric_key|: The long-term symmetric key that is shared by |
| 53 // the initiator and responder. | 55 // the initiator and responder. |
| 54 // |secure_message_delegate|: Delegate for SecureMessage operations. This | 56 // |secure_message_delegate|: Delegate for SecureMessage operations. This |
| 55 // instance is not owned, and must live until after |callback| is invoked. | 57 // instance is not owned, and must live until after |callback| is invoked. |
| 56 // |callback|: Invoked upon operation completion with the serialized message | 58 // |callback|: Invoked upon operation completion with the serialized message |
| (...skipping 25 matching lines...) Expand all Loading... |
| 82 const std::string& responder_auth_message, | 84 const std::string& responder_auth_message, |
| 83 const std::string& persistent_responder_public_key, | 85 const std::string& persistent_responder_public_key, |
| 84 const std::string& persistent_symmetric_key, | 86 const std::string& persistent_symmetric_key, |
| 85 const std::string& session_private_key, | 87 const std::string& session_private_key, |
| 86 const std::string& hello_message, | 88 const std::string& hello_message, |
| 87 SecureMessageDelegate* secure_message_delegate, | 89 SecureMessageDelegate* secure_message_delegate, |
| 88 const ValidateResponderAuthCallback& callback); | 90 const ValidateResponderAuthCallback& callback); |
| 89 | 91 |
| 90 // Creates the [Initiator Auth] message, which allows the responder to | 92 // Creates the [Initiator Auth] message, which allows the responder to |
| 91 // authenticate the initiator: | 93 // authenticate the initiator: |
| 94 // |session_keys|: The session symmetric keys. |
| 92 // |persistent_symmetric_key|: The long-term symmetric key that is shared by | 95 // |persistent_symmetric_key|: The long-term symmetric key that is shared by |
| 93 // the initiator and responder. | 96 // the initiator and responder. |
| 94 // |responder_auth_message|: The [Responder Auth] message sent previously to | 97 // |responder_auth_message|: The [Responder Auth] message sent previously to |
| 95 // the responder. These bytes are used in the signature calculation. | 98 // the responder. These bytes are used in the signature calculation. |
| 96 // |secure_message_delegate|: Delegate for SecureMessage operations. This | 99 // |secure_message_delegate|: Delegate for SecureMessage operations. This |
| 97 // instance is not owned, and must live until after |callback| is invoked. | 100 // instance is not owned, and must live until after |callback| is invoked. |
| 98 // |callback|: Invoked upon operation completion with the serialized message | 101 // |callback|: Invoked upon operation completion with the serialized message |
| 99 // or an empty string. | 102 // or an empty string. |
| 100 static void CreateInitiatorAuthMessage( | 103 static void CreateInitiatorAuthMessage( |
| 101 const std::string& session_symmetric_key, | 104 SessionKeys* session_keys, |
| 102 const std::string& persistent_symmetric_key, | 105 const std::string& persistent_symmetric_key, |
| 103 const std::string& responder_auth_message, | 106 const std::string& responder_auth_message, |
| 104 SecureMessageDelegate* secure_message_delegate, | 107 SecureMessageDelegate* secure_message_delegate, |
| 105 const MessageCallback& callback); | 108 const MessageCallback& callback); |
| 106 | 109 |
| 107 private: | 110 private: |
| 108 DISALLOW_IMPLICIT_CONSTRUCTORS(DeviceToDeviceInitiatorOperations); | 111 DISALLOW_IMPLICIT_CONSTRUCTORS(DeviceToDeviceInitiatorOperations); |
| 109 }; | 112 }; |
| 110 | 113 |
| 111 } // cryptauth | 114 } // cryptauth |
| 112 | 115 |
| 113 #endif // COMPONENTS_CRYPTAUTH_DEVICE_TO_DEVICE_INITIATOR_OPERATIONS_H_ | 116 #endif // COMPONENTS_CRYPTAUTH_DEVICE_TO_DEVICE_INITIATOR_OPERATIONS_H_ |
| OLD | NEW |