Service implementation.
authorRadoslaw Bartosiak <r.bartosiak@samsung.com>
Wed, 4 Jun 2014 16:33:21 +0000 (18:33 +0200)
committerBartlomiej Grzelewski <b.grzelewski@samsung.com>
Fri, 12 Sep 2014 12:57:08 +0000 (14:57 +0200)
   * Add support for createKeyPairRSA, createKeyPairECDSA commands.

Change-Id: Ia92b6f80d85ea570ad7c7bb3ac61cc950eea36c3

src/include/ckm/key-manager.h
src/manager/client/client-manager-impl.cpp
src/manager/client/client-manager-impl.h
src/manager/client/client-manager.cpp
src/manager/common/protocols.h
src/manager/service/ckm-logic.cpp
src/manager/service/ckm-logic.h
src/manager/service/ckm-service.cpp

index 24fd65f..de3ef82 100644 (file)
@@ -169,19 +169,19 @@ public:
     int requestCertificateAliasVector(AliasVector &aliasVector);
     int requestDataAliasVector(AliasVector &aliasVector);
 
-//    int createKeyPairRSA(
-//                     const int size,              // size in bits [1024, 2048, 4096]
-//                     const Alias &privateKeyAlias,
-//                     const Alias &publicKeyAlias,
-//                     const Policy &policyPrivateKey = Policy(),
-//                     const Policy &policyPublicKey = Policy());
-//
-//     int createKeyPairECDSA(
-//                     const Key::ECType type,
-//                     const Alias &privateKeyAlias,
-//                     const Alias &publicKeyAlias,
-//                     const Policy &policyPrivateKey = Policy(),
-//                     const Policy &policyPublicKey = Policy());
+    int createKeyPairRSA(
+        const int size,              // size in bits [1024, 2048, 4096]
+        const Alias &privateKeyAlias,
+        const Alias &publicKeyAlias,
+        const Policy &policyPrivateKey = Policy(),
+        const Policy &policyPublicKey = Policy());
+
+    int createKeyPairECDSA(
+        const Key::ECType type,
+        const Alias &privateKeyAlias,
+        const Alias &publicKeyAlias,
+        const Policy &policyPrivateKey = Policy(),
+        const Policy &policyPublicKey = Policy());
 //
 //     int createSignature(
 //                     const Alias &privateKeyAlias,
index 53ec02a..10e743c 100644 (file)
@@ -303,5 +303,96 @@ int Manager::ManagerImpl::requestDataAliasVector(AliasVector &aliasVector) {
     return requestBinaryDataAliasVector(DBDataType::BINARY_DATA, aliasVector);
 }
 
