mirror of
https://github.com/Thealexbarney/LibHac.git
synced 2024-11-14 10:49:41 +01:00
Move CryptoOld
This commit is contained in:
parent
2bd1c05ed5
commit
8e5f400048
7 changed files with 50 additions and 103 deletions
|
@ -1,103 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.IO;
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using LibHac.Common;
|
|
||||||
using LibHac.Crypto;
|
|
||||||
using LibHac.FsSystem;
|
|
||||||
|
|
||||||
using Aes = LibHac.Crypto.Aes;
|
|
||||||
|
|
||||||
namespace LibHac;
|
|
||||||
|
|
||||||
public static class CryptoOld
|
|
||||||
{
|
|
||||||
public static void GenerateKek(byte[] key, byte[] src, byte[] dest, byte[] kekSeed, byte[] keySeed)
|
|
||||||
{
|
|
||||||
byte[] kek = new byte[Aes.KeySize128];
|
|
||||||
byte[] srcKek = new byte[Aes.KeySize128];
|
|
||||||
|
|
||||||
Aes.DecryptEcb128(kekSeed, kek, key);
|
|
||||||
Aes.DecryptEcb128(src, srcKek, kek);
|
|
||||||
|
|
||||||
if (keySeed != null)
|
|
||||||
{
|
|
||||||
Aes.DecryptEcb128(keySeed, dest, srcKek);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Array.Copy(srcKek, dest, Aes.KeySize128);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static RSAParameters DecryptRsaKey(byte[] encryptedKey, byte[] kek)
|
|
||||||
{
|
|
||||||
byte[] counter = new byte[0x10];
|
|
||||||
Array.Copy(encryptedKey, counter, 0x10);
|
|
||||||
byte[] key = new byte[0x230];
|
|
||||||
Array.Copy(encryptedKey, 0x10, key, 0, 0x230);
|
|
||||||
|
|
||||||
new Aes128CtrTransform(kek, counter).TransformBlock(key);
|
|
||||||
|
|
||||||
byte[] d = new byte[0x100];
|
|
||||||
byte[] n = new byte[0x100];
|
|
||||||
byte[] e = new byte[4];
|
|
||||||
Array.Copy(key, 0, d, 0, 0x100);
|
|
||||||
Array.Copy(key, 0x100, n, 0, 0x100);
|
|
||||||
Array.Copy(key, 0x200, e, 0, 4);
|
|
||||||
|
|
||||||
RSAParameters rsaParams = Rsa.RecoverParameters(n, e, d);
|
|
||||||
TestRsaKey(rsaParams);
|
|
||||||
return rsaParams;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void TestRsaKey(RSAParameters keyParams)
|
|
||||||
{
|
|
||||||
var rsa = new RSACryptoServiceProvider();
|
|
||||||
rsa.ImportParameters(keyParams);
|
|
||||||
|
|
||||||
byte[] test = { 12, 34, 56, 78 };
|
|
||||||
byte[] testEnc = rsa.Encrypt(test, false);
|
|
||||||
byte[] testDec = rsa.Decrypt(testEnc, false);
|
|
||||||
|
|
||||||
if (!Utilities.ArraysEqual(test, testDec))
|
|
||||||
{
|
|
||||||
throw new InvalidDataException("Could not verify RSA key pair");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Validity Rsa2048Pkcs1Verify(byte[] data, byte[] signature, byte[] modulus) =>
|
|
||||||
Rsa.VerifyRsa2048Pkcs1Sha256(signature, modulus, new byte[] { 1, 0, 1 }, data)
|
|
||||||
? Validity.Valid
|
|
||||||
: Validity.Invalid;
|
|
||||||
|
|
||||||
public static Validity Rsa2048PssVerify(byte[] data, byte[] signature, byte[] modulus) =>
|
|
||||||
Rsa.VerifyRsa2048PssSha256(signature, modulus, new byte[] { 1, 0, 1 }, data)
|
|
||||||
? Validity.Valid
|
|
||||||
: Validity.Invalid;
|
|
||||||
|
|
||||||
public static byte[] DecryptRsaOaep(byte[] data, RSAParameters rsaParams)
|
|
||||||
{
|
|
||||||
var rsa = RSA.Create();
|
|
||||||
|
|
||||||
rsa.ImportParameters(rsaParams);
|
|
||||||
return rsa.Decrypt(data, RSAEncryptionPadding.OaepSHA256);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool DecryptRsaOaep(ReadOnlySpan<byte> data, Span<byte> destination, RSAParameters rsaParams, out int bytesWritten)
|
|
||||||
{
|
|
||||||
using (var rsa = RSA.Create())
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
rsa.ImportParameters(rsaParams);
|
|
||||||
|
|
||||||
return rsa.TryDecrypt(data, destination, RSAEncryptionPadding.OaepSHA256, out bytesWritten);
|
|
||||||
}
|
|
||||||
catch (CryptographicException)
|
|
||||||
{
|
|
||||||
bytesWritten = 0;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -3,6 +3,7 @@ using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using LibHac.Common;
|
using LibHac.Common;
|
||||||
using LibHac.Common.Keys;
|
using LibHac.Common.Keys;
|
||||||
|
using LibHac.Tools.Crypto;
|
||||||
|
|
||||||
namespace LibHac.Npdm;
|
namespace LibHac.Npdm;
|
||||||
|
|
||||||
|
|
45
src/LibHac/Tools/Crypto/CryptoOld.cs
Normal file
45
src/LibHac/Tools/Crypto/CryptoOld.cs
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
using System;
|
||||||
|
using System.Security.Cryptography;
|
||||||
|
using LibHac.Common;
|
||||||
|
using LibHac.Crypto;
|
||||||
|
|
||||||
|
namespace LibHac.Tools.Crypto;
|
||||||
|
|
||||||
|
public static class CryptoOld
|
||||||
|
{
|
||||||
|
public static Validity Rsa2048Pkcs1Verify(byte[] data, byte[] signature, byte[] modulus) =>
|
||||||
|
Rsa.VerifyRsa2048Pkcs1Sha256(signature, modulus, new byte[] { 1, 0, 1 }, data)
|
||||||
|
? Validity.Valid
|
||||||
|
: Validity.Invalid;
|
||||||
|
|
||||||
|
public static Validity Rsa2048PssVerify(byte[] data, byte[] signature, byte[] modulus) =>
|
||||||
|
Rsa.VerifyRsa2048PssSha256(signature, modulus, new byte[] { 1, 0, 1 }, data)
|
||||||
|
? Validity.Valid
|
||||||
|
: Validity.Invalid;
|
||||||
|
|
||||||
|
public static byte[] DecryptRsaOaep(byte[] data, RSAParameters rsaParams)
|
||||||
|
{
|
||||||
|
var rsa = RSA.Create();
|
||||||
|
|
||||||
|
rsa.ImportParameters(rsaParams);
|
||||||
|
return rsa.Decrypt(data, RSAEncryptionPadding.OaepSHA256);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool DecryptRsaOaep(ReadOnlySpan<byte> data, Span<byte> destination, RSAParameters rsaParams, out int bytesWritten)
|
||||||
|
{
|
||||||
|
using (var rsa = RSA.Create())
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
rsa.ImportParameters(rsaParams);
|
||||||
|
|
||||||
|
return rsa.TryDecrypt(data, destination, RSAEncryptionPadding.OaepSHA256, out bytesWritten);
|
||||||
|
}
|
||||||
|
catch (CryptographicException)
|
||||||
|
{
|
||||||
|
bytesWritten = 0;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,6 +2,7 @@
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using LibHac.Common;
|
using LibHac.Common;
|
||||||
using LibHac.Common.Keys;
|
using LibHac.Common.Keys;
|
||||||
|
using LibHac.Tools.Crypto;
|
||||||
using LibHac.Util;
|
using LibHac.Util;
|
||||||
|
|
||||||
namespace LibHac.Tools.Es;
|
namespace LibHac.Tools.Es;
|
||||||
|
|
|
@ -5,6 +5,7 @@ using LibHac.Common;
|
||||||
using LibHac.Common.Keys;
|
using LibHac.Common.Keys;
|
||||||
using LibHac.Crypto;
|
using LibHac.Crypto;
|
||||||
using LibHac.Fs;
|
using LibHac.Fs;
|
||||||
|
using LibHac.Tools.Crypto;
|
||||||
|
|
||||||
namespace LibHac.Tools.Fs;
|
namespace LibHac.Tools.Fs;
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@ using LibHac.Fs;
|
||||||
using LibHac.Fs.Fsa;
|
using LibHac.Fs.Fsa;
|
||||||
using LibHac.FsSystem;
|
using LibHac.FsSystem;
|
||||||
using LibHac.Spl;
|
using LibHac.Spl;
|
||||||
|
using LibHac.Tools.Crypto;
|
||||||
using LibHac.Tools.FsSystem.RomFs;
|
using LibHac.Tools.FsSystem.RomFs;
|
||||||
|
|
||||||
namespace LibHac.Tools.FsSystem.NcaUtils;
|
namespace LibHac.Tools.FsSystem.NcaUtils;
|
||||||
|
|
|
@ -8,6 +8,7 @@ using LibHac.Crypto;
|
||||||
using LibHac.Diag;
|
using LibHac.Diag;
|
||||||
using LibHac.Fs;
|
using LibHac.Fs;
|
||||||
using LibHac.FsSystem;
|
using LibHac.FsSystem;
|
||||||
|
using LibHac.Tools.Crypto;
|
||||||
using LibHac.Util;
|
using LibHac.Util;
|
||||||
|
|
||||||
namespace LibHac.Tools.FsSystem.NcaUtils;
|
namespace LibHac.Tools.FsSystem.NcaUtils;
|
||||||
|
|
Loading…
Reference in a new issue