mirror of
https://github.com/SabreTools/SabreTools.Models.git
synced 2026-09-22 22:57:11 +00:00
Create model for PS4 app.pkg header (#7)
* Create model for PS4 app.pkg header * Rename PS4 app.pkg class * Fix typo * Requested changes * Add newline
This commit is contained in:
@@ -4,6 +4,16 @@ namespace SabreTools.Models.PlayStation3
|
||||
/// <see href="https://psdevwiki.com/ps3/PS3_DISC.SFB"/>
|
||||
public static class Constants
|
||||
{
|
||||
/// <summary>
|
||||
/// Identifying bytes for SFO file
|
||||
/// </summary>
|
||||
public const uint SFOMagic = 0x00505346;
|
||||
|
||||
/// <summary>
|
||||
/// Identifying bytes for SFB file
|
||||
/// </summary>
|
||||
public const uint SFBMagic = 0x2E534642;
|
||||
|
||||
#region Hybrid Flags
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -9,8 +9,7 @@ namespace SabreTools.Models.PlayStation3
|
||||
/// <summary>
|
||||
/// ".SFB"
|
||||
/// </summary>
|
||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
|
||||
public byte[]? Magic;
|
||||
public uint Magic;
|
||||
|
||||
/// <summary>
|
||||
/// File version(?)
|
||||
|
||||
@@ -9,8 +9,7 @@ namespace SabreTools.Models.PlayStation3
|
||||
/// <summary>
|
||||
/// "\0PSF"
|
||||
/// </summary>
|
||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
|
||||
public byte[]? Magic;
|
||||
public uint Magic;
|
||||
|
||||
/// <summary>
|
||||
/// Version
|
||||
|
||||
236
SabreTools.Models/PlayStation4/AppPkgHeader.cs
Normal file
236
SabreTools.Models/PlayStation4/AppPkgHeader.cs
Normal file
@@ -0,0 +1,236 @@
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace SabreTools.Models.PlayStation4
|
||||
{
|
||||
/// <see href="https://www.psdevwiki.com/ps4/PKG_files"/>
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public class AppPkgHeader
|
||||
{
|
||||
/// <summary>
|
||||
/// Identifying bytes for app.pkg file, "\7FCNT"
|
||||
/// </summary>
|
||||
public uint Magic;
|
||||
|
||||
/// <summary>
|
||||
/// PKG Type
|
||||
/// </summary>
|
||||
public uint Type;
|
||||
|
||||
/// <summary>
|
||||
/// PKG Unknown Field
|
||||
/// </summary>
|
||||
public uint PKGUnknown;
|
||||
|
||||
/// <summary>
|
||||
/// PKG File count
|
||||
/// </summary>
|
||||
public uint FileCount;
|
||||
|
||||
/// <summary>
|
||||
/// PKG Entry count
|
||||
/// </summary>
|
||||
public uint EntryCount;
|
||||
|
||||
/// <summary>
|
||||
/// SC Entry count
|
||||
/// </summary>
|
||||
public ushort SCEntryCount;
|
||||
|
||||
/// <summary>
|
||||
/// PKG Entry count (duplicated)
|
||||
/// </summary>
|
||||
public ushort EntryCount2;
|
||||
|
||||
/// <summary>
|
||||
/// PKG File Table offset
|
||||
/// </summary>
|
||||
public uint TableOffset;
|
||||
|
||||
/// <summary>
|
||||
/// PKG Entry data size
|
||||
/// </summary>
|
||||
public uint EntryDataSize;
|
||||
|
||||
/// <summary>
|
||||
/// Offset of PKG Entries
|
||||
/// </summary>
|
||||
public ulong BodyOffset;
|
||||
|
||||
/// <summary>
|
||||
/// Length of all PKG Entries
|
||||
/// </summary>
|
||||
public ulong BodySize;
|
||||
|
||||
/// <summary>
|
||||
/// PKG Content offset
|
||||
/// </summary>
|
||||
public ulong ContentOffset;
|
||||
|
||||
/// <summary>
|
||||
/// PKG Content size
|
||||
/// </summary>
|
||||
public ulong ContentSize;
|
||||
|
||||
/// <summary>
|
||||
/// PKG Content ID
|
||||
/// </summary>
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x24)]
|
||||
public string? ContentID;
|
||||
|
||||
/// <summary>
|
||||
/// PKG Content Padding (Zeroes)
|
||||
/// </summary>
|
||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 0xC)]
|
||||
public byte[]? ContentZeroes;
|
||||
|
||||
/// <summary>
|
||||
/// PKG DRM Type
|
||||
/// </summary>
|
||||
public uint DRMType;
|
||||
|
||||
/// <summary>
|
||||
/// PKG Content Type
|
||||
/// </summary>
|
||||
public uint ContentType;
|
||||
|
||||
/// <summary>
|
||||
/// PKG Content Flags
|
||||
/// </summary>
|
||||
public uint ContentFlags;
|
||||
|
||||
/// <summary>
|
||||
/// PKG Promote Size
|
||||
/// </summary>
|
||||
public uint PromoteSize;
|
||||
|
||||
/// <summary>
|
||||
/// PKG Version Date
|
||||
/// </summary>
|
||||
public uint VersionDate;
|
||||
|
||||
/// <summary>
|
||||
/// PKG Content Flags
|
||||
/// </summary>
|
||||
public uint VersionHash;
|
||||
|
||||
/// <summary>
|
||||
/// PKG Padding Section 1
|
||||
/// </summary>
|
||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x78)]
|
||||
public byte[]? Zeroes1;
|
||||
|
||||
/// <summary>
|
||||
/// PKG SHA256 for Main Entry 1
|
||||
/// </summary>
|
||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x20)]
|
||||
public byte[]? MainEntry1SHA256;
|
||||
|
||||
/// <summary>
|
||||
/// PKG SHA256 for Main Entry 2
|
||||
/// </summary>
|
||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x20)]
|
||||
public byte[]? MainEntry2SHA256;
|
||||
|
||||
/// <summary>
|
||||
/// PKG SHA256 for Digest Table
|
||||
/// </summary>
|
||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x20)]
|
||||
public byte[]? DigestTableSHA256;
|
||||
|
||||
/// <summary>
|
||||
/// PKG SHA256 for Main Table
|
||||
/// </summary>
|
||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x20)]
|
||||
public byte[]? MainTableSHA256;
|
||||
|
||||
/// <summary>
|
||||
/// PKG Padding Section 2
|
||||
/// </summary>
|
||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x280)]
|
||||
public byte[]? Zeroes2;
|
||||
|
||||
/// <summary>
|
||||
/// PFS Unknown Field
|
||||
/// </summary>
|
||||
public uint PFSUnknown;
|
||||
|
||||
/// <summary>
|
||||
/// PFS Image Count
|
||||
/// </summary>
|
||||
public uint PFSImageCount;
|
||||
|
||||
/// <summary>
|
||||
/// PFS Image Flags
|
||||
/// </summary>
|
||||
public ulong PFSImageFlags;
|
||||
|
||||
/// <summary>
|
||||
/// PFS Image Offset
|
||||
/// </summary>
|
||||
public ulong PFSImageOffset;
|
||||
|
||||
/// <summary>
|
||||
/// PFS Image Size
|
||||
/// </summary>
|
||||
public ulong PFSImageSize;
|
||||
|
||||
/// <summary>
|
||||
/// Mount Image Offset
|
||||
/// </summary>
|
||||
public ulong MountImageOffset;
|
||||
|
||||
/// <summary>
|
||||
/// Mount Image Size
|
||||
/// </summary>
|
||||
public ulong MountImageSize;
|
||||
|
||||
/// <summary>
|
||||
/// PKG Size
|
||||
/// </summary>
|
||||
public ulong PKGSize;
|
||||
|
||||
/// <summary>
|
||||
/// PKG Signed Size
|
||||
/// </summary>
|
||||
public uint PKGSignedSize;
|
||||
|
||||
/// <summary>
|
||||
/// PKG Signed Size
|
||||
/// </summary>
|
||||
public uint PKGCacheSize;
|
||||
|
||||
/// <summary>
|
||||
/// SHA256 for PFS Image
|
||||
/// </summary>
|
||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x20)]
|
||||
public byte[]? PFSImageSHA256;
|
||||
|
||||
/// <summary>
|
||||
/// SHA256 for PFS Signed
|
||||
/// </summary>
|
||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x20)]
|
||||
public byte[]? PFSSignedSHA256;
|
||||
|
||||
/// <summary>
|
||||
/// PFS Split Size nth 0
|
||||
/// </summary>
|
||||
public ulong PFSSplitSize0;
|
||||
|
||||
/// <summary>
|
||||
/// PFS Split Size nth 1
|
||||
/// </summary>
|
||||
public ulong PFSSplitSize1;
|
||||
|
||||
/// <summary>
|
||||
/// PKG Padding Section 3
|
||||
/// </summary>
|
||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 0xB50)]
|
||||
public byte[]? Zeroes3;
|
||||
|
||||
/// <summary>
|
||||
/// SHA256 for PKG
|
||||
/// </summary>
|
||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x20)]
|
||||
public byte[]? PKGSHA256;
|
||||
}
|
||||
}
|
||||
11
SabreTools.Models/PlayStation4/Constants.cs
Normal file
11
SabreTools.Models/PlayStation4/Constants.cs
Normal file
@@ -0,0 +1,11 @@
|
||||
namespace SabreTools.Models.PlayStation4
|
||||
{
|
||||
/// <see href="https://www.psdevwiki.com/ps4/PKG_files"/>
|
||||
public class Constants
|
||||
{
|
||||
/// <summary>
|
||||
/// Identifying bytes for app.pkg file, "\7FCNT"
|
||||
/// </summary>
|
||||
public const uint AppPkgMagic = 0x7F434E54;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user