+int Manager::ManagerImpl::createKeyPairRSA(
+    const int size,              // size in bits [1024, 2048, 4096]
+    const Alias &privateKeyAlias,
+    const Alias &publicKeyAlias,
+    const Policy &policyPrivateKey,
+    const Policy &policyPublicKey) 
+{
+    m_counter++;
+    int my_counter = m_counter;
+    return try_catch([&] {
+
+        MessageBuffer send, recv;
+        Serialization::Serialize(send, static_cast<int>(LogicCommand::CREATE_KEY_PAIR_RSA));
+        Serialization::Serialize(send, my_counter);
+        Serialization::Serialize(send, static_cast<int>(size));
+        Serialization::Serialize(send, PolicySerializable(policyPrivateKey));
+        Serialization::Serialize(send, PolicySerializable(policyPublicKey));
+        Serialization::Serialize(send, privateKeyAlias);
+        Serialization::Serialize(send, publicKeyAlias);
+        
+        
+
+        int retCode = sendToServer(
+            SERVICE_SOCKET_CKM_STORAGE,
+            send.Pop(),
+            recv);
+
+        if (KEY_MANAGER_API_SUCCESS != retCode) {
+            return retCode;
+        }
+
+        int command;
+        int counter;
+       
+
+        Deserialization::Deserialize(recv, command);
+        Deserialization::Deserialize(recv, counter);
+        Deserialization::Deserialize(recv, retCode);
+        
+        if (counter != my_counter) {
+            return KEY_MANAGER_API_ERROR_UNKNOWN;
+        }
+
+        return retCode;
+    });
+}
+
+int Manager::ManagerImpl::createKeyPairECDSA(
+    const Key::ECType type,
+    const Alias &privateKeyAlias,
+    const Alias &publicKeyAlias,
+    const Policy &policyPrivateKey,
+    const Policy &policyPublicKey) 
+{
+    m_counter++;
+    int my_counter = m_counter;
+    return try_catch([&] {
+
+        MessageBuffer send, recv;
+        Serialization::Serialize(send, static_cast<int>(LogicCommand::CREATE_KEY_PAIR_ECDSA));
+        Serialization::Serialize(send, my_counter);
+        Serialization::Serialize(send, static_cast<unsigned int>(type));
+        Serialization::Serialize(send, PolicySerializable(policyPrivateKey));
+        Serialization::Serialize(send, PolicySerializable(policyPublicKey));
+        Serialization::Serialize(send, privateKeyAlias);
+        Serialization::Serialize(send, publicKeyAlias);
+        
+
+        int retCode = sendToServer(
+            SERVICE_SOCKET_CKM_STORAGE,
+            send.Pop(),
+            recv);
+
+        if (KEY_MANAGER_API_SUCCESS != retCode) {
+            return retCode;
+        }
+
+        int command;
+        int counter;
+
+        Deserialization::Deserialize(recv, command);
+        Deserialization::Deserialize(recv, counter);
+        Deserialization::Deserialize(recv, retCode);
+        
+        if (counter != my_counter) {
+            return KEY_MANAGER_API_ERROR_UNKNOWN;
+        }
+
+        return retCode;
+    });
+}
 } // namespace CKM
 
index 9bf6e1d..6bd8bd5 100644 (file)
@@ -48,6 +48,20 @@ public:
     int removeData(const Alias &alias);
     int getData(const Alias &alias, const std::string &password, RawBuffer &cert);
     int requestDataAliasVector(AliasVector &aliasVector);
+    
+    int createKeyPairRSA(
+        const int size,              // size in bits [1024, 2048, 4096]
+        const Alias &privateKeyAlias,
+        const Alias &publicKeyAlias,
+        const Policy &policyPrivateKey = Policy(),
+        const Policy &policyPublicKey = Policy());
+
+    int createKeyPairECDSA(
+        const Key::ECType type,
+        const Alias &privateKeyAlias,
+        const Alias &publicKeyAlias,
+        const Policy &policyPrivateKey = Policy(),
+        const Policy &policyPublicKey = Policy());
 
 protected:
     int saveBinaryData(
index 8865611..d8aa356 100644 (file)
@@ -78,5 +78,24 @@ int Manager::requestDataAliasVector(AliasVector &av) {
     return m_impl->requestDataAliasVector(av);
 }
 
+int Manager::createKeyPairRSA(
+    const int size,              // size in bits [1024, 2048, 4096]
+    const Alias &privateKeyAlias,
+    const Alias &publicKeyAlias,
+    const Policy &policyPrivateKey,
+    const Policy &policyPublicKey) 
+{
+    return m_impl->createKeyPairRSA(size, privateKeyAlias, publicKeyAlias, policyPrivateKey, policyPublicKey);
+}
+
+int Manager::createKeyPairECDSA(
+    const Key::ECType type,
+    const Alias &privateKeyAlias,
+    const Alias &publicKeyAlias,
+    const Policy &policyPrivateKey,
+    const Policy &policyPublicKey) 
+{
+    return m_impl->createKeyPairECDSA(type, privateKeyAlias, publicKeyAlias, policyPrivateKey, policyPublicKey);
+}
 } // namespace CKM
 
