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.
5 #include "chrome/browser/extensions/api/easy_unlock_private/easy_unlock_private_crypto_delegate.h"
7 #include "chromeos/dbus/dbus_thread_manager.h"
8 #include "chromeos/dbus/easy_unlock_client.h"
9 #include "third_party/cros_system_api/dbus/service_constants.h"
11 namespace extensions {
16 // Converts encryption type to a string representation used by EasyUnlock dbus
18 std::string EncryptionTypeToString(easy_unlock_private::EncryptionType type) {
20 case easy_unlock_private::ENCRYPTION_TYPE_AES_256_CBC:
21 return easy_unlock::kEncryptionTypeAES256CBC;
23 return easy_unlock::kEncryptionTypeNone;
27 // Converts signature type to a string representation used by EasyUnlock dbus
29 std::string SignatureTypeToString(easy_unlock_private::SignatureType type) {
31 case easy_unlock_private::SIGNATURE_TYPE_ECDSA_P256_SHA256:
32 return easy_unlock::kSignatureTypeECDSAP256SHA256;
33 case easy_unlock_private::SIGNATURE_TYPE_HMAC_SHA256:
34 // Fall through to default.
36 return easy_unlock::kSignatureTypeHMACSHA256;
40 // ChromeOS specific EasyUnlockPrivateCryptoDelegate implementation.
41 class EasyUnlockPrivateCryptoDelegateChromeOS
42 : public extensions::api::EasyUnlockPrivateCryptoDelegate {
44 EasyUnlockPrivateCryptoDelegateChromeOS()
46 chromeos::DBusThreadManager::Get()->GetEasyUnlockClient()) {
49 virtual ~EasyUnlockPrivateCryptoDelegateChromeOS() {}
51 virtual void GenerateEcP256KeyPair(const KeyPairCallback& callback) OVERRIDE {
52 dbus_client_->GenerateEcP256KeyPair(callback);
55 virtual void PerformECDHKeyAgreement(const std::string& private_key,
56 const std::string& public_key,
57 const DataCallback& callback) OVERRIDE {
58 dbus_client_->PerformECDHKeyAgreement(private_key, public_key, callback);
61 virtual void CreateSecureMessage(
62 const std::string& payload,
63 const std::string& key,
64 const std::string& associated_data,
65 const std::string& public_metadata,
66 const std::string& verification_key_id,
67 easy_unlock_private::EncryptionType encryption_type,
68 easy_unlock_private::SignatureType signature_type,
69 const DataCallback& callback) OVERRIDE {
70 dbus_client_->CreateSecureMessage(payload,
75 EncryptionTypeToString(encryption_type),
76 SignatureTypeToString(signature_type),
80 virtual void UnwrapSecureMessage(
81 const std::string& message,
82 const std::string& key,
83 const std::string& associated_data,
84 easy_unlock_private::EncryptionType encryption_type,
85 easy_unlock_private::SignatureType signature_type,
86 const DataCallback& callback) OVERRIDE {
87 dbus_client_->UnwrapSecureMessage(message,
90 EncryptionTypeToString(encryption_type),
91 SignatureTypeToString(signature_type),
96 scoped_ptr<chromeos::EasyUnlockClient> dbus_client_;
98 DISALLOW_COPY_AND_ASSIGN(EasyUnlockPrivateCryptoDelegateChromeOS);
104 scoped_ptr<EasyUnlockPrivateCryptoDelegate>
105 EasyUnlockPrivateCryptoDelegate::Create() {
106 return scoped_ptr<EasyUnlockPrivateCryptoDelegate>(
107 new EasyUnlockPrivateCryptoDelegateChromeOS());
111 } // namespace extensions