Add generic serialization/deserialization methods 40/29040/1
authorKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Fri, 10 Oct 2014 08:19:14 +0000 (10:19 +0200)
committerBartlomiej Grzelewski <b.grzelewski@samsung.com>
Thu, 16 Oct 2014 15:10:54 +0000 (17:10 +0200)
Change-Id: I981531932bb5cf40b5f1345da94fc25a538bb2c2

src/manager/client-async/client-manager-async-impl.cpp
src/manager/client-async/receiver.cpp
src/manager/client/client-control.cpp
src/manager/client/client-manager-impl.cpp
src/manager/common/message-buffer.h
src/manager/dpl/core/include/dpl/serialization.h
src/manager/service/ckm-logic.cpp
src/manager/service/ckm-service.cpp
src/manager/service/ocsp-logic.cpp
src/manager/service/ocsp-service.cpp

index 5e991c5..817961b 100644 (file)
@@ -230,13 +230,12 @@ void ManagerAsync::Impl::saveBinaryData(const ManagerAsync::ObserverPtr& observe
     try_catch_async([&] {
         m_counter++;
 
-        MessageBuffer send;
-        Serialization::Serialize(send, static_cast<int>(LogicCommand::SAVE));
-        Serialization::Serialize(send, m_counter);
-        Serialization::Serialize(send, static_cast<int>(dataType));
-        Serialization::Serialize(send, alias);
-        Serialization::Serialize(send, rawData);
-        Serialization::Serialize(send, PolicySerializable(policy));
+        auto send = MessageBuffer::Serialize(static_cast<int>(LogicCommand::SAVE),
+                                             m_counter,
+                                             static_cast<int>(dataType),
+                                             alias,
+                                             rawData,
+                                             PolicySerializable(policy));
 
         thread()->sendMessage(AsyncRequest(observer,
                                            SERVICE_SOCKET_CKM_STORAGE,
index 57db0bc..c56324e 100644 (file)
@@ -36,8 +36,7 @@ void Receiver::parseResponse()
 {
     int command;
     int id;
-    Deserialization::Deserialize(m_buffer, command);
-    Deserialization::Deserialize(m_buffer, id);
+    m_buffer.Deserialize(command, id);
 
     auto it = m_requests.find(id);
     if (it == m_requests.end()) {
@@ -68,8 +67,7 @@ void Receiver::parseSaveCommand()
     int retCode;
     int dataType;
 
-    Deserialization::Deserialize(m_buffer, retCode);
-    Deserialization::Deserialize(m_buffer, dataType);
+    m_buffer.Deserialize(retCode, dataType);
 
     DBDataType dt = static_cast<DBDataType>(dataType);
     if (dt >= DBDataType::DB_KEY_FIRST && dt <= DBDataType::DB_KEY_LAST) {
index af80df9..4f8ac55 100644 (file)
@@ -44,11 +44,10 @@ public:
                 return CKM_API_ERROR_INPUT_PARAM;
             }
 
-            MessageBuffer send, recv;
-            Serialization::Serialize(send, static_cast<int>(ControlCommand::UNLOCK_USER_KEY));
-            Serialization::Serialize(send, user);
-            Serialization::Serialize(send, password);
-
+            MessageBuffer recv;
+            auto send = MessageBuffer::Serialize(static_cast<int>(ControlCommand::UNLOCK_USER_KEY),
+                                                 user,
+                                                 password);
             int retCode = sendToServer(
                 SERVICE_SOCKET_CKM_CONTROL,
                 send.Pop(),
@@ -58,7 +57,7 @@ public:
                 return retCode;
             }
 
-            Deserialization::Deserialize(recv, retCode);
+            recv.Deserialize(retCode);
 
             return retCode;
         });
@@ -70,10 +69,9 @@ public:
                 return CKM_API_ERROR_INPUT_PARAM;
             }
 
-            MessageBuffer send, recv;
-            Serialization::Serialize(send, static_cast<int>(ControlCommand::LOCK_USER_KEY));
-            Serialization::Serialize(send, user);
-
+            MessageBuffer recv;
+            auto send = MessageBuffer::Serialize(static_cast<int>(ControlCommand::LOCK_USER_KEY),
+                                                 user);
             int retCode = sendToServer(
                 SERVICE_SOCKET_CKM_CONTROL,
                 send.Pop(),
@@ -83,7 +81,7 @@ public:
                 return retCode;
             }
 
-            Deserialization::Deserialize(recv, retCode);
+            recv.Deserialize(retCode);
 
             return retCode;
         });
@@ -95,10 +93,9 @@ public:
                 return CKM_API_ERROR_INPUT_PARAM;
             }
 
-            MessageBuffer send, recv;
-            Serialization::Serialize(send, static_cast<int>(ControlCommand::REMOVE_USER_DATA));
-            Serialization::Serialize(send, user);
-
+            MessageBuffer recv;
+            auto send = MessageBuffer::Serialize(static_cast<int>(ControlCommand::REMOVE_USER_DATA),
+                                                 user);
             int retCode = sendToServer(
                 SERVICE_SOCKET_CKM_CONTROL,
                 send.Pop(),
@@ -108,7 +105,7 @@ public:
                 return retCode;
             }
 
-            Deserialization::Deserialize(recv, retCode);
+            recv.Deserialize(retCode);
 
             return retCode;
         });
@@ -120,11 +117,12 @@ public:
                 return CKM_API_ERROR_INPUT_PARAM;
             }
 
-            MessageBuffer send, recv;
-            Serialization::Serialize(send, static_cast<int>(ControlCommand::CHANGE_USER_PASSWORD));
-            Serialization::Serialize(send, user);
-            Serialization::Serialize(send, oldPassword);
-            Serialization::Serialize(send, newPassword);
+            MessageBuffer recv;
+            auto send = MessageBuffer::Serialize(
+                    static_cast<int>(ControlCommand::CHANGE_USER_PASSWORD),
+                    user,
+                    oldPassword,
+                    newPassword);
 
             int retCode = sendToServer(
                 SERVICE_SOCKET_CKM_CONTROL,
@@ -135,7 +133,7 @@ public:
                 return retCode;
             }
 
-            Deserialization::Deserialize(recv, retCode);
+            recv.Deserialize(retCode);
 
             return retCode;
         });
