dbus_service.cc revision bc0c74963418442991072b2c87baec839eec9c20
1b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn// Copyright 2014 The Chromium OS Authors. All rights reserved. 2b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn// Use of this source code is governed by a BSD-style license that can be 3b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn// found in the LICENSE file. 4b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn 5b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn#include "attestation/server/dbus_service.h" 6b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn 739f82d968e22cd3de567df5ddb2d00a923c0bb74Darren Krahn#include <memory> 8b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn#include <string> 9b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn 100752bd25ba9f45c07bc989d42bf5272133a85afaDarren Krahn#include <chromeos/bind_lambda.h> 11b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn#include <dbus/bus.h> 12b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn#include <dbus/object_path.h> 13b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn 14b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn#include "attestation/common/dbus_interface.h" 15b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn 160752bd25ba9f45c07bc989d42bf5272133a85afaDarren Krahnusing chromeos::dbus_utils::DBusMethodResponse; 170752bd25ba9f45c07bc989d42bf5272133a85afaDarren Krahn 18b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahnnamespace attestation { 19b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn 20b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren KrahnDBusService::DBusService(const scoped_refptr<dbus::Bus>& bus, 21b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn AttestationInterface* service) 22b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn : dbus_object_(nullptr, bus, dbus::ObjectPath(kAttestationServicePath)), 23b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn service_(service) { 24b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn} 25b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn 26b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahnvoid DBusService::Register(const CompletionAction& callback) { 27b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn chromeos::dbus_utils::DBusInterface* dbus_interface = 28b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn dbus_object_.AddOrGetInterface(kAttestationInterface); 29b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn 30bc0c74963418442991072b2c87baec839eec9c20Darren Krahn dbus_interface->AddMethodHandler(kCreateGoogleAttestedKey, 31bc0c74963418442991072b2c87baec839eec9c20Darren Krahn base::Unretained(this), 32bc0c74963418442991072b2c87baec839eec9c20Darren Krahn &DBusService::HandleCreateGoogleAttestedKey); 33bc0c74963418442991072b2c87baec839eec9c20Darren Krahn dbus_interface->AddMethodHandler(kGetKeyInfo, 34bc0c74963418442991072b2c87baec839eec9c20Darren Krahn base::Unretained(this), 35bc0c74963418442991072b2c87baec839eec9c20Darren Krahn &DBusService::HandleGetKeyInfo); 36bc0c74963418442991072b2c87baec839eec9c20Darren Krahn dbus_interface->AddMethodHandler(kGetEndorsementInfo, 37bc0c74963418442991072b2c87baec839eec9c20Darren Krahn base::Unretained(this), 38bc0c74963418442991072b2c87baec839eec9c20Darren Krahn &DBusService::HandleGetEndorsementInfo); 39bc0c74963418442991072b2c87baec839eec9c20Darren Krahn dbus_interface->AddMethodHandler(kGetAttestationKeyInfo, 40bc0c74963418442991072b2c87baec839eec9c20Darren Krahn base::Unretained(this), 41bc0c74963418442991072b2c87baec839eec9c20Darren Krahn &DBusService::HandleGetAttestationKeyInfo); 42bc0c74963418442991072b2c87baec839eec9c20Darren Krahn dbus_interface->AddMethodHandler(kActivateAttestationKey, 43bc0c74963418442991072b2c87baec839eec9c20Darren Krahn base::Unretained(this), 44bc0c74963418442991072b2c87baec839eec9c20Darren Krahn &DBusService::HandleActivateAttestationKey); 45bc0c74963418442991072b2c87baec839eec9c20Darren Krahn dbus_interface->AddMethodHandler(kCreateCertifiableKey, 46bc0c74963418442991072b2c87baec839eec9c20Darren Krahn base::Unretained(this), 47bc0c74963418442991072b2c87baec839eec9c20Darren Krahn &DBusService::HandleCreateCertifiableKey); 48bc0c74963418442991072b2c87baec839eec9c20Darren Krahn dbus_interface->AddMethodHandler(kDecrypt, 49bc0c74963418442991072b2c87baec839eec9c20Darren Krahn base::Unretained(this), 50bc0c74963418442991072b2c87baec839eec9c20Darren Krahn &DBusService::HandleDecrypt); 51b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn 52b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn dbus_object_.RegisterAsync(callback); 53b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn} 54b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn 550752bd25ba9f45c07bc989d42bf5272133a85afaDarren Krahnvoid DBusService::HandleCreateGoogleAttestedKey( 569bb29b0861b022a9c89bff02401efbdfa884edd9Alex Vakulenko std::unique_ptr<DBusMethodResponse<const CreateGoogleAttestedKeyReply&>> 570752bd25ba9f45c07bc989d42bf5272133a85afaDarren Krahn response, 580752bd25ba9f45c07bc989d42bf5272133a85afaDarren Krahn const CreateGoogleAttestedKeyRequest& request) { 59b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn VLOG(1) << __func__; 6039f82d968e22cd3de567df5ddb2d00a923c0bb74Darren Krahn // Convert |response| to a shared_ptr so |service_| can safely copy the 6139f82d968e22cd3de567df5ddb2d00a923c0bb74Darren Krahn // callback. 6239f82d968e22cd3de567df5ddb2d00a923c0bb74Darren Krahn using SharedResponsePointer = std::shared_ptr< 6339f82d968e22cd3de567df5ddb2d00a923c0bb74Darren Krahn DBusMethodResponse<const CreateGoogleAttestedKeyReply&>>; 640752bd25ba9f45c07bc989d42bf5272133a85afaDarren Krahn // A callback that fills the reply protobuf and sends it. 6539f82d968e22cd3de567df5ddb2d00a923c0bb74Darren Krahn auto callback = [](const SharedResponsePointer& response, 66b48a50fc394b9c8a1059463c9eaba4c8d1985b9bDarren Krahn const CreateGoogleAttestedKeyReply& reply) { 670752bd25ba9f45c07bc989d42bf5272133a85afaDarren Krahn response->Return(reply); 680752bd25ba9f45c07bc989d42bf5272133a85afaDarren Krahn }; 6939f82d968e22cd3de567df5ddb2d00a923c0bb74Darren Krahn service_->CreateGoogleAttestedKey( 70b48a50fc394b9c8a1059463c9eaba4c8d1985b9bDarren Krahn request, 716222defa52eb13c0d90673f642f2647f7753478bDarren Krahn base::Bind(callback, SharedResponsePointer(std::move(response)))); 726222defa52eb13c0d90673f642f2647f7753478bDarren Krahn} 736222defa52eb13c0d90673f642f2647f7753478bDarren Krahn 746222defa52eb13c0d90673f642f2647f7753478bDarren Krahnvoid DBusService::HandleGetKeyInfo( 756222defa52eb13c0d90673f642f2647f7753478bDarren Krahn std::unique_ptr<DBusMethodResponse<const GetKeyInfoReply&>> response, 766222defa52eb13c0d90673f642f2647f7753478bDarren Krahn const GetKeyInfoRequest& request) { 776222defa52eb13c0d90673f642f2647f7753478bDarren Krahn VLOG(1) << __func__; 786222defa52eb13c0d90673f642f2647f7753478bDarren Krahn // Convert |response| to a shared_ptr so |service_| can safely copy the 796222defa52eb13c0d90673f642f2647f7753478bDarren Krahn // callback. 806222defa52eb13c0d90673f642f2647f7753478bDarren Krahn using SharedResponsePointer = std::shared_ptr< 816222defa52eb13c0d90673f642f2647f7753478bDarren Krahn DBusMethodResponse<const GetKeyInfoReply&>>; 826222defa52eb13c0d90673f642f2647f7753478bDarren Krahn // A callback that fills the reply protobuf and sends it. 836222defa52eb13c0d90673f642f2647f7753478bDarren Krahn auto callback = [](const SharedResponsePointer& response, 846222defa52eb13c0d90673f642f2647f7753478bDarren Krahn const GetKeyInfoReply& reply) { 856222defa52eb13c0d90673f642f2647f7753478bDarren Krahn response->Return(reply); 866222defa52eb13c0d90673f642f2647f7753478bDarren Krahn }; 876222defa52eb13c0d90673f642f2647f7753478bDarren Krahn service_->GetKeyInfo( 886222defa52eb13c0d90673f642f2647f7753478bDarren Krahn request, 896222defa52eb13c0d90673f642f2647f7753478bDarren Krahn base::Bind(callback, SharedResponsePointer(std::move(response)))); 90b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn} 91b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn 92cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahnvoid DBusService::HandleGetEndorsementInfo( 93cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn std::unique_ptr<DBusMethodResponse<const GetEndorsementInfoReply&>> 94cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn response, 95cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn const GetEndorsementInfoRequest& request) { 96cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn VLOG(1) << __func__; 97cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn // Convert |response| to a shared_ptr so |service_| can safely copy the 98cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn // callback. 99cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn using SharedResponsePointer = std::shared_ptr< 100cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn DBusMethodResponse<const GetEndorsementInfoReply&>>; 101cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn // A callback that fills the reply protobuf and sends it. 102cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn auto callback = [](const SharedResponsePointer& response, 103cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn const GetEndorsementInfoReply& reply) { 104cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn response->Return(reply); 105cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn }; 106cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn service_->GetEndorsementInfo( 107cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn request, 108cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn base::Bind(callback, SharedResponsePointer(std::move(response)))); 109cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn} 110cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn 111566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahnvoid DBusService::HandleGetAttestationKeyInfo( 112566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn std::unique_ptr<DBusMethodResponse<const GetAttestationKeyInfoReply&>> 113566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn response, 114566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn const GetAttestationKeyInfoRequest& request) { 115566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn VLOG(1) << __func__; 116566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn // Convert |response| to a shared_ptr so |service_| can safely copy the 117566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn // callback. 118566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn using SharedResponsePointer = std::shared_ptr< 119566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn DBusMethodResponse<const GetAttestationKeyInfoReply&>>; 120566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn // A callback that fills the reply protobuf and sends it. 121566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn auto callback = [](const SharedResponsePointer& response, 122566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn const GetAttestationKeyInfoReply& reply) { 123566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn response->Return(reply); 124566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn }; 125566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn service_->GetAttestationKeyInfo( 126566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn request, 127566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn base::Bind(callback, SharedResponsePointer(std::move(response)))); 128566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn} 129566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn 1302e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahnvoid DBusService::HandleActivateAttestationKey( 1312e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn std::unique_ptr<DBusMethodResponse<const ActivateAttestationKeyReply&>> 1322e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn response, 1332e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn const ActivateAttestationKeyRequest& request) { 1342e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn VLOG(1) << __func__; 1352e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn // Convert |response| to a shared_ptr so |service_| can safely copy the 1362e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn // callback. 1372e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn using SharedResponsePointer = std::shared_ptr< 1382e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn DBusMethodResponse<const ActivateAttestationKeyReply&>>; 1392e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn // A callback that fills the reply protobuf and sends it. 1402e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn auto callback = [](const SharedResponsePointer& response, 1412e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn const ActivateAttestationKeyReply& reply) { 1422e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn response->Return(reply); 1432e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn }; 1442e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn service_->ActivateAttestationKey( 1452e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn request, 1462e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn base::Bind(callback, SharedResponsePointer(std::move(response)))); 1472e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn} 1482e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn 14962c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahnvoid DBusService::HandleCreateCertifiableKey( 15062c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn std::unique_ptr<DBusMethodResponse<const CreateCertifiableKeyReply&>> 15162c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn response, 15262c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn const CreateCertifiableKeyRequest& request) { 15362c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn VLOG(1) << __func__; 15462c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn // Convert |response| to a shared_ptr so |service_| can safely copy the 15562c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn // callback. 15662c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn using SharedResponsePointer = std::shared_ptr< 15762c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn DBusMethodResponse<const CreateCertifiableKeyReply&>>; 15862c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn // A callback that fills the reply protobuf and sends it. 15962c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn auto callback = [](const SharedResponsePointer& response, 16062c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn const CreateCertifiableKeyReply& reply) { 16162c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn response->Return(reply); 16262c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn }; 16362c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn service_->CreateCertifiableKey( 16462c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn request, 16562c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn base::Bind(callback, SharedResponsePointer(std::move(response)))); 16662c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn} 16762c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn 168bc0c74963418442991072b2c87baec839eec9c20Darren Krahnvoid DBusService::HandleDecrypt( 169bc0c74963418442991072b2c87baec839eec9c20Darren Krahn std::unique_ptr<DBusMethodResponse<const DecryptReply&>> response, 170bc0c74963418442991072b2c87baec839eec9c20Darren Krahn const DecryptRequest& request) { 171bc0c74963418442991072b2c87baec839eec9c20Darren Krahn VLOG(1) << __func__; 172bc0c74963418442991072b2c87baec839eec9c20Darren Krahn // Convert |response| to a shared_ptr so |service_| can safely copy the 173bc0c74963418442991072b2c87baec839eec9c20Darren Krahn // callback. 174bc0c74963418442991072b2c87baec839eec9c20Darren Krahn using SharedResponsePointer = std::shared_ptr< 175bc0c74963418442991072b2c87baec839eec9c20Darren Krahn DBusMethodResponse<const DecryptReply&>>; 176bc0c74963418442991072b2c87baec839eec9c20Darren Krahn // A callback that fills the reply protobuf and sends it. 177bc0c74963418442991072b2c87baec839eec9c20Darren Krahn auto callback = [](const SharedResponsePointer& response, 178bc0c74963418442991072b2c87baec839eec9c20Darren Krahn const DecryptReply& reply) { 179bc0c74963418442991072b2c87baec839eec9c20Darren Krahn response->Return(reply); 180bc0c74963418442991072b2c87baec839eec9c20Darren Krahn }; 181bc0c74963418442991072b2c87baec839eec9c20Darren Krahn service_->Decrypt( 182bc0c74963418442991072b2c87baec839eec9c20Darren Krahn request, 183bc0c74963418442991072b2c87baec839eec9c20Darren Krahn base::Bind(callback, SharedResponsePointer(std::move(response)))); 184bc0c74963418442991072b2c87baec839eec9c20Darren Krahn} 185bc0c74963418442991072b2c87baec839eec9c20Darren Krahn 186b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn} // namespace attestation 187