Make pack() a SW Store's static method 54/288054/12
authorKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Thu, 9 Feb 2023 08:59:15 +0000 (09:59 +0100)
committerKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Fri, 17 Mar 2023 09:20:00 +0000 (10:20 +0100)
This is necessary to let SW object pack newly derived key/secret.

Change-Id: Ib9cb635e384ae3dfcee7cf4c60cbea80d2c86861

src/manager/crypto/sw-backend/store.cpp
src/manager/crypto/sw-backend/store.h

index 86bd5c5..96a081b 100644 (file)
@@ -116,35 +116,6 @@ RawBuffer unpack(const RawBuffer &packed, const Password &pass)
        return ret;
 }
 
-RawBuffer pack(const RawBuffer &data, const Password &pass)
-{
-       int scheme = EncryptionScheme::NONE;
-       RawBuffer packed = data;
-
-       if (!pass.empty()) {
-               RawBuffer iv = generateRandIV();
-               RawBuffer key = passwordToKey(pass, iv, Params::DERIVED_KEY_LENGTH);
-
-               std::pair<RawBuffer, RawBuffer> ret;
-
-               try {
-                       ret = Crypto::SW::Internals::encryptDataAesGcm(key, data, iv,
-                                       Params::DEFAULT_AES_GCM_TAG_LEN_BYTES);
-               } catch (const Exc::Exception &e) {
-                       ThrowErr(Exc::InternalError, "Encryption with custom password failed, internal error");
-               }
-
-               scheme |= EncryptionScheme::PASSWORD;
-
-               // serialization exceptions will be catched as CKM::Exception and will cause
-               // CKM_API_ERROR_SERVER_ERROR
-               packed = SerializeMessage(ret.first, iv, ret.second);
-       }
-
-       // encryption scheme + internal buffer
-       return SerializeMessage(scheme, packed);
-}
-
 std::string rawToHexString(const RawBuffer &raw)
 {
        return hexDump<std::string>(raw);
@@ -214,6 +185,35 @@ Token Store::import(const Data &data, const Password &pass, const EncryptionPara
        return Token(m_backendId, data.type, pack(data.data, pass));
 }
 
+RawBuffer Store::pack(const RawBuffer &data, const Password &pass)
+{
+       int scheme = EncryptionScheme::NONE;
+       RawBuffer packed = data;
+
+       if (!pass.empty()) {
+               RawBuffer iv = generateRandIV();
+               RawBuffer key = passwordToKey(pass, iv, Params::DERIVED_KEY_LENGTH);
+
+               std::pair<RawBuffer, RawBuffer> ret;
+
+               try {
+                       ret = Crypto::SW::Internals::encryptDataAesGcm(key, data, iv,
+                                       Params::DEFAULT_AES_GCM_TAG_LEN_BYTES);
+               } catch (const Exc::Exception &e) {
+                       ThrowErr(Exc::InternalError, "Encryption with custom password failed, internal error");
+               }
+
+               scheme |= EncryptionScheme::PASSWORD;
+
+               // serialization exceptions will be catched as CKM::Exception and will cause
+               // CKM_API_ERROR_SERVER_ERROR
+               packed = SerializeMessage(ret.first, iv, ret.second);
+       }
+
+       // encryption scheme + internal buffer
+       return SerializeMessage(scheme, packed);
+}
+
 } // namespace SW
 } // namespace Crypto
 } // namespace CKM
index cfffd9d..eba1365 100644 (file)
@@ -43,6 +43,8 @@ public:
        Token import(const Data &data, const Password &, const EncryptionParams &,
                                 const RawBuffer &) override;
        void destroy(const Token &) override {}
+
+       static RawBuffer pack(const RawBuffer &data, const Password &pass);
 };
 
 } // namespace SW