@@ -147,10 +145,11 @@ public:
                 return CKM_API_ERROR_INPUT_PARAM;
             }
 
-            MessageBuffer send, recv;
-            Serialization::Serialize(send, static_cast<int>(ControlCommand::RESET_USER_PASSWORD));
-            Serialization::Serialize(send, user);
-            Serialization::Serialize(send, newPassword);
+            MessageBuffer recv;
+            auto send = MessageBuffer::Serialize(
+                    static_cast<int>(ControlCommand::RESET_USER_PASSWORD),
+                    user,
+                    newPassword);
 
             int retCode = sendToServer(
                 SERVICE_SOCKET_CKM_CONTROL,
@@ -161,7 +160,7 @@ public:
                 return retCode;
             }
 
-            Deserialization::Deserialize(recv, retCode);
+            recv.Deserialize(retCode);
 
             return retCode;
         });
@@ -173,10 +172,9 @@ public:
                 return CKM_API_ERROR_INPUT_PARAM;
             }
 
-            MessageBuffer send,recv;
-            Serialization::Serialize(send, static_cast<int>(ControlCommand::REMOVE_APP_DATA));
-            Serialization::Serialize(send, smackLabel);
-
+            MessageBuffer recv;
+            auto send = MessageBuffer::Serialize(static_cast<int>(ControlCommand::REMOVE_APP_DATA),
+                                                 smackLabel);
             int retCode = sendToServer(
                 SERVICE_SOCKET_CKM_CONTROL,
                 send.Pop(),
@@ -186,7 +184,7 @@ public:
                 return retCode;
             }
 
-            Deserialization::Deserialize(recv, retCode);
+            recv.Deserialize(retCode);
 
             return retCode;
         });
@@ -198,10 +196,9 @@ public:
                 return CKM_API_ERROR_INPUT_PARAM;
             }
 
-            MessageBuffer send, recv;
-            Serialization::Serialize(send, static_cast<int>(ControlCommand::SET_CC_MODE));
-            Serialization::Serialize(send, static_cast<int>(mode));
-
+            MessageBuffer recv;
+            auto send = MessageBuffer::Serialize(static_cast<int>(ControlCommand::SET_CC_MODE),
+                                                 static_cast<int>(mode));
             int retCode = sendToServer(
                 SERVICE_SOCKET_CKM_CONTROL,
                 send.Pop(),
@@ -211,7 +208,7 @@ public:
                 return retCode;
             }
 
-            Deserialization::Deserialize(recv, retCode);
+            recv.Deserialize(retCode);
 
             return retCode;
         });
