diff --git a/src/CompressedArchiveIFile.cpp b/src/CompressedArchiveIFile.cpp index 02f8982..4467bfc 100644 --- a/src/CompressedArchiveIFile.cpp +++ b/src/CompressedArchiveIFile.cpp @@ -42,7 +42,7 @@ CompressedArchiveIFile::CompressedArchiveIFile(const fnd::SharedPtr& throw fnd::Exception(kModuleName, "Entry was not virtually aligned with previous entry"); // set previous entry virtual_size = this->virtual_offset - prev->virtual_offset; - mCompEntries[mCompEntries.size() - 1].virtual_size = entries[idx].virtual_offset.get() - mCompEntries[mCompEntries.size() - 1].virtual_offset; + mCompEntries[mCompEntries.size() - 1].virtual_size = uint32_t(entries[idx].virtual_offset.get() - mCompEntries[mCompEntries.size() - 1].virtual_offset); } if (entries[idx].physical_size.get() > nn::hac::compression::kRomfsBlockSize) @@ -97,6 +97,7 @@ void CompressedArchiveIFile::read(byte_t* out, size_t len) for (size_t pos = 0, entry_index = getEntryIndexForLogicalOffset(mLogicalOffset); pos < len; entry_index++) { + // importing entry into cache (this does nothing if the entry is already imported) importEntryDataToCache(entry_index); // write padding if required @@ -105,12 +106,13 @@ void CompressedArchiveIFile::read(byte_t* out, size_t len) memset(mCache.get() + mCurrentCacheDataSize, 0, mCompEntries[entry_index].virtual_size - mCurrentCacheDataSize); } - // determine + // determine subset of cache to copy out size_t read_offset = mLogicalOffset - (size_t)mCompEntries[entry_index].virtual_offset; size_t read_size = std::min(len, (size_t)mCompEntries[entry_index].virtual_size - read_offset); memcpy(out + pos, mCache.get() + read_offset, read_size); + // update position/logical offset pos += read_size; mLogicalOffset += read_size; } @@ -154,7 +156,7 @@ void CompressedArchiveIFile::importEntryDataToCache(size_t entry_index) (*mFile)->read(mScratch.get(), entry.physical_offset, entry.physical_size); mCurrentCacheDataSize = 0; - fnd::lz4::decompressData(mScratch.get(), entry.physical_size, mCache.get(), mCacheCapacity, mCurrentCacheDataSize); + fnd::lz4::decompressData(mScratch.get(), entry.physical_size, mCache.get(), uint32_t(mCacheCapacity), mCurrentCacheDataSize); if (mCurrentCacheDataSize == 0) { diff --git a/src/UserSettings.cpp b/src/UserSettings.cpp index eb2b772..3356974 100644 --- a/src/UserSettings.cpp +++ b/src/UserSettings.cpp @@ -924,12 +924,12 @@ void UserSettings::dumpKeyConfig() const std::cout << " NCA Keys:" << std::endl; for (size_t i = 0; i < kMasterKeyNum; i++) { - if (mKeyCfg.getContentArchiveHeader0SignKey(rsa2048_key, i) == true) + if (mKeyCfg.getContentArchiveHeader0SignKey(rsa2048_key, byte_t(i)) == true) dumpRsa2048Key(rsa2048_key, "Header0-SignatureKey-" + kKeyIndex[i], 2); } for (size_t i = 0; i < kMasterKeyNum; i++) { - if (mKeyCfg.getAcidSignKey(rsa2048_key, i) == true) + if (mKeyCfg.getAcidSignKey(rsa2048_key, byte_t(i)) == true) dumpRsa2048Key(rsa2048_key, "Acid-SignatureKey-" + kKeyIndex[i], 2); } @@ -938,28 +938,28 @@ void UserSettings::dumpKeyConfig() const for (size_t i = 0; i < kMasterKeyNum; i++) { - if (mKeyCfg.getNcaKeyAreaEncryptionKey(i,0, aes_key) == true) + if (mKeyCfg.getNcaKeyAreaEncryptionKey(byte_t(i), 0, aes_key) == true) dumpAesKey(aes_key, "KeyAreaEncryptionKey-Application-" + kKeyIndex[i], 2); - if (mKeyCfg.getNcaKeyAreaEncryptionKey(i,1, aes_key) == true) + if (mKeyCfg.getNcaKeyAreaEncryptionKey(byte_t(i), 1, aes_key) == true) dumpAesKey(aes_key, "KeyAreaEncryptionKey-Ocean-" + kKeyIndex[i], 2); - if (mKeyCfg.getNcaKeyAreaEncryptionKey(i,2, aes_key) == true) + if (mKeyCfg.getNcaKeyAreaEncryptionKey(byte_t(i), 2, aes_key) == true) dumpAesKey(aes_key, "KeyAreaEncryptionKey-System-" + kKeyIndex[i], 2); } for (size_t i = 0; i < kMasterKeyNum; i++) { - if (mKeyCfg.getNcaKeyAreaEncryptionKeyHw(i,0, aes_key) == true) + if (mKeyCfg.getNcaKeyAreaEncryptionKeyHw(byte_t(i), 0, aes_key) == true) dumpAesKey(aes_key, "KeyAreaEncryptionKeyHw-Application-" + kKeyIndex[i], 2); - if (mKeyCfg.getNcaKeyAreaEncryptionKeyHw(i,1, aes_key) == true) + if (mKeyCfg.getNcaKeyAreaEncryptionKeyHw(byte_t(i), 1, aes_key) == true) dumpAesKey(aes_key, "KeyAreaEncryptionKeyHw-Ocean-" + kKeyIndex[i], 2); - if (mKeyCfg.getNcaKeyAreaEncryptionKeyHw(i,2, aes_key) == true) + if (mKeyCfg.getNcaKeyAreaEncryptionKeyHw(byte_t(i), 2, aes_key) == true) dumpAesKey(aes_key, "KeyAreaEncryptionKeyHw-System-" + kKeyIndex[i], 2); } std::cout << " NRR Keys:" << std::endl; for (size_t i = 0; i < kMasterKeyNum; i++) { - if (mKeyCfg.getNrrCertificateSignKey(rsa2048_key, i) == true) + if (mKeyCfg.getNrrCertificateSignKey(rsa2048_key, byte_t(i)) == true) dumpRsa2048Key(rsa2048_key, "Certificate-SignatureKey-" + kKeyIndex[i], 2); } @@ -975,7 +975,7 @@ void UserSettings::dumpKeyConfig() const std::cout << " Package1 Keys:" << std::endl; for (size_t i = 0; i < kMasterKeyNum; i++) { - if (mKeyCfg.getPkg1Key(i, aes_key) == true) + if (mKeyCfg.getPkg1Key(byte_t(i), aes_key) == true) dumpAesKey(aes_key, "EncryptionKey-" + kKeyIndex[i], 2); } @@ -984,14 +984,14 @@ void UserSettings::dumpKeyConfig() const dumpRsa2048Key(rsa2048_key, "Signature Key", 2); for (size_t i = 0; i < kMasterKeyNum; i++) { - if (mKeyCfg.getPkg2Key(i, aes_key) == true) + if (mKeyCfg.getPkg2Key(byte_t(i), aes_key) == true) dumpAesKey(aes_key, "EncryptionKey-" + kKeyIndex[i], 2); } std::cout << " ETicket Keys:" << std::endl; for (size_t i = 0; i < kMasterKeyNum; i++) { - if (mKeyCfg.getETicketCommonKey(i, aes_key) == true) + if (mKeyCfg.getETicketCommonKey(byte_t(i), aes_key) == true) dumpAesKey(aes_key, "CommonKey-" + kKeyIndex[i], 2); }