| // Copyright 2020 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "hwsec-test-utils/fake_pca_agent/service.h" |
| |
| #include <attestation/proto_bindings/interface.pb.h> |
| #include <attestation/proto_bindings/pca_agent.pb.h> |
| |
| #include "hwsec-test-utils/fake_pca_agent/pca_factory.h" |
| |
| namespace hwsec_test_utils { |
| namespace fake_pca_agent { |
| |
| namespace { |
| |
| constexpr char kPreprocessError[] = "Preprocess error"; |
| constexpr char kVerificationError[] = "Verification error"; |
| constexpr char kGenerationError[] = "Generation error"; |
| constexpr char kWriteError[] = "Write error"; |
| |
| } // namespace |
| |
| FakePcaAgentService::FakePcaAgentService() = default; |
| |
| void FakePcaAgentService::Enroll( |
| std::unique_ptr<brillo::dbus_utils::DBusMethodResponse< |
| attestation::pca_agent::EnrollReply>> response, |
| const attestation::pca_agent::EnrollRequest& in_request) { |
| attestation::AttestationEnrollmentRequest request; |
| attestation::pca_agent::EnrollReply reply; |
| if (!request.ParseFromString(in_request.request())) { |
| reply.set_status(attestation::AttestationStatus::STATUS_INVALID_PARAMETER); |
| response->Return(reply); |
| return; |
| } |
| attestation::AttestationEnrollmentResponse enroll_response; |
| enroll_response.set_status(attestation::ResponseStatus::BAD_REQUEST); |
| auto pca_enroll = CreatePcaEnroll(request); |
| if (!pca_enroll->Preprocess()) { |
| enroll_response.set_detail(kPreprocessError); |
| } else if (!pca_enroll->Verify()) { |
| enroll_response.set_detail(kVerificationError); |
| } else if (!pca_enroll->Generate()) { |
| enroll_response.set_detail(kGenerationError); |
| } else if (!pca_enroll->Write(&enroll_response)) { |
| enroll_response.set_detail(kWriteError); |
| } else { |
| enroll_response.set_status(attestation::ResponseStatus::OK); |
| } |
| if (!enroll_response.SerializeToString(reply.mutable_response())) { |
| reply.set_status( |
| attestation::AttestationStatus::STATUS_UNEXPECTED_DEVICE_ERROR); |
| } |
| response->Return(reply); |
| } |
| |
| void FakePcaAgentService::GetCertificate( |
| std::unique_ptr<brillo::dbus_utils::DBusMethodResponse< |
| attestation::pca_agent::GetCertificateReply>> response, |
| const attestation::pca_agent::GetCertificateRequest& in_request) { |
| attestation::AttestationCertificateRequest request; |
| attestation::pca_agent::GetCertificateReply reply; |
| if (!request.ParseFromString(in_request.request())) { |
| reply.set_status(attestation::AttestationStatus::STATUS_INVALID_PARAMETER); |
| response->Return(reply); |
| return; |
| } |
| attestation::AttestationCertificateResponse certify_response; |
| certify_response.set_status(attestation::ResponseStatus::BAD_REQUEST); |
| certify_response.set_message_id(request.message_id()); |
| auto pca_certify = CreatePcaCertify(request); |
| if (!pca_certify->Preprocess()) { |
| certify_response.set_detail(kPreprocessError); |
| } else if (!pca_certify->Verify()) { |
| certify_response.set_detail(kVerificationError); |
| } else if (!pca_certify->Generate()) { |
| certify_response.set_detail(kGenerationError); |
| } else if (!pca_certify->Write(&certify_response)) { |
| certify_response.set_detail(kWriteError); |
| } else { |
| certify_response.set_status(attestation::ResponseStatus::OK); |
| } |
| if (!certify_response.SerializeToString(reply.mutable_response())) { |
| reply.set_status( |
| attestation::AttestationStatus::STATUS_UNEXPECTED_DEVICE_ERROR); |
| } |
| response->Return(reply); |
| } |
| |
| } // namespace fake_pca_agent |
| } // namespace hwsec_test_utils |