Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / extensions / api / easy_unlock_private / easy_unlock_private_crypto_delegate_chromeos.cc
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/extensions/api/easy_unlock_private/easy_unlock_private_crypto_delegate.h"
6
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"
10
11 namespace extensions {
12 namespace api {
13
14 namespace {
15
16 // Converts encryption type to a string representation used by EasyUnlock dbus
17 // client.
18 std::string EncryptionTypeToString(easy_unlock_private::EncryptionType type) {
19   switch (type) {
20     case easy_unlock_private::ENCRYPTION_TYPE_AES_256_CBC:
21       return easy_unlock::kEncryptionTypeAES256CBC;
22     default:
23       return easy_unlock::kEncryptionTypeNone;
24   }
25 }
26
27 // Converts signature type to a string representation used by EasyUnlock dbus
28 // client.
29 std::string SignatureTypeToString(easy_unlock_private::SignatureType type) {
30   switch (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.
35     default:
36       return easy_unlock::kSignatureTypeHMACSHA256;
37   }
38 }
39
40 // ChromeOS specific EasyUnlockPrivateCryptoDelegate implementation.
41 class EasyUnlockPrivateCryptoDelegateChromeOS
42     : public extensions::api::EasyUnlockPrivateCryptoDelegate {
43  public:
44   EasyUnlockPrivateCryptoDelegateChromeOS()
45       : dbus_client_(
46             chromeos::DBusThreadManager::Get()->GetEasyUnlockClient()) {
47   }
48
49   virtual ~EasyUnlockPrivateCryptoDelegateChromeOS() {}
50
51   virtual void GenerateEcP256KeyPair(const KeyPairCallback& callback) OVERRIDE {
52     dbus_client_->GenerateEcP256KeyPair(callback);
53   }
54
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);
59   }
60
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,
71                                       key,
72                                       associated_data,
73                                       public_metadata,
74                                       verification_key_id,
75                                       EncryptionTypeToString(encryption_type),
76                                       SignatureTypeToString(signature_type),
77                                       callback);
78   }
79
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,
88                                       key,
89                                       associated_data,
90                                       EncryptionTypeToString(encryption_type),
91                                       SignatureTypeToString(signature_type),
92                                       callback);
93   }
94
95  private:
96   scoped_ptr<chromeos::EasyUnlockClient> dbus_client_;
97
98   DISALLOW_COPY_AND_ASSIGN(EasyUnlockPrivateCryptoDelegateChromeOS);
99 };
100
101 }  // namespace
102
103 // static
104 scoped_ptr<EasyUnlockPrivateCryptoDelegate>
105     EasyUnlockPrivateCryptoDelegate::Create() {
106   return scoped_ptr<EasyUnlockPrivateCryptoDelegate>(
107       new EasyUnlockPrivateCryptoDelegateChromeOS());
108 }
109
110 }  // namespace api
111 }  // namespace extensions