Return proper error for wrong wrapped key type
[platform/core/security/key-manager.git] / src / manager / client / client-manager-impl.cpp
index 75da00f..961f31d 100644 (file)
@@ -101,7 +101,7 @@ Manager::Impl::Request::Request(Manager::Impl &impl, Cmd cmd, CKM::ServiceConnec
 {
        static_assert(sizeof cmd <= sizeof(int));
        const auto msgId = m_msgId = ++impl.m_counter;
-       m_retCode = doRequest(m_recv, conn, static_cast<int>(cmd), msgId, std::forward<T>(t)...);
+       m_retCode = doRequest(m_recv, conn, cmd, msgId, std::forward<T>(t)...);
 }
 
 Manager::Impl::Request::operator bool() const {
@@ -216,8 +216,7 @@ int Manager::Impl::getPKCS12(const Alias &alias, const Password &keyPass,
        int msgId = ++m_counter;
        MessageBuffer recv;
 
-       int retCode = doRequest(recv, m_storageConnection,
-                       static_cast<int>(LogicCommand::GET_PKCS12), msgId,
+       int retCode = doRequest(recv, m_storageConnection, LogicCommand::GET_PKCS12, msgId,
                        helper.getName(), helper.getOwner(), keyPass, certPass);
 
        if (CKM_API_SUCCESS != retCode)
@@ -359,55 +358,28 @@ int Manager::Impl::getData(const Alias &alias, const Password &password,
        return recvDataType.isBinaryData() ? CKM_API_SUCCESS : CKM_API_ERROR_BAD_RESPONSE;
 }
 
-int Manager::Impl::getBinaryDataAliasVectorHelper(DataType dataType,
-               OwnerNameVector &ownerNameVector)
+int Manager::Impl::getAliasInfoVectorHelper(DataType dataType, AliasInfoVector &aliasInfoVector)
 {
        DataType tmpDataType;
-       return Request(*this, LogicCommand::GET_LIST, m_storageConnection,
-                       dataType
-               ).maybeDeserialize(tmpDataType, ownerNameVector);
-}
-
-int Manager::Impl::getBinaryDataAliasVector(DataType dataType,
-               AliasVector &aliasVector)
-{
-       EXCEPTION_GUARD_START_CPPAPI
-       OwnerNameVector ownerNameVector;
-       int retCode = getBinaryDataAliasVectorHelper(dataType, ownerNameVector);
-
-       if (retCode != CKM_API_SUCCESS)
-               return retCode;
-
-       for (const auto &it : ownerNameVector)
-               aliasVector.push_back(AliasSupport::merge(it.first, it.second));
-
-       return CKM_API_SUCCESS;
-       EXCEPTION_GUARD_END
+       AliasInfoSerializableVector aisv(aliasInfoVector);
+       return Request(*this,
+                      LogicCommand::GET_LIST,
+                      m_storageConnection,
+                      dataType).maybeDeserialize(tmpDataType, aisv);
 }
 
-int Manager::Impl::getBinaryDataAliasInfoVector(DataType dataType,
-               AliasInfoVector &aliasInfoVector)
+int Manager::Impl::getAliasVectorHelper(DataType dataType, AliasVector &aliasVector)
 {
        EXCEPTION_GUARD_START_CPPAPI
-       OwnerNameVector ownerNameVector;
-       OwnerNameEncryptionStatusVector ownerNameEncryptionStatusVector;
-       int retCode = getBinaryDataAliasVectorHelper(dataType, ownerNameVector);
+       AliasInfoVector aliasInfoVector;
+       int retCode = getAliasInfoVectorHelper(dataType, aliasInfoVector);
 
        if (retCode != CKM_API_SUCCESS)
                return retCode;
 
-       for (const auto &it : ownerNameVector)
-       {
-               Alias alias = AliasSupport::merge(std::get<0>(it), std::get<1>(it));
-               bool status;
-               retCode = getBinaryDataEncryptionStatus(dataType, alias, status);
+       for (const auto &it : aliasInfoVector)
+               aliasVector.push_back(it.alias);
 
-               if (retCode != CKM_API_SUCCESS)
-                       return retCode;
-
-               // TODO get the actual backend
-               aliasInfoVector.push_back(std::make_pair(alias, AliasInfo({status, BackendId::SW})));
-       }
        return CKM_API_SUCCESS;
        EXCEPTION_GUARD_END
 }
@@ -416,22 +388,24 @@ int Manager::Impl::getKeyAliasVector(AliasVector &aliasVector)
 {
        // in fact datatype has no meaning here - if not certificate or binary data
        // then manager decides to list all between DB_KEY_FIRST and DB_KEY_LAST
-       return getBinaryDataAliasVector(DataType::DB_KEY_LAST, aliasVector);
+       return getAliasVectorHelper(DataType::DB_KEY_LAST, aliasVector);
 }
 
 int Manager::Impl::getCertificateAliasVector(AliasVector &aliasVector)
 {
-       return getBinaryDataAliasVector(DataType::CERTIFICATE, aliasVector);
+       return getAliasVectorHelper(DataType::CERTIFICATE, aliasVector);
 }
 
 int Manager::Impl::getDataAliasVector(AliasVector &aliasVector)
 {
-       return getBinaryDataAliasVector(DataType::BINARY_DATA, aliasVector);
+       return getAliasVectorHelper(DataType::BINARY_DATA, aliasVector);
 }
 
 int Manager::Impl::getKeyAliasInfoVector(AliasInfoVector &aliasInfoVector)
 {
-       return getBinaryDataAliasInfoVector(DataType::DB_KEY_LAST, aliasInfoVector);
+       EXCEPTION_GUARD_START_CPPAPI
+       return getAliasInfoVectorHelper(DataType::DB_KEY_LAST, aliasInfoVector);
+       EXCEPTION_GUARD_END
 }
 
 int Manager::Impl::getKeyEncryptionStatus(const Alias &alias, bool &status)
@@ -441,7 +415,9 @@ int Manager::Impl::getKeyEncryptionStatus(const Alias &alias, bool &status)
 
 int Manager::Impl::getCertificateAliasInfoVector(AliasInfoVector &aliasInfoVector)
 {
-       return getBinaryDataAliasInfoVector(DataType::CERTIFICATE, aliasInfoVector);
+       EXCEPTION_GUARD_START_CPPAPI
+       return getAliasInfoVectorHelper(DataType::CERTIFICATE, aliasInfoVector);
+       EXCEPTION_GUARD_END
 }
 
 int Manager::Impl::getCertificateEncryptionStatus(const Alias &alias, bool &status)
@@ -451,7 +427,9 @@ int Manager::Impl::getCertificateEncryptionStatus(const Alias &alias, bool &stat
 
 int Manager::Impl::getDataAliasInfoVector(AliasInfoVector &aliasInfoVector)
 {
-       return getBinaryDataAliasInfoVector(DataType::BINARY_DATA, aliasInfoVector);
+       EXCEPTION_GUARD_START_CPPAPI
+       return getAliasInfoVectorHelper(DataType::BINARY_DATA, aliasInfoVector);
+       EXCEPTION_GUARD_END
 }
 
 int Manager::Impl::getDataEncryptionStatus(const Alias &alias, bool &status)
@@ -503,7 +481,7 @@ int Manager::Impl::createKeyAES(
        AliasSupport aliasHelper(keyAlias);
 
        return Request(*this, LogicCommand::CREATE_KEY_AES, m_storageConnection,
-                       static_cast<int>(size), PolicySerializable(policyKey),
+                       size, PolicySerializable(policyKey),
                        aliasHelper.getName(), aliasHelper.getOwner()
                ).maybeDeserialize();
 
@@ -770,6 +748,9 @@ int Manager::Impl::importWrappedKey(const CryptoAlgorithm &params,
 {
        EXCEPTION_GUARD_START_CPPAPI
 
+       if (keyType == KeyType::KEY_NONE)
+               return CKM_API_ERROR_INPUT_PARAM;
+
        AliasSupport wrapping_helper(wrappingKeyAlias);
        AliasSupport helper(alias);
 
@@ -832,4 +813,71 @@ int Manager::Impl::exportWrappedKey(const CryptoAlgorithm &params,
        EXCEPTION_GUARD_END
 }
 
+int Manager::Impl::initializeCipher(
+       const CryptoAlgorithm &params,
+       const Alias &keyAlias,
+       const Password &keyPassword,
+       bool encrypt,
+       int &requestId)
+{
+       EXCEPTION_GUARD_START_CPPAPI
+
+       AliasSupport helper(keyAlias);
+
+       return Request(*this,
+               EncryptionCommand::INITIALIZE_CIPHER,
+               m_encryptionConnection,
+               requestId,
+               CryptoAlgorithmSerializable(params),
+               helper.getName(),
+               helper.getOwner(),
+               keyPassword,
+               encrypt
+       ).maybeDeserialize(requestId);
+
+       EXCEPTION_GUARD_END
+}
+
+int Manager::Impl::updateCipher(int requestId, const RawBuffer &in, RawBuffer &out)
+{
+       EXCEPTION_GUARD_START_CPPAPI
+
+       return Request(*this,
+               EncryptionCommand::UPDATE_CIPHER,
+               m_encryptionConnection,
+               requestId,
+               in
+       ).maybeDeserialize(out);
+
+       EXCEPTION_GUARD_END
+}
+
+int Manager::Impl::finalizeCipher(int requestId, const RawBuffer &in, RawBuffer &out)
+{
+       EXCEPTION_GUARD_START_CPPAPI
+
+       return Request(*this,
+               EncryptionCommand::FINALIZE_CIPHER,
+               m_encryptionConnection,
+               requestId,
+               in
+       ).maybeDeserialize(out);
+
+       EXCEPTION_GUARD_END
+}
+
+int Manager::Impl::getBackendInfo(BackendId backend, BackendInfo& info)
+{
+       EXCEPTION_GUARD_START_CPPAPI
+
+       BackendInfoSerializable bis(info);
+       return Request(*this,
+               LogicCommand::GET_BACKEND_INFO,
+               m_storageConnection,
+               backend
+       ).maybeDeserialize(bis);
+
+       EXCEPTION_GUARD_END
+}
+
 } // namespace CKM