From: Pawel Andruszkiewicz Date: Wed, 1 Jul 2015 08:28:35 +0000 (+0200) Subject: [KeyManager] Implementation of verifySignature(). X-Git-Tag: submit/tizen/20150702.103311^2~1^2~38 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=761ecba1bb6d1463fc2045e1d8f6a7f4df9758f5;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git [KeyManager] Implementation of verifySignature(). [Verification] Code compiles. Change-Id: If6c0df68a6beff875ab64511fbfdaafcfeb00e84 Signed-off-by: Pawel Andruszkiewicz --- diff --git a/src/keymanager/keymanager_instance.cc b/src/keymanager/keymanager_instance.cc index 44f73fa3..ee02ca17 100755 --- a/src/keymanager/keymanager_instance.cc +++ b/src/keymanager/keymanager_instance.cc @@ -643,6 +643,71 @@ void KeyManagerInstance::CreateSignature(const picojson::value& args, void KeyManagerInstance::VerifySignature(const picojson::value& args, picojson::object& out) { LoggerD("Enter"); + + const auto& alias = args.get("pubKeyAlias").get(); + RawBuffer* message = new RawBuffer(std::move(Base64ToRawBuffer(args.get("message").get()))); + RawBuffer* signature = new RawBuffer(std::move(Base64ToRawBuffer(args.get("signature").get()))); + const auto& password_value = args.get("password"); + double callback_id = args.get("callbackId").get(); + ckmc_hash_algo_e hash = StringToHashAlgorithm(args.get("hashAlgorithmType").get()); + ckmc_rsa_padding_algo_e padding = StringToRsaPadding(args.get("padding").get()); + + std::string password; + + if (password_value.is()) { + password = password_value.get(); + } + + auto verify_certificate = [alias, message, signature, password, hash, padding](const std::shared_ptr& result) { + LoggerD("Enter verify_certificate"); + + ckmc_raw_buffer_s message_buf = { const_cast(&(*message)[0]), message->size() }; + ckmc_raw_buffer_s signature_buf = { const_cast(&(*signature)[0]), signature->size() }; + + int ret = ckmc_verify_signature(alias.c_str(), password.c_str(), message_buf, signature_buf, hash , padding); + + PlatformResult success(ErrorCode::NO_ERROR); + + switch (ret) { + case CKMC_ERROR_NONE: + break; + + case CKMC_ERROR_DB_ALIAS_UNKNOWN: + success = PlatformResult(ErrorCode::NOT_FOUND_ERR, "Alias not found"); + break; + + case CKMC_ERROR_INVALID_PARAMETER: + success = PlatformResult(ErrorCode::INVALID_VALUES_ERR, "Failed to verify signature"); + break; + + default: + success = PlatformResult(ErrorCode::UNKNOWN_ERR, "Failed to verify signature"); + break; + } + + if (success) { + common::tools::ReportSuccess(result->get()); + } else { + LoggerE("Failed to verify signature: %d", ret); + common::tools::ReportError(success, &result->get()); + } + + delete message; + delete signature; + }; + + auto verify_certificate_result = [this, callback_id](const std::shared_ptr& result) { + LoggerD("Enter verify_certificate_result"); + result->get()["callbackId"] = picojson::value{callback_id}; + this->PostMessage(result->serialize().c_str()); + }; + + TaskQueue::GetInstance().Queue( + verify_certificate, + verify_certificate_result, + std::shared_ptr{new picojson::value{picojson::object()}}); + + ReportSuccess(out); } void KeyManagerInstance::LoadFromPKCS12File(const picojson::value& args,