Begin Commenting and organizing again, automatic call simplifications

This commit is contained in:
Michael 2021-02-07 12:37:46 -06:00
parent 169d251817
commit 25a7878313
17 changed files with 223 additions and 103 deletions

2
BNS.cs
View file

@ -731,6 +731,7 @@ namespace libWiiSharp
} }
internal class BNS_Header internal class BNS_Header
{ {
//Private Variables
private readonly byte[] magic = new byte[4] private readonly byte[] magic = new byte[4]
{ {
66, 66,
@ -747,6 +748,7 @@ namespace libWiiSharp
private uint dataOffset = 192; private uint dataOffset = 192;
private uint dataLength = 315392; private uint dataLength = 315392;
//Public Variables
public uint DataOffset public uint DataOffset
{ {
get => dataOffset; get => dataOffset;

View file

@ -24,16 +24,33 @@ namespace libWiiSharp
{ {
public class Brlan public class Brlan
{ {
#region Public Functions
/// <summary>
/// Gets all TPLs that are required by the brlan (Frame Animation).
/// </summary>
/// <param name="pathTobrlan"></param>
/// <returns></returns>
public static string[] GetBrlanTpls(string pathTobrlan) public static string[] GetBrlanTpls(string pathTobrlan)
{ {
return Brlan.PrivGetBrlanTpls(File.ReadAllBytes(pathTobrlan)); return PrivGetBrlanTpls(File.ReadAllBytes(pathTobrlan));
} }
/// <summary>
/// Gets all TPLs that are required by the brlan (Frame Animation).
/// </summary>
/// <param name="brlanFile"></param>
/// <returns></returns>
public static string[] GetBrlanTpls(byte[] brlanFile) public static string[] GetBrlanTpls(byte[] brlanFile)
{ {
return Brlan.PrivGetBrlanTpls(brlanFile); return PrivGetBrlanTpls(brlanFile);
} }
/// <summary>
/// Gets all TPLs that are required by the brlan (Frame Animation).
/// </summary>
/// <param name="wad"></param>
/// <param name="banner"></param>
/// <returns></returns>
public static string[] GetBrlanTpls(WAD wad, bool banner) public static string[] GetBrlanTpls(WAD wad, bool banner)
{ {
if (!wad.HasBanner) if (!wad.HasBanner)
@ -57,7 +74,7 @@ namespace libWiiSharp
{ {
if (u8.StringTable[index2].ToLower() == str + "_start.brlan" || u8.StringTable[index2].ToLower() == str + "_loop.brlan" || u8.StringTable[index2].ToLower() == str + ".brlan") if (u8.StringTable[index2].ToLower() == str + "_start.brlan" || u8.StringTable[index2].ToLower() == str + "_loop.brlan" || u8.StringTable[index2].ToLower() == str + ".brlan")
{ {
a = Shared.MergeStringArrays(a, Brlan.GetBrlanTpls(u8.Data[index2])); a = Shared.MergeStringArrays(a, GetBrlanTpls(u8.Data[index2]));
} }
} }
return a; return a;
@ -65,11 +82,13 @@ namespace libWiiSharp
} }
return new string[0]; return new string[0];
} }
#endregion
#region Private Functions
private static string[] PrivGetBrlanTpls(byte[] brlanFile) private static string[] PrivGetBrlanTpls(byte[] brlanFile)
{ {
List<string> stringList = new List<string>(); List<string> stringList = new List<string>();
int numOfTpls = Brlan.GetNumOfTpls(brlanFile); int numOfTpls = GetNumOfTpls(brlanFile);
int index1 = 36 + numOfTpls * 4; int index1 = 36 + numOfTpls * 4;
for (int index2 = 0; index2 < numOfTpls; ++index2) for (int index2 = 0; index2 < numOfTpls; ++index2)
{ {
@ -96,5 +115,6 @@ namespace libWiiSharp
{ {
return Shared.Swap(BitConverter.ToUInt16(brlanFile, 28)); return Shared.Swap(BitConverter.ToUInt16(brlanFile, 28));
} }
#endregion
} }
} }

View file

@ -24,16 +24,33 @@ namespace libWiiSharp
{ {
public class Brlyt public class Brlyt
{ {
#region Public Functions
/// <summary>
/// Gets all TPLs that are required by the brlyt.
/// </summary>
/// <param name="pathToBrlyt"></param>
/// <returns></returns>
public static string[] GetBrlytTpls(string pathToBrlyt) public static string[] GetBrlytTpls(string pathToBrlyt)
{ {
return PrivGetBrlytTpls(File.ReadAllBytes(pathToBrlyt)); return PrivGetBrlytTpls(File.ReadAllBytes(pathToBrlyt));
} }
/// <summary>
/// Gets all TPLs that are required by the brlyt.
/// </summary>
/// <param name="brlytFile"></param>
/// <returns></returns>
public static string[] GetBrlytTpls(byte[] brlytFile) public static string[] GetBrlytTpls(byte[] brlytFile)
{ {
return PrivGetBrlytTpls(brlytFile); return PrivGetBrlytTpls(brlytFile);
} }
/// <summary>
/// Gets all TPLs that are required by the brlyt.
/// </summary>
/// <param name="wad"></param>
/// <param name="banner"></param>
/// <returns></returns>
public static string[] GetBrlytTpls(WAD wad, bool banner) public static string[] GetBrlytTpls(WAD wad, bool banner)
{ {
if (!wad.HasBanner) if (!wad.HasBanner)
@ -57,7 +74,7 @@ namespace libWiiSharp
{ {
if (u8.StringTable[index2].ToLower() == str + ".brlyt") if (u8.StringTable[index2].ToLower() == str + ".brlyt")
{ {
a = Shared.MergeStringArrays(a, Brlyt.GetBrlytTpls(u8.Data[index2])); a = Shared.MergeStringArrays(a, GetBrlytTpls(u8.Data[index2]));
} }
} }
return a; return a;
@ -65,11 +82,13 @@ namespace libWiiSharp
} }
return new string[0]; return new string[0];
} }
#endregion
#region Private Functions
private static string[] PrivGetBrlytTpls(byte[] brlytFile) private static string[] PrivGetBrlytTpls(byte[] brlytFile)
{ {
List<string> stringList = new List<string>(); List<string> stringList = new List<string>();
int numOfTpls = Brlyt.GetNumOfTpls(brlytFile); int numOfTpls = GetNumOfTpls(brlytFile);
int index1 = 48 + numOfTpls * 8; int index1 = 48 + numOfTpls * 8;
for (int index2 = 0; index2 < numOfTpls; ++index2) for (int index2 = 0; index2 < numOfTpls; ++index2)
{ {
@ -96,5 +115,6 @@ namespace libWiiSharp
{ {
return Shared.Swap(BitConverter.ToUInt16(brlytFile, 44)); return Shared.Swap(BitConverter.ToUInt16(brlytFile, 44));
} }
#endregion
} }
} }

View file

@ -34,10 +34,12 @@ namespace libWiiSharp
private byte[] certXs = new byte[768]; private byte[] certXs = new byte[768];
private bool isDisposed; private bool isDisposed;
/// <summary>
/// If false, the Certificate Chain is not complete (i.e. at least one certificate is missing).
/// </summary>
public bool CertsComplete => certsComplete[0] && certsComplete[1] && certsComplete[2]; public bool CertsComplete => certsComplete[0] && certsComplete[1] && certsComplete[2];
public event EventHandler<MessageEventArgs> Debug; #region IDisposable Members
~CertificateChain() => Dispose(false); ~CertificateChain() => Dispose(false);
public void Dispose() public void Dispose()
@ -59,12 +61,24 @@ namespace libWiiSharp
} }
isDisposed = true; isDisposed = true;
} }
#endregion
#region Public Functions
/// <summary>
/// Loads a cert file.
/// </summary>
/// <param name="pathToCert"></param>
/// <returns></returns>
public static CertificateChain Load(string pathToCert) public static CertificateChain Load(string pathToCert)
{ {
return CertificateChain.Load(File.ReadAllBytes(pathToCert)); return Load(File.ReadAllBytes(pathToCert));
} }
/// <summary>
/// Loads a cert file.
/// </summary>
/// <param name="certFile"></param>
/// <returns></returns>
public static CertificateChain Load(byte[] certFile) public static CertificateChain Load(byte[] certFile)
{ {
CertificateChain certificateChain = new CertificateChain(); CertificateChain certificateChain = new CertificateChain();
@ -82,6 +96,11 @@ namespace libWiiSharp
return certificateChain; return certificateChain;
} }
/// <summary>
/// Loads a cert file.
/// </summary>
/// <param name="cert"></param>
/// <returns></returns>
public static CertificateChain Load(Stream cert) public static CertificateChain Load(Stream cert)
{ {
CertificateChain certificateChain = new CertificateChain(); CertificateChain certificateChain = new CertificateChain();
@ -89,11 +108,25 @@ namespace libWiiSharp
return certificateChain; return certificateChain;
} }
/// <summary>
/// Grabs certificates from Ticket and Tmd.
/// Ticket and Tmd must contain certs! (They do when they're downloaded from NUS!)
/// </summary>
/// <param name="pathToTik"></param>
/// <param name="pathToTmd"></param>
/// <returns></returns>
public static CertificateChain FromTikTmd(string pathToTik, string pathToTmd) public static CertificateChain FromTikTmd(string pathToTik, string pathToTmd)
{ {
return CertificateChain.FromTikTmd(File.ReadAllBytes(pathToTik), File.ReadAllBytes(pathToTmd)); return FromTikTmd(File.ReadAllBytes(pathToTik), File.ReadAllBytes(pathToTmd));
} }
/// <summary>
/// Grabs certificates from Ticket and Tmd.
/// Ticket and Tmd must contain certs! (They do when they're downloaded from NUS!)
/// </summary>
/// <param name="tikFile"></param>
/// <param name="tmdFile"></param>
/// <returns></returns>
public static CertificateChain FromTikTmd(byte[] tikFile, byte[] tmdFile) public static CertificateChain FromTikTmd(byte[] tikFile, byte[] tmdFile)
{ {
CertificateChain certificateChain = new CertificateChain(); CertificateChain certificateChain = new CertificateChain();
@ -121,6 +154,13 @@ namespace libWiiSharp
return certificateChain.CertsComplete ? certificateChain : throw new Exception("Couldn't locate all certs!"); return certificateChain.CertsComplete ? certificateChain : throw new Exception("Couldn't locate all certs!");
} }
/// <summary>
/// Grabs certificates from Ticket and Tmd.
/// Ticket and Tmd must contain certs! (They do when they're downloaded from NUS!)
/// </summary>
/// <param name="tik"></param>
/// <param name="tmd"></param>
/// <returns></returns>
public static CertificateChain FromTikTmd(Stream tik, Stream tmd) public static CertificateChain FromTikTmd(Stream tik, Stream tmd)
{ {
CertificateChain certificateChain = new CertificateChain(); CertificateChain certificateChain = new CertificateChain();
@ -129,11 +169,19 @@ namespace libWiiSharp
return certificateChain; return certificateChain;
} }
/// <summary>
/// Loads a cert file.
/// </summary>
/// <param name="pathToCert"></param>
public void LoadFile(string pathToCert) public void LoadFile(string pathToCert)
{ {
LoadFile(File.ReadAllBytes(pathToCert)); LoadFile(File.ReadAllBytes(pathToCert));
} }
/// <summary>
/// Loads a cert file.
/// </summary>
/// <param name="certFile"></param>
public void LoadFile(byte[] certFile) public void LoadFile(byte[] certFile)
{ {
MemoryStream memoryStream = new MemoryStream(certFile); MemoryStream memoryStream = new MemoryStream(certFile);
@ -149,16 +197,33 @@ namespace libWiiSharp
memoryStream.Dispose(); memoryStream.Dispose();
} }
/// <summary>
/// Loads a cert file.
/// </summary>
/// <param name="cert"></param>
public void LoadFile(Stream cert) public void LoadFile(Stream cert)
{ {
ParseCert(cert); ParseCert(cert);
} }
/// <summary>
/// Grabs certificates from Ticket and Tmd.
/// Ticket and Tmd must contain certs! (They do when they're downloaded from NUS!)
/// </summary>
/// <param name="pathToTik"></param>
/// <param name="pathToTmd"></param>
/// <returns></returns>
public void LoadFromTikTmd(string pathToTik, string pathToTmd) public void LoadFromTikTmd(string pathToTik, string pathToTmd)
{ {
LoadFromTikTmd(File.ReadAllBytes(pathToTik), File.ReadAllBytes(pathToTmd)); LoadFromTikTmd(File.ReadAllBytes(pathToTik), File.ReadAllBytes(pathToTmd));
} }
/// <summary>
/// Grabs certificates from Ticket and Tmd.
/// Ticket and Tmd must contain certs! (They do when they're downloaded from NUS!)
/// </summary>
/// <param name="tikFile"></param>
/// <param name="tmdFile"></param>
public void LoadFromTikTmd(byte[] tikFile, byte[] tmdFile) public void LoadFromTikTmd(byte[] tikFile, byte[] tmdFile)
{ {
MemoryStream memoryStream1 = new MemoryStream(tikFile); MemoryStream memoryStream1 = new MemoryStream(tikFile);
@ -188,12 +253,22 @@ namespace libWiiSharp
} }
} }
/// <summary>
/// Grabs certificates from Ticket and Tmd.
/// Ticket and Tmd must contain certs! (They do when they're downloaded from NUS!)
/// </summary>
/// <param name="tik"></param>
/// <param name="tmd"></param>
public void LoadFromTikTmd(Stream tik, Stream tmd) public void LoadFromTikTmd(Stream tik, Stream tmd)
{ {
GrabFromTik(tik); GrabFromTik(tik);
GrabFromTmd(tmd); GrabFromTmd(tmd);
} }
/// <summary>
/// Saves the Certificate Chain.
/// </summary>
/// <param name="savePath"></param>
public void Save(string savePath) public void Save(string savePath)
{ {
if (File.Exists(savePath)) if (File.Exists(savePath))
@ -205,6 +280,10 @@ namespace libWiiSharp
WriteToStream(fileStream); WriteToStream(fileStream);
} }
/// <summary>
/// Returns the Certificate Chain as a memory stream.
/// </summary>
/// <returns></returns>
public MemoryStream ToMemoryStream() public MemoryStream ToMemoryStream()
{ {
MemoryStream memoryStream = new MemoryStream(); MemoryStream memoryStream = new MemoryStream();
@ -220,6 +299,10 @@ namespace libWiiSharp
} }
} }
/// <summary>
/// Returns the Certificate Chain as a byte array.
/// </summary>
/// <returns></returns>
public byte[] ToByteArray() public byte[] ToByteArray()
{ {
MemoryStream memoryStream = new MemoryStream(); MemoryStream memoryStream = new MemoryStream();
@ -236,7 +319,9 @@ namespace libWiiSharp
memoryStream.Dispose(); memoryStream.Dispose();
return array; return array;
} }
#endregion
#region Private Functions
private void WriteToStream(Stream writeStream) private void WriteToStream(Stream writeStream)
{ {
FireDebug("Writing Certificate Chain..."); FireDebug("Writing Certificate Chain...");
@ -476,6 +561,13 @@ namespace libWiiSharp
return part[388] == 67 && part[389] == 80 && Shared.CompareByteArrays(sha.ComputeHash(part), Shared.HexStringToByteArray("6824D6DA4C25184F0D6DAF6EDB9C0FC57522A41C")); return part[388] == 67 && part[389] == 80 && Shared.CompareByteArrays(sha.ComputeHash(part), Shared.HexStringToByteArray("6824D6DA4C25184F0D6DAF6EDB9C0FC57522A41C"));
} }
#endregion
#region Events
/// <summary>
/// Fires debugging messages. You may write them into a log file or log textbox.
/// </summary>
public event EventHandler<MessageEventArgs> Debug;
private void FireDebug(string debugMessage, params object[] args) private void FireDebug(string debugMessage, params object[] args)
{ {
@ -487,5 +579,6 @@ namespace libWiiSharp
debug(new object(), new MessageEventArgs(string.Format(debugMessage, args))); debug(new object(), new MessageEventArgs(string.Format(debugMessage, args)));
} }
#endregion
} }
} }