index 7d8c2fe..369a743 100644 (file)
@@ -45,6 +45,8 @@ enum class LogicCommand : int {
     GET_LIST,
     SAVE,
     REMOVE,
+    CREATE_KEY_PAIR_RSA,
+    CREATE_KEY_PAIR_ECDSA
 };
 
 enum class DBDataType : int {
index da65fb4..73e2aee 100644 (file)
@@ -157,5 +157,54 @@ RawBuffer CKMLogic::getDataList(
     return response.Pop();
 }
 
+RawBuffer CKMLogic::createKeyPairRSA(
+    Credentials &cred,
+    int commandId,
+    int size,
+    const Alias &privateKeyAlias,
+    const Alias &publicKeyAlias,
+    PolicySerializable policyPrivateKey,
+    PolicySerializable policyPublicKey)
+{ 
+    (void)cred;
+    (void)size;
+    (void)privateKeyAlias;
+    (void)publicKeyAlias,
+    (void)policyPrivateKey;
+    (void)policyPublicKey;
+    MessageBuffer response;
+    Serialization::Serialize(response, static_cast<int>(LogicCommand::CREATE_KEY_PAIR_RSA));
+    Serialization::Serialize(response, commandId);
+    Serialization::Serialize(response, static_cast<int>(KEY_MANAGER_API_SUCCESS));
+    return response.Pop();
+}
+
+RawBuffer CKMLogic::createKeyPairECDSA(
+    Credentials &cred,
+    int commandId,
+    int type,
+    const Alias &privateKeyAlias,
+    const Alias &publicKeyAlias,
+    PolicySerializable policyPrivateKey,
+    PolicySerializable policyPublicKey)
+{
+    (void)cred;
+    (void)type;
+    (void)privateKeyAlias;
+    (void)publicKeyAlias,
+    (void)policyPrivateKey;
+    (void)policyPublicKey;
+    
+    MessageBuffer response;
+    Serialization::Serialize(response, static_cast<int>(LogicCommand::CREATE_KEY_PAIR_RSA));
+    Serialization::Serialize(response, commandId);
+    Serialization::Serialize(response, static_cast<int>(KEY_MANAGER_API_SUCCESS));
+    return response.Pop();
+}
+
+
+
 } // namespace CKM
 
index c963c82..53169ec 100644 (file)
@@ -79,6 +79,24 @@ public:
         Credentials &cred,
         int commandId,
         DBDataType dataType);
+        
+    RawBuffer createKeyPairRSA(
+        Credentials &cred,
+        int commandId,
+        int size,
+        const Alias &privateKeyAlias,
+        const Alias &publicKeyAlias,
+        PolicySerializable policyPrivateKey,
+        PolicySerializable policyPublicKey);
+        
+    RawBuffer createKeyPairECDSA(
+        Credentials &cred,
+        int commandId,
+        int type,
+        const Alias &privateKeyAlias,
+        const Alias &publicKeyAlias,
+        PolicySerializable policyPrivateKey,
+        PolicySerializable policyPublicKey);
 
 private:
 
index d100045..b6c1784 100644 (file)
@@ -195,6 +195,44 @@ RawBuffer CKMService::processStorage(Credentials &cred, MessageBuffer &buffer){
                 commandId,
                 static_cast<DBDataType>(tmpDataType));
         }
+        case LogicCommand::CREATE_KEY_PAIR_RSA:
+        {
+            int size;
+            Alias privateKeyAlias;
+            Alias publicKeyAlias;
+            PolicySerializable policyPrivateKey;
+            PolicySerializable policyPublicKey;
+            Deserialization::Deserialize(buffer, size);
+            Deserialization::Deserialize(buffer, policyPrivateKey);
+            Deserialization::Deserialize(buffer, policyPublicKey);
+            return m_logic->createKeyPairRSA(
+                cred,
+                commandId,
+                size,
+                privateKeyAlias,
+                publicKeyAlias,
+                policyPrivateKey,
+                policyPublicKey);
+        }
+        case LogicCommand::CREATE_KEY_PAIR_ECDSA:
+        {
+            unsigned int type;
+            Alias privateKeyAlias;
+            Alias publicKeyAlias;
+            PolicySerializable policyPrivateKey;
+            PolicySerializable policyPublicKey;
+            Deserialization::Deserialize(buffer, type);
+            Deserialization::Deserialize(buffer, policyPrivateKey);
+            Deserialization::Deserialize(buffer, policyPublicKey);
+            return m_logic->createKeyPairECDSA(
+                cred,
+                commandId,
+                type,
+                privateKeyAlias,
+                publicKeyAlias,
+                policyPrivateKey,
+                policyPublicKey);
+        }
         default:
         // TODO
             throw 1; // broken protocol