From: Pawel Andruszkiewicz Date: Tue, 30 Jun 2015 10:14:01 +0000 (+0200) Subject: [KeyManager] Removed C++ implementation. X-Git-Tag: submit/tizen/20150702.103311^2~1^2~49 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e4f9795e545ef8481e0dd39c479a3745e059e692;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git [KeyManager] Removed C++ implementation. Change-Id: I8f00f827790a4bc443395056dd5386da43783e25 Signed-off-by: Pawel Andruszkiewicz --- diff --git a/src/keymanager/async_file_reader.cc b/src/keymanager/async_file_reader.cc deleted file mode 100755 index ec0db923..00000000 --- a/src/keymanager/async_file_reader.cc +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "keymanager/async_file_reader.h" -#include "common/logger.h" - -namespace extension { -namespace keymanager { - -const gsize kBufferSize = 4096; - -using common::PlatformResult; -using common::ErrorCode; - -AsyncFileReader::AsyncFileReader(): buffer_(nullptr) {} - -void AsyncFileReader::LoadFileAsync(const std::string& file_uri) { - LoggerD("Enter"); - GFile* file = g_file_new_for_uri(file_uri.c_str()); - g_file_read_async(file, G_PRIORITY_DEFAULT, nullptr, OnFileRead, this); -} - -void AsyncFileReader::OnFileRead(GObject* source_object, - GAsyncResult* res, gpointer user_data) { - LoggerD("Enter"); - AsyncFileReader* This = static_cast(user_data); - GError* err = nullptr; - GFileInputStream* stream = g_file_read_finish(G_FILE(source_object), - res, &err); - g_object_unref(source_object); - if (stream == nullptr) { - LoggerE("Failed to read file: %d", err->code); - if (err->code == G_FILE_ERROR_NOENT) { - This->OnError(PlatformResult(ErrorCode::NOT_FOUND_ERR, - "File not found")); - } else { - This->OnError(PlatformResult(ErrorCode::IO_ERR, - "Failed to load file")); - } - return; - } - - This->buffer_ = new guint8[kBufferSize]; - g_input_stream_read_async(G_INPUT_STREAM(stream), This->buffer_, kBufferSize, - G_PRIORITY_DEFAULT, nullptr, OnStreamRead, This); -} - -void AsyncFileReader::OnStreamRead(GObject* source_object, - GAsyncResult* res, gpointer user_data) { - LoggerD("Enter"); - - AsyncFileReader* This = static_cast(user_data); - gssize size = g_input_stream_read_finish(G_INPUT_STREAM(source_object), - res, nullptr); - switch (size){ - case -1: - LoggerE("Error occured"); - This->OnError(PlatformResult(ErrorCode::IO_ERR, - "Failed to load file")); - g_object_unref(source_object); - break; - case 0: - LoggerD("End of file"); - This->OnFileLoaded(); - g_object_unref(source_object); - break; - default: - This->AppendBuffer(This->buffer_, size); - g_input_stream_read_async(G_INPUT_STREAM(source_object), This->buffer_, - kBufferSize, G_PRIORITY_DEFAULT, nullptr, OnStreamRead, This); - } -} - -AsyncFileReader::~AsyncFileReader() { - delete[] buffer_; -} - -} // namespace keymanager -} // namespace extension diff --git a/src/keymanager/async_file_reader.h b/src/keymanager/async_file_reader.h deleted file mode 100755 index 7eb6a7c7..00000000 --- a/src/keymanager/async_file_reader.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef KEYMANAGER_ASYNC_FILE_READER_H_ -#define KEYMANAGER_ASYNC_FILE_READER_H_ - -#include -#include -#include "common/platform_result.h" - -namespace extension { -namespace keymanager { - -class AsyncFileReader { -public: - AsyncFileReader(); - void LoadFileAsync(const std::string &file_uri); - virtual ~AsyncFileReader(); - -protected: - virtual void AppendBuffer(guint8* buffer, gssize size) = 0; - virtual void OnError(const common::PlatformResult& result) = 0; - virtual void OnFileLoaded() = 0; - -private: - guint8* buffer_; - - static void OnFileRead(GObject *source_object, - GAsyncResult *res, - gpointer user_data); - static void OnStreamRead(GObject *source_object, - GAsyncResult *res, - gpointer user_data); -}; - -} // namespace keymanager -} // namespace extension - -#endif // KEYMANAGER_ASYNC_FILE_READER_H_ - diff --git a/src/keymanager/keymanager.gyp b/src/keymanager/keymanager.gyp index 238565a9..99ae7ffc 100644 --- a/src/keymanager/keymanager.gyp +++ b/src/keymanager/keymanager.gyp @@ -11,21 +11,16 @@ ], 'sources': [ 'keymanager_api.js', - 'async_file_reader.cc', - 'async_file_reader.h', 'keymanager_extension.cc', 'keymanager_extension.h', 'keymanager_instance.cc', 'keymanager_instance.h', - 'keymanager_observers.h', - 'keymanager_observers.cc', ], 'conditions': [ ['tizen == 1', { 'variables': { 'packages': [ 'key-manager', - 'libpcrecpp', ] }, }], diff --git a/src/keymanager/keymanager_api.js b/src/keymanager/keymanager_api.js index 281c4691..e77a4f98 100755 --- a/src/keymanager/keymanager_api.js +++ b/src/keymanager/keymanager_api.js @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - + var validator = xwalk.utils.validator; var converter = xwalk.utils.converter; var type = xwalk.utils.type; @@ -66,6 +66,12 @@ var AccessControlType = { "READ_REMOVE": "READ_REMOVE" }; +function stripPemString(str) { + // remove new line characters + // remove BEGIN and END lines + return str.replace(/(\r\n|\r|\n)/g, '').replace(/-----[^-]*-----/g, ''); +} + function Key(name, password, extractable, keyType, rawKey) { Object.defineProperties(this, { name: { diff --git a/src/keymanager/keymanager_instance.cc b/src/keymanager/keymanager_instance.cc index 01bfa966..81006aa3 100755 --- a/src/keymanager/keymanager_instance.cc +++ b/src/keymanager/keymanager_instance.cc @@ -16,24 +16,64 @@ #include "keymanager/keymanager_instance.h" -#include -#include +#include #include -#include -#include #include "common/logger.h" -#include "common/picojson.h" +#include "common/optional.h" #include "common/platform_result.h" +#include "common/scope_exit.h" +#include "common/task-queue.h" +#include "common/tools.h" +#include "common/virtual_fs.h" namespace extension { namespace keymanager { +using common::ErrorCode; +using common::optional; +using common::PlatformResult; +using common::TaskQueue; +using common::VirtualFs; + namespace { + +typedef std::vector RawBuffer; + const char* kTypeRSA = "RSA"; const char* kTypeECDSA = "ECDSA"; + +RawBuffer Base64ToRawBuffer(const std::string& base64) { + LoggerD("Enter"); + + gsize len = 0; + guchar* raw_data = g_base64_decode(base64.c_str(), &len); + RawBuffer raw_buffer; + + if (raw_data) { + raw_buffer.assign(raw_data, raw_data + len); + g_free(raw_data); + } + + return raw_buffer; } +std::string RawBufferToBase64(const RawBuffer& buf) { + LoggerD("Enter"); + + std::string result; + + if (!buf.empty()) { + gchar* base64 = g_base64_encode(&buf[0], buf.size()); + result = base64; + g_free(base64); + } + + return result; +} + +} // namespace + KeyManagerInstance::KeyManagerInstance() { LoggerD("Enter"); using std::placeholders::_1; @@ -83,721 +123,99 @@ KeyManagerInstance::~KeyManagerInstance() { LoggerD("Enter"); } -void KeyManagerInstance::GetAliasList( - std::function coreFunc, picojson::object& out) { - LoggerD("Enter"); - CKM::AliasVector result; - int ret = coreFunc(result); - if (ret != CKM_API_SUCCESS) { - LoggerE("Failed to fetch list of alias: %d", ret); - ReportError(common::PlatformResult(common::ErrorCode::UNKNOWN_ERR, - "Failed to fetch list of alias"), &out); - } else { - picojson::array aliases; - for (auto& item: result) { - aliases.push_back(picojson::value(item)); - } - picojson::value res(aliases); - ReportSuccess(res, out); - } -} - void KeyManagerInstance::GetKeyAliasList(const picojson::value& args, - picojson::object& out) { + picojson::object& out) { LoggerD("Enter"); - using std::placeholders::_1; - GetAliasList( - std::bind(&CKM::Manager::getKeyAliasVector, CKM::Manager::create(), _1), - out); } void KeyManagerInstance::GetCertificateAliasList(const picojson::value& args, - picojson::object& out) { + picojson::object& out) { LoggerD("Enter"); - using std::placeholders::_1; - GetAliasList( - std::bind(&CKM::Manager::getCertificateAliasVector, CKM::Manager::create(), _1), - out); } void KeyManagerInstance::GetDataAliasList(const picojson::value& args, - picojson::object& out) { + picojson::object& out) { LoggerD("Enter"); - using std::placeholders::_1; - GetAliasList( - std::bind(&CKM::Manager::getDataAliasVector, CKM::Manager::create(), _1), - out); } -CKM::RawBuffer Base64ToRawBuffer(const std::string base64) { +void KeyManagerInstance::GetKey(const picojson::value& args, + picojson::object& out) { LoggerD("Enter"); - gsize len = 0; - guchar* raw_data = g_base64_decode(base64.c_str(), &len); - CKM::RawBuffer rawBuffer; - if (raw_data) { - rawBuffer.assign(raw_data, raw_data + len); - g_free(raw_data); - } - return rawBuffer; } void KeyManagerInstance::SaveKey(const picojson::value& args, - picojson::object& out) { + picojson::object& out) { LoggerD("Enter"); - - const picojson::value& key_object = args.get("key"); - const std::string& alias = key_object.get("name").get(); - std::string password; - if (key_object.get("password").is()) { - password = key_object.get("password").get(); - } - std::string base64 = args.get("rawKey").get(); - pcrecpp::RE_Options opt; - opt.set_multiline(true); - //remove first line and last line - pcrecpp::RE("-----[^-]*-----", opt).GlobalReplace("", &base64); - CKM::RawBuffer raw_buffer = Base64ToRawBuffer(base64); - CKM::Password pass(password.c_str()); - CKM::KeyShPtr key = CKM::Key::create(raw_buffer, pass); - CKM::Policy policy(pass, key_object.get("extractable").get()); - CKM::ManagerAsync::ObserverPtr observer(new SaveKeyObserver(this, - args.get("callbackId").get())); - m_manager.saveKey(observer, alias, key, policy); - - ReportSuccess(out); -} - -void KeyManagerInstance::OnSaveKey(double callbackId, - const common::PlatformResult& result) { - LoggerD("Enter"); - picojson::value::object dict; - dict["callbackId"] = picojson::value(callbackId); - if (result.IsError()) { - LoggerE("There was an error"); - ReportError(result, &dict); - } - picojson::value res(dict); - PostMessage(res.serialize().c_str()); } void KeyManagerInstance::RemoveKey(const picojson::value& args, - picojson::object& out) { - LoggerD("Enter"); - - const std::string& alias = args.get("key").get("name").get(); - common::PlatformResult res = RemoveAlias(alias); - if (res.IsError()) { - ReportError(res, &out); - } else { - ReportSuccess(out); - } -} - -common::PlatformResult KeyManagerInstance::RemoveAlias( - const std::string& alias) { + picojson::object& out) { LoggerD("Enter"); - int ret = CKM::Manager::create()->removeAlias(alias); - if (ret != CKM_API_SUCCESS) { - LoggerE("Failed to remove alias: %d", ret); - if (ret == CKM_API_ERROR_DB_ALIAS_UNKNOWN) { - return common::PlatformResult(common::ErrorCode::NOT_FOUND_ERR, - "Key alias not found"); - } else { - return common::PlatformResult(common::ErrorCode::UNKNOWN_ERR, - "Failed to remove alias"); - } - } - return common::PlatformResult(common::ErrorCode::NO_ERROR); } void KeyManagerInstance::GenerateKeyPair(const picojson::value& args, - picojson::object& out) { - LoggerD("Enter"); - - const picojson::value& priv_key = args.get("privKeyName"); - const picojson::value& pub_key = args.get("pubKeyName"); - const std::string& priv_name = priv_key.get("name").get(); - const std::string& pub_name = pub_key.get("name").get(); - const std::string& type = args.get("type").get(); - int size = std::stoi(args.get("size").get()); - - CKM::ManagerAsync::ObserverPtr observer(new CreateKeyObserver(this, - args.get("callbackId").get())); - - CKM::Password pass; - if (priv_key.get("password").is()) { - pass = priv_key.get("password").get().c_str(); - } - CKM::Policy priv_policy(pass, priv_key.get("extractable").get()); - - if (pub_key.get("password").is()) { - pass = pub_key.get("password").get().c_str(); - } else { - pass = ""; - } - CKM::Policy pub_policy(pass, pub_key.get("extractable").get()); - - if (type == kTypeRSA) { - m_manager.createKeyPairRSA(observer, size, priv_name, pub_name, priv_policy, pub_policy); - } else if (type == kTypeECDSA) { - CKM::ElipticCurve eliptic = CKM::ElipticCurve::prime192v1; - if (args.get("ellipticCurveType").is()) { - const std::string& eType = args.get("ellipticCurveType").get(); - if (eType == "PRIME256V1") { - eliptic = CKM::ElipticCurve::prime256v1; - } else if (eType == "EC_SECP384R1") { - eliptic = CKM::ElipticCurve::secp384r1; - } - } - m_manager.createKeyPairECDSA(observer, eliptic, priv_name, pub_name, priv_policy, pub_policy); - } else { - m_manager.createKeyPairDSA(observer, size, priv_name, pub_name, priv_policy, pub_policy); - } - - ReportSuccess(out); -} - -void KeyManagerInstance::OnCreateKeyPair(double callbackId, - const common::PlatformResult& result) { - LoggerD("Enter"); - picojson::value::object dict; - dict["callbackId"] = picojson::value(callbackId); - if (result.IsError()) { - LoggerE("There was an error"); - ReportError(result, &dict); - } - picojson::value res(dict); - PostMessage(res.serialize().c_str()); -} - -std::string RawBufferToBase64(const CKM::RawBuffer &buf) { - LoggerD("Enter"); - std::string result; - if (!buf.empty()) { - gchar* base64 = g_base64_encode(&buf[0], buf.size()); - result = base64; - g_free(base64); - } - return result; -} - -void KeyManagerInstance::GetKey(const picojson::value& args, picojson::object& out) { + picojson::object& out) { LoggerD("Enter"); - using CKM::KeyType; - - const std::string& alias = args.get("name").get(); - CKM::Password pass; - if (args.get("password").is()) { - pass = args.get("password").get().c_str(); - } - - CKM::KeyShPtr key; - int ret = CKM::Manager::create()->getKey(alias, pass, key); - if (ret != CKM_API_SUCCESS) { - LoggerE("Failed to get key: %d", ret); - if (ret == CKM_API_ERROR_DB_ALIAS_UNKNOWN) { - ReportError(common::PlatformResult(common::ErrorCode::NOT_FOUND_ERR, - "Key alias not found"), &out); - } else { - ReportError(common::PlatformResult(common::ErrorCode::UNKNOWN_ERR, - "Failed to get key"), &out); - } - } else { - picojson::object dict; - dict["name"] = args.get("name"); - if (args.get("password").is()) { - dict["password"] = args.get("password"); - } - switch (key->getType()) { - case KeyType::KEY_NONE: - dict["keyType"] = picojson::value("KEY_NONE"); - break; - case KeyType::KEY_RSA_PUBLIC: - dict["keyType"] = picojson::value("KEY_RSA_PUBLIC"); - break; - case KeyType::KEY_RSA_PRIVATE: - dict["keyType"] = picojson::value("KEY_RSA_PRIVATE"); - break; - case KeyType::KEY_ECDSA_PUBLIC: - dict["keyType"] = picojson::value("KEY_ECDSA_PUBLIC"); - break; - case KeyType::KEY_ECDSA_PRIVATE: - dict["keyType"] = picojson::value("KEY_ECDSA_PRIVATE"); - break; - case KeyType::KEY_DSA_PUBLIC: - dict["keyType"] = picojson::value("KEY_DSA_PUBLIC"); - break; - case KeyType::KEY_DSA_PRIVATE: - dict["keyType"] = picojson::value("KEY_DSA_PRIVATE"); - break; - case KeyType::KEY_AES: - dict["keyType"] = picojson::value("KEY_AES"); - break; - } - dict["rawKey"] = picojson::value(RawBufferToBase64(key->getDER())); - //if key was retrieved it is extractable from db - dict["extractable"] = picojson::value(true); - - picojson::value res(dict); - ReportSuccess(res, out); - } } void KeyManagerInstance::GetCertificate(const picojson::value& args, - picojson::object& out) { + picojson::object& out) { LoggerD("Enter"); - - CKM::Password pass; - if (args.get("password").is()) { - pass = args.get("password").get().c_str(); - } - const std::string& alias = args.get("name").get(); - CKM::CertificateShPtr cert; - int ret = CKM::Manager::create()->getCertificate(alias, pass, cert); - if (ret != CKM_API_SUCCESS) { - LoggerE("Failed to get cert: %d", ret); - if (ret == CKM_API_ERROR_DB_ALIAS_UNKNOWN) { - ReportError(common::PlatformResult(common::ErrorCode::NOT_FOUND_ERR, - "Cert alias not found"), &out); - } else { - ReportError(common::PlatformResult(common::ErrorCode::UNKNOWN_ERR, - "Failed to get cert"), &out); - } - } else { - picojson::object dict; - dict["name"] = args.get("name"); - if (args.get("password").is()) { - dict["password"] = args.get("password"); - } - //if cert was retrieved it is extractable from db - dict["extractable"] = picojson::value(true); - dict["rawCert"] = picojson::value(RawBufferToBase64(cert->getDER())); - - picojson::value res(dict); - ReportSuccess(res, out); - } } void KeyManagerInstance::SaveCertificate(const picojson::value& args, - picojson::object& out) { - LoggerD("Enter"); - - const picojson::value& crt = args.get("certificate"); - const std::string& alias = crt.get("name").get(); - std::string password; - if (crt.get("password").is()) { - password = crt.get("password").get(); - } - std::string base64 = args.get("rawCert").get(); - - SaveCert(base64, - password, - alias, - crt.get("extractable").get(), - args.get("callbackId").get()); - ReportSuccess(out); -} - -void KeyManagerInstance::SaveCert(std::string &base64, - const std::string &password, - const std::string &alias, - bool extractable, - double callbackId) { - LoggerD("Enter"); - pcrecpp::RE_Options opt; - opt.set_multiline(true); - //remove first line and last line - pcrecpp::RE("-----[^-]*-----", opt).GlobalReplace("", &base64); - CKM::RawBuffer rawBuffer = Base64ToRawBuffer(base64); - CKM::Password pass(password.c_str()); - CKM::CertificateShPtr cert = CKM::Certificate::create(rawBuffer, - CKM::DataFormat::FORM_DER); - CKM::Policy policy(pass, extractable); - CKM::ManagerAsync::ObserverPtr observer(new SaveCertObserver(this, - callbackId)); - m_manager.saveCertificate(observer, alias, cert, policy); -} - -void KeyManagerInstance::OnSaveCert(double callbackId, - const common::PlatformResult& result) { + picojson::object& out) { LoggerD("Enter"); - picojson::value::object dict; - dict["callbackId"] = picojson::value(callbackId); - if (result.IsError()) { - LoggerE("There was an error"); - ReportError(result, &dict); - } - picojson::value res(dict); - PostMessage(res.serialize().c_str()); } void KeyManagerInstance::LoadCertificateFromFile(const picojson::value& args, - picojson::object& out) { - LoggerD("Enter"); - - const picojson::value& crt = args.get("certificate"); - const std::string& file = args.get("fileURI").get(); - std::string password; - if (crt.get("password").is()) { - password = crt.get("password").get(); - } - LoadFileCert* reader = new LoadFileCert(this, - args.get("callbackId").get(), - password, - crt.get("name").get(), - crt.get("extractable").get()); - reader->LoadFileAsync(file); - - ReportSuccess(out); -} - -void KeyManagerInstance::OnCertFileLoaded(LoadFileCert* reader, - const common::PlatformResult& result) { + picojson::object& out) { LoggerD("Enter"); - - if (result.IsError()) { - LoggerE("There was an error"); - picojson::value::object dict; - dict["callbackId"] = picojson::value(reader->callback_id); - ReportError(result, &dict); - picojson::value res(dict); - PostMessage(res.serialize().c_str()); - } else { - SaveCert(reader->file_content, reader->password, reader->alias, - reader->extractable, reader->callback_id); - } - delete reader; } void KeyManagerInstance::RemoveCertificate(const picojson::value& args, - picojson::object& out) { + picojson::object& out) { LoggerD("Enter"); - - const std::string& alias = args.get("certificate").get("name").get(); - common::PlatformResult res = RemoveAlias(alias); - if (res.IsError()) { - ReportError(res, &out); - } else { - picojson::value result; - ReportSuccess(result, out); - } } void KeyManagerInstance::SaveData(const picojson::value& args, - picojson::object& out) { + picojson::object& out) { LoggerD("Enter"); - - const picojson::value& data = args.get("data"); - const std::string& alias = data.get("name").get(); - std::string password; - if (data.get("password").is()) { - password = data.get("password").get(); - } - std::string base64 = args.get("rawData").get(); - - CKM::RawBuffer raw_buffer = Base64ToRawBuffer(base64); - CKM::Password pass(password.c_str()); - CKM::Policy policy(pass, data.get("extractable").get()); - CKM::ManagerAsync::ObserverPtr observer(new SaveDataObserver(this, - args.get("callbackId").get())); - m_manager.saveData(observer, alias, raw_buffer, policy); - - ReportSuccess(out); -} - -void KeyManagerInstance::OnSaveData(double callbackId, - const common::PlatformResult& result) { - LoggerD("Enter"); - - picojson::value::object dict; - dict["callbackId"] = picojson::value(callbackId); - if (result.IsError()) { - LoggerE("There was an error"); - ReportError(result, &dict); - } - picojson::value res(dict); - PostMessage(res.serialize().c_str()); } void KeyManagerInstance::RemoveData(const picojson::value& args, - picojson::object& out) { + picojson::object& out) { LoggerD("Enter"); - const std::string& alias = args.get("data").get("name").get(); - common::PlatformResult res = RemoveAlias(alias); - if (res.IsError()) { - ReportError(res, &out); - } else { - ReportSuccess(out); - } } void KeyManagerInstance::GetData(const picojson::value& args, - picojson::object& out) { + picojson::object& out) { LoggerD("Enter"); - - const std::string& alias = args.get("name").get(); - CKM::Password pass; - if (args.get("password").is()) { - pass = args.get("password").get().c_str(); - } - - CKM::RawBuffer raw_buffer; - int ret = CKM::Manager::create()->getData(alias, pass, raw_buffer); - if (ret != CKM_API_SUCCESS) { - LoggerE("Failed to get data: %d", ret); - if (ret == CKM_API_ERROR_DB_ALIAS_UNKNOWN) { - ReportError(common::PlatformResult(common::ErrorCode::NOT_FOUND_ERR, - "Data alias not found"), &out); - } else { - ReportError(common::PlatformResult(common::ErrorCode::UNKNOWN_ERR, - "Failed to get data"), &out); - } - } else { - picojson::object dict; - dict["name"] = args.get("name"); - if (args.get("password").is()) { - dict["password"] = args.get("password"); - } - dict["rawData"] = picojson::value(RawBufferToBase64(raw_buffer)); - //if key was retrieved it is extractable from db - dict["extractable"] = picojson::value(true); - - picojson::value res(dict); - ReportSuccess(res, out); - } -} - -CKM::HashAlgorithm StringToHashAlgorithm(const std::string &hashAlgorithmType) { - LoggerD("Enter"); - using CKM::HashAlgorithm; - if (hashAlgorithmType == "HASH_SHA1") { - return HashAlgorithm::SHA1; - } else if (hashAlgorithmType == "HASH_SHA256") { - return HashAlgorithm::SHA256; - } else if (hashAlgorithmType == "HASH_SHA384") { - return HashAlgorithm::SHA384; - } else if (hashAlgorithmType == "HASH_SHA512") { - return HashAlgorithm::SHA512; - } - return HashAlgorithm::NONE; -} - -CKM::RSAPaddingAlgorithm StringToRSAPadding(const std::string &padding) { - LoggerD("Enter"); - if (padding == "PADDING_PKCS1") { - return CKM::RSAPaddingAlgorithm::PKCS1; - } - return CKM::RSAPaddingAlgorithm::X931; } void KeyManagerInstance::CreateSignature(const picojson::value& args, - picojson::object& out) { + picojson::object& out) { LoggerD("Enter"); - - using CKM::HashAlgorithm; - using CKM::RSAPaddingAlgorithm; - const std::string& alias = args.get("privKeyAlias").get(); - std::string base64 = args.get("message").get(); - CKM::Password pass; - if (args.get("password").is()) { - pass = args.get("password").get().c_str(); - } - CKM::RawBuffer raw_buffer = Base64ToRawBuffer(base64); - HashAlgorithm hash = StringToHashAlgorithm( - args.get("hashAlgorithmType").get()); - RSAPaddingAlgorithm alg = StringToRSAPadding( - args.get("padding").get()); - CKM::ManagerAsync::ObserverPtr observer(new CreateSignatureObserver(this, - args.get("callbackId").get())); - m_manager.createSignature(observer, alias, pass, raw_buffer, hash, alg); - - ReportSuccess(out); -} - -void KeyManagerInstance::OnCreateSignature(double callbackId, - const common::PlatformResult& result, CKM::RawBuffer buffer) { - LoggerD("Enter"); - - picojson::value::object dict; - dict["callbackId"] = picojson::value(callbackId); - if (result.IsError()) { - LoggerE("There was an error"); - ReportError(result, &dict); - } else { - dict["result"] = picojson::value(RawBufferToBase64(buffer)); - } - picojson::value res(dict); - PostMessage(res.serialize().c_str()); -} - -void KeyManagerInstance::VerifySignature(const picojson::value& args, picojson::object& out) { - LoggerD("Enter"); - using CKM::HashAlgorithm; - using CKM::RSAPaddingAlgorithm; - - const std::string& alias = args.get("pubKeyAlias").get(); - const std::string& message_string = args.get("message").get(); - const std::string& signature_string = args.get("signature").get(); - CKM::Password pass; - if (args.get("password").is()) { - pass = args.get("password").get().c_str(); - } - CKM::RawBuffer message = Base64ToRawBuffer(message_string); - CKM::RawBuffer signature = Base64ToRawBuffer(signature_string); - - HashAlgorithm hash = StringToHashAlgorithm( - args.get("hashAlgorithmType").get()); - RSAPaddingAlgorithm alg = StringToRSAPadding( - args.get("padding").get()); - CKM::ManagerAsync::ObserverPtr observer(new VerifySignatureObserver(this, - args.get("callbackId").get())); - m_manager.verifySignature(observer, alias, pass, message, signature, hash, alg); - - ReportSuccess(out); } -void KeyManagerInstance::OnVerifySignature(double callbackId, - const common::PlatformResult& result) { +void KeyManagerInstance::VerifySignature(const picojson::value& args, + picojson::object& out) { LoggerD("Enter"); - - picojson::value::object dict; - dict["callbackId"] = picojson::value(callbackId); - if (result.IsError()) { - LoggerE("There was an error"); - ReportError(result, &dict); - } - picojson::value res(dict); - PostMessage(res.serialize().c_str()); } void KeyManagerInstance::LoadFromPKCS12File(const picojson::value& args, - picojson::object& out) { - LoggerD("Enter"); - - const std::string& file = args.get("fileURI").get(); - const std::string& key_alias = args.get("privKeyName").get(); - const std::string& cert_alias = args.get("certificateName").get(); - std::string password; - if (args.get("password").is()) { - password = args.get("password").get(); - } - LoadFilePKCS12* reader = new LoadFilePKCS12(this, - args.get("callbackId").get(), - password, - key_alias, - cert_alias); - reader->LoadFileAsync(file); - - ReportSuccess(out); -} - -void KeyManagerInstance::OnPKCS12FileLoaded(LoadFilePKCS12* reader, - const common::PlatformResult& result) { - LoggerD("Enter"); - - if (result.IsError()) { - LoggerE("There was an error"); - picojson::value::object dict; - dict["callbackId"] = picojson::value(reader->callback_id); - ReportError(result, &dict); - picojson::value res(dict); - PostMessage(res.serialize().c_str()); - } else { - CKM::Password pass(reader->password.c_str()); - CKM::PKCS12ShPtr pkcs = CKM::PKCS12::create(reader->file_content, pass); - if (!pkcs) { - LoggerE("Failed to parse PKCS12 file"); - picojson::value::object dict; - dict["callbackId"] = picojson::value(reader->callback_id); - common::PlatformResult err(common::ErrorCode::INVALID_VALUES_ERR, - "Failed to parse PKCS12 file"); - ReportError(err, &dict); - picojson::value res(dict); - PostMessage(res.serialize().c_str()); - } else { - CKM::Policy keyPolicy; - CKM::Policy certPolicy; - CKM::ManagerAsync::ObserverPtr observer(new SavePKCS12Observer(this, - reader->callback_id)); - m_manager.saveCertificate(observer, reader->cert_alias, pkcs->getCertificate(), certPolicy); - m_manager.saveKey(observer, reader->key_alias, pkcs->getKey(), keyPolicy); - } - } - delete reader; -} - -void KeyManagerInstance::OnSavePKCS12(double callbackId, - const common::PlatformResult& result) { + picojson::object& out) { LoggerD("Enter"); - - picojson::value::object dict; - dict["callbackId"] = picojson::value(callbackId); - if (result.IsError()) { - LoggerE("There was an error"); - ReportError(result, &dict); - } - picojson::value res(dict); - PostMessage(res.serialize().c_str()); } void KeyManagerInstance::AllowAccessControl(const picojson::value& args, - picojson::object& out) { - LoggerD("Enter"); - - const std::string& dataName = args.get("dataName").get(); - const std::string& id = args.get("id").get(); - const std::string& access = args.get("accessControlType").get(); - CKM::PermissionMask mask = CKM::Permission::READ; - if (access == "READ_REMOVE") { - mask = mask | CKM::Permission::REMOVE; - } - CKM::ManagerAsync::ObserverPtr observer(new AllowAccessObserver(this, - args.get("callbackId").get())); - m_manager.setPermission(observer, dataName, id, mask); - - ReportSuccess(out); -} - -void KeyManagerInstance::OnAllowAccess(double callbackId, - const common::PlatformResult& result) { + picojson::object& out) { LoggerD("Enter"); - - picojson::value::object dict; - dict["callbackId"] = picojson::value(callbackId); - if (result.IsError()) { - LoggerE("There was an error"); - ReportError(result, &dict); - } - picojson::value res(dict); - PostMessage(res.serialize().c_str()); } void KeyManagerInstance::DenyAccessControl(const picojson::value& args, - picojson::object& out) { - LoggerD("Enter"); - - const std::string& dataName = args.get("dataName").get(); - const std::string& id = args.get("id").get(); - CKM::PermissionMask mask = CKM::Permission::NONE; - CKM::ManagerAsync::ObserverPtr observer(new DenyAccessObserver(this, - args.get("callbackId").get())); - m_manager.setPermission(observer, dataName, id, mask); - - ReportSuccess(out); -} - -void KeyManagerInstance::OnDenyAccess(double callbackId, - const common::PlatformResult& result) { + picojson::object& out) { LoggerD("Enter"); - - picojson::value::object dict; - dict["callbackId"] = picojson::value(callbackId); - if (result.IsError()) { - LoggerE("There was an error"); - ReportError(result, &dict); - } - picojson::value res(dict); - PostMessage(res.serialize().c_str()); } } // namespace keymanager diff --git a/src/keymanager/keymanager_instance.h b/src/keymanager/keymanager_instance.h index 9e61e95e..500e89f9 100755 --- a/src/keymanager/keymanager_instance.h +++ b/src/keymanager/keymanager_instance.h @@ -18,38 +18,19 @@ #define KEYMANAGER_KEYMANAGER_INSTANCE_H_ #include "common/extension.h" -#include -#include "keymanager/keymanager_observers.h" - namespace extension { namespace keymanager { -class KeyManagerInstance : - public common::ParsedInstance, - public KeyManagerListener { +class KeyManagerInstance : public common::ParsedInstance { public: KeyManagerInstance(); virtual ~KeyManagerInstance(); - void OnSaveKey(double callbackId, const common::PlatformResult& result); - void OnCreateKeyPair(double callbackId, const common::PlatformResult& result); - void OnSaveCert(double callbackId, const common::PlatformResult& result); - void OnCertFileLoaded(LoadFileCert* reader, - const common::PlatformResult& result); - void OnSaveData(double callbackId, const common::PlatformResult& result); - void OnCreateSignature(double callbackId, const common::PlatformResult& result, CKM::RawBuffer buffer); - void OnVerifySignature(double callbackId, const common::PlatformResult& result); - void OnPKCS12FileLoaded(LoadFilePKCS12* reader, const common::PlatformResult& result); - void OnSavePKCS12(double callbackId, const common::PlatformResult& result); - void OnAllowAccess(double callbackId, const common::PlatformResult& result); - void OnDenyAccess(double callbackId, const common::PlatformResult& result); private: - void GetAliasList(std::function coreFunc, - picojson::object& out); void GetKeyAliasList(picojson::value const& args, picojson::object& out); void GetCertificateAliasList(picojson::value const& args, - picojson::object& out); + picojson::object& out); void GetDataAliasList(picojson::value const& args, picojson::object& out); void GetKey(const picojson::value& args, picojson::object& out); void SaveKey(const picojson::value& args, picojson::object& out); @@ -57,14 +38,9 @@ class KeyManagerInstance : void GenerateKeyPair(const picojson::value& args, picojson::object& out); void GetCertificate(const picojson::value& args, picojson::object& out); void SaveCertificate(const picojson::value& args, picojson::object& out); - void LoadCertificateFromFile(const picojson::value& args, picojson::object& out); - void SaveCert(std::string &base64, - const std::string &password, - const std::string &alias, - bool extractable, - double callbackId); + void LoadCertificateFromFile(const picojson::value& args, + picojson::object& out); void RemoveCertificate(const picojson::value& args, picojson::object& out); - common::PlatformResult RemoveAlias(const std::string &alias); void SaveData(const picojson::value& args, picojson::object& out); void RemoveData(const picojson::value& args, picojson::object& out); void GetData(const picojson::value& args, picojson::object& out); @@ -73,8 +49,6 @@ class KeyManagerInstance : void LoadFromPKCS12File(const picojson::value& args, picojson::object& out); void AllowAccessControl(const picojson::value& args, picojson::object& out); void DenyAccessControl(const picojson::value& args, picojson::object& out); - - CKM::ManagerAsync m_manager; }; } // namespace keymanager diff --git a/src/keymanager/keymanager_observers.cc b/src/keymanager/keymanager_observers.cc deleted file mode 100755 index f1d8be99..00000000 --- a/src/keymanager/keymanager_observers.cc +++ /dev/null @@ -1,326 +0,0 @@ -/* - * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "keymanager/keymanager_observers.h" -#include "common/extension.h" -#include "common/logger.h" -#include "common/task-queue.h" - -namespace extension { -namespace keymanager { - -using common::PlatformResult; -using common::ErrorCode; - -CommonObserver::CommonObserver(KeyManagerListener* _listener, double _callbackId): - listener(_listener), callbackId(_callbackId) { - -} - -SaveKeyObserver::SaveKeyObserver(KeyManagerListener* listener, double callbackId): - CommonObserver(listener, callbackId) { - -} - -void SaveKeyObserver::ReceivedError(int error) { - LoggerD("Enter, error: %d", error); - ErrorCode code = ErrorCode::UNKNOWN_ERR; - std::string message = "Failed to save key"; - switch (error) { - case CKM_API_ERROR_INPUT_PARAM: - code = ErrorCode::INVALID_VALUES_ERR; - break; - case CKM_API_ERROR_DB_ALIAS_EXISTS: - code = ErrorCode::INVALID_VALUES_ERR; - message = "Key alias already exists"; - break; - } - common::TaskQueue::GetInstance().Async(std::bind( - &KeyManagerListener::OnSaveKey, listener, callbackId, - PlatformResult(code, message - ))); -} - -void SaveKeyObserver::ReceivedSaveKey() { - LoggerD("Enter"); - common::TaskQueue::GetInstance().Async(std::bind( - &KeyManagerListener::OnSaveKey, listener, callbackId, - PlatformResult(ErrorCode::NO_ERROR))); -} - -CreateKeyObserver::CreateKeyObserver(KeyManagerListener* listener, double callbackId): - CommonObserver(listener, callbackId) {} - -void CreateKeyObserver::ReceivedCreateKeyPairDSA() { - LoggerD("Enter"); - CallSuccess(); -} - -void CreateKeyObserver::ReceivedCreateKeyPairECDSA() { - LoggerD("Enter"); - CallSuccess(); -} - -void CreateKeyObserver::ReceivedCreateKeyPairRSA() { - LoggerD("Enter"); - CallSuccess(); -} - -void CreateKeyObserver::CallSuccess() { - common::TaskQueue::GetInstance().Async(std::bind( - &KeyManagerListener::OnCreateKeyPair, listener, callbackId, - PlatformResult(ErrorCode::NO_ERROR))); -} - -void CreateKeyObserver::ReceivedError(int error) { - LoggerD("Enter, error: %d", error); - ErrorCode code = ErrorCode::UNKNOWN_ERR; - std::string message = "Failed to create key pair"; - switch (error) { - case CKM_API_ERROR_INPUT_PARAM: - code = ErrorCode::INVALID_VALUES_ERR; - break; - case CKM_API_ERROR_DB_ALIAS_EXISTS: - code = ErrorCode::INVALID_VALUES_ERR; - message = "Key alias already exists"; - break; - } - common::TaskQueue::GetInstance().Async(std::bind( - &KeyManagerListener::OnCreateKeyPair, listener, callbackId, - PlatformResult(code, message))); -} - -SaveCertObserver::SaveCertObserver(KeyManagerListener* listener, double callbackId): - CommonObserver(listener, callbackId) { -} - -void SaveCertObserver::ReceivedError(int error) { - LoggerD("Enter, error: %d", error); - ErrorCode code = ErrorCode::UNKNOWN_ERR; - if (error == CKM_API_ERROR_INPUT_PARAM) { - code = ErrorCode::INVALID_VALUES_ERR; - } - common::TaskQueue::GetInstance().Async(std::bind( - &KeyManagerListener::OnSaveCert, listener, callbackId, - PlatformResult(code, "Failed to save certificate"))); -} - -void SaveCertObserver::ReceivedSaveCertificate() { - LoggerD("Enter"); - common::TaskQueue::GetInstance().Async(std::bind( - &KeyManagerListener::OnSaveCert, listener, callbackId, - PlatformResult(ErrorCode::NO_ERROR))); -} - -LoadFileCert::LoadFileCert(KeyManagerListener* _listener, - double callbackId, - const std::string &_password, - const std::string &_alias, - bool _extractable): - callback_id(callbackId), - password(_password), - alias(_alias), - extractable(_extractable), - file_content(""), - listener(_listener) { -} - -void LoadFileCert::AppendBuffer(guint8* buffer, gssize size) { - file_content.append(buffer, buffer + size); -} - -void LoadFileCert::OnError(const common::PlatformResult& result) { - listener->OnCertFileLoaded(this, result); -} - -void LoadFileCert::OnFileLoaded() { - listener->OnCertFileLoaded(this, PlatformResult(ErrorCode::NO_ERROR)); -} - -SaveDataObserver::SaveDataObserver(KeyManagerListener* listener, double callbackId): - CommonObserver(listener, callbackId) { -} - -void SaveDataObserver::ReceivedError(int error) { - LoggerD("Enter, error: %d", error); - ErrorCode code = ErrorCode::UNKNOWN_ERR; - if (error == CKM_API_ERROR_INPUT_PARAM) { - code = ErrorCode::INVALID_VALUES_ERR; - } - common::TaskQueue::GetInstance().Async(std::bind( - &KeyManagerListener::OnSaveData, listener, callbackId, - PlatformResult(code, "Failed to save data"))); -} - -void SaveDataObserver::ReceivedSaveData() { - LoggerD("Enter"); - common::TaskQueue::GetInstance().Async(std::bind( - &KeyManagerListener::OnSaveData, listener, callbackId, - PlatformResult(ErrorCode::NO_ERROR))); -} - -CreateSignatureObserver::CreateSignatureObserver(KeyManagerListener* listener, double callbackId): - CommonObserver(listener, callbackId) { -} - -void CreateSignatureObserver::ReceivedError(int error) { - LoggerD("Enter, error: %d", error); - ErrorCode code = ErrorCode::UNKNOWN_ERR; - if (error == CKM_API_ERROR_INPUT_PARAM) { - code = ErrorCode::INVALID_VALUES_ERR; - } - CKM::RawBuffer empty; - common::TaskQueue::GetInstance().Async(std::bind( - &KeyManagerListener::OnCreateSignature, listener, callbackId, - PlatformResult(code, "Failed to create signature"), empty)); -} - -void CreateSignatureObserver::ReceivedCreateSignature(CKM::RawBuffer&& buffer) { - LoggerD("Enter"); - common::TaskQueue::GetInstance().Async(std::bind( - &KeyManagerListener::OnCreateSignature, listener, callbackId, - PlatformResult(ErrorCode::NO_ERROR), buffer)); -} - -VerifySignatureObserver::VerifySignatureObserver(KeyManagerListener* listener, double callbackId): - CommonObserver(listener, callbackId) { -} - -void VerifySignatureObserver::ReceivedError(int error) { - LoggerD("Enter, error: %d", error); - ErrorCode code = ErrorCode::UNKNOWN_ERR; - if (error == CKM_API_ERROR_INPUT_PARAM) { - code = ErrorCode::INVALID_VALUES_ERR; - } else if (error == CKM_API_ERROR_VERIFICATION_FAILED) { - code = ErrorCode::VALIDATION_ERR; - } - common::TaskQueue::GetInstance().Async(std::bind( - &KeyManagerListener::OnVerifySignature, listener, callbackId, - PlatformResult(code, "Siganture verification failed"))); -} - -void VerifySignatureObserver::ReceivedVerifySignature() { - LoggerD("Enter"); - common::TaskQueue::GetInstance().Async(std::bind( - &KeyManagerListener::OnVerifySignature, listener, callbackId, - PlatformResult(ErrorCode::NO_ERROR))); -} - -LoadFilePKCS12::LoadFilePKCS12(KeyManagerListener* listener, - double callback_id, - const std::string &password, - const std::string &key_alias, - const std::string &cert_alias): - callback_id(callback_id), - password(password), - key_alias(key_alias), - cert_alias(cert_alias), - listener(listener) { -} - -void LoadFilePKCS12::AppendBuffer(guint8* buffer, gssize size) { - file_content.insert(file_content.end(), buffer, buffer + size); -} - -void LoadFilePKCS12::OnError(const common::PlatformResult& result) { - listener->OnPKCS12FileLoaded(this, result); -} - -void LoadFilePKCS12::OnFileLoaded() { - listener->OnPKCS12FileLoaded(this, PlatformResult(ErrorCode::NO_ERROR)); -} - -SavePKCS12Observer::SavePKCS12Observer(KeyManagerListener* listener, double callback_id): - CommonObserver(listener, callback_id), - cert_saved(false), key_saved(false) {} - -void SavePKCS12Observer::ReceivedError(int error) { - LoggerD("Enter, error: %d", error); - ErrorCode code = ErrorCode::UNKNOWN_ERR; - if (error == CKM_API_ERROR_INPUT_PARAM) { - code = ErrorCode::INVALID_VALUES_ERR; - } - common::TaskQueue::GetInstance().Async(std::bind( - &KeyManagerListener::OnSavePKCS12, listener, callbackId, - PlatformResult(code, "Failed to save pkcs12 file"))); -} - -void SavePKCS12Observer::ReceivedSaveKey() { - LoggerD("Enter"); - key_saved = true; - if (cert_saved) { - common::TaskQueue::GetInstance().Async(std::bind( - &KeyManagerListener::OnSavePKCS12, listener, callbackId, - PlatformResult(ErrorCode::NO_ERROR))); - } -} - -void SavePKCS12Observer::ReceivedSaveCertificate() { - LoggerD("Enter"); - cert_saved = true; - if (key_saved) { - common::TaskQueue::GetInstance().Async(std::bind( - &KeyManagerListener::OnSavePKCS12, listener, callbackId, - PlatformResult(ErrorCode::NO_ERROR))); - } -} - -AllowAccessObserver::AllowAccessObserver(KeyManagerListener* listener, double callbackId): - CommonObserver(listener, callbackId) { -} - -void AllowAccessObserver::ReceivedError(int error) { - LoggerD("Enter, error: %d", error); - ErrorCode code = ErrorCode::UNKNOWN_ERR; - if (error == CKM_API_ERROR_DB_ALIAS_UNKNOWN) { - code = ErrorCode::NOT_FOUND_ERR; - } - common::TaskQueue::GetInstance().Async(std::bind( - &KeyManagerListener::OnAllowAccess, listener, callbackId, - PlatformResult(code, "Failed to grant access"))); -} - -void AllowAccessObserver::ReceivedSetPermission() { - LoggerD("Enter"); - common::TaskQueue::GetInstance().Async(std::bind( - &KeyManagerListener::OnAllowAccess, listener, callbackId, - PlatformResult(ErrorCode::NO_ERROR))); -} - -DenyAccessObserver::DenyAccessObserver(KeyManagerListener* listener, double callbackId): - CommonObserver(listener, callbackId) { -} - -void DenyAccessObserver::ReceivedError(int error) { - LoggerD("Enter, error: %d", error); - ErrorCode code = ErrorCode::UNKNOWN_ERR; - if (error == CKM_API_ERROR_DB_ALIAS_UNKNOWN) { - code = ErrorCode::NOT_FOUND_ERR; - } - common::TaskQueue::GetInstance().Async(std::bind( - &KeyManagerListener::OnDenyAccess, listener, callbackId, - PlatformResult(code, "Failed to deny access"))); -} - -void DenyAccessObserver::ReceivedSetPermission() { - LoggerD("Enter"); - common::TaskQueue::GetInstance().Async(std::bind( - &KeyManagerListener::OnDenyAccess, listener, callbackId, - PlatformResult(ErrorCode::NO_ERROR))); -} - -} // namespace keymanager -} // namespace extension diff --git a/src/keymanager/keymanager_observers.h b/src/keymanager/keymanager_observers.h deleted file mode 100755 index 95c03b70..00000000 --- a/src/keymanager/keymanager_observers.h +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef KEYMANAGER_KEYMANAGER_OBSERVERS_H_ -#define KEYMANAGER_KEYMANAGER_OBSERVERS_H_ - -#include -#include -#include "common/platform_result.h" -#include "keymanager/async_file_reader.h" - -namespace extension { -namespace keymanager { - -class LoadFileCert; -class LoadFilePKCS12; - -class KeyManagerListener { -public: - virtual void OnSaveKey(double callbackId, const common::PlatformResult& result) = 0; - virtual void OnCreateKeyPair(double callbackId, const common::PlatformResult& result) = 0; - virtual void OnSaveCert(double callbackId, const common::PlatformResult& result) = 0; - virtual void OnCertFileLoaded(LoadFileCert* reader, - const common::PlatformResult& result) = 0; - virtual void OnSaveData(double callbackId, const common::PlatformResult& result) = 0; - virtual void OnCreateSignature(double callbackId, const common::PlatformResult& result, CKM::RawBuffer buffer) = 0; - virtual void OnVerifySignature(double callbackId, const common::PlatformResult& result) = 0; - virtual void OnPKCS12FileLoaded(LoadFilePKCS12* reader, - const common::PlatformResult& result) = 0; - virtual void OnSavePKCS12(double callbackId, const common::PlatformResult& result) = 0; - virtual void OnAllowAccess(double callbackId, const common::PlatformResult& result) = 0; - virtual void OnDenyAccess(double callbackId, const common::PlatformResult& result) = 0; - virtual ~KeyManagerListener() {} -}; - -struct CommonObserver: public CKM::ManagerAsync::Observer { - CommonObserver(KeyManagerListener* listener, double callbackId); - virtual ~CommonObserver() {} - - protected: - KeyManagerListener* listener; - double callbackId; -}; - -struct SaveKeyObserver: public CommonObserver { - SaveKeyObserver(KeyManagerListener* listener, double callbackId); - void ReceivedError(int error); - void ReceivedSaveKey(); -}; - -struct CreateKeyObserver: public CommonObserver { - CreateKeyObserver(KeyManagerListener* listener, double callbackId); - void ReceivedError(int error); - void ReceivedCreateKeyPairDSA(); - void ReceivedCreateKeyPairECDSA(); - void ReceivedCreateKeyPairRSA(); -private: - void CallSuccess(); - -}; - -struct SaveCertObserver: public CommonObserver { - SaveCertObserver(KeyManagerListener* listener, double callbackId); - void ReceivedError(int error); - void ReceivedSaveCertificate(); -}; - -struct LoadFileCert: public AsyncFileReader { - LoadFileCert(KeyManagerListener* listener, - double callbackId, - const std::string &password, - const std::string &alias, - bool extractable); - - double callback_id; - std::string password; - const std::string alias; - bool extractable; - std::string file_content; - -protected: - void AppendBuffer(guint8* buffer, gssize size); - void OnError(const common::PlatformResult& result); - void OnFileLoaded(); - -private: - KeyManagerListener* listener; -}; - -struct LoadFilePKCS12: public AsyncFileReader { - LoadFilePKCS12(KeyManagerListener* listener, - double callbackId, - const std::string &password, - const std::string &keyAlias, - const std::string &certAlias); - - double callback_id; - std::string password; - const std::string key_alias; - const std::string cert_alias; - CKM::RawBuffer file_content; - -protected: - void AppendBuffer(guint8* buffer, gssize size); - void OnError(const common::PlatformResult& result); - void OnFileLoaded(); - -private: - KeyManagerListener* listener; -}; - -struct SaveDataObserver: public CommonObserver { - SaveDataObserver(KeyManagerListener* listener, double callbackId); - void ReceivedError(int error); - void ReceivedSaveData(); -}; - -struct CreateSignatureObserver: public CommonObserver { - CreateSignatureObserver(KeyManagerListener* listener, double callbackId); - void ReceivedError(int error); - void ReceivedCreateSignature(CKM::RawBuffer&&); -}; - -struct VerifySignatureObserver: public CommonObserver { - VerifySignatureObserver(KeyManagerListener* listener, double callbackId); - void ReceivedError(int error); - void ReceivedVerifySignature(); -}; - -struct SavePKCS12Observer: public CommonObserver { - SavePKCS12Observer(KeyManagerListener* listener, double callback_id); - void ReceivedError(int error); - void ReceivedSaveKey(); - void ReceivedSaveCertificate(); - -private: - bool cert_saved; - bool key_saved; -}; - -struct AllowAccessObserver: public CommonObserver { - AllowAccessObserver(KeyManagerListener* listener, double callbackId); - void ReceivedError(int error); - void ReceivedSetPermission(); -}; - -struct DenyAccessObserver: public CommonObserver { - DenyAccessObserver(KeyManagerListener* listener, double callbackId); - void ReceivedError(int error); - void ReceivedSetPermission(); -}; - -} // namespace keymanager -} // namespace extension - -#endif // KEYMANAGER_KEYMANAGER_OBSERVERS_H_ -