Enable EC key pair generation in TZ backend 87/290487/2
authorKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Mon, 27 Mar 2023 10:47:45 +0000 (12:47 +0200)
committerKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Mon, 27 Mar 2023 11:24:35 +0000 (13:24 +0200)
Until now, the decider was redirecting such requests to SW backend at
all times.

Change-Id: Ibbda55fa8ecdb3b5b8b3803754bfbf226a612704

src/manager/crypto/platform/decider.cpp
src/manager/crypto/platform/decider.h
src/manager/service/ckm-logic.cpp

index 93cd7ae..9109fb2 100644 (file)
@@ -114,15 +114,10 @@ GStore &Decider::getStore(DataType data, const Policy &policy, bool encrypted)
        }));
 }
 
-GStore &Decider::getStore(const Policy &policyPrv, DataType prv, DataType pub)
+GStore &Decider::getStore(const Policy &policyPrv)
 {
-       return getStore(chooseBackend(policyPrv, [&]{
-               return
-                       // extractable private key can only be handled by OpenSSL
-                       policyPrv.extractable ||
-                       // ECDSA algorithm is unsupported by GP API 1.0
-                       prv.isEllipticCurve() || pub.isEllipticCurve();
-       }));
+       // extractable private key can only be handled by OpenSSL
+       return getStore(chooseBackend(policyPrv, [&]{ return policyPrv.extractable; }));
 }
 
 } // namespace Crypto
index ddf62b0..08ab78e 100644 (file)
@@ -41,7 +41,7 @@ public:
        Decider();
        GStore &getStore(const Token &token);
        GStore &getStore(DataType data, const Policy &policy, bool encrypted = false);
-       GStore &getStore(const Policy &policyPrv, DataType prv, DataType pub);
+       GStore &getStore(const Policy &policyPrv);
 
 private:
        GStore &getStore(CryptoBackend id);
index bb07985..54bf913 100644 (file)
@@ -55,16 +55,6 @@ bool isNameValid(const CKM::Name &name)
        return true;
 }
 
-// keypair data type, having private key data type and public key data type
-// private is assumed to be .first, public .second
-using DataTypePair = std::pair<CKM::DataType, CKM::DataType>;
-
-const std::map<CKM::AlgoType, DataTypePair> ALGO_TYPE_TO_DATA_TYPE_PAIR_MAP = {
-       { CKM::AlgoType::RSA_GEN,       { CKM::DataType(CKM::KeyType::KEY_RSA_PRIVATE), CKM::DataType(CKM::KeyType::KEY_RSA_PUBLIC) } },
-       { CKM::AlgoType::DSA_GEN,       { CKM::DataType(CKM::KeyType::KEY_DSA_PRIVATE), CKM::DataType(CKM::KeyType::KEY_DSA_PUBLIC) } },
-       { CKM::AlgoType::ECDSA_GEN,     { CKM::DataType(CKM::KeyType::KEY_ECDSA_PRIVATE), CKM::DataType(CKM::KeyType::KEY_ECDSA_PUBLIC) } },
-};
-
 } // anonymous namespace
 
 namespace CKM {
@@ -1152,23 +1142,13 @@ RawBuffer CKMLogic::createKeyPair(
                if (retCodePub != CKM_API_SUCCESS)
                        return retCodePub;
 
-               AlgoType keyType = AlgoType::RSA_GEN;
-
-               if (!keyGenParams.getParam(ParamName::ALGO_TYPE, keyType))
-                       ThrowErr(Exc::InputParam, "Error, parameter ALGO_TYPE not found.");
-
-               const auto dtIt = ALGO_TYPE_TO_DATA_TYPE_PAIR_MAP.find(keyType);
-               if (dtIt == ALGO_TYPE_TO_DATA_TYPE_PAIR_MAP.end())
-                       ThrowErr(Exc::InputParam, "Error, parameter ALGO_TYPE with wrong value.");
-               const DataTypePair& dt = dtIt->second;
-
                if (policyPrv.backend != policyPub.backend)
                        ThrowErr(Exc::InputParam, "Error, key pair must be supported with the same backend.");
 
                bool exportable = policyPrv.extractable || policyPub.extractable;
                Policy lessRestricted(Password(), exportable, policyPrv.backend);
 
-               TokenPair keys = m_decider.getStore(policyPrv, dt.first, dt.second).generateAKey(
+               TokenPair keys = m_decider.getStore(policyPrv).generateAKey(
                        keyGenParams,
                        policyPrv.password,
                        policyPub.password,