From e3b7bf497fafd90faa497e80c1f4e59ec332348f Mon Sep 17 00:00:00 2001 From: Tomasz Marciniak Date: Wed, 1 Jul 2015 09:29:26 +0200 Subject: [PATCH] [KeyManager] Added getCertificate() implementation [Verification] Code compiles without errors. Change-Id: I3e2f73e4d8e02fd24b2cd074d4e960a9bd0a0fc3 Signed-off-by: Tomasz Marciniak --- src/keymanager/keymanager_instance.cc | 42 +++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/keymanager/keymanager_instance.cc b/src/keymanager/keymanager_instance.cc index 301e7cb5..b4972063 100755 --- a/src/keymanager/keymanager_instance.cc +++ b/src/keymanager/keymanager_instance.cc @@ -238,6 +238,48 @@ void KeyManagerInstance::GenerateKeyPair(const picojson::value& args, void KeyManagerInstance::GetCertificate(const picojson::value& args, picojson::object& out) { LoggerD("Enter"); + + const std::string& alias = args.get("name").get(); + + std::string pass; + if (args.get("password").is()) { + pass = args.get("password").get(); + } + + ckmc_cert_s* cert = nullptr; + int ret = ckmc_get_cert(alias.c_str(), pass.c_str(), &cert); + + if (CKMC_ERROR_NONE != ret) { + LoggerE("Failed to get certificate: %d", ret); + PlatformResult result = PlatformResult(ErrorCode::NO_ERROR); + switch (ret) { + case CKMC_ERROR_DB_ALIAS_UNKNOWN: + result = PlatformResult(ErrorCode::NOT_FOUND_ERR, "Certificate alias not found"); + break; + case CKMC_ERROR_INVALID_PARAMETER: + result = PlatformResult(ErrorCode::INVALID_VALUES_ERR, "Invalid parameter passed"); + break; + default: + result = PlatformResult(ErrorCode::UNKNOWN_ERR, "Failed to get certificate"); + } + + ReportError(result, &out); + } else { + picojson::value result = picojson::value(picojson::object()); + picojson::object& obj = result.get(); + + //if cert was retrieved it is extractable from db + obj["extractable"] = picojson::value(true); + obj["name"] = picojson::value(alias); + if (!pass.empty()) { + obj["password"] = picojson::value(pass); + } + + RawBuffer raw_cert (cert->raw_cert, cert->raw_cert + cert->cert_size); + obj["rawCert"] = picojson::value(RawBufferToBase64(raw_cert)); + + ReportSuccess(result, out); + } } void KeyManagerInstance::SaveCertificate(const picojson::value& args, -- 2.34.1