Minor cleanup, update keys, add portable publish profile

This commit is contained in:
StudentBlake 2022-11-13 11:50:57 -05:00
parent a328030ff6
commit 2370bc6cf4
23 changed files with 2721 additions and 2901 deletions

View file

@ -15,4 +15,10 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Be.Windows.Forms.HexBox.Net5" Version="1.8.0" /> <PackageReference Include="Be.Windows.Forms.HexBox.Net5" Version="1.8.0" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<None Update="tools\hactool.exe">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
</None>
</ItemGroup>
</Project> </Project>

View file

@ -1,154 +0,0 @@
using System;
using System.IO;
namespace XCI_Explorer.Helpers
{
public class BetterBinaryReader : IDisposable
{
public string FileName;
public bool Initiated;
public Stream Stream;
private BinaryReader br;
public BetterBinaryReader()
{
Initiated = false;
}
public BetterBinaryReader(string file)
{
Initiated = false;
Load(file);
}
public BetterBinaryReader(Stream s)
{
Initiated = false;
FileName = "";
Stream = s;
br = new BinaryReader(Stream);
}
public void Dispose()
{
Initiated = false;
br.Close();
br = null;
Stream.Close();
Stream = null;
}
public void Load(string file)
{
FileName = file;
Stream = new FileStream(file, FileMode.Open);
br = new BinaryReader(Stream);
Initiated = true;
}
public void Seek(long o)
{
if (o > -1)
{
Stream.Seek(o, SeekOrigin.Begin);
}
}
public void Skip(long o)
{
Stream.Seek(o, SeekOrigin.Current);
}
public long Position()
{
return Stream.Position;
}
public int Read()
{
return br.ReadBytes(1)[0];
}
public int Read(byte[] buffer, int index, int count)
{
return br.Read(buffer, index, count);
}
public int Read(char[] buffer, int index, int count)
{
return br.Read(buffer, index, count);
}
public byte[] ReadBytes(int l)
{
if (l >= 0 && l <= 2147483647)
{
return br.ReadBytes(l);
}
return new byte[0];
}
public Stream ReadBytesButLonger(long l)
{
MemoryStream memoryStream = new MemoryStream();
for (long num = 0L; num < l; num++)
{
}
Console.WriteLine(memoryStream.Length);
return memoryStream;
}
public string ReadCharsAsString(int l)
{
return new string(br.ReadChars(l));
}
public short ReadShort()
{
return br.ReadInt16();
}
public short ReadInt16()
{
return br.ReadInt16();
}
public int ReadInt()
{
return br.ReadInt32();
}
public int ReadInt32()
{
return br.ReadInt32();
}
public long ReadLong()
{
return br.ReadInt64();
}
public long ReadInt64()
{
return br.ReadInt64();
}
public string ReadString()
{
return br.ReadString();
}
private long GreatestDivisor(long n)
{
long result = 0L;
for (long num = 1L; num < n / 64; num++)
{
if (n % num == 0L && num != n)
{
result = num;
}
}
return result;
}
}
}

View file

@ -1,9 +1,9 @@
using System.Windows.Forms; using System.Windows.Forms;
namespace XCI_Explorer.Helpers namespace XCI_Explorer.Helpers;
public class BetterTreeNode : TreeNode
{ {
public class BetterTreeNode : TreeNode
{
public long Offset; public long Offset;
public long Size; public long Size;
public string ExpectedHash; public string ExpectedHash;
@ -12,7 +12,6 @@ namespace XCI_Explorer.Helpers
public BetterTreeNode(string t) public BetterTreeNode(string t)
{ {
base.Text = t; Text = t;
}
} }
} }

View file

@ -1,10 +1,10 @@
using System; using System;
using System.Linq; using System.Linq;
namespace XCI_Explorer namespace XCI_Explorer;
internal static class CNMT
{ {
internal static class CNMT
{
public class CNMT_Header public class CNMT_Header
{ {
public byte[] Data; public byte[] Data;
@ -76,5 +76,4 @@ namespace XCI_Explorer
} }
public static CNMT_Header[] CNMT_Headers = new CNMT_Header[1]; public static CNMT_Header[] CNMT_Headers = new CNMT_Header[1];
}
} }

