* Add support for createKeyPairRSA, createKeyPairECDSA commands.
Change-Id: Ia92b6f80d85ea570ad7c7bb3ac61cc950eea36c3
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,
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
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(
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
GET_LIST,
SAVE,
REMOVE,
+ CREATE_KEY_PAIR_RSA,
+ CREATE_KEY_PAIR_ECDSA
};
enum class DBDataType : int {
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
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:
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