diff --git a/3DSDecrypt/Headers/NCCHHeader.cs b/3DSDecrypt/Headers/NCCHHeader.cs
index 8764a06..0023031 100644
--- a/3DSDecrypt/Headers/NCCHHeader.cs
+++ b/3DSDecrypt/Headers/NCCHHeader.cs
@@ -247,13 +247,42 @@ namespace ThreeDS.Headers
}
}
+ ///
+ /// Process a single partition
+ ///
+ /// BinaryReader representing the input stream
+ /// BinaryWriter representing the output stream
+ /// NCSD header representing the 3DS file
+ /// True if we want to encrypt the partitions, false otherwise
+ /// True if development keys should be used, false otherwise
+ public void ProcessPartition(BinaryReader reader, BinaryWriter writer, NCSDHeader header, bool encrypt, bool development)
+ {
+ // Check if the 'NoCrypto' bit is set
+ if (Flags.PossblyDecrypted ^ encrypt)
+ {
+ Console.WriteLine($"Partition {PartitionNumber}: Already " + (encrypt ? "Encrypted" : "Decrypted") + "?...");
+ return;
+ }
+
+ // Determine the Keys to be used
+ SetEncryptionKeys(header.BackupHeader.Flags, encrypt, development);
+
+ // Process each of the pieces if they exist
+ ProcessExtendedHeader(reader, writer, header.MediaUnitSize, encrypt);
+ ProcessExeFS(reader, writer, header.MediaUnitSize, encrypt);
+ ProcessRomFS(reader, writer, header.MediaUnitSize, header.BackupHeader.Flags, encrypt, development);
+
+ // Write out new CryptoMethod and BitMask flags
+ UpdateCryptoAndMasks(reader, writer, header, encrypt);
+ }
+
///
/// Determine the set of keys to be used for encryption or decryption
///
/// File backup flags for encryption
/// True if we're encrypting the file, false otherwise
/// True if development keys should be used, false otherwise
- public void SetEncryptionKeys(NCCHHeaderFlags backupFlags, bool encrypt, bool development)
+ private void SetEncryptionKeys(NCCHHeaderFlags backupFlags, bool encrypt, bool development)
{
KeyX = 0;
KeyX2C = (development ? Constants.DevKeyX0x2C : Constants.KeyX0x2C);
@@ -321,7 +350,7 @@ namespace ThreeDS.Headers
/// BinaryWriter representing the output stream
/// Number of bytes per media unit
/// True if we want to encrypt the extended header, false otherwise
- public bool ProcessExtendedHeader(BinaryReader reader, BinaryWriter writer, uint mediaUnitSize, bool encrypt)
+ private bool ProcessExtendedHeader(BinaryReader reader, BinaryWriter writer, uint mediaUnitSize, bool encrypt)
{
if (ExtendedHeaderSizeInBytes > 0)
{
@@ -349,7 +378,7 @@ namespace ThreeDS.Headers
/// BinaryWriter representing the output stream
/// Number of bytes per media unit
/// True if we want to encrypt the extended header, false otherwise
- public void ProcessExeFS(BinaryReader reader, BinaryWriter writer, uint mediaUnitSize, bool encrypt)
+ private void ProcessExeFS(BinaryReader reader, BinaryWriter writer, uint mediaUnitSize, bool encrypt)
{
if (ExeFSSizeInMediaUnits > 0)
{
@@ -469,7 +498,7 @@ namespace ThreeDS.Headers
/// File backup flags for encryption
/// True if we want to encrypt the extended header, false otherwise
/// True if development keys should be used, false otherwise
- public void ProcessRomFS(BinaryReader reader, BinaryWriter writer, uint mediaUnitSize, NCCHHeaderFlags backupFlags, bool encrypt, bool development)
+ private void ProcessRomFS(BinaryReader reader, BinaryWriter writer, uint mediaUnitSize, NCCHHeaderFlags backupFlags, bool encrypt, bool development)
{
if (RomFSOffsetInMediaUnits != 0)
{
@@ -531,7 +560,7 @@ namespace ThreeDS.Headers
/// BinaryWriter representing the output stream
/// NCSD header for the 3DS file
/// True if we're writing encrypted values, false otherwise
- public void UpdateCryptoAndMasks(BinaryReader reader, BinaryWriter writer, NCSDHeader header, bool encrypt)
+ private void UpdateCryptoAndMasks(BinaryReader reader, BinaryWriter writer, NCSDHeader header, bool encrypt)
{
// Write the new CryptoMethod
writer.BaseStream.Seek((Entry.Offset * header.MediaUnitSize) + 0x18B, SeekOrigin.Begin);
diff --git a/3DSDecrypt/Headers/NCSDHeader.cs b/3DSDecrypt/Headers/NCSDHeader.cs
index c54d70a..aac24f9 100644
--- a/3DSDecrypt/Headers/NCSDHeader.cs
+++ b/3DSDecrypt/Headers/NCSDHeader.cs
@@ -330,8 +330,7 @@ namespace ThreeDS.Headers
/// BinaryWriter representing the output stream
/// True if we want to encrypt the partitions, false otherwise
/// True if development keys should be used, false otherwise
- ///
- public bool ProcessAllPartitions(BinaryReader reader, BinaryWriter writer, bool encrypt, bool development)
+ public void ProcessAllPartitions(BinaryReader reader, BinaryWriter writer, bool encrypt, bool development)
{
// Iterate over all 8 NCCH partitions
for (int p = 0; p < 8; p++)
@@ -340,26 +339,8 @@ namespace ThreeDS.Headers
if (partitionHeader == null)
continue;
- // Check if the 'NoCrypto' bit is set
- if (partitionHeader.Flags.PossblyDecrypted ^ encrypt)
- {
- Console.WriteLine($"Partition {p}: Already " + (encrypt ? "Encrypted" : "Decrypted") + "?...");
- continue;
- }
-
- // Determine the Keys to be used
- partitionHeader.SetEncryptionKeys(BackupHeader.Flags, encrypt, development);
-
- // Process each of the pieces if they exist
- partitionHeader.ProcessExtendedHeader(reader, writer, MediaUnitSize, encrypt);
- partitionHeader.ProcessExeFS(reader, writer, MediaUnitSize, encrypt);
- partitionHeader.ProcessRomFS(reader, writer, MediaUnitSize, BackupHeader.Flags, encrypt, development);
-
- // Write out new CryptoMethod and BitMask flags
- partitionHeader.UpdateCryptoAndMasks(reader, writer, this, encrypt);
+ partitionHeader.ProcessPartition(reader, writer, this, encrypt, development);
}
-
- return true;
}
///