View file

@ -1,13 +1,13 @@
using System; using System;
using System.Windows.Forms;
using System.Text;
using System.Drawing; using System.Drawing;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
namespace XCI_Explorer namespace XCI_Explorer;
public class CenterWinDialog : IDisposable
{ {
public class CenterWinDialog : IDisposable
{
private int mTries = 0; private int mTries = 0;
private Form mOwner; private Form mOwner;
@ -23,19 +23,28 @@ namespace XCI_Explorer
private void findDialog() private void findDialog()
{ {
// Enumerate windows to find the message box // Enumerate windows to find the message box
if (mTries < 0) return; if (mTries < 0)
EnumThreadWndProc callback = new EnumThreadWndProc(checkWindow); {
return;
}
EnumThreadWndProc callback = new(checkWindow);
if (EnumThreadWindows(GetCurrentThreadId(), callback, IntPtr.Zero)) if (EnumThreadWindows(GetCurrentThreadId(), callback, IntPtr.Zero))
{ {
if (++mTries < 10) mOwner.BeginInvoke(new MethodInvoker(findDialog)); if (++mTries < 10)
{
mOwner.BeginInvoke(new MethodInvoker(findDialog));
}
} }
} }
private bool checkWindow(IntPtr hWnd, IntPtr lp) private bool checkWindow(IntPtr hWnd, IntPtr lp)
{ {
// Checks if <hWnd> is a dialog // Checks if <hWnd> is a dialog
StringBuilder sb = new StringBuilder(260); StringBuilder sb = new(260);
GetClassName(hWnd, sb, sb.Capacity); GetClassName(hWnd, sb, sb.Capacity);
if (sb.ToString() != "#32770") return true; if (sb.ToString() != "#32770")
{
return true;
}
// Got it // Got it
Rectangle frmRect = new Rectangle(mOwner.Location, mOwner.Size); Rectangle frmRect = new Rectangle(mOwner.Location, mOwner.Size);
RECT dlgRect; RECT dlgRect;
@ -65,5 +74,4 @@ namespace XCI_Explorer
[DllImport("user32.dll")] [DllImport("user32.dll")]
private static extern bool MoveWindow(IntPtr hWnd, int x, int y, int w, int h, bool repaint); private static extern bool MoveWindow(IntPtr hWnd, int x, int y, int w, int h, bool repaint);
private struct RECT { public int Left; public int Top; public int Right; public int Bottom; } private struct RECT { public int Left; public int Top; public int Right; public int Bottom; }
}
} }

View file

@ -2,19 +2,18 @@
using System.IO; using System.IO;
using System.Windows.Forms; using System.Windows.Forms;
namespace XCI_Explorer namespace XCI_Explorer;
public partial class CertForm : Form
{ {
public partial class CertForm : Form
{
public CertForm(MainForm mainForm) public CertForm(MainForm mainForm)
{ {
InitializeComponent(); InitializeComponent();
FileStream fileStream = new FileStream(mainForm.TB_File.Text, FileMode.Open, FileAccess.Read); FileStream fileStream = new(mainForm.TB_File.Text, FileMode.Open, FileAccess.Read);
byte[] array = new byte[512]; byte[] array = new byte[512];
fileStream.Position = 28672L; fileStream.Position = 28672L;
fileStream.Read(array, 0, 512); fileStream.Read(array, 0, 512);
hbxHexView.ByteProvider = new DynamicByteProvider(array); hbxHexView.ByteProvider = new DynamicByteProvider(array);
fileStream.Close(); fileStream.Close();
} }
}
} }

View file

@ -2,10 +2,10 @@ using System;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
namespace XCI_Explorer namespace XCI_Explorer;
internal static class HFS0
{ {
internal static class HFS0
{
public class HFS0_Header public class HFS0_Header
{ {
public byte[] Data; public byte[] Data;
@ -48,5 +48,4 @@ namespace XCI_Explorer
} }
public static HFS0_Header[] HFS0_Headers = new HFS0_Header[1]; public static HFS0_Header[] HFS0_Headers = new HFS0_Header[1];
}
} }

File diff suppressed because it is too large Load diff

View file

@ -1,10 +1,10 @@
using System.Linq; using System.Linq;
using System.Text; using System.Text;
namespace XCI_Explorer namespace XCI_Explorer;
public static class NACP
{ {
public static class NACP
{
public class NACP_String public class NACP_String
{ {
public byte[] Data; public byte[] Data;
@ -38,5 +38,4 @@ namespace XCI_Explorer
public static NACP_String[] NACP_Strings = new NACP_String[16]; public static NACP_String[] NACP_Strings = new NACP_String[16];
public static NACP_Data[] NACP_Datas = new NACP_Data[1]; public static NACP_Data[] NACP_Datas = new NACP_Data[1];
}
} }

View file

@ -2,10 +2,10 @@ using System;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
namespace XCI_Explorer namespace XCI_Explorer;
internal static class NCA
{ {
internal static class NCA
{
public class NCA_Header public class NCA_Header
{ {
public byte[] Data; public byte[] Data;
@ -31,5 +31,4 @@ namespace XCI_Explorer
} }
public static NCA_Header[] NCA_Headers = new NCA_Header[1]; public static NCA_Header[] NCA_Headers = new NCA_Header[1];
}
} }

View file

@ -2,10 +2,10 @@ using System;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
namespace XCI_Explorer namespace XCI_Explorer;
internal static class PFS0
{ {
internal static class PFS0
{
public class PFS0_Header public class PFS0_Header
{ {
public byte[] Data; public byte[] Data;
@ -44,5 +44,4 @@ namespace XCI_Explorer
} }
public static PFS0_Header[] PFS0_Headers = new PFS0_Header[1]; public static PFS0_Header[] PFS0_Headers = new PFS0_Header[1];
}
} }

View file

@ -1,28 +1,26 @@
using System; using System;
using System.IO;
using System.Windows.Forms; using System.Windows.Forms;
namespace XCI_Explorer namespace XCI_Explorer;
internal static class Program
{ {
internal static class Program
{
[STAThread] [STAThread]
private static void Main() private static void Main()
{ {
AppDomain.CurrentDomain.AssemblyResolve += (Object sender, ResolveEventArgs args) => AppDomain.CurrentDomain.AssemblyResolve += (object sender, ResolveEventArgs args) =>
{ {
System.Reflection.AssemblyName embeddedAssembly = new System.Reflection.AssemblyName(args.Name); System.Reflection.AssemblyName embeddedAssembly = new System.Reflection.AssemblyName(args.Name);
String resourceName = "XCI_Explorer" + "." + embeddedAssembly.Name + ".dll"; string resourceName = "XCI_Explorer" + "." + embeddedAssembly.Name + ".dll";
using (var stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) using Stream stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName);
{ byte[] assemblyData = new byte[stream.Length];
Byte[] assemblyData = new Byte[stream.Length];
stream.Read(assemblyData, 0, assemblyData.Length); stream.Read(assemblyData, 0, assemblyData.Length);
return System.Reflection.Assembly.Load(assemblyData); return System.Reflection.Assembly.Load(assemblyData);
}
}; };
Application.EnableVisualStyles(); Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false); Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm()); Application.Run(new MainForm());
} }
}
} }

View file

@ -1,10 +1,10 @@
using System.Windows.Forms; using System.Windows.Forms;
using XCI_Explorer.Helpers; using XCI_Explorer.Helpers;
namespace XCI_Explorer namespace XCI_Explorer;
public class TreeViewFileSystem
{ {
public class TreeViewFileSystem
{
public TreeView treeView; public TreeView treeView;
public TreeViewFileSystem(TreeView tv) public TreeViewFileSystem(TreeView tv)
@ -13,28 +13,28 @@ namespace XCI_Explorer
public BetterTreeNode AddDir(string name, BetterTreeNode parent = null) public BetterTreeNode AddDir(string name, BetterTreeNode parent = null)
{ {
BetterTreeNode betterTreeNode = new BetterTreeNode(name); BetterTreeNode betterTreeNode = new(name)
betterTreeNode.Offset = -1L; {
betterTreeNode.Size = -1L; Offset = -1L,
Size = -1L
};
parent.Nodes.Add(betterTreeNode); parent.Nodes.Add(betterTreeNode);
return betterTreeNode; return betterTreeNode;
} }
public BetterTreeNode AddFile(string name, BetterTreeNode parent, long offset, long size) public BetterTreeNode AddFile(string name, BetterTreeNode parent, long offset, long size) => AddFile(name, parent, offset, size, 0, "", "");
{
return AddFile(name, parent, offset, size, 0, "", "");
}
public BetterTreeNode AddFile(string name, BetterTreeNode parent, long offset, long size, long HashedRegionSize, string ExpectedHash, string ActualHash) public BetterTreeNode AddFile(string name, BetterTreeNode parent, long offset, long size, long HashedRegionSize, string ExpectedHash, string ActualHash)
{ {
BetterTreeNode betterTreeNode = new BetterTreeNode(name); BetterTreeNode betterTreeNode = new(name)
betterTreeNode.Offset = offset; {
betterTreeNode.Size = size; Offset = offset,
betterTreeNode.ExpectedHash = ExpectedHash; Size = size,
betterTreeNode.ActualHash = ActualHash; ExpectedHash = ExpectedHash,
betterTreeNode.HashedRegionSize = HashedRegionSize; ActualHash = ActualHash,
HashedRegionSize = HashedRegionSize
};
parent.Nodes.Add(betterTreeNode); parent.Nodes.Add(betterTreeNode);
return betterTreeNode; return betterTreeNode;
} }
}
} }

View file

@ -1,130 +1,73 @@
using System; using System;
using System.IO;
using System.Linq; using System.Linq;
using System.Text;
namespace XCI_Explorer namespace XCI_Explorer;
internal static class Util
{ {
internal static class Util
{
public static string GetCapacity(int id) public static string GetCapacity(int id)
{ {
switch (id) return id switch
{ {
case 250: 250 => "1GB",
return "1GB"; 248 => "2GB",
case 248: 240 => "4GB",
return "2GB"; 224 => "8GB",
case 240: 225 => "16GB",
return "4GB"; 226 => "32GB",
case 224: _ => "?",
return "8GB"; };
case 225:
return "16GB";
case 226:
return "32GB";
default:
return "?";
}
} }
public static string GetMkey(byte id) public static string GetMkey(byte id)
{ {
switch (id) return id switch
{ {
case 0: 0 or 1 => "MasterKey0 (1.0.0-2.3.0)",
case 1: 2 => "MasterKey1 (3.0.0)",
return "MasterKey0 (1.0.0-2.3.0)"; 3 => "MasterKey2 (3.0.1-3.0.2)",
case 2: 4 => "MasterKey3 (4.0.0-4.1.0)",
return "MasterKey1 (3.0.0)"; 5 => "MasterKey4 (5.0.0-5.1.0)",
case 3: 6 => "MasterKey5 (6.0.0-6.1.0)",
return "MasterKey2 (3.0.1-3.0.2)"; 7 => "MasterKey6 (6.2.0)",
case 4: 8 => "MasterKey7 (7.0.0-8.0.1)",
return "MasterKey3 (4.0.0-4.1.0)"; 9 => "MasterKey8 (8.1.0-8.1.1)",
case 5: 10 => "MasterKey9 (9.0.0-9.0.1)",
return "MasterKey4 (5.0.0-5.1.0)"; 11 => "MasterKey10 (9.1.0-12.0.3)",
case 6: 12 => "MasterKey11 (12.1.0)",
return "MasterKey5 (6.0.0-6.1.0)"; 13 => "MasterKey12 (13.0.0-?)",
case 7: 14 => "MasterKey13",
return "MasterKey6 (6.2.0)"; 15 => "MasterKey14",
case 8: 16 => "MasterKey15",
return "MasterKey7 (7.0.0-8.0.1)"; 17 => "MasterKey16",
case 9: 18 => "MasterKey17",
return "MasterKey8 (8.1.0-8.1.1)"; 19 => "MasterKey18",
case 10: 20 => "MasterKey19",
return "MasterKey9 (9.0.0-9.0.1)"; 21 => "MasterKey20",
case 11: 22 => "MasterKey21",
return "MasterKey10 (9.1.0-12.0.3)"; 23 => "MasterKey22",
case 12: 24 => "MasterKey23",
return "MasterKey11 (12.1.0)"; 25 => "MasterKey24",
case 13: 26 => "MasterKey25",
return "MasterKey12 (13.0.0-?)"; 27 => "MasterKey26",
case 14: 28 => "MasterKey27",
return "MasterKey13"; 29 => "MasterKey28",
case 15: 30 => "MasterKey29",
return "MasterKey14"; 31 => "MasterKey30",
case 16: 32 => "MasterKey31",
return "MasterKey15"; 33 => "MasterKey32",
case 17: _ => "?",
return "MasterKey16"; };
case 18:
return "MasterKey17";
case 19:
return "MasterKey18";
case 20:
return "MasterKey19";
case 21:
return "MasterKey20";
case 22:
return "MasterKey21";
case 23:
return "MasterKey22";
case 24:
return "MasterKey23";
case 25:
return "MasterKey24";
case 26:
return "MasterKey25";
case 27:
return "MasterKey26";
case 28:
return "MasterKey27";
case 29:
return "MasterKey28";
case 30:
return "MasterKey29";
case 31:
return "MasterKey30";
case 32:
return "MasterKey31";
case 33:
return "MasterKey32";
default:
return "?";
}
} }
public static bool checkFile(string filepath) public static byte[] StringToByteArray(string hex) => (from x in Enumerable.Range(0, hex.Length)
{
return File.Exists(filepath);
}
public static byte[] StringToByteArray(string hex)
{
return (from x in Enumerable.Range(0, hex.Length)
where x % 2 == 0 where x % 2 == 0
select Convert.ToByte(hex.Substring(x, 2), 16)).ToArray(); select Convert.ToByte(hex.Substring(x, 2), 16)).ToArray();
}
public static string Base64Encode(string plainText) public static string Base64Encode(string plainText)
{ => Convert.ToBase64String(Encoding.UTF8.GetBytes(plainText));
var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
return System.Convert.ToBase64String(plainTextBytes);
}
public static string Base64Decode(string base64EncodedData) public static string Base64Decode(string base64EncodedData)
{ => Encoding.UTF8.GetString(Convert.FromBase64String(base64EncodedData));
var base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData);
return System.Text.Encoding.UTF8.GetString(base64EncodedBytes);
}
}
} }

