From 665cb1a9d27088b1aa2fe118348c3453388e0657 Mon Sep 17 00:00:00 2001 From: N2614 Date: Mon, 7 Nov 2011 01:15:24 +0000 Subject: [PATCH] =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=83=AA?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=81=B8=E3=81=AECMAC=E4=BB=98=E5=8A=A0?= =?UTF-8?q?=E3=81=8C=E6=8A=9C=E3=81=91=E3=81=A6=E3=81=84=E3=81=9F=E3=81=AE?= =?UTF-8?q?=E3=81=A7=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@479 385bec56-5757-e545-9c3a-d8741f4650f1 --- .../sources/ConsoleBackup/Exporter.cpp | 37 +++++++++++++++++-- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/trunk/ConsoleDataMigration/sources/ConsoleBackup/Exporter.cpp b/trunk/ConsoleDataMigration/sources/ConsoleBackup/Exporter.cpp index edf795d..fd4c75f 100644 --- a/trunk/ConsoleDataMigration/sources/ConsoleBackup/Exporter.cpp +++ b/trunk/ConsoleDataMigration/sources/ConsoleBackup/Exporter.cpp @@ -71,7 +71,7 @@ u64 s_ExportProgress = 0; } -void AddCmac(nn::fs::FileOutputStream* file, nn::crypto::Sha256Context* context); +bool AddCmac(nn::fs::FileOutputStream* file, nn::crypto::Sha256Context* context); nn::Result DeleteTrash(std::wstring currentDirectory) { @@ -758,6 +758,22 @@ nn::Result WriteMcuRtcData(common::HardwareStateManager& manager) return nn::ResultSuccess(); } +bool AddCmactoExportFileList() +{ + nn::Result result; + nn::fs::FileOutputStream list; + result = list.TryInitialize(common::FILE_LIST_PATHNAME, true); + COMMON_LOGGER_RETURN_FALSE_IF_FAILED(result); + s64 fileSize = 0; + result = list.TryGetSize(&fileSize); + COMMON_LOGGER_RETURN_FALSE_IF_FAILED(result); + // 末尾に移動 + result = list.TrySetPosition(fileSize); + COMMON_LOGGER_RETURN_FALSE_IF_FAILED(result); + + return AddCmac(&list, &s_FileListContext); +} + void ExportThreadFunc() { nn::Result result; @@ -778,6 +794,15 @@ void ExportThreadFunc() { common::SaveDataMover saveDataMover; saveDataMover.StartExport(buf, bufSize, &s_ExportProgress); + COMMON_LOGGER_RETURN_VOID_SET_BOOL_IF_FAILED( + saveDataMover.GetLastResult(), s_IsExportSucceeded + ); + } + + // FileListにCMACを付加する + if(!AddCmactoExportFileList()) + { + s_IsExportSucceeded = false; } common::SdMountManager::Unmount(); @@ -925,7 +950,7 @@ bool IsExportSucceeded() //!@ brief ファイルにSHA256から計算したAES-CMACを付加します //!@ param[in] file CMACを付加したいInitialize済みのファイル //!@ param[in] context CMAC計算元のSHA256コンテキスト -void AddCmac(nn::fs::FileOutputStream* file, nn::crypto::Sha256Context* context) +bool AddCmac(nn::fs::FileOutputStream* file, nn::crypto::Sha256Context* context) { nn::Result result; @@ -934,12 +959,16 @@ void AddCmac(nn::fs::FileOutputStream* file, nn::crypto::Sha256Context* context) bit8 cmac[nn::crypto::AES_CMAC_MAC_SIZE]; result = nn::crypto::CalculateAesCmacSw(cmac, sha256Hash, nn::crypto::Sha256Context::HASH_SIZE, common::cmacKey); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); + COMMON_LOGGER_RETURN_FALSE_IF_FAILED(result); s32 writeSize; result = file->TryWrite(&writeSize, cmac, sizeof(cmac), false); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); + COMMON_LOGGER_RETURN_FALSE_IF_FAILED(result); + result = file->TryFlush(); + COMMON_LOGGER_RETURN_FALSE_IF_FAILED(result); + + return true; } }