summaryrefslogtreecommitdiff
path: root/LibTSforge/Crypto/PhysStoreCrypto.cs
diff options
context:
space:
mode:
authorWitherOrNot2025-04-07 22:19:19 +0000
committerGitHub2025-04-07 22:19:19 +0000
commit3a3ac06ca3715127475c7a2c7b3f0782e1690dfb (patch)
treef83328728b259bb6ec1e52979322377df1c7d627 /LibTSforge/Crypto/PhysStoreCrypto.cs
parentbdd201061daf7492fb116b86a54cd349c01fbb0a (diff)
parent22bbb93e909154da94aee1b55e551038a3a37e6c (diff)
downloadTSforge-3a3ac06ca3715127475c7a2c7b3f0782e1690dfb.zip
Merge pull request #4 from massgravel/minor-fixups
Minor fixups
Diffstat (limited to 'LibTSforge/Crypto/PhysStoreCrypto.cs')
-rw-r--r--LibTSforge/Crypto/PhysStoreCrypto.cs40
1 files changed, 20 insertions, 20 deletions
diff --git a/LibTSforge/Crypto/PhysStoreCrypto.cs b/LibTSforge/Crypto/PhysStoreCrypto.cs
index b0acc2e..08978e2 100644
--- a/LibTSforge/Crypto/PhysStoreCrypto.cs
+++ b/LibTSforge/Crypto/PhysStoreCrypto.cs
@@ -16,33 +16,33 @@ namespace LibTSforge.Crypto
byte[] aesKeySig = br.ReadBytes(0x80);
byte[] encAesKey = br.ReadBytes(0x80);
- if (CryptoUtils.RSAVerifySignature(rsaKey, encAesKey, aesKeySig))
+ if (!CryptoUtils.RSAVerifySignature(rsaKey, encAesKey, aesKeySig))
{
- byte[] aesKey = CryptoUtils.RSADecrypt(rsaKey, encAesKey);
- byte[] decData = CryptoUtils.AESDecrypt(br.ReadBytes((int)br.BaseStream.Length - 0x110), aesKey);
- byte[] hmacKey = decData.Take(0x10).ToArray(); // SHA-1 salt on Vista
- byte[] hmacSig = decData.Skip(0x10).Take(0x14).ToArray(); // SHA-1 hash on Vista
- byte[] psData = decData.Skip(0x28).ToArray();
+ throw new Exception("Failed to decrypt physical store.");
+ }
+
+ byte[] aesKey = CryptoUtils.RSADecrypt(rsaKey, encAesKey);
+ byte[] decData = CryptoUtils.AESDecrypt(br.ReadBytes((int)br.BaseStream.Length - 0x110), aesKey);
+ byte[] hmacKey = decData.Take(0x10).ToArray(); // SHA-1 salt on Vista
+ byte[] hmacSig = decData.Skip(0x10).Take(0x14).ToArray(); // SHA-1 hash on Vista
+ byte[] psData = decData.Skip(0x28).ToArray();
- if (version != PSVersion.Vista)
+ if (version != PSVersion.Vista)
+ {
+ if (!CryptoUtils.HMACVerify(hmacKey, psData, hmacSig))
{
- if (!CryptoUtils.HMACVerify(hmacKey, psData, hmacSig))
- {
- throw new InvalidDataException("Failed to verify HMAC. Physical store is corrupt.");
- }
+ throw new InvalidDataException("Failed to verify HMAC. Physical store is corrupt.");
}
- else
+ }
+ else
+ {
+ if (!CryptoUtils.SaltSHAVerify(hmacKey, psData, hmacSig))
{
- if (!CryptoUtils.SaltSHAVerify(hmacKey, psData, hmacSig))
- {
- throw new InvalidDataException("Failed to verify checksum. Physical store is corrupt.");
- }
+ throw new InvalidDataException("Failed to verify checksum. Physical store is corrupt.");
}
-
- return psData;
}
- throw new Exception("Failed to decrypt physical store.");
+ return psData;
}
public static byte[] EncryptPhysicalStore(byte[] data, bool production, PSVersion version)
@@ -65,7 +65,7 @@ namespace LibTSforge.Crypto
byte[] aesKeySig = CryptoUtils.RSASign(rsaKey, encAesKey);
byte[] hmacSig = version != PSVersion.Vista ? CryptoUtils.HMACSign(hmacKey, data) : CryptoUtils.SaltSHASum(hmacKey, data);
- byte[] decData = new byte[] { };
+ byte[] decData = { };
decData = decData.Concat(hmacKey).Concat(hmacSig).Concat(BitConverter.GetBytes(0)).Concat(data).ToArray();
byte[] encData = CryptoUtils.AESEncrypt(decData, aesKey);