View file

@ -2,10 +2,10 @@ using System;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
namespace XCI_Explorer namespace XCI_Explorer;
public static class XCI
{ {
public static class XCI
{
public class XCI_Header public class XCI_Header
{ {
public byte[] Data; public byte[] Data;
@ -27,5 +27,4 @@ namespace XCI_Explorer
} }
public static XCI_Header[] XCI_Headers = new XCI_Header[1]; public static XCI_Header[] XCI_Headers = new XCI_Header[1];
}
} }

View file

@ -1,10 +1,10 @@
using System; using System;
using System.IO; using System.IO;
namespace XTSSharp namespace XTSSharp;
public class RandomAccessSectorStream : Stream
{ {
public class RandomAccessSectorStream : Stream
{
private readonly byte[] _buffer; private readonly byte[] _buffer;
private readonly int _bufferSize; private readonly int _bufferSize;
private readonly SectorStream _s; private readonly SectorStream _s;
@ -17,18 +17,21 @@ namespace XTSSharp
public override bool CanWrite => _s.CanWrite; public override bool CanWrite => _s.CanWrite;
public override long Length => _s.Length + _bufferPos; public override long Length => _s.Length + _bufferPos;
public override long Position { public override long Position
get { {
get
{
if (!_bufferLoaded) if (!_bufferLoaded)
{ {
return _s.Position + _bufferPos; return _s.Position + _bufferPos;
} }
return _s.Position - _bufferSize + _bufferPos; return _s.Position - _bufferSize + _bufferPos;
} }
set { set
{
if (value < 0) if (value < 0)
{ {
throw new ArgumentOutOfRangeException("value"); throw new ArgumentOutOfRangeException(nameof(value));
} }
long num = value % _bufferSize; long num = value % _bufferSize;
long position = value - num; long position = value - num;
@ -84,19 +87,12 @@ namespace XTSSharp
public override long Seek(long offset, SeekOrigin origin) public override long Seek(long offset, SeekOrigin origin)
{ {
long num; long num = origin switch
switch (origin)
{ {
case SeekOrigin.Begin: SeekOrigin.Begin => offset,
num = offset; SeekOrigin.End => Length - offset,
break; _ => Position + offset,
case SeekOrigin.End: };
num = Length - offset;
break;
default:
num = Position + offset;
break;
}
Position = num; Position = num;
return num; return num;
} }
@ -191,5 +187,4 @@ namespace XTSSharp
_bufferPos = 0; _bufferPos = 0;
Array.Clear(_buffer, 0, _bufferSize); Array.Clear(_buffer, 0, _bufferSize);
} }
}
} }

View file

@ -1,15 +1,16 @@
using System; using System;
using System.IO; using System.IO;
namespace XTSSharp namespace XTSSharp;
public class SectorStream : Stream
{ {
public class SectorStream : Stream
{
private readonly Stream _baseStream; private readonly Stream _baseStream;
private readonly long _offset; private readonly long _offset;
private ulong _currentSector; private ulong _currentSector;
public int SectorSize { public int SectorSize
{
get; get;
private set; private set;
} }
@ -19,11 +20,14 @@ namespace XTSSharp
public override bool CanWrite => _baseStream.CanWrite; public override bool CanWrite => _baseStream.CanWrite;
public override long Length => _baseStream.Length - _offset; public override long Length => _baseStream.Length - _offset;
public override long Position { public override long Position
get { {
get
{
return _baseStream.Position - _offset; return _baseStream.Position - _offset;
} }
set { set
{
ValidateSizeMultiple(value); ValidateSizeMultiple(value);
_baseStream.Position = value + _offset; _baseStream.Position = value + _offset;
_currentSector = (ulong)(value / SectorSize); _currentSector = (ulong)(value / SectorSize);
@ -78,19 +82,12 @@ namespace XTSSharp
public override long Seek(long offset, SeekOrigin origin) public override long Seek(long offset, SeekOrigin origin)
{ {
long num; long num = origin switch
switch (origin)
{ {
case SeekOrigin.Begin: SeekOrigin.Begin => offset,
num = offset; SeekOrigin.End => Length - offset,
break; _ => Position + offset,
case SeekOrigin.End: };
num = Length - offset;
break;
default:
num = Position + offset;
break;
}
Position = num; Position = num;
return num; return num;
} }
@ -115,5 +112,4 @@ namespace XTSSharp
_baseStream.Write(buffer, offset, count); _baseStream.Write(buffer, offset, count);
_currentSector++; _currentSector++;
} }
}
} }

View file

@ -1,10 +1,10 @@
using System; using System;
using System.Security.Cryptography; using System.Security.Cryptography;
namespace XTSSharp namespace XTSSharp;
public class Xts
{ {
public class Xts
{
private readonly SymmetricAlgorithm _key1; private readonly SymmetricAlgorithm _key1;
private readonly SymmetricAlgorithm _key2; private readonly SymmetricAlgorithm _key2;
@ -12,15 +12,15 @@ namespace XTSSharp
{ {
if (create == null) if (create == null)
{ {
throw new ArgumentNullException("create"); throw new ArgumentNullException(nameof(create));
} }
if (key1 == null) if (key1 == null)
{ {
throw new ArgumentNullException("key1"); throw new ArgumentNullException(nameof(key1));
} }
if (key2 == null) if (key2 == null)
{ {
throw new ArgumentNullException("key2"); throw new ArgumentNullException(nameof(key2));
} }
_key1 = create(); _key1 = create();
_key2 = create(); _key2 = create();
@ -54,7 +54,7 @@ namespace XTSSharp
{ {
if (key == null) if (key == null)
{ {
throw new ArgumentNullException("key"); throw new ArgumentNullException(nameof(key));
} }
if (key.Length * 8 != expectedSize) if (key.Length * 8 != expectedSize)
{ {
@ -62,5 +62,4 @@ namespace XTSSharp
} }
return key; return key;
} }
}
} }

View file

@ -1,33 +1,32 @@
using System; using System;
using System.Security.Cryptography; using System.Security.Cryptography;
namespace XTSSharp namespace XTSSharp;
public class XtsAes128 : Xts
{ {
public class XtsAes128 : Xts
{
private const int KEY_LENGTH = 128; private const int KEY_LENGTH = 128;
private const int KEY_BYTE_LENGTH = 16; private const int KEY_BYTE_LENGTH = 16;
protected XtsAes128(Func<SymmetricAlgorithm> create, byte[] key1, byte[] key2) protected XtsAes128(Func<SymmetricAlgorithm> create, byte[] key1, byte[] key2)
: base(create, Xts.VerifyKey(128, key1), Xts.VerifyKey(128, key2)) : base(create, VerifyKey(128, key1), VerifyKey(128, key2))
{ {
} }
public static Xts Create(byte[] key1, byte[] key2) public static Xts Create(byte[] key1, byte[] key2)
{ {
Xts.VerifyKey(128, key1); VerifyKey(128, key1);
Xts.VerifyKey(128, key2); VerifyKey(128, key2);
return new XtsAes128(Aes.Create, key1, key2); return new XtsAes128(Aes.Create, key1, key2);
} }
public static Xts Create(byte[] key) public static Xts Create(byte[] key)
{ {
Xts.VerifyKey(256, key); VerifyKey(256, key);
byte[] array = new byte[16]; byte[] array = new byte[16];
byte[] array2 = new byte[16]; byte[] array2 = new byte[16];
Buffer.BlockCopy(key, 0, array, 0, 16); Buffer.BlockCopy(key, 0, array, 0, 16);
Buffer.BlockCopy(key, 16, array2, 0, 16); Buffer.BlockCopy(key, 16, array2, 0, 16);
return new XtsAes128(Aes.Create, array, array2); return new XtsAes128(Aes.Create, array, array2);
} }
}
} }

View file

@ -1,33 +1,32 @@
using System; using System;
using System.Security.Cryptography; using System.Security.Cryptography;
namespace XTSSharp namespace XTSSharp;
public class XtsAes256 : Xts
{ {
public class XtsAes256 : Xts
{
private const int KEY_LENGTH = 256; private const int KEY_LENGTH = 256;
private const int KEY_BYTE_LENGTH = 32; private const int KEY_BYTE_LENGTH = 32;
protected XtsAes256(Func<SymmetricAlgorithm> create, byte[] key1, byte[] key2) protected XtsAes256(Func<SymmetricAlgorithm> create, byte[] key1, byte[] key2)
: base(create, Xts.VerifyKey(256, key1), Xts.VerifyKey(256, key2)) : base(create, VerifyKey(256, key1), VerifyKey(256, key2))
{ {
} }
public static Xts Create(byte[] key1, byte[] key2) public static Xts Create(byte[] key1, byte[] key2)
{ {
Xts.VerifyKey(256, key1); VerifyKey(256, key1);
Xts.VerifyKey(256, key2); VerifyKey(256, key2);
return new XtsAes256(Aes.Create, key1, key2); return new XtsAes256(Aes.Create, key1, key2);
} }
public static Xts Create(byte[] key) public static Xts Create(byte[] key)
{ {
Xts.VerifyKey(512, key); VerifyKey(512, key);
byte[] array = new byte[32]; byte[] array = new byte[32];
byte[] array2 = new byte[32]; byte[] array2 = new byte[32];
Buffer.BlockCopy(key, 0, array, 0, 32); Buffer.BlockCopy(key, 0, array, 0, 32);
Buffer.BlockCopy(key, 32, array2, 0, 32); Buffer.BlockCopy(key, 32, array2, 0, 32);
return new XtsAes256(Aes.Create, array, array2); return new XtsAes256(Aes.Create, array, array2);
} }
}
} }

View file

@ -1,10 +1,10 @@
using System; using System;
using System.Security.Cryptography; using System.Security.Cryptography;
namespace XTSSharp namespace XTSSharp;
public class XtsCryptoTransform : IDisposable
{ {
public class XtsCryptoTransform : IDisposable
{
private readonly byte[] _cc = new byte[16]; private readonly byte[] _cc = new byte[16];
private readonly bool _decrypting; private readonly bool _decrypting;
private readonly ICryptoTransform _key1; private readonly ICryptoTransform _key1;
@ -17,11 +17,11 @@ namespace XTSSharp
{ {
if (key1 == null) if (key1 == null)
{ {
throw new ArgumentNullException("key1"); throw new ArgumentNullException(nameof(key1));
} }
if (key2 == null) if (key2 == null)
{ {
throw new ArgumentNullException("key2"); throw new ArgumentNullException(nameof(key2));
} }
_key1 = key1; _key1 = key1;
_key2 = key2; _key2 = key2;
@ -138,5 +138,4 @@ namespace XTSSharp
i[0] ^= 135; i[0] ^= 135;
} }
} }
}
} }

View file

@ -1,9 +1,9 @@
using System.IO; using System.IO;
namespace XTSSharp namespace XTSSharp;
public class XtsSectorStream : SectorStream
{ {
public class XtsSectorStream : SectorStream
{
public const int DEFAULT_SECTOR_SIZE = 512; public const int DEFAULT_SECTOR_SIZE = 512;
private readonly byte[] _tempBuffer; private readonly byte[] _tempBuffer;
private readonly Xts _xts; private readonly Xts _xts;
@ -70,5 +70,4 @@ namespace XTSSharp
} }
return _decryptor.TransformBlock(_tempBuffer, 0, num, buffer, offset, currentSector); return _decryptor.TransformBlock(_tempBuffer, 0, num, buffer, offset, currentSector);
} }
}
} }

View file

@ -1,9 +1,9 @@
using System.IO; using System.IO;
namespace XTSSharp namespace XTSSharp;
public class XtsStream : RandomAccessSectorStream
{ {
public class XtsStream : RandomAccessSectorStream
{
public XtsStream(Stream baseStream, Xts xts) public XtsStream(Stream baseStream, Xts xts)
: this(baseStream, xts, 512) : this(baseStream, xts, 512)
{ {
@ -18,5 +18,4 @@ namespace XTSSharp
: base(new XtsSectorStream(baseStream, xts, sectorSize, offset), true) : base(new XtsSectorStream(baseStream, xts, sectorSize, offset), true)
{ {
} }
}
} }