data BLOB NOT NULL,
tag BLOB NOT NULL,
idx INTEGER NOT NULL,
+ backendId INTEGER NOT NULL DEFAULT 1,
FOREIGN KEY(idx) REFERENCES NAMES(idx) ON DELETE CASCADE,
PRIMARY KEY(idx, dataType));
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ *
+ *
+ * @file migrate_3.sql
+ * @author Krzysztof Jackiewicz (k.jackiewicz@samsung.com)
+ * @version 1.0
+ * @brief DB migration script from schema version 3 to schema version 4.
+ */
+
+
+-- update schema
+ALTER TABLE NAMES ADD COLUMN backendId INTEGER NOT NULL DEFAULT 1;
mkdir -p %{buildroot}/usr/share/ckm-db-test
cp tests/testme_ver1.db %{buildroot}/usr/share/ckm-db-test/
cp tests/testme_ver2.db %{buildroot}/usr/share/ckm-db-test/
+cp tests/testme_ver3.db %{buildroot}/usr/share/ckm-db-test/
mkdir -p %{buildroot}/etc/gumd/userdel.d/
cp data/gumd/10_key-manager.post %{buildroot}/etc/gumd/userdel.d/
%{_bindir}/ckm-tests-internal
%{_datadir}/ckm-db-test/testme_ver1.db
%{_datadir}/ckm-db-test/testme_ver2.db
+%{_datadir}/ckm-db-test/testme_ver3.db
%{_bindir}/ckm_so_loader
%files -n key-manager-pam-plugin
* increment and update DB_VERSION_CURRENT,
* then provide migration mechanism!
*/
- DB_VERSION_CURRENT = 3
+ DB_VERSION_CURRENT = 4
};
const char *SCRIPT_CREATE_SCHEMA = "create_schema";
"INSERT INTO OBJECTS("
" exportable, dataType,"
" algorithmType, encryptionScheme,"
- " iv, dataSize, data, tag, idx) "
+ " iv, dataSize, data, tag, idx, backendId) "
" VALUES(?001, ?002, ?003, ?004, ?005, "
" ?006, ?007, ?008,"
- " (SELECT idx FROM NAMES WHERE name=?101 and label=?102)"
+ " (SELECT idx FROM NAMES WHERE name=?101 and label=?102),"
+ " ?009"
" );";
const char *DB_CMD_OBJECT_SELECT_BY_NAME_AND_LABEL =
row.dataSize = selectCommand->GetColumnInteger(7);
row.data = selectCommand->GetColumnBlob(8);
row.tag = selectCommand->GetColumnBlob(9);
+ row.backendId = static_cast<CryptoBackend>(selectCommand->GetColumnInteger(11));
return row;
}
insertObjectCommand->BindInteger(6, row.dataSize);
insertObjectCommand->BindBlob (7, row.data);
insertObjectCommand->BindBlob (8, row.tag);
+ insertObjectCommand->BindInteger(9, static_cast<int>(row.backendId));
// name table reference
insertObjectCommand->BindString (101, row.name.c_str());
row.iv = createDefaultPass();
row.encryptionScheme = 0;
row.dataSize = 0;
+ row.backendId = CryptoBackend::OpenSSL;
return row;
}
BOOST_CHECK_MESSAGE(lhs.data == rhs.data,
"data didn't match! Got: " << rhs.data.size()
<< " , expected : " << lhs.data.size());
+
+ BOOST_CHECK_MESSAGE(lhs.backendId == rhs.backendId,
+ "backendId didn't match! Got: " << static_cast<int>(rhs.backendId)
+ << " , expected : " << static_cast<int>(lhs.backendId));
}
void DBFixture::check_DB_integrity(const DB::Row &rowPattern)
#include <boost/test/results_reporter.hpp>
#include <colour_log_formatter.h>
#include <dpl/log/log.h>
+#include <log-setup.h>
struct TestConfig {
TestConfig() {
struct LogSetup {
LogSetup() {
+ CKM::SetupClientLogSystem();
CKM::Singleton<CKM::Log::LogSystem>::Instance().SetTag("CKM_INTERNAL_TESTS");
}
~LogSetup() {}
const unsigned int c_num_names = 500;
const unsigned int c_num_names_add_test = 5000;
const unsigned int c_names_per_label = 15;
+
} // namespace anonymous
BOOST_FIXTURE_TEST_SUITE(DBCRYPTO_TEST, DBFixture)
BOOST_CHECK_MESSAGE(!row_optional, "Row still present after rollback");
}
+BOOST_AUTO_TEST_CASE(DBtestBackend) {
+ DB::Row rowPattern = create_default_row();
+ rowPattern.data = RawBuffer(32, 1);
+ rowPattern.dataSize = rowPattern.data.size();
+ rowPattern.tag = RawBuffer(AES_GCM_TAG_SIZE, 1);
+
+ rowPattern.backendId = CryptoBackend::OpenSSL;
+ check_DB_integrity(rowPattern);
+
+ rowPattern.backendId = CryptoBackend::TrustZone;
+ check_DB_integrity(rowPattern);
+
+ rowPattern.backendId = CryptoBackend::None;
+ check_DB_integrity(rowPattern);
+}
+
BOOST_AUTO_TEST_SUITE_END()
ret_list.clear();
}
}
+
struct DBVer1Migration : public DBFixture
{
DBVer1Migration() : DBFixture("/usr/share/ckm-db-test/testme_ver1.db")
DBVer2Migration() : DBFixture("/usr/share/ckm-db-test/testme_ver2.db")
{}
};
+
+struct DBVer3Migration : public DBFixture
+{
+ DBVer3Migration() : DBFixture("/usr/share/ckm-db-test/testme_ver3.db")
+ {}
+};
}
BOOST_AUTO_TEST_CASE(DBMigrationDBVer1)
verifyDBisValid(DBver2);
}
+BOOST_AUTO_TEST_CASE(DBMigrationDBVer3)
+{
+ DBVer3Migration DBver3;
+ verifyDBisValid(DBver3);
+}
+
BOOST_AUTO_TEST_CASE(DBMigrationDBCurrent)
{
DBFixture currentDB;