@@ -224,14 +221,13 @@ public:
                             AccessRight granted)
     {
         return try_catch([&] {
-            MessageBuffer send, recv;
-            Serialization::Serialize(send, static_cast<int>(ControlCommand::ALLOW_ACCESS));
-            Serialization::Serialize(send, static_cast<int>(user));
-            Serialization::Serialize(send, owner);
-            Serialization::Serialize(send, alias);
-            Serialization::Serialize(send, accessor);
-            Serialization::Serialize(send, static_cast<int>(granted));
-
+            MessageBuffer recv;
+            auto send = MessageBuffer::Serialize(static_cast<int>(ControlCommand::ALLOW_ACCESS),
+                                                 static_cast<int>(user),
+                                                 owner,
+                                                 alias,
+                                                 accessor,
+                                                 static_cast<int>(granted));
             int retCode = sendToServer(
                     SERVICE_SOCKET_CKM_CONTROL,
                 send.Pop(),
@@ -243,10 +239,7 @@ public:
 
             int command;
             int counter;
-            Deserialization::Deserialize(recv, command);
-            Deserialization::Deserialize(recv, counter);
-            Deserialization::Deserialize(recv, retCode);
-
+            recv.Deserialize(command, counter, retCode);
             return retCode;
         });
     }
@@ -257,13 +250,12 @@ public:
                            const std::string &accessor)
     {
         return try_catch([&] {
-            MessageBuffer send, recv;
-            Serialization::Serialize(send, static_cast<int>(ControlCommand::DENY_ACCESS));
-            Serialization::Serialize(send, static_cast<int>(user));
-            Serialization::Serialize(send, owner);
-            Serialization::Serialize(send, alias);
-            Serialization::Serialize(send, accessor);
-
+            MessageBuffer recv;
+            auto send = MessageBuffer::Serialize(static_cast<int>(ControlCommand::DENY_ACCESS),
+                                                 static_cast<int>(user),
+                                                 owner,
+                                                 alias,
+                                                 accessor);
             int retCode = sendToServer(
                     SERVICE_SOCKET_CKM_CONTROL,
                 send.Pop(),
@@ -275,10 +267,7 @@ public:
 
             int command;
             int counter;
-            Deserialization::Deserialize(recv, command);
-            Deserialization::Deserialize(recv, counter);
-            Deserialization::Deserialize(recv, retCode);
-
+            recv.Deserialize(command, counter, retCode);
             return retCode;
         });
     }
index e89fd57..a067cf8 100644 (file)
@@ -68,13 +68,13 @@ int ManagerImpl::saveBinaryData(
         if (alias.empty() || rawData.empty())
             return CKM_API_ERROR_INPUT_PARAM;
 
-        MessageBuffer send, recv;
-        Serialization::Serialize(send, static_cast<int>(LogicCommand::SAVE));
-        Serialization::Serialize(send, m_counter);
-        Serialization::Serialize(send, static_cast<int>(dataType));
-        Serialization::Serialize(send, alias);
-        Serialization::Serialize(send, rawData);
-        Serialization::Serialize(send, PolicySerializable(policy));
+        MessageBuffer recv;
+        auto send = MessageBuffer::Serialize(static_cast<int>(LogicCommand::SAVE),
+                                             m_counter,
+                                             static_cast<int>(dataType),
+                                             alias,
+                                             rawData,
+                                             PolicySerializable(policy));
 
         int retCode = sendToServer(
             SERVICE_SOCKET_CKM_STORAGE,
@@ -88,10 +88,7 @@ int ManagerImpl::saveBinaryData(
         int command;
         int counter;
         int opType;
-        Deserialization::Deserialize(recv, command);
-        Deserialization::Deserialize(recv, counter);
-        Deserialization::Deserialize(recv, retCode);
-        Deserialization::Deserialize(recv, opType);
+        recv.Deserialize(command, counter, retCode, opType);
 
         if (counter != m_counter) {
             return CKM_API_ERROR_UNKNOWN;
@@ -129,12 +126,11 @@ int ManagerImpl::removeBinaryData(const Alias &alias, DBDataType dataType)
         if (alias.empty())
             return CKM_API_ERROR_INPUT_PARAM;
 
-        MessageBuffer send, recv;
-        Serialization::Serialize(send, static_cast<int>(LogicCommand::REMOVE));
-        Serialization::Serialize(send, m_counter);
-        Serialization::Serialize(send, static_cast<int>(dataType));
-        Serialization::Serialize(send, alias);
-
+        MessageBuffer recv;
+        auto send = MessageBuffer::Serialize(static_cast<int>(LogicCommand::REMOVE),
+                                             m_counter,
+                                             static_cast<int>(dataType),
+                                             alias);
         int retCode = sendToServer(
             SERVICE_SOCKET_CKM_STORAGE,
             send.Pop(),
@@ -147,10 +143,7 @@ int ManagerImpl::removeBinaryData(const Alias &alias, DBDataType dataType)
         int command;
         int counter;
         int opType;
-        Deserialization::Deserialize(recv, command);
-        Deserialization::Deserialize(recv, counter);
-        Deserialization::Deserialize(recv, retCode);
-        Deserialization::Deserialize(recv, opType);
+        recv.Deserialize(command, counter, retCode, opType);
 
         if (counter != m_counter) {
             return CKM_API_ERROR_UNKNOWN;
@@ -183,13 +176,12 @@ int ManagerImpl::getBinaryData(
         if (alias.empty())
             return CKM_API_ERROR_INPUT_PARAM;
 
-        MessageBuffer send, recv;
-        Serialization::Serialize(send, static_cast<int>(LogicCommand::GET));
-        Serialization::Serialize(send, m_counter);
-        Serialization::Serialize(send, static_cast<int>(sendDataType));
-        Serialization::Serialize(send, alias);
-        Serialization::Serialize(send, password);
-
+        MessageBuffer recv;
+        auto send = MessageBuffer::Serialize(static_cast<int>(LogicCommand::GET),
+                                             m_counter,
+                                             static_cast<int>(sendDataType),
+                                             alias,
+                                             password);
         int retCode = sendToServer(
             SERVICE_SOCKET_CKM_STORAGE,
             send.Pop(),
@@ -202,11 +194,7 @@ int ManagerImpl::getBinaryData(
         int command;
         int counter;
         int tmpDataType;
-        Deserialization::Deserialize(recv, command);
-        Deserialization::Deserialize(recv, counter);
-        Deserialization::Deserialize(recv, retCode);
-        Deserialization::Deserialize(recv, tmpDataType);
-        Deserialization::Deserialize(recv, rawData);
+        recv.Deserialize(command, counter, retCode, tmpDataType,rawData);
         recvDataType = static_cast<DBDataType>(tmpDataType);
 
         if (counter != m_counter) {
@@ -295,11 +283,10 @@ int ManagerImpl::getBinaryDataAliasVector(DBDataType dataType, AliasVector &alia
 {
     return try_catch([&] {
 
-        MessageBuffer send, recv;
-        Serialization::Serialize(send, static_cast<int>(LogicCommand::GET_LIST));
-        Serialization::Serialize(send, m_counter);
-        Serialization::Serialize(send, static_cast<int>(dataType));
-
+        MessageBuffer recv;
+        auto send = MessageBuffer::Serialize(static_cast<int>(LogicCommand::GET_LIST),
+                                             m_counter,
+                                             static_cast<int>(dataType));
         int retCode = sendToServer(
             SERVICE_SOCKET_CKM_STORAGE,
             send.Pop(),
@@ -312,12 +299,7 @@ int ManagerImpl::getBinaryDataAliasVector(DBDataType dataType, AliasVector &alia
         int command;
         int counter;
         int tmpDataType;
-
-        Deserialization::Deserialize(recv, command);
-        Deserialization::Deserialize(recv, counter);
-        Deserialization::Deserialize(recv, retCode);
-        Deserialization::Deserialize(recv, tmpDataType);
-        Deserialization::Deserialize(recv, aliasVector);
+        recv.Deserialize(command, counter, retCode, tmpDataType, aliasVector);
         if ((command != static_cast<int>(LogicCommand::GET_LIST)) || (counter != m_counter)) {
             return CKM_API_ERROR_UNKNOWN;
         }
@@ -406,15 +388,14 @@ int ManagerImpl::createKeyPair(
     int my_counter = m_counter;
     return try_catch([&] {
 
-        MessageBuffer send, recv;
-        Serialization::Serialize(send, static_cast<int>(cmd_type));
-        Serialization::Serialize(send, my_counter);
-        Serialization::Serialize(send, static_cast<int>(additional_param));
-        Serialization::Serialize(send, PolicySerializable(policyPrivateKey));
-        Serialization::Serialize(send, PolicySerializable(policyPublicKey));
-        Serialization::Serialize(send, privateKeyAlias);
-        Serialization::Serialize(send, publicKeyAlias);
-
+        MessageBuffer recv;
+        auto send = MessageBuffer::Serialize(static_cast<int>(cmd_type),
+                                             my_counter,
+                                             static_cast<int>(additional_param),
+                                             PolicySerializable(policyPrivateKey),
+                                             PolicySerializable(policyPublicKey),
+                                             privateKeyAlias,
+                                             publicKeyAlias);
         int retCode = sendToServer(
             SERVICE_SOCKET_CKM_STORAGE,
             send.Pop(),
@@ -426,10 +407,7 @@ int ManagerImpl::createKeyPair(
 
         int command;
         int counter;
-
-        Deserialization::Deserialize(recv, command);
-        Deserialization::Deserialize(recv, counter);
-        Deserialization::Deserialize(recv, retCode);
+        recv.Deserialize(command, counter, retCode);
         if (counter != my_counter) {
             return CKM_API_ERROR_UNKNOWN;
         }
@@ -449,11 +427,11 @@ int getCertChain(
 {
     return try_catch([&] {
 
-        MessageBuffer send, recv;
-        Serialization::Serialize(send, static_cast<int>(command));
-        Serialization::Serialize(send, counter);
-        Serialization::Serialize(send, certificate->getDER());
-        Serialization::Serialize(send, sendData);
+        MessageBuffer recv;
+        auto send = MessageBuffer::Serialize(static_cast<int>(command),
+                                             counter,
+                                             certificate->getDER(),
+                                             sendData);
         int retCode = sendToServer(
             SERVICE_SOCKET_CKM_STORAGE,
             send.Pop(),
@@ -466,11 +444,7 @@ int getCertChain(
         int retCommand;
         int retCounter;
         RawBufferVector rawBufferVector;
-
-        Deserialization::Deserialize(recv, retCommand);
-        Deserialization::Deserialize(recv, retCounter);
-        Deserialization::Deserialize(recv, retCode);
-        Deserialization::Deserialize(recv, rawBufferVector);
+        recv.Deserialize(retCommand, retCounter, retCode, rawBufferVector);
 
         if ((counter != retCounter) || (static_cast<int>(command) != retCommand)) {
             return CKM_API_ERROR_UNKNOWN;
@@ -536,15 +510,14 @@ int ManagerImpl::createSignature(
     int my_counter = m_counter;
     return try_catch([&] {
 
-        MessageBuffer send, recv;
-        Serialization::Serialize(send, static_cast<int>(LogicCommand::CREATE_SIGNATURE));
-        Serialization::Serialize(send, my_counter);
-        Serialization::Serialize(send, privateKeyAlias);
-        Serialization::Serialize(send, password);
-        Serialization::Serialize(send, message);
-        Serialization::Serialize(send, static_cast<int>(hash));
-        Serialization::Serialize(send, static_cast<int>(padding));
-
+        MessageBuffer recv;
+        auto send = MessageBuffer::Serialize(static_cast<int>(LogicCommand::CREATE_SIGNATURE),
+                                             my_counter,
+                                             privateKeyAlias,
+                                             password,
+                                             message,
+                                             static_cast<int>(hash),
+                                             static_cast<int>(padding));
         int retCode = sendToServer(
             SERVICE_SOCKET_CKM_STORAGE,
             send.Pop(),
@@ -557,10 +530,7 @@ int ManagerImpl::createSignature(
         int command;
         int counter;
 
-        Deserialization::Deserialize(recv, command);
-        Deserialization::Deserialize(recv, counter);
-        Deserialization::Deserialize(recv, retCode);
-        Deserialization::Deserialize(recv, signature);
+        recv.Deserialize(command, counter, retCode, signature);
 
         if ((command != static_cast<int>(LogicCommand::CREATE_SIGNATURE))
             || (counter != my_counter))
@@ -584,16 +554,15 @@ int ManagerImpl::verifySignature(
     int my_counter = m_counter;
     return try_catch([&] {
 
-        MessageBuffer send, recv;
-        Serialization::Serialize(send, static_cast<int>(LogicCommand::VERIFY_SIGNATURE));
-        Serialization::Serialize(send, my_counter);
-        Serialization::Serialize(send, publicKeyOrCertAlias);
-        Serialization::Serialize(send, password);
-        Serialization::Serialize(send, message);
-        Serialization::Serialize(send, signature);
-        Serialization::Serialize(send, static_cast<int>(hash));
-        Serialization::Serialize(send, static_cast<int>(padding));
-
+        MessageBuffer recv;
+        auto send = MessageBuffer::Serialize(static_cast<int>(LogicCommand::VERIFY_SIGNATURE),
+                                             my_counter,
+                                             publicKeyOrCertAlias,
+                                             password,
+                                             message,
+                                             signature,
+                                             static_cast<int>(hash),
+                                             static_cast<int>(padding));
         int retCode = sendToServer(
             SERVICE_SOCKET_CKM_STORAGE,
             send.Pop(),
@@ -606,9 +575,7 @@ int ManagerImpl::verifySignature(
         int command;
         int counter;
 
-        Deserialization::Deserialize(recv, command);
-        Deserialization::Deserialize(recv, counter);
-        Deserialization::Deserialize(recv, retCode);
+        recv.Deserialize(command, counter, retCode);
 
         if ((command != static_cast<int>(LogicCommand::VERIFY_SIGNATURE))
             || (counter != my_counter))
@@ -624,15 +591,14 @@ int ManagerImpl::ocspCheck(const CertificateShPtrVector &certChain, int &ocspSta
 {
     return try_catch([&] {
         int my_counter = ++m_counter;
-        MessageBuffer send, recv;
+        MessageBuffer recv;
 
         RawBufferVector rawCertChain;
         for (auto &e: certChain) {
             rawCertChain.push_back(e->getDER());
         }
 
-        Serialization::Serialize(send, my_counter);
-        Serialization::Serialize(send, rawCertChain);
+        auto send = MessageBuffer::Serialize(my_counter, rawCertChain);
 
         int retCode = sendToServer(
             SERVICE_SOCKET_OCSP,
@@ -645,9 +611,7 @@ int ManagerImpl::ocspCheck(const CertificateShPtrVector &certChain, int &ocspSta
 
         int counter;
 
-        Deserialization::Deserialize(recv, counter);
-        Deserialization::Deserialize(recv, retCode);
-        Deserialization::Deserialize(recv, ocspStatus);
+        recv.Deserialize(counter, retCode, ocspStatus);
 
         if (my_counter != counter) {
             return CKM_API_ERROR_UNKNOWN;
@@ -664,13 +628,12 @@ int ManagerImpl::allowAccess(const std::string &alias,
     m_counter++;
     int my_counter = m_counter;
     return try_catch([&] {
-        MessageBuffer send, recv;
-        Serialization::Serialize(send, static_cast<int>(LogicCommand::ALLOW_ACCESS));
-        Serialization::Serialize(send, my_counter);
-        Serialization::Serialize(send, alias);
-        Serialization::Serialize(send, accessor);
-        Serialization::Serialize(send, static_cast<int>(granted));
-
+        MessageBuffer recv;
+        auto send = MessageBuffer::Serialize(static_cast<int>(LogicCommand::ALLOW_ACCESS),
+                                             my_counter,
+                                             alias,
+                                             accessor,
+                                             static_cast<int>(granted));
         int retCode = sendToServer(
             SERVICE_SOCKET_CKM_STORAGE,
             send.Pop(),
@@ -682,9 +645,7 @@ int ManagerImpl::allowAccess(const std::string &alias,
 
         int command;
         int counter;
-        Deserialization::Deserialize(recv, command);
-        Deserialization::Deserialize(recv, counter);
-        Deserialization::Deserialize(recv, retCode);
+        recv.Deserialize(command, counter, retCode);
 
         if (my_counter != counter) {
             return CKM_API_ERROR_UNKNOWN;
@@ -699,12 +660,11 @@ int ManagerImpl::denyAccess(const std::string &alias, const std::string &accesso
     m_counter++;
     int my_counter = m_counter;
     return try_catch([&] {
-        MessageBuffer send, recv;
-        Serialization::Serialize(send, static_cast<int>(LogicCommand::DENY_ACCESS));
-        Serialization::Serialize(send, my_counter);
-        Serialization::Serialize(send, alias);
-        Serialization::Serialize(send, accessor);
-
+        MessageBuffer recv;
+        auto send = MessageBuffer::Serialize(static_cast<int>(LogicCommand::DENY_ACCESS),
+                                             my_counter,
+                                             alias,
+                                             accessor);
         int retCode = sendToServer(
             SERVICE_SOCKET_CKM_STORAGE,
             send.Pop(),
@@ -716,9 +676,7 @@ int ManagerImpl::denyAccess(const std::string &alias, const std::string &accesso
 
         int command;
         int counter;
-        Deserialization::Deserialize(recv, command);
-        Deserialization::Deserialize(recv, counter);
-        Deserialization::Deserialize(recv, retCode);
+        recv.Deserialize(command, counter, retCode);
 
         if (my_counter != counter) {
             return CKM_API_ERROR_UNKNOWN;
index 9ce9d8e..bf5d5e0 100644 (file)
@@ -62,6 +62,20 @@ public:
 
     virtual void Write(size_t num, const void *bytes);
 
+    // generic serialization
+    template <typename... Args>
+    static MessageBuffer Serialize( const Args&... args) {
+        MessageBuffer buffer;
+        Serializer<Args...>::Serialize(buffer, args...);
+        return buffer;
+    }
+
+    // generic deserialization
+    template <typename... Args>
+    void Deserialize(Args&... args) {
+        Deserializer<Args...>::Deserialize(*this, args...);
+    }
+
 protected:
 
     inline void CountBytesLeft() {
index 4cda53e..ed77a28 100644 (file)
@@ -242,7 +242,6 @@ struct Serialization {
     {
         Serialize(stream, *vec);
     }
-
 }; // struct Serialization
 
 struct Deserialization {
@@ -462,6 +461,47 @@ struct Deserialization {
     }
 
 }; // struct Deserialization
+
+// generic serialization
+template <typename... Args>
+struct Serializer;
+
+template <typename First, typename... Args>
+struct Serializer<First, Args...> : public Serializer<Args...> {
+    static void Serialize(IStream& stream, const First& f, const Args&... args) {
+        Serialization::Serialize(stream, f);
+        Serializer<Args...>::Serialize(stream, args...);
+    }
+};
+
+// end of recursion
+template <>
+struct Serializer<> {
+    static void Serialize(IStream&) {
+        return;
+    }
+};
+
+// generic deserialization
+template <typename... Args>
+struct Deserializer;
+
+template <typename First, typename... Args>
+struct Deserializer<First, Args...> : public Deserializer<Args...> {
+    static void Deserialize(IStream& stream, First& f, Args&... args) {
+        Deserialization::Deserialize(stream, f);
+        Deserializer<Args...>::Deserialize(stream, args...);
+    }
+};
+
+// end of recursion
+template <>
+struct Deserializer<> {
+    static void Deserialize(IStream&) {
+        return;
+    }
+};
+
 } // namespace CKM
 
 #endif // CENT_KEY_SERIALIZATION_H
index f6f70db..d121da9 100644 (file)
@@ -108,9 +108,7 @@ RawBuffer CKMLogic::unlockUserKey(uid_t user, const Password &password) {
         m_userDataMap.erase(user);
     }
 
-    MessageBuffer response;
-    Serialization::Serialize(response, retCode);
-    return response.Pop();
+    return MessageBuffer::Serialize(retCode).Pop();
 }
 
 RawBuffer CKMLogic::setCCModeStatus(CCModeState mode_status) {
@@ -142,9 +140,7 @@ RawBuffer CKMLogic::setCCModeStatus(CCModeState mode_status) {
         }
     }
 
-    MessageBuffer response;
-    Serialization::Serialize(response, retCode);
-    return response.Pop();
+    return MessageBuffer::Serialize(retCode).Pop();
 }
 
 RawBuffer CKMLogic::lockUserKey(uid_t user) {
@@ -152,9 +148,8 @@ RawBuffer CKMLogic::lockUserKey(uid_t user) {
     // TODO try catch for all errors that should be supported by error code
     m_userDataMap.erase(user);
 
-    MessageBuffer response;
-    Serialization::Serialize(response, retCode);
-    return response.Pop();
+    return MessageBuffer::Serialize(retCode).Pop();
+
 }
 
 RawBuffer CKMLogic::removeUserData(uid_t user) {
@@ -165,9 +160,7 @@ RawBuffer CKMLogic::removeUserData(uid_t user) {
     FileSystem fs(user);
     fs.removeUserData();
 
-    MessageBuffer response;
-    Serialization::Serialize(response, retCode);
-    return response.Pop();
+    return MessageBuffer::Serialize(retCode).Pop();
 }
 
 RawBuffer CKMLogic::changeUserPassword(
@@ -196,9 +189,7 @@ RawBuffer CKMLogic::changeUserPassword(
         retCode = CKM_API_ERROR_SERVER_ERROR;
     }
 
-    MessageBuffer response;
-    Serialization::Serialize(response, retCode);
-    return response.Pop();
+    return MessageBuffer::Serialize(retCode).Pop();
 }
 
 RawBuffer CKMLogic::resetUserPassword(
@@ -215,9 +206,7 @@ RawBuffer CKMLogic::resetUserPassword(
         fs.saveDKEK(handler.keyProvider.getWrappedDomainKEK(newPassword));
     }
 
-    MessageBuffer response;
-    Serialization::Serialize(response, retCode);
-    return response.Pop();
+    return MessageBuffer::Serialize(retCode).Pop();
 }
 
 RawBuffer CKMLogic::removeApplicationData(const std::string &smackLabel) {
@@ -248,9 +237,7 @@ RawBuffer CKMLogic::removeApplicationData(const std::string &smackLabel) {
         retCode = CKM_API_ERROR_DB_ERROR;
     }
 
-    MessageBuffer response;
-    Serialization::Serialize(response, retCode);
-    return response.Pop();
+    return MessageBuffer::Serialize(retCode).Pop();
 }
 
 int CKMLogic::saveDataHelper(
@@ -327,12 +314,10 @@ RawBuffer CKMLogic::saveData(
         retCode = CKM_API_ERROR_DB_ERROR;
     }
 
-    MessageBuffer response;
-    Serialization::Serialize(response, static_cast<int>(LogicCommand::SAVE));
-    Serialization::Serialize(response, commandId);
-    Serialization::Serialize(response, retCode);
-    Serialization::Serialize(response, static_cast<int>(dataType));
-
+    auto response = MessageBuffer::Serialize(static_cast<int>(LogicCommand::SAVE),
+                                             commandId,
+                                             retCode,
+                                             static_cast<int>(dataType));
     return response.Pop();
 }
 
@@ -363,12 +348,10 @@ RawBuffer CKMLogic::removeData(
         retCode = CKM_API_ERROR_DB_LOCKED;
     }
 
-    MessageBuffer response;
-    Serialization::Serialize(response, static_cast<int>(LogicCommand::REMOVE));
-    Serialization::Serialize(response, commandId);
-    Serialization::Serialize(response, retCode);
-    Serialization::Serialize(response, static_cast<int>(dataType));
-
+    auto response = MessageBuffer::Serialize(static_cast<int>(LogicCommand::REMOVE),
+                                             commandId,
+                                             retCode,
+                                             static_cast<int>(dataType));
     return response.Pop();
 }
 
@@ -460,12 +443,11 @@ RawBuffer CKMLogic::getData(
         retCode = CKM_API_ERROR_BAD_REQUEST;
     }
 
-    MessageBuffer response;
-    Serialization::Serialize(response, static_cast<int>(LogicCommand::GET));
-    Serialization::Serialize(response, commandId);
-    Serialization::Serialize(response, retCode);
-    Serialization::Serialize(response, static_cast<int>(row.dataType));
-    Serialization::Serialize(response, row.data);
+    auto response = MessageBuffer::Serialize(static_cast<int>(LogicCommand::GET),
+                                             commandId,
+                                             retCode,
+                                             static_cast<int>(row.dataType),
+                                             row.data);
     return response.Pop();
 }
 
@@ -493,12 +475,11 @@ RawBuffer CKMLogic::getDataList(
         retCode = CKM_API_ERROR_DB_LOCKED;
     }
 
-    MessageBuffer response;
-    Serialization::Serialize(response, static_cast<int>(LogicCommand::GET_LIST));
-    Serialization::Serialize(response, commandId);
-    Serialization::Serialize(response, retCode);
-    Serialization::Serialize(response, static_cast<int>(dataType));
-    Serialization::Serialize(response, aliasVector);
+    auto response = MessageBuffer::Serialize(static_cast<int>(LogicCommand::GET_LIST),
+                                             commandId,
+                                             retCode,
+                                             static_cast<int>(dataType),
+                                             aliasVector);
     return response.Pop();
 }
 
@@ -621,12 +602,7 @@ RawBuffer CKMLogic::createKeyPair(
         retCode = CKM_API_ERROR_DB_ERROR;
     }
 
-    MessageBuffer response;
-    Serialization::Serialize(response, static_cast<int>(protocol_cmd));
-    Serialization::Serialize(response, commandId);
-    Serialization::Serialize(response, retCode);
-
-    return response.Pop();
+    return MessageBuffer::Serialize(static_cast<int>(protocol_cmd), commandId, retCode).Pop();
 }
 
 RawBuffer CKMLogic::getCertificateChain(
@@ -654,11 +630,10 @@ RawBuffer CKMLogic::getCertificateChain(
             chainRawVector.push_back(e.getDER());
     }
 
-    MessageBuffer response;
-    Serialization::Serialize(response, static_cast<int>(LogicCommand::GET_CHAIN_CERT));
-    Serialization::Serialize(response, commandId);
-    Serialization::Serialize(response, retCode);
-    Serialization::Serialize(response, chainRawVector);
+    auto response = MessageBuffer::Serialize(static_cast<int>(LogicCommand::GET_CHAIN_CERT),
+                                             commandId,
+                                             retCode,
+                                             chainRawVector);
     return response.Pop();
 }
 
@@ -712,11 +687,10 @@ RawBuffer CKMLogic::getCertificateChain(
     }
 
 senderror:
-    MessageBuffer response;
-    Serialization::Serialize(response, static_cast<int>(LogicCommand::GET_CHAIN_ALIAS));
-    Serialization::Serialize(response, commandId);
-    Serialization::Serialize(response, retCode);
-    Serialization::Serialize(response, chainRawVector);
+    auto response = MessageBuffer::Serialize(static_cast<int>(LogicCommand::GET_CHAIN_ALIAS),
+                                             commandId,
+                                             retCode,
+                                             chainRawVector);
     return response.Pop();
 }
 
@@ -766,11 +740,10 @@ RawBuffer CKMLogic::createSignature(
         retCode = CKM_API_ERROR_SERVER_ERROR;
     }
 
-    MessageBuffer response;
-    Serialization::Serialize(response, static_cast<int>(LogicCommand::CREATE_SIGNATURE));
-    Serialization::Serialize(response, commandId);
-    Serialization::Serialize(response, retCode);
-    Serialization::Serialize(response, signature);
+    auto response = MessageBuffer::Serialize(static_cast<int>(LogicCommand::CREATE_SIGNATURE),
+                                             commandId,
+                                             retCode,
+                                             signature);
     return response.Pop();
 }
 
@@ -836,11 +809,9 @@ RawBuffer CKMLogic::verifySignature(
         retCode = CKM_API_ERROR_SERVER_ERROR;
     }
 
-    MessageBuffer response;
-    Serialization::Serialize(response, static_cast<int>(LogicCommand::VERIFY_SIGNATURE));
-    Serialization::Serialize(response, commandId);
-    Serialization::Serialize(response, retCode);
-
+    auto response = MessageBuffer::Serialize(static_cast<int>(LogicCommand::VERIFY_SIGNATURE),
+                                             commandId,
+                                             retCode);
     return response.Pop();
 }
 
@@ -872,12 +843,7 @@ RawBuffer CKMLogic::allowAccess(
         retCode = CKM_API_ERROR_DB_LOCKED;
     }
 
-    MessageBuffer response;
-    Serialization::Serialize(response, command);
-    Serialization::Serialize(response, msgID);
-    Serialization::Serialize(response, retCode);
-
-    return response.Pop();
+    return MessageBuffer::Serialize(command, msgID, retCode).Pop();
 }
 
 RawBuffer CKMLogic::denyAccess(
@@ -907,12 +873,7 @@ RawBuffer CKMLogic::denyAccess(
         retCode = CKM_API_ERROR_DB_LOCKED;
     }
 
-    MessageBuffer response;
-    Serialization::Serialize(response, command);
-    Serialization::Serialize(response, msgID);
-    Serialization::Serialize(response, retCode);
-
-    return response.Pop();
+    return MessageBuffer::Serialize(command, msgID, retCode).Pop();
 }
 
 } // namespace CKM
index 76bb2cf..4cc3120 100644 (file)
@@ -113,7 +113,7 @@ RawBuffer CKMService::processControl(MessageBuffer &buffer) {
     Password newPass, oldPass;
     std::string smackLabel;
 
-    Deserialization::Deserialize(buffer, command);
+    buffer.Deserialize(command);
 
     LogDebug("Process control. Command: " << command);
 
@@ -121,29 +121,25 @@ RawBuffer CKMService::processControl(MessageBuffer &buffer) {
 
     switch(cc) {
     case ControlCommand::UNLOCK_USER_KEY:
-        Deserialization::Deserialize(buffer, user);
-        Deserialization::Deserialize(buffer, newPass);
+        buffer.Deserialize(user, newPass);
         return m_logic->unlockUserKey(user, newPass);
     case ControlCommand::LOCK_USER_KEY:
-        Deserialization::Deserialize(buffer, user);
+        buffer.Deserialize(user);
         return m_logic->lockUserKey(user);
     case ControlCommand::REMOVE_USER_DATA:
-        Deserialization::Deserialize(buffer, user);
+        buffer.Deserialize(user);
         return m_logic->removeUserData(user);
     case ControlCommand::CHANGE_USER_PASSWORD:
-        Deserialization::Deserialize(buffer, user);
-        Deserialization::Deserialize(buffer, oldPass);
-        Deserialization::Deserialize(buffer, newPass);
+        buffer.Deserialize(user, oldPass, newPass);
         return m_logic->changeUserPassword(user, oldPass, newPass);
     case ControlCommand::RESET_USER_PASSWORD:
-        Deserialization::Deserialize(buffer, user);
-        Deserialization::Deserialize(buffer, newPass);
+        buffer.Deserialize(user, newPass);
         return m_logic->resetUserPassword(user, newPass);
     case ControlCommand::REMOVE_APP_DATA:
-        Deserialization::Deserialize(buffer, smackLabel);
+        buffer.Deserialize(smackLabel);
         return m_logic->removeApplicationData(smackLabel);
     case ControlCommand::SET_CC_MODE:
-        Deserialization::Deserialize(buffer, cc_mode_status);
+        buffer.Deserialize(cc_mode_status);
         return m_logic->setCCModeStatus(static_cast<CCModeState>(cc_mode_status));
     case ControlCommand::ALLOW_ACCESS:
     {
@@ -152,11 +148,7 @@ RawBuffer CKMService::processControl(MessageBuffer &buffer) {
         std::string accessor_label;
         int req_rights;
 
-        Deserialization::Deserialize(buffer, user);
-        Deserialization::Deserialize(buffer, owner);
-        Deserialization::Deserialize(buffer, item_alias);
-        Deserialization::Deserialize(buffer, accessor_label);
-        Deserialization::Deserialize(buffer, req_rights);
+        buffer.Deserialize(user, owner, item_alias, accessor_label, req_rights);
         Credentials cred =
             {
                 user,
@@ -176,10 +168,7 @@ RawBuffer CKMService::processControl(MessageBuffer &buffer) {
         std::string item_alias;
         std::string accessor_label;
 
-        Deserialization::Deserialize(buffer, user);
-        Deserialization::Deserialize(buffer, owner);
-        Deserialization::Deserialize(buffer, item_alias);
-        Deserialization::Deserialize(buffer, accessor_label);
+        buffer.Deserialize(user, owner, item_alias, accessor_label);
         Credentials cred =
             {
                 user,
@@ -205,8 +194,8 @@ RawBuffer CKMService::processStorage(Credentials &cred, MessageBuffer &buffer)
     Alias alias;
     std::string user;
 
-    Deserialization::Deserialize(buffer, command);
-    Deserialization::Deserialize(buffer, msgID);
+    buffer.Deserialize(command);
+    buffer.Deserialize(msgID);
 
     // This is a workaround solution for locktype=None in Tizen 2.2.1
     // When locktype is None, lockscreen app doesn't interfere with unlocking process.
@@ -223,10 +212,7 @@ RawBuffer CKMService::processStorage(Credentials &cred, MessageBuffer &buffer)
         {
             RawBuffer rawData;
             PolicySerializable policy;
-            Deserialization::Deserialize(buffer, tmpDataType);
-            Deserialization::Deserialize(buffer, alias);
-            Deserialization::Deserialize(buffer, rawData);
-            Deserialization::Deserialize(buffer, policy);
+            buffer.Deserialize(tmpDataType, alias, rawData, policy);
             return m_logic->saveData(
                 cred,
                 msgID,
@@ -237,8 +223,7 @@ RawBuffer CKMService::processStorage(Credentials &cred, MessageBuffer &buffer)
         }
         case LogicCommand::REMOVE:
         {
-            Deserialization::Deserialize(buffer, tmpDataType);
-            Deserialization::Deserialize(buffer, alias);
+            buffer.Deserialize(tmpDataType, alias);
             return m_logic->removeData(
                 cred,
                 msgID,
@@ -248,9 +233,7 @@ RawBuffer CKMService::processStorage(Credentials &cred, MessageBuffer &buffer)
         case LogicCommand::GET:
         {
             Password password;
-            Deserialization::Deserialize(buffer, tmpDataType);
-            Deserialization::Deserialize(buffer, alias);
-            Deserialization::Deserialize(buffer, password);
+            buffer.Deserialize(tmpDataType, alias, password);
             return m_logic->getData(
                 cred,
                 msgID,
@@ -260,7 +243,7 @@ RawBuffer CKMService::processStorage(Credentials &cred, MessageBuffer &buffer)
         }
         case LogicCommand::GET_LIST:
         {
-            Deserialization::Deserialize(buffer, tmpDataType);
+            buffer.Deserialize(tmpDataType);
             return m_logic->getDataList(
                 cred,
                 msgID,
@@ -275,11 +258,11 @@ RawBuffer CKMService::processStorage(Credentials &cred, MessageBuffer &buffer)
             Alias publicKeyAlias;
             PolicySerializable policyPrivateKey;
             PolicySerializable policyPublicKey;
-            Deserialization::Deserialize(buffer, additional_param);
-            Deserialization::Deserialize(buffer, policyPrivateKey);
-            Deserialization::Deserialize(buffer, policyPublicKey);
-            Deserialization::Deserialize(buffer, privateKeyAlias);
-            Deserialization::Deserialize(buffer, publicKeyAlias);
+            buffer.Deserialize(additional_param,
+                               policyPrivateKey,
+                               policyPublicKey,
+                               privateKeyAlias,
+                               publicKeyAlias);
             return m_logic->createKeyPair(
                 cred,
                 static_cast<LogicCommand>(command),
@@ -294,8 +277,7 @@ RawBuffer CKMService::processStorage(Credentials &cred, MessageBuffer &buffer)
         {
             RawBuffer certificate;
             RawBufferVector rawBufferVector;
-            Deserialization::Deserialize(buffer, certificate);
-            Deserialization::Deserialize(buffer, rawBufferVector);
+            buffer.Deserialize(certificate, rawBufferVector);
             return m_logic->getCertificateChain(
                 cred,
                 msgID,
@@ -306,8 +288,7 @@ RawBuffer CKMService::processStorage(Credentials &cred, MessageBuffer &buffer)
         {
             RawBuffer certificate;
             AliasVector aliasVector;
-            Deserialization::Deserialize(buffer, certificate);
-            Deserialization::Deserialize(buffer, aliasVector);
+            buffer.Deserialize(certificate, aliasVector);
             return m_logic->getCertificateChain(
                 cred,
                 msgID,
@@ -320,12 +301,7 @@ RawBuffer CKMService::processStorage(Credentials &cred, MessageBuffer &buffer)
             Password password;        // password for private_key
             RawBuffer message;
             int padding, hash;
-            Deserialization::Deserialize(buffer, privateKeyAlias);
-            Deserialization::Deserialize(buffer, password);
-            Deserialization::Deserialize(buffer, message);
-            Deserialization::Deserialize(buffer, hash);
-            Deserialization::Deserialize(buffer, padding);
-
+            buffer.Deserialize(privateKeyAlias, password, message, hash, padding);
             return m_logic->createSignature(
                   cred,
                   msgID,
@@ -344,12 +320,12 @@ RawBuffer CKMService::processStorage(Credentials &cred, MessageBuffer &buffer)
             //HashAlgorithm hash;
             //RSAPaddingAlgorithm padding;
             int padding, hash;
-            Deserialization::Deserialize(buffer, publicKeyOrCertAlias);
-            Deserialization::Deserialize(buffer, password);
-            Deserialization::Deserialize(buffer, message);
-            Deserialization::Deserialize(buffer, signature);
-            Deserialization::Deserialize(buffer, hash);
-            Deserialization::Deserialize(buffer, padding);
+            buffer.Deserialize(publicKeyOrCertAlias,
+                               password,
+                               message,
+                               signature,
+                               hash,
+                               padding);
             return m_logic->verifySignature(
                 cred,
                 msgID,
@@ -365,9 +341,7 @@ RawBuffer CKMService::processStorage(Credentials &cred, MessageBuffer &buffer)
             Alias item_alias;
             std::string accessor_label;
             int req_rights;
-            Deserialization::Deserialize(buffer, item_alias);
-            Deserialization::Deserialize(buffer, accessor_label);
-            Deserialization::Deserialize(buffer, req_rights);
+            buffer.Deserialize(item_alias, accessor_label, req_rights);
             return m_logic->allowAccess(
                 cred,
                 command,
@@ -380,8 +354,7 @@ RawBuffer CKMService::processStorage(Credentials &cred, MessageBuffer &buffer)
         {
             Alias item_alias;
             std::string accessor_label;
-            Deserialization::Deserialize(buffer, item_alias);
-            Deserialization::Deserialize(buffer, accessor_label);
+            buffer.Deserialize(item_alias, accessor_label);
             return m_logic->denyAccess(
                 cred,
                 command,
index a12867f..bd62d2c 100644 (file)
@@ -49,12 +49,7 @@ RawBuffer OCSPLogic::ocspCheck(int commandId, const RawBufferVector &rawChain) {
     if (retCode == CKM_API_SUCCESS)
         ocspStatus = ocsp.verify(certChain);
 
-    MessageBuffer response;
-    Serialization::Serialize(response, commandId);
-    Serialization::Serialize(response, retCode);
-    Serialization::Serialize(response, ocspStatus);
-
-    return response.Pop();
+    return MessageBuffer::Serialize(commandId, retCode, ocspStatus).Pop();
 }
 
 } // namespace CKM
index 4a3884a..da0229a 100644 (file)
@@ -84,8 +84,7 @@ bool OCSPService::processOne(
 
         int commandId;
         RawBufferVector chainVector;
-        Deserialization::Deserialize(buffer, commandId);
-        Deserialization::Deserialize(buffer, chainVector);
+        buffer.Deserialize(commandId, chainVector);
 
         RawBuffer response = m_logic->ocspCheck(commandId, chainVector);
         m_serviceManager->Write(conn, response);