View file

@ -25,12 +25,12 @@ namespace libWiiSharp
public static byte[] GetStandardKey() public static byte[] GetStandardKey()
{ {
return Shared.HexStringToByteArray(CommonKey.standardKey); return Shared.HexStringToByteArray(standardKey);
} }
public static byte[] GetKoreanKey() public static byte[] GetKoreanKey()
{ {
return Shared.HexStringToByteArray(CommonKey.koreanKey); return Shared.HexStringToByteArray(koreanKey);
} }
} }
} }

View file

@ -1,15 +0,0 @@
// Decompiled with JetBrains decompiler
// Type: libWiiSharp.ContentType
// Assembly: libWiiSharp, Version=0.4.0.0, Culture=neutral, PublicKeyToken=null
// MVID: FBF36F3D-B5D6-481F-B5F5-1BD3C19E13B2
// Assembly location: C:\Users\theso\Downloads\NCPatcher\pack\libWiiSharp.dll
namespace libWiiSharp
{
public enum ContentType : ushort
{
Normal = 1,
DLC = 16385, // 0x4001
Shared = 32769, // 0x8001
}
}

View file

@ -417,8 +417,8 @@ namespace libWiiSharp
{ {
byte[] array = new byte[inFile.Length + 64]; byte[] array = new byte[inFile.Length + 64];
int destLength = -1; int destLength = -1;
ZlibWrapper.ZLibError zlibError = ZlibWrapper.Compress2(array, ref destLength, inFile, inFile.Length, 6); ZlibWrapper.ZLibError zlibError = Compress2(array, ref destLength, inFile, inFile.Length, 6);
if (zlibError != ZlibWrapper.ZLibError.Z_OK || destLength <= -1 || destLength >= inFile.Length) if (zlibError != ZLibError.Z_OK || destLength <= -1 || destLength >= inFile.Length)
{ {
throw new Exception("An error occured while compressing! Code: " + zlibError.ToString()); throw new Exception("An error occured while compressing! Code: " + zlibError.ToString());
} }

View file

@ -55,7 +55,7 @@ namespace libWiiSharp
/// <returns></returns> /// <returns></returns>
public static Headers.HeaderType DetectHeader(string pathToFile) public static Headers.HeaderType DetectHeader(string pathToFile)
{ {
return Headers.DetectHeader(File.ReadAllBytes(pathToFile)); return DetectHeader(File.ReadAllBytes(pathToFile));
} }
/// <summary> /// <summary>
@ -65,17 +65,17 @@ namespace libWiiSharp
/// <returns></returns> /// <returns></returns>
public static Headers.HeaderType DetectHeader(byte[] file) public static Headers.HeaderType DetectHeader(byte[] file)
{ {
if (file.Length > 68 && (int)Shared.Swap(BitConverter.ToUInt32(file, 64)) == (int)Headers.imetMagic) if (file.Length > 68 && (int)Shared.Swap(BitConverter.ToUInt32(file, 64)) == (int)imetMagic)
{ {
return Headers.HeaderType.ShortIMET; return HeaderType.ShortIMET;
} }
if (file.Length > 132 && (int)Shared.Swap(BitConverter.ToUInt32(file, 128)) == (int)Headers.imetMagic) if (file.Length > 132 && (int)Shared.Swap(BitConverter.ToUInt32(file, 128)) == (int)imetMagic)
{ {
return Headers.HeaderType.IMET; return HeaderType.IMET;
} }
return file.Length > 4 && (int)Shared.Swap(BitConverter.ToUInt32(file, 0)) == (int)Headers.imd5Magic ? Headers.HeaderType.IMD5 : Headers.HeaderType.None; return file.Length > 4 && (int)Shared.Swap(BitConverter.ToUInt32(file, 0)) == (int)imd5Magic ? HeaderType.IMD5 : HeaderType.None;
} }
/// <summary> /// <summary>
@ -90,30 +90,30 @@ namespace libWiiSharp
{ {
file.Seek(64L, SeekOrigin.Begin); file.Seek(64L, SeekOrigin.Begin);
file.Read(buffer, 0, buffer.Length); file.Read(buffer, 0, buffer.Length);
if ((int)Shared.Swap(BitConverter.ToUInt32(buffer, 0)) == (int)Headers.imetMagic) if ((int)Shared.Swap(BitConverter.ToUInt32(buffer, 0)) == (int)imetMagic)
{ {
return Headers.HeaderType.ShortIMET; return HeaderType.ShortIMET;
} }
} }
if (file.Length > 132L) if (file.Length > 132L)
{ {
file.Seek(128L, SeekOrigin.Begin); file.Seek(128L, SeekOrigin.Begin);
file.Read(buffer, 0, buffer.Length); file.Read(buffer, 0, buffer.Length);
if ((int)Shared.Swap(BitConverter.ToUInt32(buffer, 0)) == (int)Headers.imetMagic) if ((int)Shared.Swap(BitConverter.ToUInt32(buffer, 0)) == (int)imetMagic)
{ {
return Headers.HeaderType.IMET; return HeaderType.IMET;
} }
} }
if (file.Length > 4L) if (file.Length > 4L)
{ {
file.Seek(0L, SeekOrigin.Begin); file.Seek(0L, SeekOrigin.Begin);
file.Read(buffer, 0, buffer.Length); file.Read(buffer, 0, buffer.Length);
if ((int)Shared.Swap(BitConverter.ToUInt32(buffer, 0)) == (int)Headers.imd5Magic) if ((int)Shared.Swap(BitConverter.ToUInt32(buffer, 0)) == (int)imd5Magic)
{ {
return Headers.HeaderType.IMD5; return HeaderType.IMD5;
} }
} }
return Headers.HeaderType.None; return HeaderType.None;
} }
#endregion #endregion
@ -279,7 +279,7 @@ namespace libWiiSharp
/// <returns></returns> /// <returns></returns>
public static Headers.IMET Load(string pathToFile) public static Headers.IMET Load(string pathToFile)
{ {
return Headers.IMET.Load(File.ReadAllBytes(pathToFile)); return Load(File.ReadAllBytes(pathToFile));
} }
/// <summary> /// <summary>
@ -289,13 +289,13 @@ namespace libWiiSharp
/// <returns></returns> /// <returns></returns>
public static Headers.IMET Load(byte[] fileOrHeader) public static Headers.IMET Load(byte[] fileOrHeader)
{ {
Headers.HeaderType headerType = Headers.DetectHeader(fileOrHeader); Headers.HeaderType headerType = DetectHeader(fileOrHeader);
switch (headerType) switch (headerType)
{ {
case Headers.HeaderType.ShortIMET: case HeaderType.ShortIMET:
case Headers.HeaderType.IMET: case HeaderType.IMET:
Headers.IMET imet = new Headers.IMET(); Headers.IMET imet = new Headers.IMET();
if (headerType == Headers.HeaderType.ShortIMET) if (headerType == HeaderType.ShortIMET)
{ {
imet.isShortImet = true; imet.isShortImet = true;
} }
@ -324,13 +324,13 @@ namespace libWiiSharp
/// <returns></returns> /// <returns></returns>
public static Headers.IMET Load(Stream fileOrHeader) public static Headers.IMET Load(Stream fileOrHeader)
{ {
Headers.HeaderType headerType = Headers.DetectHeader(fileOrHeader); Headers.HeaderType headerType = DetectHeader(fileOrHeader);
switch (headerType) switch (headerType)
{ {
case Headers.HeaderType.ShortIMET: case HeaderType.ShortIMET:
case Headers.HeaderType.IMET: case HeaderType.IMET:
Headers.IMET imet = new Headers.IMET(); Headers.IMET imet = new Headers.IMET();
if (headerType == Headers.HeaderType.ShortIMET) if (headerType == HeaderType.ShortIMET)
{ {
imet.isShortImet = true; imet.isShortImet = true;
} }
@ -384,7 +384,7 @@ namespace libWiiSharp
/// <param name="pathToFile"></param> /// <param name="pathToFile"></param>
public static void RemoveHeader(string pathToFile) public static void RemoveHeader(string pathToFile)
{ {
byte[] bytes = Headers.IMET.RemoveHeader(File.ReadAllBytes(pathToFile)); byte[] bytes = RemoveHeader(File.ReadAllBytes(pathToFile));
File.Delete(pathToFile); File.Delete(pathToFile);
File.WriteAllBytes(pathToFile, bytes); File.WriteAllBytes(pathToFile, bytes);
} }
@ -396,11 +396,11 @@ namespace libWiiSharp
/// <returns></returns> /// <returns></returns>
public static byte[] RemoveHeader(byte[] file) public static byte[] RemoveHeader(byte[] file)
{ {
Headers.HeaderType headerType = Headers.DetectHeader(file); Headers.HeaderType headerType = DetectHeader(file);
switch (headerType) switch (headerType)
{ {
case Headers.HeaderType.ShortIMET: case HeaderType.ShortIMET:
case Headers.HeaderType.IMET: case HeaderType.IMET:
byte[] numArray = new byte[(int)(file.Length - headerType)]; byte[] numArray = new byte[(int)(file.Length - headerType)];
Array.Copy(file, (int)headerType, numArray, 0, numArray.Length); Array.Copy(file, (int)headerType, numArray, 0, numArray.Length);
return numArray; return numArray;
@ -683,7 +683,7 @@ namespace libWiiSharp
/// <returns></returns> /// <returns></returns>
public static Headers.IMD5 Load(string pathToFile) public static Headers.IMD5 Load(string pathToFile)
{ {
return Headers.IMD5.Load(File.ReadAllBytes(pathToFile)); return Load(File.ReadAllBytes(pathToFile));
} }
/// <summary> /// <summary>
@ -693,7 +693,7 @@ namespace libWiiSharp
/// <returns></returns> /// <returns></returns>
public static Headers.IMD5 Load(byte[] fileOrHeader) public static Headers.IMD5 Load(byte[] fileOrHeader)
{ {
if (Headers.DetectHeader(fileOrHeader) != Headers.HeaderType.IMD5) if (DetectHeader(fileOrHeader) != HeaderType.IMD5)
{ {
throw new Exception("No IMD5 Header found!"); throw new Exception("No IMD5 Header found!");
} }
@ -720,7 +720,7 @@ namespace libWiiSharp
/// <returns></returns> /// <returns></returns>
public static Headers.IMD5 Load(Stream fileOrHeader) public static Headers.IMD5 Load(Stream fileOrHeader)
{ {
if (Headers.DetectHeader(fileOrHeader) != Headers.HeaderType.IMD5) if (DetectHeader(fileOrHeader) != HeaderType.IMD5)
{ {
throw new Exception("No IMD5 Header found!"); throw new Exception("No IMD5 Header found!");
} }
@ -751,7 +751,7 @@ namespace libWiiSharp
/// <param name="pathToFile"></param> /// <param name="pathToFile"></param>
public static void AddHeader(string pathToFile) public static void AddHeader(string pathToFile)
{ {
byte[] buffer = Headers.IMD5.AddHeader(File.ReadAllBytes(pathToFile)); byte[] buffer = AddHeader(File.ReadAllBytes(pathToFile));
File.Delete(pathToFile); File.Delete(pathToFile);
using FileStream fileStream = new FileStream(pathToFile, FileMode.Create); using FileStream fileStream = new FileStream(pathToFile, FileMode.Create);
fileStream.Write(buffer, 0, buffer.Length); fileStream.Write(buffer, 0, buffer.Length);
@ -764,7 +764,7 @@ namespace libWiiSharp
/// <returns></returns> /// <returns></returns>
public static byte[] AddHeader(byte[] file) public static byte[] AddHeader(byte[] file)
{ {
Headers.IMD5 imD5 = Headers.IMD5.Create(file); Headers.IMD5 imD5 = Create(file);
MemoryStream memoryStream1 = new MemoryStream(); MemoryStream memoryStream1 = new MemoryStream();
MemoryStream memoryStream2 = memoryStream1; MemoryStream memoryStream2 = memoryStream1;
imD5.WriteToStream(memoryStream2); imD5.WriteToStream(memoryStream2);
@ -780,7 +780,7 @@ namespace libWiiSharp
/// <param name="pathToFile"></param> /// <param name="pathToFile"></param>
public static void RemoveHeader(string pathToFile) public static void RemoveHeader(string pathToFile)
{ {
byte[] buffer = Headers.IMD5.RemoveHeader(File.ReadAllBytes(pathToFile)); byte[] buffer = RemoveHeader(File.ReadAllBytes(pathToFile));
File.Delete(pathToFile); File.Delete(pathToFile);
using FileStream fileStream = new FileStream(pathToFile, FileMode.Create); using FileStream fileStream = new FileStream(pathToFile, FileMode.Create);
fileStream.Write(buffer, 0, buffer.Length); fileStream.Write(buffer, 0, buffer.Length);

View file

@ -45,7 +45,7 @@ namespace libWiiSharp
richTextBox.Clear(); richTextBox.Clear();
richTextBox.Font = new Font("Courier New", 9f); richTextBox.Font = new Font("Courier New", 9f);
richTextBox.ReadOnly = true; richTextBox.ReadOnly = true;
richTextBox.Text = HexView.DumpAsString(data); richTextBox.Text = DumpAsString(data);
} }
/// <summary> /// <summary>
@ -59,7 +59,7 @@ namespace libWiiSharp
textBox.Multiline = true; textBox.Multiline = true;
textBox.Font = new Font("Courier New", 9f); textBox.Font = new Font("Courier New", 9f);
textBox.ReadOnly = true; textBox.ReadOnly = true;
textBox.Text = HexView.DumpAsString(data).Replace("\n", "\r\n"); textBox.Text = DumpAsString(data).Replace("\n", "\r\n");
} }
/// <summary> /// <summary>
@ -71,7 +71,7 @@ namespace libWiiSharp
/// <returns></returns> /// <returns></returns>
public static string DumpAsString(byte[] data) public static string DumpAsString(byte[] data)
{ {
return string.Join("\n", HexView.DumpAsStringArray(data)); return string.Join("\n", DumpAsStringArray(data));
} }
/// <summary> /// <summary>
@ -89,7 +89,7 @@ namespace libWiiSharp
if (dataGridView.Columns[e.ColumnIndex].HeaderText.ToLower() == "dump") if (dataGridView.Columns[e.ColumnIndex].HeaderText.ToLower() == "dump")
{ {
string str = (string)dataGridView.Rows[e.RowIndex].Cells[17].Value; string str = (string)dataGridView.Rows[e.RowIndex].Cells[17].Value;
if (!(str != HexView.savedValue)) if (!(str != savedValue))
{ {
return; return;
} }
@ -101,9 +101,9 @@ namespace libWiiSharp
for (int index = 0; index < 16; ++index) for (int index = 0; index < 16; ++index)
{ {
if (HexView.ToAscii(byte.Parse((string)dataGridView.Rows[e.RowIndex].Cells[index + 1].Value, NumberStyles.HexNumber)) != str[index]) if (ToAscii(byte.Parse((string)dataGridView.Rows[e.RowIndex].Cells[index + 1].Value, NumberStyles.HexNumber)) != str[index])
{ {
dataGridView.Rows[e.RowIndex].Cells[index + 1].Value = HexView.FromAscii(str[index]).ToString("x2"); dataGridView.Rows[e.RowIndex].Cells[index + 1].Value = FromAscii(str[index]).ToString("x2");
} }
} }
} }
@ -115,7 +115,7 @@ namespace libWiiSharp
} }
int startIndex = int.Parse(dataGridView.Columns[e.ColumnIndex].HeaderText, NumberStyles.HexNumber); int startIndex = int.Parse(dataGridView.Columns[e.ColumnIndex].HeaderText, NumberStyles.HexNumber);
string str = ((string)dataGridView.Rows[e.RowIndex].Cells[17].Value).Remove(startIndex, 1).Insert(startIndex, HexView.ToAscii(byte.Parse((string)dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value, NumberStyles.HexNumber)).ToString()); string str = ((string)dataGridView.Rows[e.RowIndex].Cells[17].Value).Remove(startIndex, 1).Insert(startIndex, ToAscii(byte.Parse((string)dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value, NumberStyles.HexNumber)).ToString());
dataGridView.Rows[e.RowIndex].Cells[17].Value = str; dataGridView.Rows[e.RowIndex].Cells[17].Value = str;
if (((string)dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value).Length <= 2) if (((string)dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value).Length <= 2)
{ {
@ -140,7 +140,7 @@ namespace libWiiSharp
/// <param name="e"></param> /// <param name="e"></param>
public static void DataGridView_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e) public static void DataGridView_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{ {
HexView.savedValue = (string)((DataGridView)sender).Rows[e.RowIndex].Cells[e.ColumnIndex].Value; savedValue = (string)((DataGridView)sender).Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
} }
#endregion #endregion
@ -165,7 +165,7 @@ namespace libWiiSharp
{ {
str1 = str1 + data[num + index].ToString("x2") + " "; str1 = str1 + data[num + index].ToString("x2") + " ";
string str3 = str2; string str3 = str2;
ascii = HexView.ToAscii(data[num + index]); ascii = ToAscii(data[num + index]);
string str4 = ascii.ToString(); string str4 = ascii.ToString();
str2 = str3 + str4; str2 = str3 + str4;
} }
@ -182,7 +182,7 @@ namespace libWiiSharp
{ {
str1 = str1 + data[num + index].ToString("x2") + " "; str1 = str1 + data[num + index].ToString("x2") + " ";
string str3 = str2; string str3 = str2;
ascii = HexView.ToAscii(data[num + index]); ascii = ToAscii(data[num + index]);
string str4 = ascii.ToString(); string str4 = ascii.ToString();
str2 = str3 + str4; str2 = str3 + str4;
} }

12
Lz77.cs
View file

@ -34,17 +34,17 @@ namespace libWiiSharp
//private int matchPosition; //private int matchPosition;
//private int matchLength; //private int matchLength;
public static uint Lz77Magic => Lz77.lz77Magic; public static uint Lz77Magic => lz77Magic;
public static bool IsLz77Compressed(string file) public static bool IsLz77Compressed(string file)
{ {
return Lz77.IsLz77Compressed(File.ReadAllBytes(file)); return IsLz77Compressed(File.ReadAllBytes(file));
} }
public static bool IsLz77Compressed(byte[] file) public static bool IsLz77Compressed(byte[] file)
{ {
Headers.HeaderType headerType = Headers.DetectHeader(file); Headers.HeaderType headerType = Headers.DetectHeader(file);
return (int)Shared.Swap(BitConverter.ToUInt32(file, (int)headerType)) == (int)Lz77.lz77Magic; return (int)Shared.Swap(BitConverter.ToUInt32(file, (int)headerType)) == (int)lz77Magic;
} }
public static bool IsLz77Compressed(Stream file) public static bool IsLz77Compressed(Stream file)
@ -53,7 +53,7 @@ namespace libWiiSharp
byte[] buffer = new byte[4]; byte[] buffer = new byte[4];
file.Seek((long)headerType, SeekOrigin.Begin); file.Seek((long)headerType, SeekOrigin.Begin);
file.Read(buffer, 0, buffer.Length); file.Read(buffer, 0, buffer.Length);
return (int)Shared.Swap(BitConverter.ToUInt32(buffer, 0)) == (int)Lz77.lz77Magic; return (int)Shared.Swap(BitConverter.ToUInt32(buffer, 0)) == (int)lz77Magic;
} }
public void Compress(string inFile, string outFile) public void Compress(string inFile, string outFile)
@ -120,7 +120,7 @@ namespace libWiiSharp
private Stream PrivDecompress(Stream inFile) private Stream PrivDecompress(Stream inFile)
{ {
if (!Lz77.IsLz77Compressed(inFile)) if (!IsLz77Compressed(inFile))
{ {
return inFile; return inFile;
} }
@ -131,7 +131,7 @@ namespace libWiiSharp
byte[] buffer = new byte[8]; byte[] buffer = new byte[8];
inFile.Seek((long)headerType, SeekOrigin.Begin); inFile.Seek((long)headerType, SeekOrigin.Begin);
inFile.Read(buffer, 0, 8); inFile.Read(buffer, 0, 8);
if ((int)Shared.Swap(BitConverter.ToUInt32(buffer, 0)) != (int)Lz77.lz77Magic) if ((int)Shared.Swap(BitConverter.ToUInt32(buffer, 0)) != (int)lz77Magic)
{ {
inFile.Dispose(); inFile.Dispose();
throw new Exception("Invaild Magic!"); throw new Exception("Invaild Magic!");

View file

@ -117,13 +117,13 @@ namespace libWiiSharp
Directory.CreateDirectory(Path.GetDirectoryName(savePath)); Directory.CreateDirectory(Path.GetDirectoryName(savePath));
} }
if (System.IO.File.Exists(savePath)) if (File.Exists(savePath))
{ {
System.IO.File.Delete(savePath); File.Delete(savePath);
} }
byte[] bytes = PrivDownloadSingleContent(titleId, titleVersion, contentId); byte[] bytes = PrivDownloadSingleContent(titleId, titleVersion, contentId);
System.IO.File.WriteAllBytes(savePath, bytes); File.WriteAllBytes(savePath, bytes);
} }
private byte[] PrivDownloadSingleContent(string titleId, string titleVersion, string contentId) private byte[] PrivDownloadSingleContent(string titleId, string titleVersion, string contentId)
@ -329,7 +329,7 @@ namespace libWiiSharp
string str3 = outputDir; string str3 = outputDir;
contentId = tmd.Contents[index1].ContentID; contentId = tmd.Contents[index1].ContentID;
string str4 = contentId.ToString("x8"); string str4 = contentId.ToString("x8");
if (System.IO.File.Exists(str3 + str4)) if (File.Exists(str3 + str4))
{ {
FireDebug(" Using Local File, Skipping..."); FireDebug(" Using Local File, Skipping...");
continue; continue;
@ -369,7 +369,7 @@ namespace libWiiSharp
string str3 = outputDir; string str3 = outputDir;
contentId = tmd.Contents[contentIndex].ContentID; contentId = tmd.Contents[contentIndex].ContentID;
string str4 = contentId.ToString("x8"); string str4 = contentId.ToString("x8");
byte[] array = DecryptContent(System.IO.File.ReadAllBytes(str3 + str4), contentIndex, tik, tmd); byte[] array = DecryptContent(File.ReadAllBytes(str3 + str4), contentIndex, tik, tmd);
Array.Resize<byte>(ref array, (int)tmd.Contents[contentIndex].Size); Array.Resize<byte>(ref array, (int)tmd.Contents[contentIndex].Size);
if (!Shared.CompareByteArrays(shA1.ComputeHash(array), tmd.Contents[contentIndex].Hash)) if (!Shared.CompareByteArrays(shA1.ComputeHash(array), tmd.Contents[contentIndex].Hash))
{ {
@ -379,7 +379,7 @@ namespace libWiiSharp
string str5 = outputDir; string str5 = outputDir;
contentId = tmd.Contents[contentIndex].ContentID; contentId = tmd.Contents[contentIndex].ContentID;
string str6 = contentId.ToString("x8"); string str6 = contentId.ToString("x8");
System.IO.File.WriteAllBytes(str5 + str6 + ".app", array); File.WriteAllBytes(str5 + str6 + ".app", array);
} }
shA1.Clear(); shA1.Clear();
} }
@ -395,7 +395,7 @@ namespace libWiiSharp
string str3 = outputDir; string str3 = outputDir;
contentId = tmd.Contents[index1].ContentID; contentId = tmd.Contents[index1].ContentID;
string str4 = contentId.ToString("x8"); string str4 = contentId.ToString("x8");
byte[] numArray2 = System.IO.File.ReadAllBytes(str3 + str4 + ".app"); byte[] numArray2 = File.ReadAllBytes(str3 + str4 + ".app");
numArray1[index2] = numArray2; numArray1[index2] = numArray2;
} }
FireDebug(" Creating WAD..."); FireDebug(" Creating WAD...");
@ -406,9 +406,9 @@ namespace libWiiSharp
FireDebug(" Deleting Encrypted Contents..."); FireDebug(" Deleting Encrypted Contents...");
for (int index = 0; index < strArray1.Length; ++index) for (int index = 0; index < strArray1.Length; ++index)
{ {
if (System.IO.File.Exists(outputDir + strArray1[index])) if (File.Exists(outputDir + strArray1[index]))
{ {
System.IO.File.Delete(outputDir + strArray1[index]); File.Delete(outputDir + strArray1[index]);
} }
} }
} }
@ -417,17 +417,17 @@ namespace libWiiSharp
FireDebug(" Deleting Decrypted Contents..."); FireDebug(" Deleting Decrypted Contents...");
for (int index = 0; index < strArray1.Length; ++index) for (int index = 0; index < strArray1.Length; ++index)
{ {
if (System.IO.File.Exists(outputDir + strArray1[index] + ".app")) if (File.Exists(outputDir + strArray1[index] + ".app"))
{ {
System.IO.File.Delete(outputDir + strArray1[index] + ".app"); File.Delete(outputDir + strArray1[index] + ".app");
} }
} }
} }
if (!flag2 && !flag1) if (!flag2 && !flag1)
{ {
FireDebug(" Deleting TMD and Ticket..."); FireDebug(" Deleting TMD and Ticket...");
System.IO.File.Delete(outputDir + str2); File.Delete(outputDir + str2);
System.IO.File.Delete(outputDir + "cetk"); File.Delete(outputDir + "cetk");
} }
FireDebug("Downloading Title {0} v{1} Finished...", titleId, string.IsNullOrEmpty(titleVersion) ? "[Latest]" : titleVersion); FireDebug("Downloading Title {0} v{1} Finished...", titleId, string.IsNullOrEmpty(titleVersion) ? "[Latest]" : titleVersion);
FireProgress(100); FireProgress(100);

View file

@ -115,7 +115,7 @@ namespace libWiiSharp
public static long AddPadding(long value) public static long AddPadding(long value)
{ {
return Shared.AddPadding(value, 64); return AddPadding(value, 64);
} }
public static long AddPadding(long value, int padding) public static long AddPadding(long value, int padding)
@ -130,7 +130,7 @@ namespace libWiiSharp
public static int AddPadding(int value) public static int AddPadding(int value)
{ {
return Shared.AddPadding(value, 64); return AddPadding(value, 64);
} }
public static int AddPadding(int value, int padding) public static int AddPadding(int value, int padding)

2
TMD.cs
View file

@ -153,7 +153,7 @@ namespace libWiiSharp
public static TMD Load(string pathToTmd) public static TMD Load(string pathToTmd)
{ {
return TMD.Load(File.ReadAllBytes(pathToTmd)); return Load(File.ReadAllBytes(pathToTmd));
} }
public static TMD Load(byte[] tmdFile) public static TMD Load(byte[] tmdFile)

4
TPL.cs
View file

@ -140,7 +140,7 @@ namespace libWiiSharp
TPL_TextureFormat tplFormat, TPL_TextureFormat tplFormat,
TPL_PaletteFormat paletteFormat = TPL_PaletteFormat.RGB5A3) TPL_PaletteFormat paletteFormat = TPL_PaletteFormat.RGB5A3)
{ {
return TPL.FromImages(new string[1] { pathToImage }, new TPL_TextureFormat[1] return FromImages(new string[1] { pathToImage }, new TPL_TextureFormat[1]
{ {
tplFormat tplFormat
}, new TPL_PaletteFormat[1] { paletteFormat }); }, new TPL_PaletteFormat[1] { paletteFormat });
@ -151,7 +151,7 @@ namespace libWiiSharp
TPL_TextureFormat tplFormat, TPL_TextureFormat tplFormat,
TPL_PaletteFormat paletteFormat = TPL_PaletteFormat.RGB5A3) TPL_PaletteFormat paletteFormat = TPL_PaletteFormat.RGB5A3)
{ {
return TPL.FromImages(new Image[1] { img }, new TPL_TextureFormat[1] return FromImages(new Image[1] { img }, new TPL_TextureFormat[1]
{ {
tplFormat tplFormat
}, new TPL_PaletteFormat[1] { paletteFormat }); }, new TPL_PaletteFormat[1] { paletteFormat });

View file

@ -148,7 +148,7 @@ namespace libWiiSharp
public static Ticket Load(string pathToTicket) public static Ticket Load(string pathToTicket)
{ {
return Ticket.Load(File.ReadAllBytes(pathToTicket)); return Load(File.ReadAllBytes(pathToTicket));
} }
public static Ticket Load(byte[] ticket) public static Ticket Load(byte[] ticket)

6
U8.cs
View file

@ -111,7 +111,7 @@ namespace libWiiSharp
public static bool IsU8(string pathToFile) public static bool IsU8(string pathToFile)
{ {
return U8.IsU8(File.ReadAllBytes(pathToFile)); return IsU8(File.ReadAllBytes(pathToFile));
} }
public static bool IsU8(byte[] file) public static bool IsU8(byte[] file)
@ -124,7 +124,7 @@ namespace libWiiSharp
file1[index] = file[index]; file1[index] = file[index];
} }
return U8.IsU8(new Lz77().Decompress(file1)); return IsU8(new Lz77().Decompress(file1));
} }
Headers.HeaderType headerType = Headers.DetectHeader(file); Headers.HeaderType headerType = Headers.DetectHeader(file);
return Shared.Swap(BitConverter.ToUInt32(file, (int)headerType)) == 1437218861U; return Shared.Swap(BitConverter.ToUInt32(file, (int)headerType)) == 1437218861U;
@ -132,7 +132,7 @@ namespace libWiiSharp
public static U8 Load(string pathToU8) public static U8 Load(string pathToU8)
{ {
return U8.Load(File.ReadAllBytes(pathToU8)); return Load(File.ReadAllBytes(pathToU8));
} }
public static U8 Load(byte[] u8File) public static U8 Load(byte[] u8File)

8
WAD.cs
View file

@ -212,7 +212,7 @@ namespace libWiiSharp
public static WAD Load(string pathToWad) public static WAD Load(string pathToWad)
{ {
return WAD.Load(File.ReadAllBytes(pathToWad)); return Load(File.ReadAllBytes(pathToWad));
} }
public static WAD Load(byte[] wadFile) public static WAD Load(byte[] wadFile)
@ -272,7 +272,7 @@ namespace libWiiSharp
string path = contentDir + Path.DirectorySeparatorChar.ToString() + (flag ? tmd.Contents[index].ContentID.ToString("x8") : tmd.Contents[index].Index.ToString("x8")) + ".app"; string path = contentDir + Path.DirectorySeparatorChar.ToString() + (flag ? tmd.Contents[index].ContentID.ToString("x8") : tmd.Contents[index].Index.ToString("x8")) + ".app";
contents[index] = File.ReadAllBytes(path); contents[index] = File.ReadAllBytes(path);
} }
return WAD.Create(cert, tik, tmd, contents); return Create(cert, tik, tmd, contents);
} }
public static WAD Create( public static WAD Create(
@ -309,7 +309,7 @@ namespace libWiiSharp
string path = contentDir + Path.DirectorySeparatorChar.ToString() + (flag ? tmd.Contents[index].ContentID.ToString("x8") : tmd.Contents[index].Index.ToString("x8")) + ".app"; string path = contentDir + Path.DirectorySeparatorChar.ToString() + (flag ? tmd.Contents[index].ContentID.ToString("x8") : tmd.Contents[index].Index.ToString("x8")) + ".app";
contents[index] = File.ReadAllBytes(path); contents[index] = File.ReadAllBytes(path);
} }
return WAD.Create(cert, tik, tmd, contents); return Create(cert, tik, tmd, contents);
} }
public static WAD Create(byte[] cert, byte[] tik, byte[] tmd, byte[][] contents) public static WAD Create(byte[] cert, byte[] tik, byte[] tmd, byte[][] contents)
@ -320,7 +320,7 @@ namespace libWiiSharp
Ticket tik1 = ticket; Ticket tik1 = ticket;
TMD tmd2 = tmd1; TMD tmd2 = tmd1;
byte[][] contents1 = contents; byte[][] contents1 = contents;
return WAD.Create(cert1, tik1, tmd2, contents1); return Create(cert1, tik1, tmd2, contents1);
} }
public static WAD Create(CertificateChain cert, Ticket tik, TMD tmd, byte[][] contents) public static WAD Create(CertificateChain cert, Ticket tik, TMD tmd, byte[][] contents)