From 1802b7ad05d22b24b74c9b14abcdbf421d00140f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Fri, 29 Dec 2017 20:38:36 +0000 Subject: [PATCH] Add luks2::create method. --- src/fs/luks.cpp | 1 + src/fs/luks2.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ src/fs/luks2.h | 1 + 3 files changed, 42 insertions(+) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index 3d63f05..12ace19 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -126,6 +126,7 @@ bool luks::create(Report& report, const QString& deviceNode) QStringLiteral("512"), QStringLiteral("--batch-mode"), QStringLiteral("--force-password"), + QStringLiteral("--type"), QStringLiteral("luks1"), QStringLiteral("luksFormat"), deviceNode }); if (!( createCmd.start(-1) && diff --git a/src/fs/luks2.cpp b/src/fs/luks2.cpp index 9301f17..72e5554 100644 --- a/src/fs/luks2.cpp +++ b/src/fs/luks2.cpp @@ -43,6 +43,46 @@ FileSystem::Type luks2::type() const return FileSystem::Luks2; } +bool luks2::create(Report& report, const QString& deviceNode) +{ + Q_ASSERT(m_innerFs); + Q_ASSERT(!m_passphrase.isEmpty()); + + ExternalCommand createCmd(report, QStringLiteral("cryptsetup"), + { QStringLiteral("-s"), + QStringLiteral("512"), + QStringLiteral("--batch-mode"), + QStringLiteral("--force-password"), + QStringLiteral("--type"), QStringLiteral("luks2"), + QStringLiteral("luksFormat"), + deviceNode }); + if (!( createCmd.start(-1) && + createCmd.write(m_passphrase.toLocal8Bit() + '\n') == m_passphrase.toLocal8Bit().length() + 1 && + createCmd.waitFor() && createCmd.exitCode() == 0)) + { + return false; + } + + ExternalCommand openCmd(report, QStringLiteral("cryptsetup"), + { QStringLiteral("open"), + deviceNode, + suggestedMapperName(deviceNode) }); + + if (!( openCmd.start(-1) && openCmd.write(m_passphrase.toLocal8Bit() + '\n') == m_passphrase.toLocal8Bit().length() + 1 && openCmd.waitFor())) + return false; + + setPayloadSize(); + scan(deviceNode); + + if (mapperName().isEmpty()) + return false; + + if (!m_innerFs->create(report, mapperName())) + return false; + + return true; +} + bool luks2::resize(Report& report, const QString& deviceNode, qint64 newLength) const { Q_ASSERT(m_innerFs); diff --git a/src/fs/luks2.h b/src/fs/luks2.h index 5f0e12e..9b7ffc1 100644 --- a/src/fs/luks2.h +++ b/src/fs/luks2.h @@ -38,6 +38,7 @@ public: luks2(qint64 firstsector, qint64 lastsector, qint64 sectorsused, const QString& label); ~luks2() override; + bool create(Report& report, const QString& deviceNode) override; bool resize(Report& report, const QString& deviceNode, qint64 length) const override; FileSystem::Type type() const override;