Compare commits
2 Commits
Canary-1.2
...
Canary-1.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2fa3a7bfa1 | ||
|
|
381921390a |
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 48 KiB |
@@ -41,7 +41,7 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption
|
|||||||
fileBytes = newFileBytes;
|
fileBytes = newFileBytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
AmiiboDecrypter amiiboDecryptor = new AmiiboDecrypter(keyRetailBinPath);
|
AmiiboDecryptor amiiboDecryptor = new(keyRetailBinPath);
|
||||||
AmiiboDump amiiboDump = amiiboDecryptor.DecryptAmiiboDump(fileBytes);
|
AmiiboDump amiiboDump = amiiboDecryptor.DecryptAmiiboDump(fileBytes);
|
||||||
|
|
||||||
byte[] titleId = new byte[8];
|
byte[] titleId = new byte[8];
|
||||||
@@ -182,7 +182,7 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption
|
|||||||
readBytes = newFileBytes;
|
readBytes = newFileBytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
AmiiboDecrypter amiiboDecryptor = new AmiiboDecrypter(keyRetailBinPath);
|
AmiiboDecryptor amiiboDecryptor = new AmiiboDecryptor(keyRetailBinPath);
|
||||||
AmiiboDump amiiboDump = amiiboDecryptor.DecryptAmiiboDump(readBytes);
|
AmiiboDump amiiboDump = amiiboDecryptor.DecryptAmiiboDump(readBytes);
|
||||||
|
|
||||||
byte[] oldData = amiiboDump.GetData();
|
byte[] oldData = amiiboDump.GetData();
|
||||||
@@ -250,7 +250,7 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption
|
|||||||
readBytes = newFileBytes;
|
readBytes = newFileBytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
AmiiboDecrypter amiiboDecryptor = new AmiiboDecrypter(keyRetailBinPath);
|
AmiiboDecryptor amiiboDecryptor = new AmiiboDecryptor(keyRetailBinPath);
|
||||||
AmiiboDump amiiboDump = amiiboDecryptor.DecryptAmiiboDump(readBytes);
|
AmiiboDump amiiboDump = amiiboDecryptor.DecryptAmiiboDump(readBytes);
|
||||||
amiiboDump.AmiiboNickname = newNickName;
|
amiiboDump.AmiiboNickname = newNickName;
|
||||||
byte[] oldData = amiiboDump.GetData();
|
byte[] oldData = amiiboDump.GetData();
|
||||||
@@ -333,10 +333,9 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption
|
|||||||
return Path.Combine(AppDataManager.KeysDirPath, "key_retail.bin");
|
return Path.Combine(AppDataManager.KeysDirPath, "key_retail.bin");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool HasKeyRetailBinPath()
|
public static bool HasKeyRetailBinPath => File.Exists(GetKeyRetailBinPath());
|
||||||
{
|
|
||||||
return File.Exists(GetKeyRetailBinPath());
|
|
||||||
}
|
|
||||||
public static DateTime DateTimeFromTag(ushort value)
|
public static DateTime DateTimeFromTag(ushort value)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
|||||||
@@ -2,12 +2,12 @@ using System.IO;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption
|
namespace Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption
|
||||||
{
|
{
|
||||||
public class AmiiboDecrypter
|
public class AmiiboDecryptor
|
||||||
{
|
{
|
||||||
public AmiiboMasterKey DataKey { get; private set; }
|
public AmiiboMasterKey DataKey { get; private set; }
|
||||||
public AmiiboMasterKey TagKey { get; private set; }
|
public AmiiboMasterKey TagKey { get; private set; }
|
||||||
|
|
||||||
public AmiiboDecrypter(string keyRetailBinPath)
|
public AmiiboDecryptor(string keyRetailBinPath)
|
||||||
{
|
{
|
||||||
var combinedKeys = File.ReadAllBytes(keyRetailBinPath);
|
var combinedKeys = File.ReadAllBytes(keyRetailBinPath);
|
||||||
var keys = AmiiboMasterKey.FromCombinedBin(combinedKeys);
|
var keys = AmiiboMasterKey.FromCombinedBin(combinedKeys);
|
||||||
@@ -18,7 +18,7 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption
|
|||||||
public AmiiboDump DecryptAmiiboDump(byte[] encryptedDumpData)
|
public AmiiboDump DecryptAmiiboDump(byte[] encryptedDumpData)
|
||||||
{
|
{
|
||||||
// Initialize AmiiboDump with encrypted data
|
// Initialize AmiiboDump with encrypted data
|
||||||
AmiiboDump amiiboDump = new AmiiboDump(encryptedDumpData, DataKey, TagKey, isLocked: true);
|
AmiiboDump amiiboDump = new(encryptedDumpData, DataKey, TagKey, isLocked: true);
|
||||||
|
|
||||||
// Unlock (decrypt) the dump
|
// Unlock (decrypt) the dump
|
||||||
amiiboDump.Unlock();
|
amiiboDump.Unlock();
|
||||||
@@ -32,7 +32,7 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption
|
|||||||
public AmiiboDump EncryptAmiiboDump(byte[] decryptedDumpData)
|
public AmiiboDump EncryptAmiiboDump(byte[] decryptedDumpData)
|
||||||
{
|
{
|
||||||
// Initialize AmiiboDump with decrypted data
|
// Initialize AmiiboDump with decrypted data
|
||||||
AmiiboDump amiiboDump = new AmiiboDump(decryptedDumpData, DataKey, TagKey, isLocked: false);
|
AmiiboDump amiiboDump = new(decryptedDumpData, DataKey, TagKey, isLocked: false);
|
||||||
|
|
||||||
// Lock (encrypt) the dump
|
// Lock (encrypt) the dump
|
||||||
amiiboDump.Lock();
|
amiiboDump.Lock();
|
||||||
@@ -127,6 +127,9 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
|
|
||||||
public IEnumerable<LdnGameData> LastLdnGameData;
|
public IEnumerable<LdnGameData> LastLdnGameData;
|
||||||
|
|
||||||
|
// The UI specifically uses a thicker bordered variant of the icon to avoid crunching out the border at lower resolutions.
|
||||||
|
// For an example of this, download canary 1.2.95, then open the settings menu, and look at the icon in the top-left.
|
||||||
|
// The border gets reduced to colored pixels in the 4 corners.
|
||||||
public static readonly Bitmap IconBitmap =
|
public static readonly Bitmap IconBitmap =
|
||||||
new(Assembly.GetAssembly(typeof(ConfigurationState))!.GetManifestResourceStream("Ryujinx.UI.Common.Resources.Logo_Thiccjinx.png")!);
|
new(Assembly.GetAssembly(typeof(ConfigurationState))!.GetManifestResourceStream("Ryujinx.UI.Common.Resources.Logo_Thiccjinx.png")!);
|
||||||
|
|
||||||
@@ -330,6 +333,9 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
OnPropertyChanged();
|
OnPropertyChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool CanScanAmiiboBinaries => AmiiboBinReader.HasKeyRetailBinPath;
|
||||||
|
|
||||||
public bool ShowLoadProgress
|
public bool ShowLoadProgress
|
||||||
{
|
{
|
||||||
get => _showLoadProgress;
|
get => _showLoadProgress;
|
||||||
|
|||||||
@@ -247,6 +247,7 @@
|
|||||||
Click="OpenBinFile"
|
Click="OpenBinFile"
|
||||||
Header="{ext:Locale MenuBarActionsScanAmiiboBin}"
|
Header="{ext:Locale MenuBarActionsScanAmiiboBin}"
|
||||||
Icon="{ext:Icon mdi-cube-scan}"
|
Icon="{ext:Icon mdi-cube-scan}"
|
||||||
|
IsVisible="{Binding CanScanAmiiboBinaries}"
|
||||||
IsEnabled="{Binding IsAmiiboBinRequested}" />
|
IsEnabled="{Binding IsAmiiboBinRequested}" />
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Command="{Binding TakeScreenshot}"
|
Command="{Binding TakeScreenshot}"
|
||||||
|
|||||||
@@ -178,7 +178,7 @@ namespace Ryujinx.Ava.UI.Views.Main
|
|||||||
private void ScanBinAmiiboMenuItem_AttachedToVisualTree(object sender, VisualTreeAttachmentEventArgs e)
|
private void ScanBinAmiiboMenuItem_AttachedToVisualTree(object sender, VisualTreeAttachmentEventArgs e)
|
||||||
{
|
{
|
||||||
if (sender is MenuItem)
|
if (sender is MenuItem)
|
||||||
ViewModel.IsAmiiboBinRequested = ViewModel.IsAmiiboRequested && AmiiboBinReader.HasKeyRetailBinPath();
|
ViewModel.IsAmiiboBinRequested = ViewModel.IsAmiiboRequested && AmiiboBinReader.HasKeyRetailBinPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void InstallFileTypes_Click(object sender, RoutedEventArgs e)
|
private async void InstallFileTypes_Click(object sender, RoutedEventArgs e)
|
||||||
|
|||||||
Reference in New Issue
Block a user