| 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_GCM_DRIVER_CRYPTO_GCM_KEY_STORE_H_ | 5 #ifndef COMPONENTS_GCM_DRIVER_CRYPTO_GCM_KEY_STORE_H_ |
| 6 #define COMPONENTS_GCM_DRIVER_CRYPTO_GCM_KEY_STORE_H_ | 6 #define COMPONENTS_GCM_DRIVER_CRYPTO_GCM_KEY_STORE_H_ |
| 7 | 7 |
| 8 #include <map> | 8 #include <map> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 // Messaging. It provides the ability to create and store a key-pair for a given | 33 // Messaging. It provides the ability to create and store a key-pair for a given |
| 34 // app id, as well as retrieving and deleting key-pairs. | 34 // app id, as well as retrieving and deleting key-pairs. |
| 35 // | 35 // |
| 36 // This class is backed by a proto database and might end up doing file I/O on | 36 // This class is backed by a proto database and might end up doing file I/O on |
| 37 // a background task runner. For this reason, all public APIs take a callback | 37 // a background task runner. For this reason, all public APIs take a callback |
| 38 // rather than returning the result. Do not rely on the timing of the callbacks. | 38 // rather than returning the result. Do not rely on the timing of the callbacks. |
| 39 class GCMKeyStore { | 39 class GCMKeyStore { |
| 40 public: | 40 public: |
| 41 using KeysCallback = base::Callback<void(const KeyPair& pair, | 41 using KeysCallback = base::Callback<void(const KeyPair& pair, |
| 42 const std::string& auth_secret)>; | 42 const std::string& auth_secret)>; |
| 43 using DeleteCallback = base::Callback<void(bool success)>; | |
| 44 | 43 |
| 45 GCMKeyStore( | 44 GCMKeyStore( |
| 46 const base::FilePath& key_store_path, | 45 const base::FilePath& key_store_path, |
| 47 const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner); | 46 const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner); |
| 48 ~GCMKeyStore(); | 47 ~GCMKeyStore(); |
| 49 | 48 |
| 50 // Retrieves the public/private key-pair associated with |app_id|, and | 49 // Retrieves the public/private key-pair associated with |app_id|, and |
| 51 // invokes |callback| when they are available, or when an error occurred. | 50 // invokes |callback| when they are available, or when an error occurred. |
| 52 void GetKeys(const std::string& app_id, const KeysCallback& callback); | 51 void GetKeys(const std::string& app_id, const KeysCallback& callback); |
| 53 | 52 |
| 54 // Creates a new public/private key-pair for |app_id|, and invokes | 53 // Creates a new public/private key-pair for |app_id|, and invokes |
| 55 // |callback| when they are available, or when an error occurred. | 54 // |callback| when they are available, or when an error occurred. |
| 56 void CreateKeys(const std::string& app_id, const KeysCallback& callback); | 55 void CreateKeys(const std::string& app_id, const KeysCallback& callback); |
| 57 | 56 |
| 58 // Deletes the keys associated with |app_id|, and invokes |callback| when | 57 // Removes the keys associated with |app_id|, and invokes |callback| when |
| 59 // the deletion has finished, or when an error occurred. | 58 // the operation has finished. |
| 60 void DeleteKeys(const std::string& app_id, const DeleteCallback& callback); | 59 void RemoveKeys(const std::string& app_id, const base::Closure& callback); |
| 61 | 60 |
| 62 private: | 61 private: |
| 63 // Initializes the database if necessary, and runs |done_closure| when done. | 62 // Initializes the database if necessary, and runs |done_closure| when done. |
| 64 void LazyInitialize(const base::Closure& done_closure); | 63 void LazyInitialize(const base::Closure& done_closure); |
| 65 | 64 |
| 66 void DidInitialize(bool success); | 65 void DidInitialize(bool success); |
| 67 void DidLoadKeys(bool success, | 66 void DidLoadKeys(bool success, |
| 68 scoped_ptr<std::vector<EncryptionData>> entries); | 67 scoped_ptr<std::vector<EncryptionData>> entries); |
| 69 | 68 |
| 70 void DidStoreKeys(const std::string& app_id, | 69 void DidStoreKeys(const std::string& app_id, |
| 71 const KeyPair& pair, | 70 const KeyPair& pair, |
| 72 const std::string& auth_secret, | 71 const std::string& auth_secret, |
| 73 const KeysCallback& callback, | 72 const KeysCallback& callback, |
| 74 bool success); | 73 bool success); |
| 75 | 74 |
| 76 void DidDeleteKeys(const std::string& app_id, | 75 void DidRemoveKeys(const std::string& app_id, |
| 77 const DeleteCallback& callback, | 76 const base::Closure& callback, |
| 78 bool success); | 77 bool success); |
| 79 | 78 |
| 80 // Private implementations of the API that will be executed when the database | 79 // Private implementations of the API that will be executed when the database |
| 81 // has either been successfully loaded, or failed to load. | 80 // has either been successfully loaded, or failed to load. |
| 82 | 81 |
| 83 void GetKeysAfterInitialize(const std::string& app_id, | 82 void GetKeysAfterInitialize(const std::string& app_id, |
| 84 const KeysCallback& callback); | 83 const KeysCallback& callback); |
| 85 void CreateKeysAfterInitialize(const std::string& app_id, | 84 void CreateKeysAfterInitialize(const std::string& app_id, |
| 86 const KeysCallback& callback); | 85 const KeysCallback& callback); |
| 87 void DeleteKeysAfterInitialize(const std::string& app_id, | 86 void RemoveKeysAfterInitialize(const std::string& app_id, |
| 88 const DeleteCallback& callback); | 87 const base::Closure& callback); |
| 89 | 88 |
| 90 // Path in which the key store database will be saved. | 89 // Path in which the key store database will be saved. |
| 91 base::FilePath key_store_path_; | 90 base::FilePath key_store_path_; |
| 92 | 91 |
| 93 // Blocking task runner which the database will do I/O operations on. | 92 // Blocking task runner which the database will do I/O operations on. |
| 94 scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_; | 93 scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_; |
| 95 | 94 |
| 96 // Instance of the ProtoDatabase backing the key store. | 95 // Instance of the ProtoDatabase backing the key store. |
| 97 scoped_ptr<leveldb_proto::ProtoDatabase<EncryptionData>> database_; | 96 scoped_ptr<leveldb_proto::ProtoDatabase<EncryptionData>> database_; |
| 98 | 97 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 111 std::map<std::string, std::string> auth_secrets_; | 110 std::map<std::string, std::string> auth_secrets_; |
| 112 | 111 |
| 113 base::WeakPtrFactory<GCMKeyStore> weak_factory_; | 112 base::WeakPtrFactory<GCMKeyStore> weak_factory_; |
| 114 | 113 |
| 115 DISALLOW_COPY_AND_ASSIGN(GCMKeyStore); | 114 DISALLOW_COPY_AND_ASSIGN(GCMKeyStore); |
| 116 }; | 115 }; |
| 117 | 116 |
| 118 } // namespace gcm | 117 } // namespace gcm |
| 119 | 118 |
| 120 #endif // COMPONENTS_GCM_DRIVER_CRYPTO_GCM_KEY_STORE_H_ | 119 #endif // COMPONENTS_GCM_DRIVER_CRYPTO_GCM_KEY_STORE_H_ |
| OLD | NEW |