diff --git a/SabreTools.Models/BMP/BITMAPFILEHEADER.cs b/SabreTools.Models/BMP/BITMAPFILEHEADER.cs deleted file mode 100644 index 361651b..0000000 --- a/SabreTools.Models/BMP/BITMAPFILEHEADER.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.BMP -{ - /// - /// The BITMAPFILEHEADER structure contains information about the type, size, - /// and layout of a file that contains a DIB. - /// - /// - [StructLayout(LayoutKind.Sequential)] - public sealed class BITMAPFILEHEADER - { - /// - /// The file type; must be BM. - /// - public ushort Type; - - /// - /// The size, in bytes, of the bitmap file. - /// - public uint Size; - - /// - /// Reserved; must be zero. - /// - public ushort Reserved1; - - /// - /// Reserved; must be zero. - /// - public ushort Reserved2; - - /// - /// The offset, in bytes, from the beginning of the BITMAPFILEHEADER structure to the bitmap bits. - /// - public uint OffBits; - } -} diff --git a/SabreTools.Models/BMP/BITMAPINFOHEADER.cs b/SabreTools.Models/BMP/BITMAPINFOHEADER.cs deleted file mode 100644 index 4d776f4..0000000 --- a/SabreTools.Models/BMP/BITMAPINFOHEADER.cs +++ /dev/null @@ -1,97 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.BMP -{ - /// - /// The BITMAPINFOHEADER structure contains information about the dimensions and - /// color format of a device-independent bitmap (DIB). - /// - [StructLayout(LayoutKind.Sequential)] - public sealed class BITMAPINFOHEADER - { - /// - /// Specifies the number of bytes required by the structure. This value does - /// not include the size of the color table or the size of the color masks, - /// if they are appended to the end of structure. - /// - public uint Size; - - /// - /// Specifies the width of the bitmap, in pixels. - /// - public int Width; - - /// - /// Specifies the height of the bitmap, in pixels. - /// - For uncompressed RGB bitmaps, if biHeight is positive, the bitmap is a - /// bottom-up DIB with the origin at the lower left corner. If biHeight is - /// negative, the bitmap is a top-down DIB with the origin at the upper left - /// corner. - /// - For YUV bitmaps, the bitmap is always top-down, regardless of the sign of - /// biHeight. Decoders should offer YUV formats with positive biHeight, but for - /// backward compatibility they should accept YUV formats with either positive - /// or negative biHeight. - /// - For compressed formats, biHeight must be positive, regardless of image orientation. - /// - public int Height; - - /// - /// Specifies the number of planes for the target device. This value must be set to 1. - /// - public ushort Planes; - - /// - /// Specifies the number of bits per pixel (bpp). For uncompressed formats, this value - /// is the average number of bits per pixel. For compressed formats, this value is the - /// implied bit depth of the uncompressed image, after the image has been decoded. - /// - public ushort BitCount; - - /// - /// For compressed video and YUV formats, this member is a FOURCC code, specified as a - /// DWORD in little-endian order. For example, YUYV video has the FOURCC 'VYUY' or - /// 0x56595559. For more information, see FOURCC Codes. - /// - /// For uncompressed RGB formats, the following values are possible: - /// - BI_RGB: Uncompressed RGB. - /// - BI_BITFIELDS: Uncompressed RGB with color masks. Valid for 16-bpp and 32-bpp bitmaps. - /// - /// Note that BI_JPG and BI_PNG are not valid video formats. - /// - /// For 16-bpp bitmaps, if biCompression equals BI_RGB, the format is always RGB 555. - /// If biCompression equals BI_BITFIELDS, the format is either RGB 555 or RGB 565. Use - /// the subtype GUID in the AM_MEDIA_TYPE structure to determine the specific RGB type. - /// - public uint Compression; - - /// - /// Specifies the size, in bytes, of the image. This can be set to 0 for uncompressed - /// RGB bitmaps. - /// - public uint SizeImage; - - /// - /// Specifies the horizontal resolution, in pixels per meter, of the target device for - /// the bitmap. - /// - public int XPelsPerMeter; - - /// - /// Specifies the vertical resolution, in pixels per meter, of the target device for - /// the bitmap. - /// - public int YPelsPerMeter; - - /// - /// Specifies the number of color indices in the color table that are actually used by - /// the bitmap. - /// - public uint ClrUsed; - - /// - /// Specifies the number of color indices that are considered important for displaying - /// the bitmap. If this value is zero, all colors are important. - /// - public uint ClrImportant; - } -} diff --git a/SabreTools.Models/CFB/Binary.cs b/SabreTools.Models/CFB/Binary.cs deleted file mode 100644 index 8bddf02..0000000 --- a/SabreTools.Models/CFB/Binary.cs +++ /dev/null @@ -1,92 +0,0 @@ -namespace SabreTools.Models.CFB -{ - /// - /// Microsoft Compound File Binary (CFB) file format, also known as the - /// Object Linking and Embedding (OLE) or Component Object Model (COM) - /// structured storage compound file implementation binary file format. - /// This structure name can be shortened to compound file. - /// - /// - public sealed class Binary - { - /// - /// Compound file header - /// - public FileHeader? Header { get; set; } - - /// - /// The FAT is the main allocator for space within a compound file. - /// Every sector in the file is represented within the FAT in some - /// fashion, including those sectors that are unallocated (free). - /// The FAT is a sector chain that is made up of one or more FAT sectors. - /// - /// - /// If Header Major Version is 3, there MUST be 128 fields specified to fill a 512-byte sector. - /// - /// If Header Major Version is 4, there MUST be 1,024 fields specified to fill a 4,096-byte sector - /// - public SectorNumber[]? FATSectorNumbers { get; set; } - - /// - /// The mini FAT is used to allocate space in the mini stream. - /// The mini stream is divided intosmaller, equal-length sectors, - /// and the sector size that is used for the mini stream is specified - /// from the Compound File Header (64 bytes). - /// - /// - /// If Header Major Version is 3, there MUST be 128 fields specified to fill a 512-byte sector. - /// - /// If Header Major Version is 4, there MUST be 1,024 fields specified to fill a 4,096-byte sector - /// - public SectorNumber[]? MiniFATSectorNumbers { get; set; } - - /// - /// The DIFAT array is used to represent storage of the FAT sectors. - /// The DIFAT is represented by an array of 32-bit sector numbers. - /// The DIFAT array is stored both in the header and in DIFAT sectors. - /// In the header, the DIFAT array occupies 109 entries, and in each - /// DIFAT sector, the DIFAT array occupies the entire sector minus - /// 4 bytes. (The last field is for chaining the DIFAT sector chain.) - /// - /// - /// If Header Major Version is 3, there MUST be 127 fields specified to - /// fill a 512-byte sector minus the "Next DIFAT Sector Location" field. - /// - /// If Header Major Version is 4, there MUST be 1,023 fields specified - /// to fill a 4,096-byte sector minus the "Next DIFAT Sector Location" field. - /// - public SectorNumber[]? DIFATSectorNumbers { get; set; } - - /// - /// The directory entry array is an array of directory entries that - /// are grouped into a directory sector. Each storage object or stream - /// object within a compound file is represented by a single directory - /// entry. The space for the directory sectors that are holding the - /// array is allocated from the FAT. - /// - /// - /// The first entry in the first sector of the directory chain (also - /// referred to as the first element of the directory array, or stream - /// ID #0) is known as the root directory entry, and it is reserved for - /// two purposes. First, it provides a root parent for all objects that - /// are stationed at the root of the compound file. Second, its function - /// is overloaded to store the size and starting sector for the mini stream. - /// - /// The root directory entry behaves as both a stream and a storage object. - /// The root directory entry's Name field MUST contain the null-terminated - /// string "Root Entry" in Unicode UTF-16. - /// - /// The object class GUID (CLSID) that is stored in the root directory - /// entry can be used for COM activation of the document's application. - /// - /// The time stamps for the root storage are not maintained in the root - /// directory entry. Rather, the root storage's creation and modification - /// time stamps are normally stored on the file itself in the file system. - /// - /// The Creation Time field in the root storage directory entry MUST be - /// all zeroes. The Modified Time field in the root storage directory - /// entry MAY be all zeroes. - /// - public DirectoryEntry[]? DirectoryEntries { get; set; } - } -} \ No newline at end of file diff --git a/SabreTools.Models/CFB/Constants.cs b/SabreTools.Models/CFB/Constants.cs deleted file mode 100644 index 403dddd..0000000 --- a/SabreTools.Models/CFB/Constants.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; - -namespace SabreTools.Models.CFB -{ - public static class Constants - { - public static readonly byte[] SignatureBytes = [0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1]; - - public const ulong SignatureUInt64 = 0xE11AB1A1E011CFD0; - - - /// - #region Class IDs - - /// - /// Installer Package (msi), Merge Module (msm), Patch Creation Properties (pcp) - /// - public static readonly Guid InstallerPackage = new("000c1084-0000-0000-c000-000000000046"); - - /// - /// Patch Package (msp) - /// - public static readonly Guid PatchPackage = new("000C1086-0000-0000-C000-000000000046"); - - /// - /// Transform (mst) - /// - public static readonly Guid Transform = new("000C1082-0000-0000-C000-000000000046"); - - #endregion - - /// - #region Property Set Format IDs - - /// - /// The Summary Information Property Set - /// - public static readonly Guid FMTID_SummaryInformation = new("F29F85E0-4FF9-1068-AB91-08002B27B3D9"); - - /// - /// The DocumentSummaryInformation and UserDefined Property Sets - /// - public static readonly Guid FMTID_DocSummaryInformation = new("D5CDD502-2E9C-101B-9397-08002B2CF9AE"); - - /// - /// The DocumentSummaryInformation and UserDefined Property Sets - /// - public static readonly Guid FMTID_UserDefinedProperties = new("D5CDD505-2E9C-101B-9397-08002B2CF9AE"); - - #endregion - } -} \ No newline at end of file diff --git a/SabreTools.Models/CFB/DirectoryEntry.cs b/SabreTools.Models/CFB/DirectoryEntry.cs deleted file mode 100644 index 21acefd..0000000 --- a/SabreTools.Models/CFB/DirectoryEntry.cs +++ /dev/null @@ -1,142 +0,0 @@ -using System; -using System.Runtime.InteropServices; - -namespace SabreTools.Models.CFB -{ - /// - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - public sealed class DirectoryEntry - { - /// - /// This field MUST contain a Unicode string for the storage or stream - /// name encoded in UTF-16. The name MUST be terminated with a UTF-16 - /// terminating null character. Thus, storage and stream names are limited - /// to 32 UTF-16 code points, including the terminating null character. - /// When locating an object in the compound file except for the root - /// storage, the directory entry name is compared by using a special - /// case-insensitive uppercase mapping, described in Red-Black Tree. - /// The following characters are illegal and MUST NOT be part of the - /// name: '/', '\', ':', '!'. - /// - /// 64 bytes - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] - public string? Name; - - /// - /// This field MUST match the length of the Directory Entry Name Unicode - /// string in bytes. The length MUST be a multiple of 2 and include the - /// terminating null character in the count. This length MUST NOT exceed 64, - /// the maximum size of the Directory Entry Name field. - /// - public ushort NameLength; - - /// - /// This field MUST be 0x00, 0x01, 0x02, or 0x05, depending on the - /// actual type of object. All other values are not valid. - /// - [MarshalAs(UnmanagedType.U1)] - public ObjectType ObjectType; - - /// - /// This field MUST be 0x00 (red) or 0x01 (black). All other values are not valid. - /// - [MarshalAs(UnmanagedType.U1)] - public ColorFlag ColorFlag; - - /// - /// This field contains the stream ID of the left sibling. If there - /// is no left sibling, the field MUST be set to NOSTREAM (0xFFFFFFFF). - /// - [MarshalAs(UnmanagedType.U4)] - public StreamID LeftSiblingID; - - /// - /// This field contains the stream ID of the right sibling. If there - /// is no right sibling, the field MUST be set to NOSTREAM (0xFFFFFFFF). - /// - [MarshalAs(UnmanagedType.U4)] - public StreamID RightSiblingID; - - /// - /// This field contains the stream ID of a child object. If there is no - /// child object, including all entries for stream objects, the field - /// MUST be set to NOSTREAM (0xFFFFFFFF). - /// - [MarshalAs(UnmanagedType.U4)] - public StreamID ChildID; - - /// - /// This field contains an object class GUID, if this entry is for a - /// storage object or root storage object. For a stream object, this field - /// MUST be set to all zeroes. A value containing all zeroes in a storage - /// or root storage directory entry is valid, and indicates that no object - /// class is associated with the storage. If an implementation of the file - /// format enables applications to create storage objects without explicitly - /// setting an object class GUID, it MUST write all zeroes by default. If - /// this value is not all zeroes, the object class GUID can be used as a - /// parameter to start applications. - /// - public Guid CLSID; - - /// - /// This field contains the user-defined flags if this entry is for a storage - /// object or root storage object. For a stream object, this field SHOULD be - /// set to all zeroes because many implementations provide no way for - /// applications to retrieve state bits from a stream object. If an - /// implementation of the file format enables applications to create storage - /// objects without explicitly setting state bits, it MUST write all zeroes - /// by default. - /// - public uint StateBits; - - /// - /// This field contains the creation time for a storage object, or all zeroes - /// to indicate that the creation time of the storage object was not recorded. - /// The Windows FILETIME structure is used to represent this field in UTC. - /// For a stream object, this field MUST be all zeroes. For a root storage - /// object, this field MUST be all zeroes, and the creation time is retrieved - /// or set on the compound file itself. - /// - public ulong CreationTime; - - /// - /// This field contains the modification time for a storage object, or all - /// zeroes to indicate that the modified time of the storage object was not - /// recorded. The Windows FILETIME structure is used to represent this field - /// in UTC. For a stream object, this field MUST be all zeroes. For a root - /// storage object, this field MAY<2> be set to all zeroes, and the modified - /// time is retrieved or set on the compound file itself. - /// - public ulong ModifiedTime; - - /// - /// This field contains the first sector location if this is a stream object. - /// For a root storage object, this field MUST contain the first sector of the - /// mini stream, if the mini stream exists. For a storage object, this field MUST - /// be set to all zeroes. - /// - public uint StartingSectorLocation; - - /// - /// This 64-bit integer field contains the size of the user-defined data if this - /// is a stream object. For a root storage object, this field contains the size - /// of the mini stream. For a storage object, this field MUST be set to all zeroes. - /// - /// - /// For a version 3 compound file 512-byte sector size, the value of this field MUST - /// be less than or equal to 0x80000000. (Equivalently, this requirement can be stated: - /// the size of a stream or of the mini stream in a version 3 compound file MUST be - /// less than or equal to 2 gigabytes (GB).) Note that as a consequence of this - /// requirement, the most significant 32 bits of this field MUST be zero in a version - /// 3 compound file. However, implementers should be aware that some older - /// implementations did not initialize the most significant 32 bits of this field, - /// and these bits might therefore be nonzero in files that are otherwise valid - /// version 3 compound files. Although this document does not normatively specify - /// parser behavior, it is recommended that parsers ignore the most significant 32 bits - /// of this field in version 3 compound files, treating it as if its value were zero, - /// unless there is a specific reason to do otherwise (for example, a parser whose - /// purpose is to verify the correctness of a compound file). - /// - public ulong StreamSize; - } -} \ No newline at end of file diff --git a/SabreTools.Models/CFB/Enums.cs b/SabreTools.Models/CFB/Enums.cs deleted file mode 100644 index e7dea50..0000000 --- a/SabreTools.Models/CFB/Enums.cs +++ /dev/null @@ -1,474 +0,0 @@ -namespace SabreTools.Models.CFB -{ - public enum ColorFlag : byte - { - Red = 0x00, - Black = 0x01, - } - - public enum ObjectType : byte - { - Unknown = 0x00, - StorageObject = 0x01, - StreamObject = 0x02, - RootStorageObject = 0x05, - } - - public enum SectorNumber : uint - { - /// - /// Regular sector number. - /// - REGSECT = 0x00000000, // 0x00000000 - 0xFFFFFFF9 - - /// - /// Maximum regular sector number. - /// - MAXREGSECT = 0xFFFFFFFA, - - /// - /// Reserved for future use. - /// - NotApplicable = 0xFFFFFFFB, - - /// - /// Specifies a DIFAT sector in the FAT. - /// - DIFSECT = 0xFFFFFFFC, - - /// - /// Specifies a FAT sector in the FAT. - /// - FATSECT = 0xFFFFFFFD, - - /// - /// End of a linked chain of sectors. - /// - ENDOFCHAIN = 0xFFFFFFFE, - - /// - /// Specifies an unallocated sector in the FAT, Mini FAT, or DIFAT. - /// - FREESECT = 0xFFFFFFFF, - } - - public enum StreamID : uint - { - /// - /// Regular stream ID to identify the directory entry. - /// - REGSID = 0x00000000, // 0x00000000 - 0xFFFFFFF9 - - /// - /// Maximum regular stream ID. - /// - MAXREGSID = 0xFFFFFFFA, - - /// - /// Terminator or empty pointer. - /// - NOSTREAM = 0xFFFFFFFF, - } - - /// - public enum SummaryInformationProperty : uint - { - /// - /// Title - /// - PIDSI_TITLE = 0x00000002, - - /// - /// Subject - /// - PIDSI_SUBJECT = 0x00000003, - - /// - /// Author - /// - PIDSI_AUTHOR = 0x00000004, - - /// - /// Keywords - /// - PIDSI_KEYWORDS = 0x00000005, - - /// - /// Comments - /// - PIDSI_COMMENTS = 0x00000006, - - /// - /// Template - /// - PIDSI_TEMPLATE = 0x00000007, - - /// - /// Last Saved By - /// - PIDSI_LASTAUTHOR = 0x00000008, - - /// - /// Revision Number - /// - PIDSI_REVNUMBER = 0x00000009, - - /// - /// Total Editing Time - /// - PIDSI_EDITTIME = 0x0000000A, - - /// - /// Last Printed - /// - PIDSI_LASTPRINTED = 0x0000000B, - - /// - /// Create Time/Date - /// - PIDSI_CREATE_DTM = 0x0000000C, - - /// - /// Last saved Time/Date - /// - PIDSI_LASTSAVE_DTM = 0x0000000D, - - /// - /// Number of Pages - /// - PIDSI_PAGECOUNT = 0x0000000E, - - /// - /// Number of Words - /// - PIDSI_WORDCOUNT = 0x0000000F, - - /// - /// Number of Characters - /// - PIDSI_CHARCOUNT = 0x00000010, - - /// - /// Thumbnail - /// - PIDSI_THUMBNAIL = 0x00000011, - - /// - /// Name of Creating Application - /// - PIDSI_APPNAME = 0x00000012, - - /// - /// Security - /// - PIDSI_SECURITY = 0x00000013, - } - - /// Also includes the DocumentSummaryInformation set - /// - public enum UserDefinedProperty : uint - { - /// - /// Category - A text string typed by the user that indicates what - /// category the file belongs to (memo, proposal, and so on). It - /// is useful for finding files of same type. - /// - PIDDSI_CATEGORY = 0x00000002, - - /// - /// PresentationTarget - Target format for presentation (35mm, - /// printer, video, and so on). - /// - PIDDSI_PRESFORMAT = 0x00000003, - - /// - /// Bytes - Number of bytes. - /// - PIDDSI_BYTECOUNT = 0x00000004, - - /// - /// Lines - Number of lines. - /// - PIDDSI_LINECOUNT = 0x00000005, - - /// - /// Paragraphs - Number of paragraphs. - /// - PIDDSI_PARCOUNT = 0x00000006, - - /// - /// Slides - Number of slides. - /// - PIDDSI_SLIDECOUNT = 0x00000007, - - /// - /// Notes - Number of pages that contain notes. - /// - PIDDSI_NOTECOUNT = 0x00000008, - - /// - /// HiddenSlides - Number of slides that are hidden. - /// - PIDDSI_HIDDENCOUNT = 0x00000009, - - /// - /// MMClips - Number of sound or video clips. - /// - PIDDSI_MMCLIPCOUNT = 0x0000000A, - - /// - /// ScaleCrop - Set to True (-1) when scaling of the thumbnail - - /// is desired. If not set, cropping is desired. - /// - PIDDSI_SCALE = 0x0000000B, - - /// - /// HeadingPairs - Internally used property indicating the - /// grouping of different document parts and the number of - /// items in each group. The titles of the document parts are - /// stored in the TitlesofParts property. The HeadingPairs - /// property is stored as a vector of variants, in repeating - /// pairs of VT_LPSTR (or VT_LPWSTR) and VT_I4 values. The - /// VT_LPSTR value represents a heading name, and the VT_I4 - /// value indicates the count of document parts under that heading. - /// - PIDDSI_HEADINGPAIR = 0x0000000C, - - /// - /// TitlesofParts - Names of document parts. - /// - PIDDSI_DOCPARTS = 0x0000000D, - - /// - /// Manager - Manager of the project. - /// - PIDDSI_MANAGER = 0x0000000E, - - /// - /// Company - Company name. - /// - PIDDSI_COMPANY = 0x0000000F, - - /// - /// LinksUpToDate - Boolean value to indicate whether the custom - /// links are hampered by excessive noise, for all applications. - /// - PIDDSI_LINKSDIRTY = 0x00000010, - } - - /// - public enum VariantType : ushort - { - /// - /// The type of the contained field is undefined. When this flag is - /// specified, the VARIANT MUST NOT contain a data field. - /// - VT_EMPTY = 0x0000, - - /// - /// The type of the contained field is NULL. When this flag is - /// specified, the VARIANT MUST NOT contain a data field. - /// - VT_NULL = 0x0001, - - /// - /// Either the specified type, or the type of the element or contained - /// field MUST be a 2-byte signed integer. - /// - VT_I2 = 0x0002, - - /// - /// Either the specified type, or the type of the element or contained - /// field MUST be a 4-byte signed integer. - /// - VT_I4 = 0x0003, - - /// - /// Either the specified type, or the type of the element or contained - /// field MUST be a 4-byte IEEE floating-point number. - /// - VT_R4 = 0x0004, - - /// - /// Either the specified type, or the type of the element or contained - /// field MUST be an 8-byte IEEE floating-point number. - /// - VT_R8 = 0x0005, - - /// - /// Either the specified type, or the type of the element or contained - /// field MUST be CURRENCY. - /// - VT_CY = 0x0006, - - /// - /// Either the specified type, or the type of the element or contained - /// field MUST be DATE. - /// - VT_DATE = 0x0007, - - /// - /// Either the specified type, or the type of the element or contained - /// field MUST be BSTR. - /// - VT_BSTR = 0x0008, - - /// - /// Either the specified type, or the type of the element or contained - /// field MUST be a pointer to IDispatch. - /// - VT_DISPATCH = 0x0009, - - /// - /// Either the specified type, or the type of the element or contained - /// field MUST be HRESULT. - /// - VT_ERROR = 0x000A, - - /// - /// Either the specified type, or the type of the element or contained - /// field MUST be VARIANT_BOOL. - /// - VT_BOOL = 0x000B, - - /// - /// Either the specified type, or the type of the element or contained - /// field MUST be VARIANT. It MUST appear with the bit flag VT_BYREF. - /// - VT_VARIANT = 0x000C, - - /// - /// Either the specified type, or the type of the element or contained - /// field MUST be a pointer to IUnknown. - /// - VT_UNKNOWN = 0x000D, - - /// - /// Either the specified type, or the type of the element or contained - /// field MUST be DECIMAL. - /// - VT_DECIMAL = 0x000E, - - /// - /// Either the specified type, or the type of the element or contained - /// field MUST be a 1-byte integer. - /// - VT_I1 = 0x0010, - - /// - /// Either the specified type, or the type of the element or contained - /// field MUST be a 1-byte unsigned integer. - /// - VT_UI1 = 0x0011, - - /// - /// Either the specified type, or the type of the element or contained - /// field MUST be a 2-byte unsigned integer. - /// - VT_UI2 = 0x0012, - - /// - /// Either the specified type, or the type of the element or contained - /// field MUST be a 4-byte unsigned integer. - /// - VT_UI4 = 0x0013, - - /// - /// Either the specified type, or the type of the element or contained - /// field MUST be an 8-byte signed integer. - /// - VT_I8 = 0x0014, - - /// - /// Either the specified type, or the type of the element or contained - /// field MUST be an 8-byte unsigned integer. - /// - VT_UI8 = 0x0015, - - /// - /// Either the specified type, or the type of the element or contained - /// field MUST be a 4-byte signed integer. - /// - VT_INT = 0x0016, - - /// - /// Either the specified type, or the type of the element or contained - /// field MUST be a 4-byte unsigned integer. - /// - VT_UINT = 0x0017, - - /// - /// The specified type MUST be void. - /// - VT_VOID = 0x0018, - - /// - /// The specified type MUST be HRESULT. - /// - VT_HRESULT = 0x0019, - - /// - /// The specified type MUST be a unique pointer. - /// - VT_PTR = 0x001A, - - /// - /// The specified type MUST be SAFEARRAY. - /// - VT_SAFEARRAY = 0x001B, - - /// - /// The specified type MUST be a fixed-size array. - /// - VT_CARRAY = 0x001C, - - /// - /// The specified type MUST be user defined. - /// - VT_USERDEFINED = 0x001D, - - /// - /// The specified type MUST be a NULL-terminated string. - /// - VT_LPSTR = 0x001E, - - /// - /// The specified type MUST be a zero-terminated string of - /// UNICODE characters. - /// - VT_LPWSTR = 0x001F, - - /// - /// The type of the element or contained field MUST be a BRECORD. - /// - VT_RECORD = 0x0024, - - /// - /// The specified type MUST be either a 4-byte or an 8-byte signed - /// integer. The size of the integer is platform specific and - /// determines the system pointer size value. - /// - VT_INT_PTR = 0x0025, - - /// - /// The specified type MUST be either a 4 byte or an 8 byte unsigned - /// integer. The size of the integer is platform specific and - /// determines the system pointer size value - /// - VT_UINT_PTR = 0x0026, - - /// - /// The type of the element or contained field MUST be a SAFEARRAY. - /// - VT_ARRAY = 0x2000, - - /// - /// The type of the element or contained field MUST be a pointer to - /// one of the types listed in the previous rows of this table. If - /// present, this bit flag MUST appear in a VARIANT discriminant - /// with one of the previous flags. - /// - VT_BYREF = 0x4000 - } -} \ No newline at end of file diff --git a/SabreTools.Models/CFB/FileHeader.cs b/SabreTools.Models/CFB/FileHeader.cs deleted file mode 100644 index 5714fe8..0000000 --- a/SabreTools.Models/CFB/FileHeader.cs +++ /dev/null @@ -1,133 +0,0 @@ -using System; -using System.Runtime.InteropServices; - -namespace SabreTools.Models.CFB -{ - /// - [StructLayout(LayoutKind.Sequential)] - public sealed class FileHeader - { - /// - /// Iddentification signature for the compound file structure, and MUST be - /// set to the value 0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1. - /// - public ulong Signature; - - /// - /// Reserved and unused class ID that MUST be set to all zeroes (CLSID_NULL) - /// - public Guid CLSID; - - /// - /// Version number for nonbreaking changes. This field SHOULD be set to - /// 0x003E if the major version field is either 0x0003 or 0x0004. - /// - public ushort MinorVersion; - - /// - /// Version number for breaking changes. This field MUST be set to either - /// 0x0003 (version 3) or 0x0004 (version 4). - /// - public ushort MajorVersion; - - /// - /// This field MUST be set to 0xFFFE. This field is a byte order mark for - /// all integer fields, specifying little-endian byte order. - /// - public ushort ByteOrder; - - /// - /// This field MUST be set to 0x0009, or 0x000c, depending on the Major - /// Version field. This field specifies the sector size of the compound file - /// as a power of 2. - /// - /// If Major Version is 3, the Sector Shift MUST be 0x0009, specifying a - /// sector size of 512 bytes. - /// - /// If Major Version is 4, the Sector Shift MUST be 0x000C, specifying a - /// sector size of 4096 bytes. - /// - public ushort SectorShift; - - /// - /// This field MUST be set to 0x0006. This field specifies the sector size - /// of the Mini Stream as a power of 2. The sector size of the Mini Stream - /// MUST be 64 bytes. - /// - public ushort MiniSectorShift; - - /// - /// This field MUST be set to all zeroes. - /// - /// 6 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)] - public byte[]? Reserved; - - /// - /// This integer field contains the count of the number of directory sectors - /// in the compound file. - /// - /// If Major Version is 3, the Number of Directory Sectors MUST be zero. This - /// field is not supported for version 3 compound files. - /// - public uint NumberOfDirectorySectors; - - /// - /// This integer field contains the count of the number of FAT sectors in the - /// compound file. - /// - public uint NumberOfFATSectors; - - /// - /// This integer field contains the starting sector number for the directory stream. - /// - public uint FirstDirectorySectorLocation; - - /// - /// This integer field MAY contain a sequence number that is incremented every time - /// the compound file is saved by an implementation that supports file transactions. - /// This is the field that MUST be set to all zeroes if file transactions are not - /// implemented. - /// - public uint TransactionSignatureNumber; - - /// - /// This integer field MUST be set to 0x00001000. This field specifies the maximum - /// size of a user-defined data stream that is allocated from the mini FAT and mini - /// stream, and that cutoff is 4,096 bytes. Any user-defined data stream that is - /// greater than or equal to this cutoff size must be allocated as normal sectors from - /// the FAT. - /// - public uint MiniStreamCutoffSize; - - /// - /// This integer field contains the starting sector number for the mini FAT. - /// - public uint FirstMiniFATSectorLocation; - - /// - /// This integer field contains the count of the number of mini FAT sectors in the - /// compound file. - /// - public uint NumberOfMiniFATSectors; - - /// - /// This integer field contains the starting sector number for the DIFAT. - /// - public uint FirstDIFATSectorLocation; - - /// - /// This integer field contains the count of the number of DIFAT sectors in the - /// compound file. - /// - public uint NumberOfDIFATSectors; - - /// - /// This array of 32-bit integer fields contains the first 109 FAT sector - /// locations of the compound file - /// - /// 109 entries - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 109)] - public SectorNumber[]? DIFAT; - } -} \ No newline at end of file diff --git a/SabreTools.Models/CFB/SummaryInformation.cs b/SabreTools.Models/CFB/SummaryInformation.cs deleted file mode 100644 index 6a9f864..0000000 --- a/SabreTools.Models/CFB/SummaryInformation.cs +++ /dev/null @@ -1,82 +0,0 @@ -using System; - -namespace SabreTools.Models.CFB -{ - /// - public sealed class SummaryInformation - { - #region Set Header - - /// - /// This field MUST be set to 0xFFFE. This field is a byte order mark for - /// all integer fields, specifying little-endian byte order. - /// - public ushort ByteOrder { get; set; } - - /// - /// Format - /// - public ushort Format { get; set; } - - /// - /// Build - /// - public ushort Build { get; set; } - - /// - /// Platform ID - /// - public ushort PlatformID { get; set; } - - /// - /// CLSID - /// - public Guid CLSID { get; set; } - - /// - /// 4 bytes of reserved data - /// - public byte[]? Reserved { get; set; } - - #endregion - - #region Format Header - - /// - /// Format ID, should be - /// - public Guid FormatID { get; set; } - - /// - /// 16 bytes of unknown data - /// - public byte[]? Unknown { get; set; } - - #endregion - - #region Section Header - - /// - /// Location of the section - /// - public uint Offset { get; set; } - - /// - /// Section count(?) - /// - public uint SectionCount { get; set; } - - /// - /// Property count - /// - public uint PropertyCount { get; set; } - - /// - /// Properties - /// - /// Each Variant might be followed by an index and offset value - public Variant[]? Properties { get; set; } - - #endregion - } -} \ No newline at end of file diff --git a/SabreTools.Models/CFB/Variant.cs b/SabreTools.Models/CFB/Variant.cs deleted file mode 100644 index 9473cbb..0000000 --- a/SabreTools.Models/CFB/Variant.cs +++ /dev/null @@ -1,45 +0,0 @@ -namespace SabreTools.Models.CFB -{ - /// - /// VARIANT is a container for a union that can hold many types of data. - /// - /// - public sealed class Variant - { - /// - /// MUST be set to the size, in quad words (64 bits), of the structure. - /// - public uint Size { get; set; } - - /// - /// MUST be set to 0 and MUST be ignored by the recipient. - /// - public uint RpcReserved { get; set; } - - /// - /// MUST be set to one of the values specified with a "V". - /// - public VariantType VariantType { get; set; } - - /// - /// MAY be set to 0 and MUST be ignored by the recipient. - /// - public ushort Reserved1 { get; set; } - - /// - /// MAY be set to 0 and MUST be ignored by the recipient. - /// - public ushort Reserved2 { get; set; } - - /// - /// MAY be set to 0 and MUST be ignored by the recipient. - /// - public ushort Reserved3 { get; set; } - - /// - /// MUST contain an instance of the type, according to the value - /// in the field. - /// - public object? Union { get; set; } - } -} \ No newline at end of file diff --git a/SabreTools.Models/CHD/CompressedMapEntryV5.cs b/SabreTools.Models/CHD/CompressedMapEntryV5.cs deleted file mode 100644 index 0b21665..0000000 --- a/SabreTools.Models/CHD/CompressedMapEntryV5.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.CHD -{ - /// - [StructLayout(LayoutKind.Sequential)] - public sealed class CompressedMapEntryV5 - { - /// - /// Compression type - /// - public byte Compression; - - /// - /// Compressed length - /// - /// Actually UInt24 - public uint CompLength; - - /// - /// Offset - /// - /// Actually UInt48 - public ulong Offset; - - /// - /// CRC-16 of the data - /// - public ushort CRC; - } -} diff --git a/SabreTools.Models/CHD/CompressedMapHeaderV5.cs b/SabreTools.Models/CHD/CompressedMapHeaderV5.cs deleted file mode 100644 index 1ec0e35..0000000 --- a/SabreTools.Models/CHD/CompressedMapHeaderV5.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.CHD -{ - /// - [StructLayout(LayoutKind.Sequential)] - public sealed class CompressedMapHeaderV5 - { - /// - /// Length of compressed map - /// - public uint Length; - - /// - /// Offset of first block - /// - /// Actually UInt48 - public ulong DataStart; - - /// - /// CRC-16 of the map - /// - public ushort CRC; - - /// - /// Bits used to encode complength - /// - public byte LengthBits; - - /// - /// Bits used to encode self-refs - /// - public byte HunkBits; - - /// - /// Bits used to encode parent unit refs - /// - public byte ParentUnitBits; - - /// - /// Future use - /// - public byte Reserved; - } -} diff --git a/SabreTools.Models/CHD/Constants.cs b/SabreTools.Models/CHD/Constants.cs deleted file mode 100644 index 863c712..0000000 --- a/SabreTools.Models/CHD/Constants.cs +++ /dev/null @@ -1,25 +0,0 @@ -namespace SabreTools.Models.CHD -{ - public static class Constants - { - public static readonly byte[] SignatureBytes = [0x4D, 0x43, 0x6F, 0x6D, 0x70, 0x72, 0x48, 0x44]; - - public const string SignatureString = "MComprHD"; - - #region Header Sizes - - public const int HeaderV1Size = 76; - public const int HeaderV2Size = 80; - public const int HeaderV3Size = 120; - public const int HeaderV4Size = 108; - public const int HeaderV5Size = 124; - - #endregion - - #region Metadata Parameters - - public const uint CHDMETAINDEX_APPEND = uint.MaxValue; - - #endregion - } -} \ No newline at end of file diff --git a/SabreTools.Models/CHD/Enums.cs b/SabreTools.Models/CHD/Enums.cs deleted file mode 100644 index a492b87..0000000 --- a/SabreTools.Models/CHD/Enums.cs +++ /dev/null @@ -1,358 +0,0 @@ -using System; - -namespace SabreTools.Models.CHD -{ - /// - public enum AVHuffCodec - { - DECOMPRESS_CONFIG = 1, - } - - /// - public enum CodecType : uint - { - CHD_CODEC_NONE = 0, - - #region General Codecs - - /// "zlib" - ZLIB = 0x7a6c6962, - - /// "zstd" - ZSTD = 0x7a737464, - - /// "lzma" - LZMA = 0x6c7a6d61, - - /// "huff" - HUFFMAN = 0x68756666, - - /// "flac" - FLAC = 0x666c6163, - - #endregion - - #region General Codecs with CD Frontend - - /// "cdzl" - CD_ZLIB = 0x63647a6c, - - /// "cdzs" - CD_ZSTD = 0x63647a73, - - /// "cdlz" - CD_LZMA = 0x63646c7a, - - /// "cdfl" - CD_FLAC = 0x6364666c, - - #endregion - - #region A/V Codecs - - /// "avhu" - AVHUFF = 0x61766875, - - #endregion - - #region Pseudo-Codecs Returned by hunk_info - - /// - /// Copy of another hunk - /// - CHD_CODEC_SELF = 1, - - /// - /// Copy of a parent's hunk - /// - CHD_CODEC_PARENT = 2, - - /// - /// Legacy "mini" 8-byte repeat - /// - CHD_CODEC_MINI = 3, - - #endregion - } - - /// - public enum CompressionType : uint - { - #region V1 - - CHDCOMPRESSION_NONE = 0, - CHDCOMPRESSION_ZLIB = 1, - - #endregion - - #region V3 - - CHDCOMPRESSION_ZLIB_PLUS = 2, - - #endregion - - #region V4 - - CHDCOMPRESSION_AV = 3, - - #endregion - } - - /// - public enum Error : uint - { - NO_INTERFACE = 1, - NOT_OPEN, - ALREADY_OPEN, - INVALID_FILE, - INVALID_DATA, - REQUIRES_PARENT, - FILE_NOT_WRITEABLE, - CODEC_ERROR, - INVALID_PARENT, - HUNK_OUT_OF_RANGE, - DECOMPRESSION_ERROR, - COMPRESSION_ERROR, - CANT_VERIFY, - METADATA_NOT_FOUND, - INVALID_METADATA_SIZE, - UNSUPPORTED_VERSION, - VERIFY_INCOMPLETE, - INVALID_METADATA, - INVALID_STATE, - OPERATION_PENDING, - UNSUPPORTED_FORMAT, - UNKNOWN_COMPRESSION, - WALKING_PARENT, - COMPRESSING - } - - /// - [Flags] - public enum Flags : uint - { - /// - /// Set if this drive has a parent - /// - DriveHasParent = 0x00000001, - - /// - /// Set if this drive allows writes - /// - DriveAllowsWrites = 0x00000002, - } - - /// - [Flags] - public enum MetadataFlags : byte - { - /// - /// Indicates data is checksummed - /// - CHD_MDFLAGS_CHECKSUM = 0x01, - } - - /// - public enum MetadataTag : uint - { - CHDMETATAG_WILDCARD = 0, - - #region Hard Disk - - /// - /// Standard hard disk metadata - /// - /// "GDDD" - HARD_DISK_METADATA_TAG = 0x47444444, - - /// - /// Hard disk identify information - /// - /// "IDNT" - HARD_DISK_IDENT_METADATA_TAG = 0x49444e54, - - /// - /// Hard disk key information - /// - /// "KEY " - HARD_DISK_KEY_METADATA_TAG = 0x4b455920, - - #endregion - - #region PCMCIA - - /// - /// PCMCIA CIS information - /// - /// "CIS " - PCMCIA_CIS_METADATA_TAG = 0x43495320, - - #endregion - - #region CD-ROM - - /// "CHCD" - CDROM_OLD_METADATA_TAG = 0x43484344, - - /// "CHTR" - CDROM_TRACK_METADATA_TAG = 0x43485452, - - /// "CHT2" - CDROM_TRACK_METADATA2_TAG = 0x43485432, - - #endregion - - #region GD-ROM - - /// "CHGT" - GDROM_OLD_METADATA_TAG = 0x43484754, - - /// "CHGD" - GDROM_TRACK_METADATA_TAG = 0x43484744, - - #endregion - - #region DVD - - /// - /// Standard DVD metadata - /// - /// "DVD " - DVD_METADATA_TAG = 0x44564420, - - #endregion - - #region A/V - - /// - /// Standard A/V metadata - /// - /// "AVAV" - AV_METADATA_TAG = 0x41564156, - - /// - /// A/V laserdisc frame metadata - /// - /// "AVLD" - AV_LD_METADATA_TAG = 0x41564c44, - - #endregion - } - - /// - public enum V34EntryType : uint - { - /// - /// Invalid type - /// - V34_MAP_ENTRY_TYPE_INVALID = 0, - - /// - /// Standard compression - /// - V34_MAP_ENTRY_TYPE_COMPRESSED = 1, - - /// - /// Uncompressed data - /// - V34_MAP_ENTRY_TYPE_UNCOMPRESSED = 2, - - /// - /// Mini: use offset as raw data - /// - V34_MAP_ENTRY_TYPE_MINI = 3, - - /// - /// Same as another hunk in this file - /// - V34_MAP_ENTRY_TYPE_SELF_HUNK = 4, - - /// - /// Same as a hunk in the parent file - /// - V34_MAP_ENTRY_TYPE_PARENT_HUNK = 5, - - /// - /// Compressed with secondary algorithm (usually FLAC CDDA) - /// - V34_MAP_ENTRY_TYPE_2ND_COMPRESSED = 6, - } - - /// - public enum V5CompressionType : uint - { - // These types are live when running - - /// - /// Codec #0 - /// - COMPRESSION_TYPE_0 = 0, - - /// - /// Codec #1 - /// - COMPRESSION_TYPE_1 = 1, - - /// - /// Codec #2 - /// - COMPRESSION_TYPE_2 = 2, - - /// - /// Codec #3 - /// - COMPRESSION_TYPE_3 = 3, - - /// - /// No compression; implicit length = hunkbytes - /// - COMPRESSION_NONE = 4, - - /// - /// Same as another block in this CHD - /// - COMPRESSION_SELF = 5, - - /// - /// Same as a hunk's worth of units in the parent CHD - /// - COMPRESSION_PARENT = 6, - - // These additional pseudo-types are used for compressed encodings - - /// - /// Start of small RLE run (4-bit length) - /// - COMPRESSION_RLE_SMALL, - - /// - /// Start of large RLE run (8-bit length) - /// - COMPRESSION_RLE_LARGE, - - /// - /// Same as the last COMPRESSION_SELF block - /// - COMPRESSION_SELF_0, - - /// - /// Same as the last COMPRESSION_SELF block + 1 - /// - COMPRESSION_SELF_1, - - /// - /// Same block in the parent - /// - COMPRESSION_PARENT_SELF, - - /// - /// Same as the last COMPRESSION_PARENT block - /// - COMPRESSION_PARENT_0, - - /// - /// Same as the last COMPRESSION_PARENT block + 1 - /// - COMPRESSION_PARENT_1 - } -} \ No newline at end of file diff --git a/SabreTools.Models/CHD/Header.cs b/SabreTools.Models/CHD/Header.cs deleted file mode 100644 index 2e97aca..0000000 --- a/SabreTools.Models/CHD/Header.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.CHD -{ - /// - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - public abstract class Header - { - /// - /// 'MComprHD' - /// - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)] - public string? Tag; - - /// - /// Length of header (including tag and length fields) - /// - public uint Length; - - /// - /// Drive format version - /// - public uint Version; - } -} \ No newline at end of file diff --git a/SabreTools.Models/CHD/HeaderV1.cs b/SabreTools.Models/CHD/HeaderV1.cs deleted file mode 100644 index ff73e89..0000000 --- a/SabreTools.Models/CHD/HeaderV1.cs +++ /dev/null @@ -1,58 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.CHD -{ - /// - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - public class HeaderV1 : Header - { - /// - /// Flags - /// - [MarshalAs(UnmanagedType.U4)] - public Flags Flags; - - /// - /// Compression type - /// - [MarshalAs(UnmanagedType.U4)] - public CompressionType Compression; - - /// - /// 512-byte sectors per hunk - /// - public uint HunkSize; - - /// - /// Total # of hunks represented - /// - public uint TotalHunks; - - /// - /// Number of cylinders on hard disk - /// - public uint Cylinders; - - /// - /// Number of heads on hard disk - /// - public uint Heads; - - /// - /// Number of sectors on hard disk - /// - public uint Sectors; - - /// - /// MD5 checksum of raw data - /// - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] - public byte[] MD5 = new byte[16]; - - /// - /// MD5 checksum of parent file - /// - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] - public byte[] ParentMD5 = new byte[16]; - } -} diff --git a/SabreTools.Models/CHD/HeaderV2.cs b/SabreTools.Models/CHD/HeaderV2.cs deleted file mode 100644 index 873633c..0000000 --- a/SabreTools.Models/CHD/HeaderV2.cs +++ /dev/null @@ -1,63 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.CHD -{ - /// - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - public class HeaderV2 : Header - { - /// - /// Flags - /// - [MarshalAs(UnmanagedType.U4)] - public Flags Flags; - - /// - /// Compression type - /// - [MarshalAs(UnmanagedType.U4)] - public CompressionType Compression; - - /// - /// Seclen-byte sectors per hunk - /// - public uint HunkSize; - - /// - /// Total # of hunks represented - /// - public uint TotalHunks; - - /// - /// Number of cylinders on hard disk - /// - public uint Cylinders; - - /// - /// Number of heads on hard disk - /// - public uint Heads; - - /// - /// Number of sectors on hard disk - /// - public uint Sectors; - - /// - /// MD5 checksum of raw data - /// - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] - public byte[]? MD5 = new byte[16]; - - /// - /// MD5 checksum of parent file - /// - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] - public byte[]? ParentMD5 = new byte[16]; - - /// - /// Number of bytes per sector - /// - public uint BytesPerSector; - } -} diff --git a/SabreTools.Models/CHD/HeaderV3.cs b/SabreTools.Models/CHD/HeaderV3.cs deleted file mode 100644 index 9b235ab..0000000 --- a/SabreTools.Models/CHD/HeaderV3.cs +++ /dev/null @@ -1,65 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.CHD -{ - /// - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - public class HeaderV3 : Header - { - /// - /// Flags - /// - [MarshalAs(UnmanagedType.U4)] - public Flags Flags; - - /// - /// Compression type - /// - [MarshalAs(UnmanagedType.U4)] - public CompressionType Compression; - - /// - /// Total # of hunks represented - /// - public uint TotalHunks; - - /// - /// Logical size of the data (in bytes) - /// - public ulong LogicalBytes; - - /// - /// Offset to the first blob of metadata - /// - public ulong MetaOffset; - - /// - /// MD5 checksum of raw data - /// - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] - public byte[]? MD5 = new byte[16]; - - /// - /// MD5 checksum of parent file - /// - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] - public byte[]? ParentMD5 = new byte[16]; - - /// - /// Number of bytes per hunk - /// - public uint HunkBytes; - - /// - /// SHA1 checksum of raw data - /// - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)] - public byte[]? SHA1 = new byte[20]; - - /// - /// SHA1 checksum of parent file - /// - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)] - public byte[]? ParentSHA1 = new byte[20]; - } -} diff --git a/SabreTools.Models/CHD/HeaderV4.cs b/SabreTools.Models/CHD/HeaderV4.cs deleted file mode 100644 index 069ea60..0000000 --- a/SabreTools.Models/CHD/HeaderV4.cs +++ /dev/null @@ -1,59 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.CHD -{ - /// - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - public class HeaderV4 : Header - { - /// - /// Flags - /// - [MarshalAs(UnmanagedType.U4)] - public Flags Flags; - - /// - /// Compression type - /// - [MarshalAs(UnmanagedType.U4)] - public CompressionType Compression; - - /// - /// Total # of hunks represented - /// - public uint TotalHunks; - - /// - /// Logical size of the data (in bytes) - /// - public ulong LogicalBytes; - - /// - /// Offset to the first blob of metadata - /// - public ulong MetaOffset; - - /// - /// Number of bytes per hunk - /// - public uint HunkBytes; - - /// - /// Combined raw+meta SHA1 - /// - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)] - public byte[]? SHA1 = new byte[20]; - - /// - /// Combined raw+meta SHA1 of parent - /// - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)] - public byte[]? ParentSHA1 = new byte[20]; - - /// - /// Raw data SHA1 - /// - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)] - public byte[]? RawSHA1 = new byte[20]; - } -} diff --git a/SabreTools.Models/CHD/HeaderV5.cs b/SabreTools.Models/CHD/HeaderV5.cs deleted file mode 100644 index c3bfd02..0000000 --- a/SabreTools.Models/CHD/HeaderV5.cs +++ /dev/null @@ -1,54 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.CHD -{ - /// - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - public class HeaderV5 : Header - { - /// - /// Which custom compressors are used? - /// - public CodecType[] Compressors { get; set; } = new CodecType[4]; - - /// - /// Logical size of the data (in bytes) - /// - public ulong LogicalBytes { get; set; } - - /// - /// Offset to the map - /// - public ulong MapOffset { get; set; } - - /// - /// Offset to the first blob of metadata - /// - public ulong MetaOffset { get; set; } - - /// - /// Number of bytes per hunk (512k maximum) - /// - public uint HunkBytes { get; set; } - - /// - /// Number of bytes per unit within each hunk - /// - public uint UnitBytes { get; set; } - - /// - /// Raw data SHA1 - /// - public byte[]? RawSHA1 { get; set; } - - /// - /// Combined raw+meta SHA1 - /// - public byte[]? SHA1 { get; set; } - - /// - /// Combined raw+meta SHA1 of parent - /// - public byte[]? ParentSHA1 { get; set; } - } -} diff --git a/SabreTools.Models/CHD/MapV1.cs b/SabreTools.Models/CHD/MapV1.cs deleted file mode 100644 index e7efc23..0000000 --- a/SabreTools.Models/CHD/MapV1.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.CHD -{ - /// - [StructLayout(LayoutKind.Sequential)] - public sealed class MapV1 - { - /// - /// Starting offset within the file - /// - public ulong StartingOffset; - - /// - /// Length of data; If == hunksize, data is uncompressed - /// - public ulong Length; - } -} diff --git a/SabreTools.Models/CHD/MapV3.cs b/SabreTools.Models/CHD/MapV3.cs deleted file mode 100644 index 1ed611d..0000000 --- a/SabreTools.Models/CHD/MapV3.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.CHD -{ - /// - [StructLayout(LayoutKind.Sequential)] - public sealed class MapV3 - { - /// - /// Starting offset within the file - /// - public ulong StartingOffset; - - /// - /// 32-bit CRC of the uncompressed data - /// - public uint CRC32; - - /// - /// Lower 16 bits of length - /// - public ushort LengthLo; - - /// - /// Upper 8 bits of length - /// - public byte LengthHi; - - /// - /// Flags, indicating compression info - /// - public byte Flags; - } -} diff --git a/SabreTools.Models/CHD/MetadataEntry.cs b/SabreTools.Models/CHD/MetadataEntry.cs deleted file mode 100644 index 16c538b..0000000 --- a/SabreTools.Models/CHD/MetadataEntry.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.CHD -{ - /// - [StructLayout(LayoutKind.Sequential)] - public sealed class MetadataEntry - { - /// - /// Offset within the file of the header - /// - public ulong Offset; - - /// - /// Offset within the file of the next header - /// - public ulong Next; - - /// - /// Offset within the file of the previous header - /// - public ulong Prev; - - /// - /// Length of the metadata - /// - public uint Length; - - /// - /// Metadata tag - /// - public MetadataTag Metatag; - - /// - /// Flag bits - /// - public MetadataFlags Flags; - } -} diff --git a/SabreTools.Models/CHD/MetadataHash.cs b/SabreTools.Models/CHD/MetadataHash.cs deleted file mode 100644 index 64bbae9..0000000 --- a/SabreTools.Models/CHD/MetadataHash.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.CHD -{ - /// - [StructLayout(LayoutKind.Sequential)] - public sealed class MetadataHash - { - /// - /// Tag of the metadata in big-endian - /// - public MetadataTag Tag; - - /// - /// Hash data - /// - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)] - public byte[]? SHA1; - } -} diff --git a/SabreTools.Models/CHD/UncompressedMapV5.cs b/SabreTools.Models/CHD/UncompressedMapV5.cs deleted file mode 100644 index e9b20b2..0000000 --- a/SabreTools.Models/CHD/UncompressedMapV5.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.CHD -{ - /// - [StructLayout(LayoutKind.Sequential)] - public class UncompressedMapV5 - { - /// - /// Starting offset / hunk size - /// - public uint StartingOffset; - } -} diff --git a/SabreTools.Models/LDSCRYPT/Constants.cs b/SabreTools.Models/LDSCRYPT/Constants.cs deleted file mode 100644 index 60beb66..0000000 --- a/SabreTools.Models/LDSCRYPT/Constants.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace SabreTools.Models.LDSCRYPT -{ - public static class Constants - { - public static readonly byte[] SignatureBytes = [0x4C, 0x44, 0x53, 0x43, 0x52, 0x59, 0x50, 0x54]; - - public const string SignatureString = "LDSCRYPT"; - } -} \ No newline at end of file diff --git a/SabreTools.Models/LDSCRYPT/EncryptedFile.cs b/SabreTools.Models/LDSCRYPT/EncryptedFile.cs deleted file mode 100644 index cf73ad4..0000000 --- a/SabreTools.Models/LDSCRYPT/EncryptedFile.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace SabreTools.Models.LDSCRYPT -{ - /// - /// This is a placeholder model for future work - /// - public class EncryptedFile - { - - } -} diff --git a/SabreTools.Models/N3DS/ARM11KernelCapabilities.cs b/SabreTools.Models/N3DS/ARM11KernelCapabilities.cs deleted file mode 100644 index 6673a1a..0000000 --- a/SabreTools.Models/N3DS/ARM11KernelCapabilities.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.N3DS -{ - /// - /// The kernel capability descriptors are passed to svcCreateProcess. - /// - /// - [StructLayout(LayoutKind.Sequential)] - public sealed class ARM11KernelCapabilities - { - /// - /// Descriptors - /// ------------------- - /// Pattern of bits 20-31 Type Fields - /// 0b1110xxxxxxxx Interrupt info - /// 0b11110xxxxxxx System call mask Bits 24-26: System call mask table index; Bits 0-23: mask - /// 0b1111110xxxxx Kernel release version Bits 8-15: Major version; Bits 0-7: Minor version - /// 0b11111110xxxx Handle table size Bits 0-18: size - /// 0b111111110xxx Kernel flags - /// 0b11111111100x Map address range Describes a memory mapping like the 0b111111111110 descriptor, but an entire range rather than a single page is mapped.Another 0b11111111100x descriptor must follow this one to denote the(exclusive) end of the address range to map. - /// 0b111111111110 Map memory page Bits 0-19: page index to map(virtual address >> 12; the physical address is determined per-page according to Memory layout); Bit 20: Map read-only(otherwise read-write) - /// - /// ARM11 Kernel Flags - /// ------------------- - /// Bit Description - /// 0 Allow debug - /// 1 Force debug - /// 2 Allow non-alphanum - /// 3 Shared page writing - /// 4 Privilege priority - /// 5 Allow main() args - /// 6 Shared device memory - /// 7 Runnable on sleep - /// 8-11 Memory type(1: application, 2: system, 3: base) - /// 12 Special memory - /// 13 Process has access to CPU core 2 (New3DS only) - /// - /// TODO: Make enum for flag values - /// 28 entries - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 28)] - public uint[]? Descriptors; - - /// - /// Reserved - /// - /// 0x10 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x10)] - public byte[]? Reserved; - } -} diff --git a/SabreTools.Models/N3DS/ARM11LocalSystemCapabilities.cs b/SabreTools.Models/N3DS/ARM11LocalSystemCapabilities.cs deleted file mode 100644 index 270f04b..0000000 --- a/SabreTools.Models/N3DS/ARM11LocalSystemCapabilities.cs +++ /dev/null @@ -1,81 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.N3DS -{ - /// - [StructLayout(LayoutKind.Sequential)] - public sealed class ARM11LocalSystemCapabilities - { - /// - /// Program ID - /// - public ulong ProgramID; - - /// - /// Core version (The Title ID low of the required FIRM) - /// - public uint CoreVersion; - - /// - /// Flag1 (implemented starting from 8.0.0-18). - /// - [MarshalAs(UnmanagedType.U1)] - public ARM11LSCFlag1 Flag1; - - /// - /// Flag2 (implemented starting from 8.0.0-18). - /// - [MarshalAs(UnmanagedType.U1)] - public ARM11LSCFlag2 Flag2; - - /// - /// Flag0 - /// - [MarshalAs(UnmanagedType.U1)] - public ARM11LSCFlag0 Flag0; - - /// - /// Priority - /// - public byte Priority; - - /// - /// Resource limit descriptors. The first byte here controls the maximum allowed CpuTime. - /// - /// 16 entries - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] - public ushort[]? ResourceLimitDescriptors; - - /// - /// Storage info - /// - public StorageInfo? StorageInfo; - - /// - /// Service access control - /// - /// 32 entries - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] - public ulong[]? ServiceAccessControl; - - /// - /// Extended service access control, support for this was implemented with 9.3.0-X. - /// - /// 2 entries - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] - public ulong[]? ExtendedServiceAccessControl; - - /// - /// Reserved - /// - /// 0x0F bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x0F)] - public byte[]? Reserved; - - /// - /// Resource limit category. (0 = APPLICATION, 1 = SYS_APPLET, 2 = LIB_APPLET, 3 = OTHER (sysmodules running under the BASE memregion)) - /// - [MarshalAs(UnmanagedType.U1)] - public ResourceLimitCategory ResourceLimitCategory; - } -} diff --git a/SabreTools.Models/N3DS/ARM9AccessControl.cs b/SabreTools.Models/N3DS/ARM9AccessControl.cs deleted file mode 100644 index dc3636a..0000000 --- a/SabreTools.Models/N3DS/ARM9AccessControl.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.N3DS -{ - /// - [StructLayout(LayoutKind.Sequential)] - public sealed class ARM9AccessControl - { - /// - /// Descriptors - /// - /// 15 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 15)] - public ARM9AccessControlDescriptors[]? Descriptors; - - /// - /// ARM9 Descriptor Version. Originally this value had to be ≥ 2. - /// Starting with 9.3.0-X this value has to be either value 2 or value 3. - /// - public byte DescriptorVersion; - } -} diff --git a/SabreTools.Models/N3DS/AccessControlInfo.cs b/SabreTools.Models/N3DS/AccessControlInfo.cs deleted file mode 100644 index 3952ed0..0000000 --- a/SabreTools.Models/N3DS/AccessControlInfo.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.N3DS -{ - /// - [StructLayout(LayoutKind.Sequential)] - public sealed class AccessControlInfo - { - /// - /// ARM11 local system capabilities - /// - public ARM11LocalSystemCapabilities? ARM11LocalSystemCapabilities; - - /// - /// ARM11 kernel capabilities - /// - public ARM11KernelCapabilities? ARM11KernelCapabilities; - - /// - /// ARM9 access control - /// - /// TODO: Fix serialization issue with this type - public ARM9AccessControl? ARM9AccessControl; - } -} diff --git a/SabreTools.Models/N3DS/CIA.cs b/SabreTools.Models/N3DS/CIA.cs deleted file mode 100644 index b060897..0000000 --- a/SabreTools.Models/N3DS/CIA.cs +++ /dev/null @@ -1,56 +0,0 @@ -namespace SabreTools.Models.N3DS -{ - /// - /// CIA stands for CTR Importable Archive. This format allows the installation of - /// titles to the 3DS. CIA files and titles on Nintendo's CDN contain identical data. - /// As a consequence, valid CIA files can be generated from CDN content. This also - /// means CIA files can contain anything that titles on Nintendo's CDN can contain. - /// - /// Under normal circumstances CIA files are used where downloading a title is - /// impractical or not possible. Such as distributing a Download Play child, or - /// installing forced Gamecard updates. Those CIA(s) are stored by the titles in - /// question, in an auxiliary CFA file. - /// - /// - public class CIA - { - /// - /// CIA header - /// - public CIAHeader? Header { get; set; } - - /// - /// Certificate chain - /// - /// - /// https://www.3dbrew.org/wiki/CIA#Certificate_Chain - /// - public Certificate[]? CertificateChain { get; set; } - - /// - /// Ticket - /// - public Ticket? Ticket { get; set; } - - /// - /// TMD file data - /// - public TitleMetadata? TMDFileData { get; set; } - - /// - /// Content file data - /// - public NCCHHeader[]? Partitions { get; set; } - - /// - /// Content file data - /// - /// TODO: Parse the content file data - public byte[]? ContentFileData { get; set; } - - /// - /// Meta file data (Not a necessary component) - /// - public MetaData? MetaData { get; set; } - } -} \ No newline at end of file diff --git a/SabreTools.Models/N3DS/CIAHeader.cs b/SabreTools.Models/N3DS/CIAHeader.cs deleted file mode 100644 index daa4983..0000000 --- a/SabreTools.Models/N3DS/CIAHeader.cs +++ /dev/null @@ -1,56 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.N3DS -{ - /// - [StructLayout(LayoutKind.Sequential)] - public sealed class CIAHeader - { - /// - /// Archive header size, usually 0x2020 bytes - /// - public uint HeaderSize; - - /// - /// Type - /// - public ushort Type; - - /// - /// Version - /// - public ushort Version; - - /// - /// Certificate chain size - /// - public uint CertificateChainSize; - - /// - /// Ticket size - /// - public uint TicketSize; - - /// - /// TMD file size - /// - public uint TMDFileSize; - - /// - /// Meta size (0 if no Meta data is present) - /// - public uint MetaSize; - - /// - /// Content size - /// - public ulong ContentSize; - - /// - /// Content Index - /// - /// 0x2000 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x2000)] - public byte[]? ContentIndex; - } -} \ No newline at end of file diff --git a/SabreTools.Models/N3DS/CardInfoHeader.cs b/SabreTools.Models/N3DS/CardInfoHeader.cs deleted file mode 100644 index f2d31b2..0000000 --- a/SabreTools.Models/N3DS/CardInfoHeader.cs +++ /dev/null @@ -1,79 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.N3DS -{ - /// - [StructLayout(LayoutKind.Sequential)] - public sealed class CardInfoHeader - { - /// - /// CARD2: Writable Address In Media Units (For 'On-Chip' Savedata). CARD1: Always 0xFFFFFFFF. - /// - public uint WritableAddressMediaUnits; - - /// - /// Card Info Bitmask - /// - public uint CardInfoBitmask; - - /// - /// Reserved - /// - /// 0xF8 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0xF8)] - public byte[]? Reserved1; - - /// - /// Filled size of cartridge - /// - public uint FilledSize; - - /// - /// Reserved - /// - /// 0x0C bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x0C)] - public byte[]? Reserved2; - - /// - /// Title version - /// - public ushort TitleVersion; - - /// - /// Card revision - /// - public ushort CardRevision; - - /// - /// Reserved - /// - /// 0x0C bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x0C)] - public byte[]? Reserved3; - - /// - /// Title ID of CVer in included update partition - /// - /// 8 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] - public byte[]? CVerTitleID; - - /// - /// Version number of CVer in included update partition - /// - public ushort CVerVersionNumber; - - /// - /// Reserved - /// - /// 0xCD6 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0xCD6)] - public byte[]? Reserved4; - - /// - /// This data is returned by 16-byte cartridge command 0x82. - /// - public InitialData? InitialData; - } -} diff --git a/SabreTools.Models/N3DS/Cart.cs b/SabreTools.Models/N3DS/Cart.cs deleted file mode 100644 index 688f9b6..0000000 --- a/SabreTools.Models/N3DS/Cart.cs +++ /dev/null @@ -1,43 +0,0 @@ -namespace SabreTools.Models.N3DS -{ - /// - /// Represents a 3DS cart image - /// - public class Cart - { - /// - /// 3DS cart header - /// - public NCSDHeader? Header { get; set; } - - /// - /// 3DS card info header - /// - public CardInfoHeader? CardInfoHeader { get; set; } - - /// - /// 3DS development card info header - /// - public DevelopmentCardInfoHeader? DevelopmentCardInfoHeader { get; set; } - - /// - /// NCCH partitions - /// - public NCCHHeader[]? Partitions { get; set; } - - /// - /// NCCH extended headers - /// - public NCCHExtendedHeader[]? ExtendedHeaders { get; set; } - - /// - /// ExeFS headers associated with each partition - /// - public ExeFSHeader[]? ExeFSHeaders { get; set; } - - /// - /// RomFS headers associated with each partition - /// - public RomFSHeader[]? RomFSHeaders { get; set; } - } -} \ No newline at end of file diff --git a/SabreTools.Models/N3DS/Certificate.cs b/SabreTools.Models/N3DS/Certificate.cs deleted file mode 100644 index ce48c6a..0000000 --- a/SabreTools.Models/N3DS/Certificate.cs +++ /dev/null @@ -1,92 +0,0 @@ -namespace SabreTools.Models.N3DS -{ - /// - /// Certificates contain cryptography information for verifying Signatures. - /// These certificates are also signed. The parent/child relationship between - /// certificates, makes all the certificates effectively signed by 'Root', - /// the public key for which is stored in NATIVE_FIRM. - /// - /// - public sealed class Certificate - { - /// - /// Signature Type - /// - public SignatureType SignatureType { get; set; } - - /// - /// Signature size - /// - public ushort SignatureSize { get; set; } - - /// - /// Padding size - /// - public byte PaddingSize { get; set; } - - /// - /// Signature - /// - public byte[]? Signature { get; set; } - - /// - /// Padding to align next data to 0x40 bytes - /// - public byte[]? Padding { get; set; } - - /// - /// Issuer - /// - public string? Issuer { get; set; } - - /// - /// Key Type - /// - public PublicKeyType KeyType { get; set; } - - /// - /// Name - /// - public string? Name { get; set; } - - /// - /// Expiration time as UNIX Timestamp, used at least for CTCert - /// - public uint ExpirationTime { get; set; } - - // This contains the Public Key (i.e. Modulus & Public Exponent) - #region RSA-4096 and RSA-2048 - - /// - /// Modulus - /// - public byte[]? RSAModulus { get; set; } - - /// - /// Public Exponent - /// - public uint RSAPublicExponent { get; set; } - - /// - /// Padding - /// - public byte[]? RSAPadding { get; set; } - - #endregion - - // This contains the ECC public key, and is as follows: - #region ECC - - /// - /// Public Key - /// - public byte[]? ECCPublicKey { get; set; } - - /// - /// Padding - /// - public byte[]? ECCPadding { get; set; } - - #endregion - } -} diff --git a/SabreTools.Models/N3DS/CodeSetInfo.cs b/SabreTools.Models/N3DS/CodeSetInfo.cs deleted file mode 100644 index 075291a..0000000 --- a/SabreTools.Models/N3DS/CodeSetInfo.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.N3DS -{ - /// - [StructLayout(LayoutKind.Sequential)] - public sealed class CodeSetInfo - { - /// - /// Address - /// - public uint Address; - - /// - /// Physical region size (in page-multiples) - /// - public uint PhysicalRegionSizeInPages; - - /// - /// Size (in bytes) - /// - public uint SizeInBytes; - } -} diff --git a/SabreTools.Models/N3DS/Constants.cs b/SabreTools.Models/N3DS/Constants.cs deleted file mode 100644 index cf2ce34..0000000 --- a/SabreTools.Models/N3DS/Constants.cs +++ /dev/null @@ -1,25 +0,0 @@ -namespace SabreTools.Models.N3DS -{ - public static class Constants - { - // ExeFS - public static readonly byte[] CodeSegmentName = [0x2e, 0x63, 0x6f, 0x64, 0x65, 0x00, 0x00, 0x00]; // .code\0\0\0 - - // NCCH - public const string NCCHMagicNumber = "NCCH"; - - // NCSD - public const string NCSDMagicNumber = "NCSD"; - - // RomFS - public const string RomFSMagicNumber = "IVFC"; - public const uint RomFSSecondMagicNumber = 0x10000; - - // Setup Keys and IVs - public static byte[] PlainCounter = [0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]; - public static byte[] ExefsCounter = [0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]; - public static byte[] RomfsCounter = [0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]; - - public const int CXTExtendedDataHeaderLength = 0x800; - } -} diff --git a/SabreTools.Models/N3DS/ContentChunkRecord.cs b/SabreTools.Models/N3DS/ContentChunkRecord.cs deleted file mode 100644 index 5fd8b6d..0000000 --- a/SabreTools.Models/N3DS/ContentChunkRecord.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.N3DS -{ - /// - /// There is one of these for each content contained in this title. - /// (Determined by "Content Count" in the TMD Header). - /// - /// - [StructLayout(LayoutKind.Sequential)] - public sealed class ContentChunkRecord - { - /// - /// Content id - /// - public uint ContentId; - - /// - /// Content index - /// - /// - /// This does not apply to DLC. - /// - public ContentIndex ContentIndex; - - /// - /// Content type - /// - public TMDContentType ContentType; - - /// - /// Content size - /// - public ulong ContentSize; - - /// - /// SHA-256 hash - /// - /// 0x20 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x20)] - public byte[]? SHA256Hash; - } -} \ No newline at end of file diff --git a/SabreTools.Models/N3DS/ContentInfoRecord.cs b/SabreTools.Models/N3DS/ContentInfoRecord.cs deleted file mode 100644 index 6f64b9f..0000000 --- a/SabreTools.Models/N3DS/ContentInfoRecord.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.N3DS -{ - /// - /// There are 64 of these records, usually only the first is used. - /// - /// - [StructLayout(LayoutKind.Sequential)] - public sealed class ContentInfoRecord - { - /// - /// Content index offset - /// - public ushort ContentIndexOffset; - - /// - /// Content command count [k] - /// - public ushort ContentCommandCount; - - /// - /// SHA-256 hash of the next k content records that have not been hashed yet - /// - /// 0x20 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x20)] - public byte[]? UnhashedContentRecordsSHA256Hash; - } -} \ No newline at end of file diff --git a/SabreTools.Models/N3DS/DevelopmentCardInfoHeader.cs b/SabreTools.Models/N3DS/DevelopmentCardInfoHeader.cs deleted file mode 100644 index b4371f8..0000000 --- a/SabreTools.Models/N3DS/DevelopmentCardInfoHeader.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.N3DS -{ - /// - [StructLayout(LayoutKind.Sequential)] - public sealed class DevelopmentCardInfoHeader - { - /// - /// CardDeviceReserved1 - /// - /// 0x200 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x200)] - public byte[]? CardDeviceReserved1; - - /// - /// TitleKey - /// - /// 0x10 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x10)] - public byte[]? TitleKey; - - /// - /// CardDeviceReserved2 - /// - /// 0x1BF0 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x1BF0)] - public byte[]? CardDeviceReserved2; - - /// - /// TestData - /// - public TestData? TestData; - } -} diff --git a/SabreTools.Models/N3DS/Enums.cs b/SabreTools.Models/N3DS/Enums.cs deleted file mode 100644 index 5d3ca16..0000000 --- a/SabreTools.Models/N3DS/Enums.cs +++ /dev/null @@ -1,229 +0,0 @@ -using System; - -namespace SabreTools.Models.N3DS -{ - [Flags] - public enum ARM9AccessControlDescriptors : byte - { - MountNandRoot = 0x01, - MountNandroWriteAccess = 0x02, - MountTwlnRoot = 0x04, - MountWnandRoot = 0x08, - MountCardSPI = 0x0F, - UseSDIF3 = 0x10, - CreateSeed = 0x20, - UseCardSPI = 0x40, - SDApplication = 0x80, - MountSdmcWriteAccess = 0xF0, - } - - [Flags] - public enum ARM11LSCFlag0 : byte - { - IdealProcessor = 0x01 | 0x02, - - AffinityMask = 0x04 | 0x08, - - /// - /// Value Description - /// 0 Prod (64MB of usable application memory) - /// 1 Undefined (unusable) - /// 2 Dev1 (96MB of usable application memory) - /// 3 Dev2 (80MB of usable application memory) - /// 4 Dev3 (72MB of usable application memory) - /// 5 Dev4 (32MB of usable application memory) - /// 6-7 Undefined Same as Prod? - /// - Old3DSSystemMode = 0x0F | 0x10 | 0x20 | 0x40, - } - - [Flags] - public enum ARM11LSCFlag1 : byte - { - EnableL2Cache = 0x01, - Cpuspeed_804MHz = 0x02, - } - - [Flags] - public enum ARM11LSCFlag2 : byte - { - /// - /// Value Description - /// 0 Legacy (use Old3DS system mode) - /// 1 Prod (124MB of usable application memory) - /// 2 Dev1 (178MB of usable application memory) - /// 3 Dev2 (124MB of usable application memory) - /// 4-7 Undefined Same as Prod? - /// - New3DSSystemMode = 0x01 | 0x02 | 0x04 | 0x08, - } - - [Flags] - public enum BitMasks : byte - { - FixedCryptoKey = 0x01, - NoMountRomFs = 0x02, - NoCrypto = 0x04, - NewKeyYGenerator = 0x20, - } - - public enum ContentIndex : ushort - { - /// - /// Main Content (.CXI for 3DS executable content/.CFA for 3DS Data Archives/.SRL for TWL content) - /// - MainContent = 0x0000, - - /// - /// Home Menu Manual (.CFA) - /// - HomeMenuManual = 0x0001, - - /// - /// DLP Child Container (.CFA) - /// - DLPChildContainer = 0x0002, - } - - public enum ContentPlatform : byte - { - CTR = 0x01, - Snake = 0x02, // New3DS - } - - [Flags] - public enum ContentType : byte - { - Data = 0x01, - Executable = 0x02, - SystemUpdate = 0x04, - Manual = 0x08, - Child = 0x04 | 0x08, - Trial = 0x10, - } - - public enum CryptoMethod : byte - { - Original = 0x00, - Seven = 0x01, - NineThree = 0x0A, - NineSix = 0x0B, - } - - [Flags] - public enum FilesystemAccessInfo : ulong - { - CategorySystemApplication = 0x1, - CategoryHardwareCheck = 0x2, - CategoryFilesystemTool = 0x4, - Debug = 0x8, - TWLCardBackup = 0x10, - TWLNANDData = 0x20, - BOSS = 0x40, - sdmcRoot = 0x80, - Core = 0x100, - nandRootroReadOnly = 0x200, - nandRootrw = 0x400, - nandrootroWriteAccess = 0x800, - CategorySystemSettings = 0x1000, - Cardboard = 0x2000, - ExportImportIVS = 0x4000, - sdmcRootWriteOnly = 0x8000, - SwitchCleanup = 0x10000, // Introduced in 3.0.0? - SavedataMove = 0x20000, // Introduced in 5.0.0 - Shop = 0x40000, // Introduced in 5.0.0 - Shell = 0x80000, // Introduced in 5.0.0 - CategoryHomeMenu = 0x100000, // Introduced in 6.0.0 - SeedDB = 0x200000, // Introduced in 9.6.0-X FIRM. Home Menu has this bit set starting with 9.6.0-X. - } - - public enum FilesystemType : ulong - { - None = 0, - Normal = 1, - FIRM = 3, - AGB_FIRMSave = 4, - } - - public enum MediaCardDeviceType : byte - { - NORFlash = 0x01, - None = 0x02, - BT = 0x03, - } - - public enum MediaPlatformIndex : byte - { - CTR = 0x01, - } - - public enum MediaTypeIndex : byte - { - InnerDevice = 0x00, - Card1 = 0x01, - Card2 = 0x02, - ExtendedDevice = 0x03, - } - - public enum NCCHFlags - { - CryptoMethod = 0x03, - ContentPlatform = 0x04, - ContentTypeBitMask = 0x05, - ContentUnitSize = 0x06, - BitMasks = 0x07, - } - - public enum NCSDFlags - { - BackupWriteWaitTime = 0x00, - MediaCardDevice3X = 0x03, - MediaPlatformIndex = 0x04, - MediaTypeIndex = 0x05, - MediaUnitSize = 0x06, - MediaCardDevice2X = 0x07, - } - - public enum PublicKeyType : uint - { - RSA_4096 = 0x00000000, - RSA_2048 = 0x01000000, - EllipticCurve = 0x02000000, - } - - public enum ResourceLimitCategory : byte - { - APPLICATION = 0, - SYS_APPLET = 1, - LIB_APPLET = 2, - OTHER = 3, - } - - // Note: These are reversed because of how C# reads values - public enum SignatureType : uint - { - RSA_4096_SHA1 = 0x00000100, - RSA_2048_SHA1 = 0x01000100, - ECDSA_SHA1 = 0x02000100, - RSA_4096_SHA256 = 0x03000100, - RSA_2048_SHA256 = 0x04000100, - ECDSA_SHA256 = 0x05000100, - } - - [Flags] - public enum StorageInfoOtherAttributes : byte - { - NotUseROMFS = 0x01, - UseExtendedSavedataAccess = 0x02, - } - - [Flags] - public enum TMDContentType : ushort - { - Encrypted = 0x0001, - Disc = 0x0002, - CFM = 0x0004, - Optional = 0x4000, - Shared = 0x8000, - } -} diff --git a/SabreTools.Models/N3DS/ExeFSFileHeader.cs b/SabreTools.Models/N3DS/ExeFSFileHeader.cs deleted file mode 100644 index cdf8100..0000000 --- a/SabreTools.Models/N3DS/ExeFSFileHeader.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.N3DS -{ - /// - /// There are a maximum of 10 file headers in the ExeFS format. (This maximum - /// number of file headers is disputable, with makerom indicating a maximum of - /// 8 sections and makecia indicating a maximum of 10. From a non-SDK point of - /// view, the ExeFS header format can hold no more than 10 file headers within - /// the currently define size of 0x200 bytes.) - /// - /// - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] - public sealed class ExeFSFileHeader - { - /// - /// File name - /// - /// 8 bytes - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)] - public string? FileName; - - /// - /// File offset - /// - public uint FileOffset; - - /// - /// File size - /// - public uint FileSize; - } -} diff --git a/SabreTools.Models/N3DS/ExeFSHeader.cs b/SabreTools.Models/N3DS/ExeFSHeader.cs deleted file mode 100644 index feb047d..0000000 --- a/SabreTools.Models/N3DS/ExeFSHeader.cs +++ /dev/null @@ -1,33 +0,0 @@ -namespace SabreTools.Models.N3DS -{ - /// - /// ExeFS or Executable Filesystem contains information related to the - /// executable program, and is the part of the CXI format. - /// - /// The ExeFS usually contains one or more of the following files: - /// - .code Contains the code binary, which can be optionally reverse-LZSS compressed via an exheader flag. - /// - logo Contains distribution licensing Binary data. - /// - banner Contains the banner which homemenu uses for this CXI. - /// - icon Contains the icon which homemenu displays for this CXI. - /// - /// - public sealed class ExeFSHeader - { - /// - /// File headers (10 headers maximum, 16 bytes each) - /// - public ExeFSFileHeader[]? FileHeaders { get; set; } - - /// - /// Reserved - /// - /// 0x20 bytes - public byte[]? Reserved { get; set; } - - /// - /// File hashes (10 hashes maximum, 32 bytes each, one for each header) - /// - /// SHA-256 hashes - public byte[][]? FileHashes { get; set; } - } -} diff --git a/SabreTools.Models/N3DS/InitialData.cs b/SabreTools.Models/N3DS/InitialData.cs deleted file mode 100644 index 065a743..0000000 --- a/SabreTools.Models/N3DS/InitialData.cs +++ /dev/null @@ -1,49 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.N3DS -{ - /// - [StructLayout(LayoutKind.Sequential)] - public sealed class InitialData - { - /// - /// Card seed keyY (first u64 is Media ID (same as first NCCH partitionId)) - /// - /// 0x10 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x10)] - public byte[]? CardSeedKeyY; - - /// - /// Encrypted card seed (AES-CCM, keyslot 0x3B for retail cards, see CTRCARD_SECSEED) - /// - /// 0x10 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x10)] - public byte[]? EncryptedCardSeed; - - /// - /// Card seed AES-MAC - /// - /// 0x10 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x10)] - public byte[]? CardSeedAESMAC; - - /// - /// Card seed nonce - /// - /// 0x0C bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x0C)] - public byte[]? CardSeedNonce; - - /// - /// Reserved3 - /// - /// 0xC4 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0xC4)] - public byte[]? Reserved; - - /// - /// Copy of first NCCH header (excluding RSA signature) - /// - public NCCHHeader? BackupHeader; - } -} diff --git a/SabreTools.Models/N3DS/MetaData.cs b/SabreTools.Models/N3DS/MetaData.cs deleted file mode 100644 index f84545e..0000000 --- a/SabreTools.Models/N3DS/MetaData.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.N3DS -{ - /// - [StructLayout(LayoutKind.Sequential)] - public sealed class MetaData - { - /// - /// Title ID dependency list - Taken from the application's ExHeader - /// - /// TODO: Determine numeric format of each entry - /// 0x180 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x180)] - public byte[]? TitleIDDependencyList; - - /// - /// Reserved - /// - /// 0x180 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x180)] - public byte[]? Reserved1; - - /// - /// Core Version - /// - public uint CoreVersion; - - /// - /// Reserved - /// - /// 0xFC bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0xFC)] - public byte[]? Reserved2; - - /// - /// Icon Data(.ICN) - Taken from the application's ExeFS - /// - /// 0x36C0 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x36C0)] - public byte[]? IconData; - } -} \ No newline at end of file diff --git a/SabreTools.Models/N3DS/NCCHExtendedHeader.cs b/SabreTools.Models/N3DS/NCCHExtendedHeader.cs deleted file mode 100644 index a9a00a7..0000000 --- a/SabreTools.Models/N3DS/NCCHExtendedHeader.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.N3DS -{ - /// - /// The exheader has two sections: - /// - The actual exheader data, containing System Control Info (SCI) and Access Control Info (ACI); - /// - A signed copy of NCCH HDR public key, and exheader ACI. This version of the ACI is used as limitation to the actual ACI. - /// - /// - [StructLayout(LayoutKind.Sequential)] - public sealed class NCCHExtendedHeader - { - /// - /// SCI - /// - public SystemControlInfo? SCI; - - /// - /// ACI - /// - public AccessControlInfo? ACI; - - /// - /// AccessDesc signature (RSA-2048-SHA256) - /// - /// 0x100 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x100)] - public byte[]? AccessDescSignature; - - /// - /// NCCH HDR RSA-2048 public key - /// - /// 0x100 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x100)] - public byte[]? NCCHHDRPublicKey; - - /// - /// ACI (for limitation of first ACI) - /// - public AccessControlInfo? ACIForLimitations; - } -} diff --git a/SabreTools.Models/N3DS/NCCHHeader.cs b/SabreTools.Models/N3DS/NCCHHeader.cs deleted file mode 100644 index cf41fd7..0000000 --- a/SabreTools.Models/N3DS/NCCHHeader.cs +++ /dev/null @@ -1,177 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.N3DS -{ - /// - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] - public sealed class NCCHHeader - { - /// - /// RSA-2048 signature of the NCCH header, using SHA-256. - /// - /// 0x100 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x100)] - public byte[]? RSA2048Signature; - - /// - /// Magic ID, always 'NCCH' - /// - /// 4 bytes - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)] - public string? MagicID; - - /// - /// Content size, in media units (1 media unit = 0x200 bytes) - /// - public uint ContentSizeInMediaUnits; - - /// - /// Partition ID - /// - public ulong PartitionId; - - /// - /// Maker code - /// - public ushort MakerCode; - - /// - /// Version - /// - public ushort Version; - - /// - /// When ncchflag[7] = 0x20 starting with FIRM 9.6.0-X, this is compared with the first output u32 from a - /// SHA256 hash. The data used for that hash is 0x18-bytes: [0x10-long title-unique content lock seed] - /// [programID from NCCH + 0x118]. This hash is only used for verification of the content lock seed, and - /// is not the actual keyY. - /// - public uint VerificationHash; - - /// - /// Program ID - /// - /// 8 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] - public byte[]? ProgramId; - - /// - /// Reserved - /// - /// 0x10 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x10)] - public byte[]? Reserved1; - - /// - /// Logo Region SHA-256 hash. (For applications built with SDK 5+) (Supported from firmware: 5.0.0-11) - /// - /// 0x20 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x20)] - public byte[]? LogoRegionHash; - - /// - /// Product code - /// - /// 0x10 bytes - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x10)] - public string? ProductCode; - - /// - /// Extended header SHA-256 hash (SHA256 of 2x Alignment Size, beginning at 0x0 of ExHeader) - /// - /// 0x20 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x20)] - public byte[]? ExtendedHeaderHash; - - /// - /// Extended header size, in bytes - /// - public uint ExtendedHeaderSizeInBytes; - - /// - /// Reserved - /// - public uint Reserved2; - - /// - /// Flags - /// - public NCCHHeaderFlags? Flags; - - /// - /// Plain region offset, in media units - /// - public uint PlainRegionOffsetInMediaUnits; - - /// - /// Plain region size, in media units - /// - public uint PlainRegionSizeInMediaUnits; - - /// - /// Logo Region offset, in media units (For applications built with SDK 5+) (Supported from firmware: 5.0.0-11) - /// - public uint LogoRegionOffsetInMediaUnits; - - /// - /// Logo Region size, in media units (For applications built with SDK 5+) (Supported from firmware: 5.0.0-11) - /// - public uint LogoRegionSizeInMediaUnits; - - /// - /// ExeFS offset, in media units - /// - public uint ExeFSOffsetInMediaUnits; - - /// - /// ExeFS size, in media units - /// - public uint ExeFSSizeInMediaUnits; - - /// - /// ExeFS hash region size, in media units - /// - public uint ExeFSHashRegionSizeInMediaUnits; - - /// - /// Reserved - /// - public uint Reserved3; - - /// - /// RomFS offset, in media units - /// - public uint RomFSOffsetInMediaUnits; - - /// - /// RomFS size, in media units - /// - public uint RomFSSizeInMediaUnits; - - /// - /// RomFS hash region size, in media units - /// - public uint RomFSHashRegionSizeInMediaUnits; - - /// - /// Reserved - /// - public uint Reserved4; - - /// - /// ExeFS superblock SHA-256 hash - (SHA-256 hash, starting at 0x0 of the ExeFS over the number of - /// media units specified in the ExeFS hash region size) - /// - /// 0x20 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x20)] - public byte[]? ExeFSSuperblockHash; - - /// - /// RomFS superblock SHA-256 hash - (SHA-256 hash, starting at 0x0 of the RomFS over the number - /// of media units specified in the RomFS hash region size) - /// - /// 0x20 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x20)] - public byte[]? RomFSSuperblockHash; - } -} diff --git a/SabreTools.Models/N3DS/NCCHHeaderFlags.cs b/SabreTools.Models/N3DS/NCCHHeaderFlags.cs deleted file mode 100644 index 266537b..0000000 --- a/SabreTools.Models/N3DS/NCCHHeaderFlags.cs +++ /dev/null @@ -1,56 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.N3DS -{ - /// - [StructLayout(LayoutKind.Sequential)] - public sealed class NCCHHeaderFlags - { - /// - /// Reserved - /// - public byte Reserved0; - - /// - /// Reserved - /// - public byte Reserved1; - - /// - /// Reserved - /// - public byte Reserved2; - - /// - /// Crypto Method: When this is non-zero, a NCCH crypto method using two keyslots is used. - /// - [MarshalAs(UnmanagedType.U1)] - public CryptoMethod CryptoMethod; - - /// - /// Content Platform: 1 = CTR, 2 = snake (New 3DS). - /// - [MarshalAs(UnmanagedType.U1)] - public ContentPlatform ContentPlatform; - - /// - /// Content Type Bit-masks: Data = 0x1, Executable = 0x2, SystemUpdate = 0x4, Manual = 0x8, - /// Child = (0x4|0x8), Trial = 0x10. When 'Data' is set, but not 'Executable', NCCH is a CFA. - /// Otherwise when 'Executable' is set, NCCH is a CXI. - /// - [MarshalAs(UnmanagedType.U1)] - public ContentType MediaPlatformIndex; - - /// - /// Content Unit Size i.e. u32 ContentUnitSize = 0x200*2^flags[6]; - /// - public byte ContentUnitSize; - - /// - /// Bit-masks: FixedCryptoKey = 0x1, NoMountRomFs = 0x2, NoCrypto = 0x4, using a new keyY - /// generator = 0x20(starting with FIRM 9.6.0-X). - /// - [MarshalAs(UnmanagedType.U1)] - public BitMasks BitMasks; - } -} diff --git a/SabreTools.Models/N3DS/NCSDHeader.cs b/SabreTools.Models/N3DS/NCSDHeader.cs deleted file mode 100644 index 302cdf4..0000000 --- a/SabreTools.Models/N3DS/NCSDHeader.cs +++ /dev/null @@ -1,119 +0,0 @@ -namespace SabreTools.Models.N3DS -{ - /// - /// There are two known specialisations of the NCSD container format: - /// - The CTR Cart Image (CCI) format, the 3DS' raw NAND format - /// - CCI is the format of game ROM images. - /// - /// CTR System Update (CSU) is a variant of CCI, where the only difference - /// is in the file extension. - /// - /// - public sealed class NCSDHeader - { - #region Common to all NCSD files - - /// - /// RSA-2048 SHA-256 signature of the NCSD header - /// - public byte[]? RSA2048Signature { get; set; } - - /// - /// Magic Number 'NCSD' - /// - public string? MagicNumber { get; set; } - - /// - /// Size of the NCSD image, in media units (1 media unit = 0x200 bytes) - /// - public uint ImageSizeInMediaUnits { get; set; } - - /// - /// Media ID - /// - public byte[]? MediaId { get; set; } - - /// - /// Partitions FS type (0=None, 1=Normal, 3=FIRM, 4=AGB_FIRM save) - /// - public FilesystemType PartitionsFSType { get; set; } - - /// - /// Partitions crypt type (each byte corresponds to a partition in the partition table) - /// - public byte[]? PartitionsCryptType { get; set; } - - /// - /// Offset & Length partition table, in media units - /// - public PartitionTableEntry[]? PartitionsTable { get; set; } - - #endregion - - #region CTR Cart Image (CCI) Specific - - /// - /// Exheader SHA-256 hash - /// - public byte[]? ExheaderHash { get; set; } - - /// - /// Additional header size - /// - public uint AdditionalHeaderSize { get; set; } - - /// - /// Sector zero offset - /// - public uint SectorZeroOffset { get; set; } - - /// - /// Partition Flags - /// - public byte[]? PartitionFlags { get; set; } - - /// - /// Partition ID table - /// - public ulong[]? PartitionIdTable { get; set; } - - /// - /// Reserved - /// - public byte[]? Reserved1 { get; set; } - - /// - /// Reserved? - /// - public byte[]? Reserved2 { get; set; } - - /// - /// Support for this was implemented with 9.6.0-X FIRM. Bit0=1 enables using bits 1-2, it's unknown - /// what these two bits are actually used for(the value of these two bits get compared with some other - /// value during NCSD verification/loading). This appears to enable a new, likely hardware-based, - /// antipiracy check on cartridges. - /// - public byte FirmUpdateByte1 { get; set; } - - /// - /// Support for this was implemented with 9.6.0-X FIRM, see below regarding save crypto. - /// - public byte FirmUpdateByte2 { get; set; } - - #endregion - - #region Raw NAND Format Specific - - /// - /// Unknown - /// - public byte[]? Unknown { get; set; } - - /// - /// Encrypted MBR partition-table, for the TWL partitions(key-data used for this keyslot is console-unique). - /// - public byte[]? EncryptedMBR { get; set; } - - #endregion - } -} diff --git a/SabreTools.Models/N3DS/PartitionTableEntry.cs b/SabreTools.Models/N3DS/PartitionTableEntry.cs deleted file mode 100644 index 17cd573..0000000 --- a/SabreTools.Models/N3DS/PartitionTableEntry.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.N3DS -{ - /// - /// Offset and Length partition table, in media units - /// - /// - [StructLayout(LayoutKind.Sequential)] - public sealed class PartitionTableEntry - { - /// - /// Offset - /// - public uint Offset; - - /// - /// Length - /// - public uint Length; - } -} diff --git a/SabreTools.Models/N3DS/RomFSHeader.cs b/SabreTools.Models/N3DS/RomFSHeader.cs deleted file mode 100644 index bfb7e55..0000000 --- a/SabreTools.Models/N3DS/RomFSHeader.cs +++ /dev/null @@ -1,101 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.N3DS -{ - /// - /// RomFS (or Read-Only Filesystem) is part of the NCCH format, and is - /// used as external file storage. - /// - /// - /// TODO: Implement the other parts of the RomFS tree structure - - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] - public sealed class RomFSHeader - { - /// - /// Magic "IVFC" - /// - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)] - public string? MagicString; - - /// - /// Magic number 0x10000 - /// - public uint MagicNumber; - - /// - /// Master hash size - /// - public uint MasterHashSize; - - /// - /// Level 1 logical offset - /// - public ulong Level1LogicalOffset; - - /// - /// Level 1 hashdata size - /// - public ulong Level1HashdataSize; - - /// - /// Level 1 block size, in log2 - /// - public uint Level1BlockSizeLog2; - - /// - /// Reserved - /// - public uint Reserved1; - - /// - /// Level 2 logical offset - /// - public ulong Level2LogicalOffset; - - /// - /// Level 2 hashdata size - /// - public ulong Level2HashdataSize; - - /// - /// Level 2 block size, in log2 - /// - public uint Level2BlockSizeLog2; - - /// - /// Reserved - /// - public uint Reserved2; - - /// - /// Level 3 logical offset - /// - public ulong Level3LogicalOffset; - - /// - /// Level 3 hashdata size - /// - public ulong Level3HashdataSize; - - /// - /// Level 3 block size, in log2 - /// - public uint Level3BlockSizeLog2; - - /// - /// Reserved - /// - public uint Reserved3; - - /// - /// Reserved - /// - public uint Reserved4; - - /// - /// Optional info size. - /// - public uint OptionalInfoSize; - } -} diff --git a/SabreTools.Models/N3DS/StorageInfo.cs b/SabreTools.Models/N3DS/StorageInfo.cs deleted file mode 100644 index 0a9f752..0000000 --- a/SabreTools.Models/N3DS/StorageInfo.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.N3DS -{ - /// - /// Used in FSReg:Register. - /// - /// - [StructLayout(LayoutKind.Sequential)] - public sealed class StorageInfo - { - /// - /// Extdata ID - /// - public ulong ExtdataID; - - /// - /// System savedata IDs - /// - /// 8 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] - public byte[]? SystemSavedataIDs; - - /// - /// Storage accessible unique IDs - /// - /// 8 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] - public byte[]? StorageAccessibleUniqueIDs; - - /// - /// Filesystem access info - /// - /// TODO: Create enum for the flag values - /// TODO: Combine with "other attributes" - /// 7 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 7)] - public byte[]? FileSystemAccessInfo; - - /// - /// Other attributes - /// - [MarshalAs(UnmanagedType.U1)] - public StorageInfoOtherAttributes OtherAttributes; - } -} diff --git a/SabreTools.Models/N3DS/SystemControlInfo.cs b/SabreTools.Models/N3DS/SystemControlInfo.cs deleted file mode 100644 index abcbecf..0000000 --- a/SabreTools.Models/N3DS/SystemControlInfo.cs +++ /dev/null @@ -1,75 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.N3DS -{ - /// - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] - public sealed class SystemControlInfo - { - /// - /// Application title (default is "CtrApp") - /// - /// 8 bytes - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)] - public string? ApplicationTitle; - - /// - /// Reserved - /// - /// 5 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)] - public byte[]? Reserved1; - - /// - /// Flag (bit 0: CompressExefsCode, bit 1: SDApplication) - /// - public byte Flag; - - /// - /// Remaster version - /// - public ushort RemasterVersion; - - /// - /// Text code set info - /// - public CodeSetInfo? TextCodeSetInfo; - - /// - /// Stack size - /// - public uint StackSize; - - /// - /// Read-only code set info - /// - public CodeSetInfo? ReadOnlyCodeSetInfo; - - /// - /// Reserved - /// - public uint Reserved2; - - /// - /// Data code set info - /// - public CodeSetInfo? DataCodeSetInfo; - - /// - /// BSS size - /// - public uint BSSSize; - - /// - /// Dependency module (program ID) list - /// - /// 48 entries - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 48)] - public ulong[]? DependencyModuleList; - - /// - /// SystemInfo - /// - public SystemInfo? SystemInfo; - } -} diff --git a/SabreTools.Models/N3DS/SystemInfo.cs b/SabreTools.Models/N3DS/SystemInfo.cs deleted file mode 100644 index 8d43af6..0000000 --- a/SabreTools.Models/N3DS/SystemInfo.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.N3DS -{ - /// - [StructLayout(LayoutKind.Sequential)] - public sealed class SystemInfo - { - /// - /// SaveData Size - /// - public ulong SaveDataSize; - - /// - /// Jump ID - /// - public ulong JumpID; - - /// - /// Reserved - /// - /// 0x30 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x30)] - public byte[]? Reserved; - } -} diff --git a/SabreTools.Models/N3DS/TestData.cs b/SabreTools.Models/N3DS/TestData.cs deleted file mode 100644 index 6c8770b..0000000 --- a/SabreTools.Models/N3DS/TestData.cs +++ /dev/null @@ -1,80 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.N3DS -{ - /// - /// The test data is the same one encountered in development DS/DSi cartridges. - /// - /// - [StructLayout(LayoutKind.Sequential)] - public sealed class TestData - { - /// - /// The bytes FF 00 FF 00 AA 55 AA 55. - /// - /// 8 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] - public byte[]? Signature; - - /// - /// An ascending byte sequence equal to the offset mod 256 (08 09 0A ... FE FF 00 01 ... FF). - /// - /// 0x1F8 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x1F8)] - public byte[]? AscendingByteSequence; - - /// - /// A descending byte sequence equal to 255 minus the offset mod 256 (FF FE FD ... 00 FF DE ... 00). - /// - /// 0x200 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x200)] - public byte[]? DescendingByteSequence; - - /// - /// Filled with 00 (0b00000000) bytes. - /// - /// 0x200 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x200)] - public byte[]? Filled00; - - /// - /// Filled with FF (0b11111111) bytes. - /// - /// 0x200 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x200)] - public byte[]? FilledFF; - - /// - /// Filled with 0F (0b00001111) bytes. - /// - /// 0x200 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x200)] - public byte[]? Filled0F; - - /// - /// Filled with F0 (0b11110000) bytes. - /// - /// 0x200 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x200)] - public byte[]? FilledF0; - - /// - /// Filled with 55 (0b01010101) bytes. - /// - /// 0x200 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x200)] - public byte[]? Filled55; - - /// - /// Filled with AA (0b10101010) bytes. - /// - /// 0x1FF bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x1FF)] - public byte[]? FilledAA; - - /// - /// The final byte is 00 (0b00000000). - /// - public byte FinalByte; - } -} diff --git a/SabreTools.Models/N3DS/Ticket.cs b/SabreTools.Models/N3DS/Ticket.cs deleted file mode 100644 index 2bc3df4..0000000 --- a/SabreTools.Models/N3DS/Ticket.cs +++ /dev/null @@ -1,178 +0,0 @@ -namespace SabreTools.Models.N3DS -{ - /// - /// A format used to store an encrypted titlekey (using 128-Bit AES-CBC). - /// With 3DS, the Ticket format was updated (now v1) from Wii/DSi format (v0). - /// - /// - public sealed class Ticket - { - /// - /// Signature Type - /// - public SignatureType SignatureType { get; set; } - - /// - /// Signature size - /// - public ushort SignatureSize { get; set; } - - /// - /// Padding size - /// - public byte PaddingSize { get; set; } - - /// - /// Signature - /// - public byte[]? Signature { get; set; } - - /// - /// Padding - /// - public byte[]? Padding { get; set; } - - /// - /// Issuer - /// - public string? Issuer { get; set; } - - /// - /// ECC PublicKey - /// - public byte[]? ECCPublicKey { get; set; } - - /// - /// Version (For 3DS this is always 1) - /// - public byte Version { get; set; } - - /// - /// CaCrlVersion - /// - public byte CaCrlVersion { get; set; } - - /// - /// SignerCrlVersion - /// - public byte SignerCrlVersion { get; set; } - - /// - /// TitleKey (normal-key encrypted using one of the common keyYs; see below) - /// - /// - /// The titlekey is decrypted by using the AES engine with the ticket common-key keyslot. - /// The keyY is selected through an index (ticket offset 0xB1) into a plaintext array - /// of 6 keys ("common keyYs") stored in the data section of Process9. AES-CBC mode is used - /// where the IV is the big-endian titleID. Note that on a retail unit index0 is a retail keyY, - /// while on a dev-unit index0 is the dev common-key which is a normal-key. - /// (On retail for these keyYs, the hardware key-scrambler is used) - /// - /// The titlekey is used to decrypt content downloaded from the CDN using 128-bit AES-CBC with - /// the content index (as big endian u16, padded with trailing zeroes) as the IV. - /// - public byte[]? TitleKey { get; set; } - - /// - /// Reserved - /// - public byte Reserved1 { get; set; } - - /// - /// TicketID - /// - public ulong TicketID { get; set; } - - /// - /// ConsoleID - /// - public uint ConsoleID { get; set; } - - /// - /// TitleID - /// - public ulong TitleID { get; set; } - - /// - /// Reserved - /// - public byte[]? Reserved2 { get; set; } - - /// - /// Ticket title version - /// - /// - /// The Ticket Title Version is generally the same as the title version stored in the - /// Title Metadata. Although it doesn't have to match the TMD version to be valid. - /// - public ushort TicketTitleVersion { get; set; } - - /// - /// Reserved - /// - public byte[]? Reserved3 { get; set; } - - /// - /// License Type - /// - public byte LicenseType { get; set; } - - /// - /// Index to the common keyY used for this ticket, usually 0x1 for retail system titles - /// - public byte CommonKeyYIndex { get; set; } - - /// - /// Reserved - /// - public byte[]? Reserved4 { get; set; } - - /// - /// eShop Account ID? - /// - public uint eShopAccountID { get; set; } - - /// - /// Reserved - /// - public byte Reserved5 { get; set; } - - /// - /// Audit - /// - public byte Audit { get; set; } - - /// - /// Reserved - /// - public byte[]? Reserved6 { get; set; } - - /// - /// Limits - /// - /// - /// In demos, the first u32 in the "Limits" section is 0x4, then the second u32 is the max-playcount. - /// - public uint[]? Limits { get; set; } - - /// - /// The Content Index of a ticket has its own size defined within itself, - /// with seemingly a minimal of 20 bytes, the second u32 in big endian defines - /// the full value of X. - /// - public uint ContentIndexSize { get; set; } - - /// - /// Content Index - /// - public byte[]? ContentIndex { get; set; } - - /// - /// Certificate chain - /// - /// - /// https://www.3dbrew.org/wiki/Ticket#Certificate_Chain - /// - public Certificate[]? CertificateChain { get; set; } - } -} diff --git a/SabreTools.Models/N3DS/TitleMetadata.cs b/SabreTools.Models/N3DS/TitleMetadata.cs deleted file mode 100644 index 1cbeaab..0000000 --- a/SabreTools.Models/N3DS/TitleMetadata.cs +++ /dev/null @@ -1,155 +0,0 @@ -namespace SabreTools.Models.N3DS -{ - /// - /// A format used to store information about a title (installed title, DLC, etc.) - /// and all its installed contents, including which contents they consist of and - /// their SHA256 hashes. - /// - /// - public sealed class TitleMetadata - { - /// - /// Signature Type - /// - public SignatureType SignatureType { get; set; } - - /// - /// Signature size - /// - public ushort SignatureSize { get; set; } - - /// - /// Padding size - /// - public byte PaddingSize { get; set; } - - /// - /// Signature - /// - public byte[]? Signature { get; set; } - - /// - /// Padding - /// - public byte[]? Padding1 { get; set; } - - /// - /// Signature Issuer - /// - public string? Issuer { get; set; } - - /// - /// Version - /// - public byte Version { get; set; } - - /// - /// CaCrlVersion - /// - public byte CaCrlVersion { get; set; } - - /// - /// SignerCrlVersion - /// - public byte SignerCrlVersion { get; set; } - - /// - /// Reserved - /// - public byte Reserved1 { get; set; } - - /// - /// System Version - /// - public ulong SystemVersion { get; set; } - - /// - /// TitleID - /// - public ulong TitleID { get; set; } - - /// - /// Title Type - /// - public uint TitleType { get; set; } - - /// - /// Group ID - /// - public ushort GroupID { get; set; } - - /// - /// Save Data Size in Little Endian (Bytes) (Also SRL Public Save Data Size) - /// - public uint SaveDataSize { get; set; } - - /// - /// SRL Private Save Data Size in Little Endian (Bytes) - /// - public uint SRLPrivateSaveDataSize { get; set; } - - /// - /// Reserved - /// - public byte[]? Reserved2 { get; set; } - - /// - /// SRL Flag - /// - public byte SRLFlag { get; set; } - - /// - /// Reserved - /// - public byte[]? Reserved3 { get; set; } - - /// - /// Access Rights - /// - public uint AccessRights { get; set; } - - /// - /// Title Version - /// - public ushort TitleVersion { get; set; } - - /// - /// Content Count (big-endian) - /// - public ushort ContentCount { get; set; } - - /// - /// Boot Content - /// - public ushort BootContent { get; set; } - - /// - /// Padding - /// - public byte[]? Padding2 { get; set; } - - /// - /// SHA-256 Hash of the Content Info Records - /// - public byte[]? SHA256HashContentInfoRecords { get; set; } - - /// - /// There are 64 of these records, usually only the first is used. - /// - public ContentInfoRecord[]? ContentInfoRecords { get; set; } - - /// - /// There is one of these for each content contained in this title. - /// (Determined by "Content Count" in the TMD Header). - /// - public ContentChunkRecord[]? ContentChunkRecords { get; set; } - - /// - /// Certificate chain - /// - /// - /// https://www.3dbrew.org/wiki/Title_metadata#Certificate_Chain - /// - public Certificate[]? CertificateChain { get; set; } - } -} \ No newline at end of file diff --git a/SabreTools.Models/Nitro/Cart.cs b/SabreTools.Models/Nitro/Cart.cs deleted file mode 100644 index 78f39d1..0000000 --- a/SabreTools.Models/Nitro/Cart.cs +++ /dev/null @@ -1,33 +0,0 @@ -namespace SabreTools.Models.Nitro -{ - /// - /// Represents a DS/DSi cart image - /// - public class Cart - { - /// - /// DS/DSi cart header - /// - public CommonHeader? CommonHeader { get; set; } - - /// - /// DSi extended cart header - /// - public ExtendedDSiHeader? ExtendedDSiHeader { get; set; } - - /// - /// Secure area, may be encrypted or decrypted - /// - public byte[]? SecureArea { get; set; } - - /// - /// Name table (folder allocation table, name list) - /// - public NameTable? NameTable { get; set; } - - /// - /// File allocation table - /// - public FileAllocationTableEntry[]? FileAllocationTable { get; set; } - } -} \ No newline at end of file diff --git a/SabreTools.Models/Nitro/CommonHeader.cs b/SabreTools.Models/Nitro/CommonHeader.cs deleted file mode 100644 index 5fad6b3..0000000 --- a/SabreTools.Models/Nitro/CommonHeader.cs +++ /dev/null @@ -1,232 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.Nitro -{ - /// - /// Nintendo DS / DSi cartridge header - /// - /// - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] - public sealed class CommonHeader - { - /// - /// Game Title - /// - /// 12 bytes - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 12)] - public string? GameTitle; - - /// - /// Gamecode - /// - public uint GameCode; - - /// - /// Makercode - /// - /// 2 bytes - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 2)] - public string? MakerCode; - - /// - /// Unitcode - /// - [MarshalAs(UnmanagedType.U1)] - public Unitcode UnitCode; - - /// - /// Encryption seed select (device code. 0 = normal) - /// - public byte EncryptionSeedSelect; - - /// - /// Devicecapacity - /// - public byte DeviceCapacity; - - /// - /// Reserved - /// - /// 7 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 7)] - public byte[]? Reserved1; - - /// - /// Game Revision (used by DSi titles) - /// - public ushort GameRevision; - - /// - /// ROM Version - /// - public byte RomVersion; - - /// - /// Internal flags, (Bit2: Autostart) - /// - public byte InternalFlags; - - /// - /// ARM9 rom offset - /// - public uint ARM9RomOffset; - - /// - /// ARM9 entry address - /// - public uint ARM9EntryAddress; - - /// - /// ARM9 load address - /// - public uint ARM9LoadAddress; - - /// - /// ARM9 size - /// - public uint ARM9Size; - - /// - /// ARM7 rom offset - /// - public uint ARM7RomOffset; - - /// - /// ARM7 entry address - /// - public uint ARM7EntryAddress; - - /// - /// ARM7 load address - /// - public uint ARM7LoadAddress; - - /// - /// ARM7 size - /// - public uint ARM7Size; - - /// - /// File Name Table (FNT) offset - /// - public uint FileNameTableOffset; - - /// - /// File Name Table (FNT) length - /// - public uint FileNameTableLength; - - /// - /// File Allocation Table (FNT) offset - /// - public uint FileAllocationTableOffset; - - /// - /// File Allocation Table (FNT) length - /// - public uint FileAllocationTableLength; - - /// - /// File Name Table (FNT) offset - /// - public uint ARM9OverlayOffset; - - /// - /// File Name Table (FNT) length - /// - public uint ARM9OverlayLength; - - /// - /// File Name Table (FNT) offset - /// - public uint ARM7OverlayOffset; - - /// - /// File Name Table (FNT) length - /// - public uint ARM7OverlayLength; - - /// - /// Normal card control register settings (0x00416657 for OneTimePROM) - /// - public uint NormalCardControlRegisterSettings; - - /// - /// Secure card control register settings (0x081808F8 for OneTimePROM) - /// - public uint SecureCardControlRegisterSettings; - - /// - /// Icon Banner offset (NDSi same as NDS, but with new extra entries) - /// - public uint IconBannerOffset; - - /// - /// Secure area (2K) CRC - /// - public ushort SecureAreaCRC; - - /// - /// Secure transfer timeout (0x0D7E for OneTimePROM) - /// - public ushort SecureTransferTimeout; - - /// - /// ARM9 autoload - /// - public uint ARM9Autoload; - - /// - /// ARM7 autoload - /// - public uint ARM7Autoload; - - /// - /// Secure disable - /// - /// 8 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] - public byte[]? SecureDisable; - - /// - /// NTR region ROM size (excluding DSi area) - /// - public uint NTRRegionRomSize; - - /// - /// Header size - /// - public uint HeaderSize; - - /// - /// Reserved (0x88, 0x8C, 0x90 = Unknown, used by DSi) - /// - /// 56 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 56)] - public byte[]? Reserved2; - - /// - /// Nintendo Logo - /// - /// 156 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 156)] - public byte[]? NintendoLogo; - - /// - /// Nintendo Logo CRC - /// - public ushort NintendoLogoCRC; - - /// - /// Header CRC - /// - public ushort HeaderCRC; - - /// - /// Debugger reserved - /// - /// 0x20 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x20)] - public byte[]? DebuggerReserved; - } -} \ No newline at end of file diff --git a/SabreTools.Models/Nitro/Constants.cs b/SabreTools.Models/Nitro/Constants.cs deleted file mode 100644 index 501e66a..0000000 --- a/SabreTools.Models/Nitro/Constants.cs +++ /dev/null @@ -1,368 +0,0 @@ -namespace SabreTools.Models.Nitro -{ - public static class Constants - { - public const uint MAGIC30 = 0x72636E65; - - public const uint MAGIC34 = 0x6A624F79; - - #region Empty Secure Area - - public const uint EmptySecureAreaValue1 = 0x00000000; - - public const uint EmptySecureAreaValue2 = 0x00000000; - - #endregion - - #region Improperly Decrypted Secure Area - - public const uint ImproperlyDecrypted1Value1 = 0xE386C397; - - public const uint ImproperlyDecrypted1Value2 = 0x82775B7E; - - public const uint ImproperlyDecrypted2Value1 = 0xF98415B8; - - public const uint ImproperlyDecrypted2Value2 = 0x698068FC; - - public const uint ImproperlyDecrypted3Value1 = 0xA71329EE; - - public const uint ImproperlyDecrypted3Value2 = 0x2A1D4C38; - - public const uint ImproperlyDecrypted4Value1 = 0xC44DCC48; - - public const uint ImproperlyDecrypted4Value2 = 0x38B6F8CB; - - public const uint ImproperlyDecrypted5Value1 = 0x3A9323B5; - - public const uint ImproperlyDecrypted5Value2 = 0xC0387241; - - #endregion - - #region Improperly Encrypted Secure Area - - public const uint ImproperlyEncrypted1Value1 = 0x4BCE88BE; - - public const uint ImproperlyEncrypted1Value2 = 0xD3662DD1; - - public const uint ImproperlyEncrypted2Value1 = 0x2543C534; - - public const uint ImproperlyEncrypted2Value2 = 0xCC4BE38E; - - #endregion - - #region Properly Decrypted Non-Standard Secure Area (Mastering Issue) - - /// Dragon Quest 5 (EU) - public const uint NonStandardDecrypted1Value1 = 0xD0D48B67; - - /// Dragon Quest 5 (EU) - public const uint NonStandardDecrypted1Value2 = 0x39392F23; - - /// Dragon Quest 5 (USA) - public const uint NonStandardDecrypted2Value1 = 0x014A191A; - - /// Dragon Quest 5 (USA) - public const uint NonStandardDecrypted2Value2 = 0xA5C470B9; - - /// Dragon Quest 5 (JP) - public const uint NonStandardDecrypted3Value1 = 0x7829BC8D; - - /// Dragon Quest 5 (JP) - public const uint NonStandardDecrypted3Value2 = 0x9968EF44; - - /// Prince of Persia (EU) - public const uint NonStandardDecrypted4Value1 = 0xC4A15AB8; - - /// Prince of Persia (EU) - public const uint NonStandardDecrypted4Value2 = 0xD2E667C8; - - /// Prince of Persia (USA) - public const uint NonStandardDecrypted5Value1 = 0xD5E97D20; - - /// Prince of Persia (USA) - public const uint NonStandardDecrypted5Value2 = 0x21B2A159; - - #endregion - - #region Properly Decrypted Prototype Secure Area - - public const uint PrototypeDecryptedValue1 = 0xBA35F813; - - public const uint PrototypeDecryptedValue2 = 0xB691AAE8; - - #endregion - - #region Properly Decrypted Secure Area - - public const uint DecryptedValue1 = 0xE7FFDEFF; - - public const uint DecryptedValue2 = 0xE7FFDEFF; - - #endregion - - public static byte[] EncryptionData = - [ - 0x99,0xD5,0x20,0x5F,0x57,0x44,0xF5,0xB9,0x6E,0x19,0xA4,0xD9,0x9E,0x6A,0x5A,0x94, - 0xD8,0xAE,0xF1,0xEB,0x41,0x75,0xE2,0x3A,0x93,0x82,0xD0,0x32,0x33,0xEE,0x31,0xD5, - 0xCC,0x57,0x61,0x9A,0x37,0x06,0xA2,0x1B,0x79,0x39,0x72,0xF5,0x55,0xAE,0xF6,0xBE, - 0x5F,0x1B,0x69,0xFB,0xE5,0x9D,0xF1,0xE9,0xCE,0x2C,0xD9,0xA1,0x5E,0x32,0x05,0xE6, - 0xFE,0xD3,0xFE,0xCF,0xD4,0x62,0x04,0x0D,0x8B,0xF5,0xEC,0xB7,0x2B,0x60,0x79,0xBB, - 0x12,0x95,0x31,0x0D,0x6E,0x3F,0xDA,0x2B,0x88,0x84,0xF0,0xF1,0x3D,0x12,0x7E,0x25, - 0x45,0x22,0xF1,0xBB,0x24,0x06,0x1A,0x06,0x11,0xAD,0xDF,0x28,0x8B,0x64,0x81,0x34, - 0x2B,0xEB,0x33,0x29,0x99,0xAA,0xF2,0xBD,0x9C,0x14,0x95,0x9D,0x9F,0xF7,0xF5,0x8C, - 0x72,0x97,0xA1,0x29,0x9D,0xD1,0x5F,0xCF,0x66,0x4D,0x07,0x1A,0xDE,0xD3,0x4A,0x4B, - 0x85,0xC9,0xA7,0xA3,0x17,0x95,0x05,0x3A,0x3D,0x49,0x0A,0xBF,0x0A,0x89,0x8B,0xA2, - 0x4A,0x82,0x49,0xDD,0x27,0x90,0xF1,0x0B,0xE9,0xEB,0x1C,0x6A,0x83,0x76,0x45,0x05, - 0xBA,0x81,0x70,0x61,0x17,0x3F,0x4B,0xDE,0xAE,0xCF,0xAB,0x39,0x57,0xF2,0x3A,0x56, - 0x48,0x11,0xAD,0x8A,0x40,0xE1,0x45,0x3F,0xFA,0x9B,0x02,0x54,0xCA,0xA6,0x93,0xFB, - 0xEF,0x4D,0xFE,0x6F,0xA3,0xD8,0x87,0x9C,0x08,0xBA,0xD5,0x48,0x6A,0x8D,0x2D,0xFD, - 0x6E,0x15,0xF8,0x74,0xBD,0xBE,0x52,0x8B,0x18,0x22,0x8A,0x9E,0xFB,0x74,0x37,0x07, - 0x1B,0x36,0x6C,0x4A,0x19,0xBA,0x42,0x62,0xB9,0x79,0x91,0x10,0x7B,0x67,0x65,0x96, - 0xFE,0x02,0x23,0xE8,0xEE,0x99,0x8C,0x77,0x3E,0x5C,0x86,0x64,0x4D,0x6D,0x78,0x86, - 0xA5,0x4F,0x65,0xE2,0x1E,0xB2,0xDF,0x5A,0x0A,0xD0,0x7E,0x08,0x14,0xB0,0x71,0xAC, - 0xBD,0xDB,0x83,0x1C,0xB9,0xD7,0xA1,0x62,0xCD,0xC6,0x63,0x7C,0x52,0x69,0xC3,0xE6, - 0xBF,0x75,0xCE,0x12,0x44,0x5D,0x21,0x04,0xFA,0xFB,0xD3,0x3C,0x38,0x11,0x63,0xD4, - 0x95,0x85,0x41,0x49,0x46,0x09,0xF2,0x08,0x43,0x11,0xDC,0x1F,0x76,0xC0,0x15,0x6D, - 0x1F,0x3C,0x63,0x70,0xEA,0x87,0x80,0x6C,0xC3,0xBD,0x63,0x8B,0xC2,0x37,0x21,0x37, - 0xDC,0xEE,0x09,0x23,0x2E,0x37,0x6A,0x4D,0x73,0x90,0xF7,0x50,0x30,0xAC,0x1C,0x92, - 0x04,0x10,0x23,0x91,0x4F,0xD2,0x07,0xAA,0x68,0x3E,0x4F,0x9A,0xC9,0x64,0x60,0x6A, - 0xC8,0x14,0x21,0xF3,0xD6,0x22,0x41,0x12,0x44,0x24,0xCF,0xE6,0x8A,0x56,0xDD,0x0D, - 0x53,0x4D,0xE1,0x85,0x1E,0x8C,0x52,0x5A,0x9C,0x19,0x84,0xC2,0x03,0x57,0xF1,0x6F, - 0xE3,0x00,0xBE,0x58,0xF6,0x4C,0xED,0xD5,0x21,0x64,0x9C,0x1F,0xBE,0x55,0x03,0x3C, - 0x4A,0xDC,0xFF,0xAA,0xC9,0xDA,0xE0,0x5D,0x5E,0xBF,0xE6,0xDE,0xF5,0xD8,0xB1,0xF8, - 0xFF,0x36,0xB3,0xB9,0x62,0x67,0x95,0xDB,0x31,0x5F,0x37,0xED,0x4C,0x70,0x67,0x99, - 0x90,0xB5,0x18,0x31,0x6C,0x3D,0x99,0x99,0xE4,0x42,0xDA,0xD3,0x25,0x42,0x13,0xA0, - 0xAE,0xD7,0x70,0x6C,0xB1,0x55,0xCF,0xC7,0xD7,0x46,0xD5,0x43,0x61,0x17,0x3D,0x44, - 0x28,0xE9,0x33,0x85,0xD5,0xD0,0xA2,0x93,0xAA,0x25,0x12,0x1F,0xFB,0xC5,0x0B,0x46, - 0xF5,0x97,0x76,0x56,0x45,0xA6,0xBE,0x87,0xB1,0x94,0x6B,0xE8,0xB1,0xFE,0x33,0x99, - 0xAE,0x1F,0x3E,0x6C,0x39,0x71,0x1D,0x09,0x00,0x90,0x37,0xE4,0x10,0x3E,0x75,0x74, - 0xFF,0x8C,0x83,0x3B,0xB0,0xF1,0xB0,0xF9,0x01,0x05,0x47,0x42,0x95,0xF1,0xD6,0xAC, - 0x7E,0x38,0xE6,0x9E,0x95,0x74,0x26,0x3F,0xB4,0x68,0x50,0x18,0xD0,0x43,0x30,0xB4, - 0x4C,0x4B,0xE3,0x68,0xBF,0xE5,0x4D,0xB6,0x95,0x8B,0x0A,0xA0,0x74,0x25,0x32,0x77, - 0xCF,0xA1,0xF7,0x2C,0xD8,0x71,0x13,0x5A,0xAB,0xEA,0xC9,0x51,0xE8,0x0D,0xEE,0xEF, - 0xE9,0x93,0x7E,0x19,0xA7,0x1E,0x43,0x38,0x81,0x16,0x2C,0xA1,0x48,0xE3,0x73,0xCC, - 0x29,0x21,0x6C,0xD3,0x5D,0xCE,0xA0,0xD9,0x61,0x71,0x43,0xA0,0x15,0x13,0xB5,0x64, - 0x92,0xCF,0x2A,0x19,0xDC,0xAD,0xB7,0xA5,0x9F,0x86,0x65,0xF8,0x1A,0x9F,0xE7,0xFB, - 0xF7,0xFD,0xB8,0x13,0x6C,0x27,0xDB,0x6F,0xDF,0x35,0x1C,0xF7,0x8D,0x2C,0x5B,0x9B, - 0x12,0xAB,0x38,0x64,0x06,0xCC,0xDE,0x31,0xE8,0x4E,0x75,0x11,0x64,0xE3,0xFA,0xEA, - 0xEB,0x34,0x54,0xC2,0xAD,0x3F,0x34,0xEB,0x93,0x2C,0x7D,0x26,0x36,0x9D,0x56,0xF3, - 0x5A,0xE1,0xF6,0xB3,0x98,0x63,0x4A,0x9E,0x32,0x83,0xE4,0x9A,0x84,0x60,0x7D,0x90, - 0x2E,0x13,0x0E,0xEE,0x93,0x4B,0x36,0xA2,0x85,0xEC,0x16,0x38,0xE8,0x88,0x06,0x02, - 0xBF,0xF0,0xA0,0x3A,0xED,0xD7,0x6A,0x9A,0x73,0xE1,0x57,0xCF,0xF8,0x44,0xB8,0xDC, - 0x2E,0x23,0x59,0xD1,0xDF,0x95,0x52,0x71,0x99,0x61,0xA0,0x4B,0xD5,0x7F,0x6E,0x78, - 0xBA,0xA9,0xC5,0x30,0xD3,0x40,0x86,0x32,0x9D,0x32,0x0C,0x9C,0x37,0xB7,0x02,0x2F, - 0xBA,0x54,0x98,0xA9,0xC4,0x13,0x04,0xC9,0x8D,0xBE,0xC8,0xE7,0x5D,0x97,0x50,0x2E, - 0x93,0xD6,0x22,0x59,0x0C,0x27,0xBC,0x22,0x92,0xE0,0xA7,0x20,0x0F,0x93,0x6F,0x7F, - 0x4C,0x9F,0xD3,0xB5,0xA6,0x2A,0x0B,0x74,0x67,0x49,0x7D,0x10,0x26,0xCB,0xD1,0xC5, - 0x86,0x71,0xE7,0x8C,0xA0,0x9C,0xE9,0x5B,0xB2,0x1A,0xF6,0x01,0xEE,0x8C,0x9E,0x5E, - 0x83,0xF2,0x1A,0xDB,0xE6,0xE5,0xEA,0x84,0x59,0x76,0xD2,0x7C,0xF6,0x8D,0xA5,0x49, - 0x36,0x48,0xC2,0x16,0x52,0xBB,0x83,0xA3,0x74,0xB9,0x07,0x0C,0x3B,0xFF,0x61,0x28, - 0xE1,0x61,0xE9,0xE4,0xEF,0x6E,0x15,0xAA,0x4E,0xBA,0xE8,0x5D,0x05,0x96,0xBB,0x32, - 0x56,0xB0,0xFB,0x72,0x52,0x0F,0x0E,0xC8,0x42,0x25,0x65,0x76,0x89,0xAF,0xF2,0xDE, - 0x10,0x27,0xF0,0x01,0x4B,0x74,0xA7,0x97,0x07,0xD5,0x26,0x54,0x54,0x09,0x1F,0x82, - 0x0A,0x86,0x7D,0x30,0x39,0x0E,0xB3,0x26,0x9B,0x0B,0x57,0xBB,0x36,0x06,0x31,0xAF, - 0xFD,0x79,0xFC,0xD9,0x30,0x10,0x2B,0x0C,0xB3,0xE1,0x9B,0xD7,0x7B,0xDC,0x5F,0xEF, - 0xD2,0xF8,0x13,0x45,0x4D,0x47,0x75,0xBD,0x46,0x96,0x3C,0x7E,0x75,0xF3,0x3E,0xB5, - 0x67,0xC5,0x9A,0x3B,0xB0,0x5B,0x29,0x6B,0xDE,0x80,0x5B,0xC8,0x15,0x05,0xB1,0x31, - 0xB6,0xCE,0x49,0xDD,0xAD,0x84,0xB5,0xAE,0x60,0xDC,0x67,0x31,0x34,0x30,0xFE,0x4E, - 0xBD,0x80,0x2F,0xA6,0xBF,0x63,0x39,0x21,0x86,0xD9,0x35,0x7F,0x16,0x68,0x22,0x05, - 0x54,0xE9,0x90,0x26,0x8C,0x07,0x6C,0x51,0xA4,0x31,0x55,0xD7,0x09,0x07,0xA8,0x3E, - 0x2E,0x53,0x66,0xC1,0xF8,0xF2,0x7B,0xC4,0xF2,0x58,0xCF,0xF1,0x87,0xC5,0xA2,0xE7, - 0x27,0x8F,0x30,0x87,0x58,0xA0,0x64,0x62,0x23,0x18,0xB9,0x88,0x7C,0xFA,0xCE,0xC4, - 0x98,0xAE,0xAD,0x17,0xCC,0x4A,0x5B,0xF3,0xE9,0x48,0xD5,0x56,0xD3,0x0D,0xF2,0xC8, - 0x92,0x73,0x8C,0xDB,0xD7,0x2F,0x56,0xAC,0x81,0xF9,0x92,0x69,0x4D,0xC6,0x32,0xF6, - 0xE6,0xC0,0x8D,0x21,0xE2,0x76,0x80,0x61,0x11,0xBC,0xDC,0x6C,0x93,0xAF,0x19,0x69, - 0x9B,0xD0,0xBF,0xB9,0x31,0x9F,0x02,0x67,0xA3,0x51,0xEE,0x83,0x06,0x22,0x7B,0x0C, - 0xAB,0x49,0x42,0x40,0xB8,0xD5,0x01,0x7D,0xCE,0x5E,0xF7,0x55,0x53,0x39,0xC5,0x99, - 0x46,0xD8,0x87,0x9F,0xBA,0xF7,0x64,0xB4,0xE3,0x9A,0xFA,0xA1,0x6D,0x90,0x68,0x10, - 0x30,0xCA,0x8A,0x54,0xA7,0x9F,0x60,0xC3,0x19,0xF5,0x6B,0x0D,0x7A,0x51,0x98,0xE6, - 0x98,0x43,0x51,0xB4,0xD6,0x35,0xE9,0x4F,0xC3,0xDF,0x0F,0x7B,0xD6,0x2F,0x5C,0xBD, - 0x3A,0x15,0x61,0x19,0xF1,0x4B,0xCB,0xAA,0xDC,0x6D,0x64,0xC9,0xD3,0xC6,0x1E,0x56, - 0xEF,0x38,0x4C,0x50,0x71,0x86,0x75,0xCC,0x0D,0x0D,0x4E,0xE9,0x28,0xF6,0x06,0x5D, - 0x70,0x1B,0xAA,0xD3,0x45,0xCF,0xA8,0x39,0xAC,0x95,0xA6,0x2E,0xB4,0xE4,0x22,0xD4, - 0x74,0xA8,0x37,0x5F,0x48,0x7A,0x04,0xCC,0xA5,0x4C,0x40,0xD8,0x28,0xB4,0x28,0x08, - 0x0D,0x1C,0x72,0x52,0x41,0xF0,0x7D,0x47,0x19,0x3A,0x53,0x4E,0x58,0x84,0x62,0x6B, - 0x93,0xB5,0x8A,0x81,0x21,0x4E,0x0D,0xDC,0xB4,0x3F,0xA2,0xC6,0xFC,0xC9,0x2B,0x40, - 0xDA,0x38,0x04,0xE9,0x5E,0x5A,0x86,0x6B,0x0C,0x22,0x25,0x85,0x68,0x11,0x8D,0x7C, - 0x92,0x1D,0x95,0x55,0x4D,0xAB,0x8E,0xBB,0xDA,0xA6,0xE6,0xB7,0x51,0xB6,0x32,0x5A, - 0x05,0x41,0xDD,0x05,0x2A,0x0A,0x56,0x50,0x91,0x17,0x47,0xCC,0xC9,0xE6,0x7E,0xB5, - 0x61,0x4A,0xDB,0x73,0x67,0x51,0xC8,0x33,0xF5,0xDA,0x6E,0x74,0x2E,0x54,0xC3,0x37, - 0x0D,0x6D,0xAF,0x08,0xE8,0x15,0x8A,0x5F,0xE2,0x59,0x21,0xCD,0xA8,0xDE,0x0C,0x06, - 0x5A,0x77,0x6B,0x5F,0xDB,0x18,0x65,0x3E,0xC8,0x50,0xDE,0x78,0xE0,0xB8,0x82,0xB3, - 0x5D,0x4E,0x72,0x32,0x07,0x4F,0xC1,0x34,0x23,0xBA,0x96,0xB7,0x67,0x4E,0xA4,0x28, - 0x1E,0x34,0x62,0xEB,0x2D,0x6A,0x70,0xE9,0x2F,0x42,0xC4,0x70,0x4E,0x5A,0x31,0x9C, - 0xF9,0x5B,0x47,0x28,0xAA,0xDA,0x71,0x6F,0x38,0x1F,0xB3,0x78,0xC4,0x92,0x6B,0x1C, - 0x9E,0xF6,0x35,0x9A,0xB7,0x4D,0x0E,0xBF,0xCC,0x18,0x29,0x41,0x03,0x48,0x35,0x5D, - 0x55,0xD0,0x2B,0xC6,0x29,0xAF,0x5C,0x60,0x74,0x69,0x8E,0x5E,0x9B,0x7C,0xD4,0xBD, - 0x7B,0x44,0x64,0x7D,0x3F,0x92,0x5D,0x69,0xB6,0x1F,0x00,0x4B,0xD4,0x83,0x35,0xCF, - 0x7E,0x64,0x4E,0x17,0xAE,0x8D,0xD5,0x2E,0x9A,0x28,0x12,0x4E,0x2E,0x2B,0x49,0x08, - 0x5C,0xAE,0xC6,0x46,0x85,0xAE,0x41,0x61,0x1E,0x6F,0x82,0xD2,0x51,0x37,0x16,0x1F, - 0x0B,0xF6,0x59,0xA4,0x9A,0xCA,0x5A,0xAF,0x0D,0xD4,0x33,0x8B,0x20,0x63,0xF1,0x84, - 0x80,0x5C,0xCB,0xCF,0x08,0xB4,0xB9,0xD3,0x16,0x05,0xBD,0x62,0x83,0x31,0x9B,0x56, - 0x51,0x98,0x9F,0xBA,0xB2,0x5B,0xAA,0xB2,0x22,0x6B,0x2C,0xB5,0xD4,0x48,0xFA,0x63, - 0x2B,0x5F,0x58,0xFA,0x61,0xFA,0x64,0x09,0xBB,0x38,0xE0,0xB8,0x9D,0x92,0x60,0xA8, - 0x0D,0x67,0x6F,0x0E,0x37,0xF5,0x0D,0x01,0x9F,0xC2,0x77,0xD4,0xFE,0xEC,0xF1,0x73, - 0x30,0x39,0xE0,0x7D,0xF5,0x61,0x98,0xE4,0x2C,0x28,0x55,0x04,0x56,0x55,0xDB,0x2F, - 0x6B,0xEC,0xE5,0x58,0x06,0xB6,0x64,0x80,0x6A,0x2A,0x1A,0x4E,0x5B,0x0F,0xD8,0xC4, - 0x0A,0x2E,0x52,0x19,0xD9,0x62,0xF5,0x30,0x48,0xBE,0x8C,0x7B,0x4F,0x38,0x9B,0xA2, - 0xC3,0xAF,0xC9,0xD3,0xC7,0xC1,0x62,0x41,0x86,0xB9,0x61,0x21,0x57,0x6F,0x99,0x4F, - 0xC1,0xBA,0xCE,0x7B,0xB5,0x3B,0x4D,0x5E,0x8A,0x8B,0x44,0x57,0x5F,0x13,0x5F,0x70, - 0x6D,0x5B,0x29,0x47,0xDC,0x38,0xE2,0xEC,0x04,0x55,0x65,0x12,0x2A,0xE8,0x17,0x43, - 0xE1,0x8E,0xDD,0x2A,0xB3,0xE2,0x94,0xF7,0x09,0x6E,0x5C,0xE6,0xEB,0x8A,0xF8,0x6D, - 0x89,0x49,0x54,0x48,0xF5,0x2F,0xAD,0xBF,0xEA,0x94,0x4B,0xCA,0xFC,0x39,0x87,0x82, - 0x5F,0x8A,0x01,0xF2,0x75,0xF2,0xE6,0x71,0xD6,0xD8,0x42,0xDE,0xF1,0x2D,0x1D,0x28, - 0xA6,0x88,0x7E,0xA3,0xA0,0x47,0x1D,0x30,0xD9,0xA3,0x71,0xDF,0x49,0x1C,0xCB,0x01, - 0xF8,0x36,0xB1,0xF2,0xF0,0x22,0x58,0x5D,0x45,0x6B,0xBD,0xA0,0xBB,0xB2,0x88,0x42, - 0xC7,0x8C,0x28,0xCE,0x93,0xE8,0x90,0x63,0x08,0x90,0x7C,0x89,0x3C,0xF5,0x7D,0xB7, - 0x04,0x2D,0x4F,0x55,0x51,0x16,0xFD,0x7E,0x79,0xE8,0xBE,0xC1,0xF2,0x12,0xD4,0xF8, - 0xB4,0x84,0x05,0x23,0xA0,0xCC,0xD2,0x2B,0xFD,0xE1,0xAB,0xAD,0x0D,0xD1,0x55,0x6C, - 0x23,0x41,0x94,0x4D,0x77,0x37,0x4F,0x05,0x28,0x0C,0xBF,0x17,0xB3,0x12,0x67,0x6C, - 0x8C,0xC3,0x5A,0xF7,0x41,0x84,0x2A,0x6D,0xD0,0x94,0x12,0x27,0x2C,0xB4,0xED,0x9C, - 0x4D,0xEC,0x47,0x82,0x97,0xD5,0x67,0xB9,0x1B,0x9D,0xC0,0x55,0x07,0x7E,0xE5,0x8E, - 0xE2,0xA8,0xE7,0x3E,0x12,0xE4,0x0E,0x3A,0x2A,0x45,0x55,0x34,0xA2,0xF9,0x2D,0x5A, - 0x1B,0xAB,0x52,0x7C,0x83,0x10,0x5F,0x55,0xD2,0xF1,0x5A,0x43,0x2B,0xC6,0xA7,0xA4, - 0x89,0x15,0x95,0xE8,0xB4,0x4B,0x9D,0xF8,0x75,0xE3,0x9F,0x60,0x78,0x5B,0xD6,0xE6, - 0x0D,0x44,0xE6,0x21,0x06,0xBD,0x47,0x22,0x53,0xA4,0x00,0xAD,0x8D,0x43,0x13,0x85, - 0x39,0xF7,0xAA,0xFC,0x38,0xAF,0x7B,0xED,0xFC,0xE4,0x2B,0x54,0x50,0x98,0x4C,0xFC, - 0x85,0x80,0xF7,0xDF,0x3C,0x80,0x22,0xE1,0x94,0xDA,0xDE,0x24,0xC6,0xB0,0x7A,0x39, - 0x38,0xDC,0x0F,0xA1,0xA7,0xF4,0xF9,0x6F,0x63,0x18,0x57,0x8B,0x84,0x41,0x2A,0x2E, - 0xD4,0x53,0xF2,0xD9,0x00,0x0F,0xD0,0xDD,0x99,0x6E,0x19,0xA6,0x0A,0xD0,0xEC,0x5B, - 0x58,0x24,0xAB,0xC0,0xCB,0x06,0x65,0xEC,0x1A,0x13,0x38,0x94,0x0A,0x67,0x03,0x2F, - 0x3F,0xF7,0xE3,0x77,0x44,0x77,0x33,0xC6,0x14,0x39,0xD0,0xE3,0xC0,0xA2,0x08,0x79, - 0xBB,0x40,0x99,0x57,0x41,0x0B,0x01,0x90,0xCD,0xE1,0xCC,0x48,0x67,0xDB,0xB3,0xAF, - 0x88,0x74,0xF3,0x4C,0x82,0x8F,0x72,0xB1,0xB5,0x23,0x29,0xC4,0x12,0x6C,0x19,0xFC, - 0x8E,0x46,0xA4,0x9C,0xC4,0x25,0x65,0x87,0xD3,0x6D,0xBE,0x8A,0x93,0x11,0x03,0x38, - 0xED,0x83,0x2B,0xF3,0x46,0xA4,0x93,0xEA,0x3B,0x53,0x85,0x1D,0xCE,0xD4,0xF1,0x08, - 0x83,0x27,0xED,0xFC,0x9B,0x1A,0x18,0xBC,0xF9,0x8B,0xAE,0xDC,0x24,0xAB,0x50,0x38, - 0xE9,0x72,0x4B,0x10,0x22,0x17,0x7B,0x46,0x5D,0xAB,0x59,0x64,0xF3,0x40,0xAE,0xF8, - 0xBB,0xE5,0xC8,0xF9,0x26,0x03,0x4E,0x55,0x7D,0xEB,0xEB,0xFE,0xF7,0x39,0xE6,0xE0, - 0x0A,0x11,0xBE,0x2E,0x28,0xFF,0x98,0xED,0xC0,0xC9,0x42,0x56,0x42,0xC3,0xFD,0x00, - 0xF6,0xAF,0x87,0xA2,0x5B,0x01,0x3F,0x32,0x92,0x47,0x95,0x9A,0x72,0xA5,0x32,0x3D, - 0xAE,0x6B,0xD0,0x9B,0x07,0xD2,0x49,0x92,0xE3,0x78,0x4A,0xFA,0xA1,0x06,0x7D,0xF2, - 0x41,0xCF,0x77,0x74,0x04,0x14,0xB2,0x0C,0x86,0x84,0x64,0x16,0xD5,0xBB,0x51,0xA1, - 0xE5,0x6F,0xF1,0xD1,0xF2,0xE2,0xF7,0x5F,0x58,0x20,0x4D,0xB8,0x57,0xC7,0xCF,0xDD, - 0xC5,0xD8,0xBE,0x76,0x3D,0xF6,0x5F,0x7E,0xE7,0x2A,0x8B,0x88,0x24,0x1B,0x38,0x3F, - 0x0E,0x41,0x23,0x77,0xF5,0xF0,0x4B,0xD4,0x0C,0x1F,0xFA,0xA4,0x0B,0x80,0x5F,0xCF, - 0x45,0xF6,0xE0,0xDA,0x2F,0x34,0x59,0x53,0xFB,0x20,0x3C,0x52,0x62,0x5E,0x35,0xB5, - 0x62,0xFE,0x8B,0x60,0x63,0xE3,0x86,0x5A,0x15,0x1A,0x6E,0xD1,0x47,0x45,0xBC,0x32, - 0xB4,0xEB,0x67,0x38,0xAB,0xE4,0x6E,0x33,0x3A,0xB5,0xED,0xA3,0xAD,0x67,0xE0,0x4E, - 0x41,0x95,0xEE,0x62,0x62,0x71,0x26,0x1D,0x31,0xEF,0x62,0x30,0xAF,0xD7,0x82,0xAC, - 0xC2,0xDC,0x05,0x04,0xF5,0x97,0x07,0xBF,0x11,0x59,0x23,0x07,0xC0,0x64,0x02,0xE8, - 0x97,0xE5,0x3E,0xAF,0x18,0xAC,0x59,0xA6,0x8B,0x4A,0x33,0x90,0x1C,0x6E,0x7C,0x9C, - 0x20,0x7E,0x4C,0x3C,0x3E,0x61,0x64,0xBB,0xC5,0x6B,0x7C,0x7E,0x3E,0x9F,0xC5,0x4C, - 0x9F,0xEA,0x73,0xF5,0xD7,0x89,0xC0,0x4C,0xF4,0xFB,0xF4,0x2D,0xEC,0x14,0x1B,0x51, - 0xD5,0xC1,0x12,0xC8,0x10,0xDF,0x0B,0x4A,0x8B,0x9C,0xBC,0x93,0x45,0x6A,0x3E,0x3E, - 0x7D,0xC1,0xA9,0xBA,0xCD,0xC1,0xB4,0x07,0xE4,0xE1,0x68,0x86,0x43,0xB2,0x6D,0x38, - 0xF3,0xFB,0x0C,0x5C,0x66,0x37,0x71,0xDE,0x56,0xEF,0x6E,0xA0,0x10,0x40,0x65,0xA7, - 0x98,0xF7,0xD0,0xBE,0x0E,0xC8,0x37,0x36,0xEC,0x10,0xCA,0x7C,0x9C,0xAB,0x84,0x1E, - 0x05,0x17,0x76,0x02,0x1C,0x4F,0x52,0xAA,0x5F,0xC1,0xC6,0xA0,0x56,0xB9,0xD8,0x04, - 0x84,0x44,0x4D,0xA7,0x59,0xD8,0xDE,0x60,0xE6,0x38,0x0E,0x05,0x8F,0x03,0xE1,0x3B, - 0x6D,0x81,0x04,0x33,0x6F,0x30,0x0B,0xCE,0x69,0x05,0x21,0x33,0xFB,0x26,0xBB,0x89, - 0x7D,0xB6,0xAE,0x87,0x7E,0x51,0x07,0xE0,0xAC,0xF7,0x96,0x0A,0x6B,0xF9,0xC4,0x5C, - 0x1D,0xE4,0x44,0x47,0xB8,0x5E,0xFA,0xE3,0x78,0x84,0x55,0x42,0x4B,0x48,0x5E,0xF7, - 0x7D,0x47,0x35,0x86,0x1D,0x2B,0x43,0x05,0x03,0xEC,0x8A,0xB8,0x1E,0x06,0x3C,0x76, - 0x0C,0x48,0x1A,0x43,0xA7,0xB7,0x8A,0xED,0x1E,0x13,0xC6,0x43,0xEE,0x10,0xEF,0xDB, - 0xEC,0xFB,0x3C,0x83,0xB2,0x95,0x44,0xEF,0xD8,0x54,0x51,0x4E,0x2D,0x11,0x44,0x1D, - 0xFB,0x36,0x59,0x1E,0x7A,0x34,0xC1,0xC3,0xCA,0x57,0x00,0x61,0xEA,0x67,0xA5,0x16, - 0x9B,0x55,0xD0,0x55,0xE1,0x7F,0xD9,0x36,0xD2,0x40,0x76,0xAE,0xDC,0x01,0xCE,0xB0, - 0x7A,0x83,0xD5,0xCB,0x20,0x98,0xEC,0x6B,0xC1,0x72,0x92,0x34,0xF3,0x82,0x57,0x37, - 0x62,0x8A,0x32,0x36,0x0C,0x90,0x43,0xAE,0xAE,0x5C,0x9B,0x78,0x8E,0x13,0x65,0x02, - 0xFD,0x68,0x71,0xC1,0xFE,0xB0,0x31,0xA0,0x24,0x82,0xB0,0xC3,0xB1,0x79,0x69,0xA7, - 0xF5,0xD2,0xEB,0xD0,0x82,0xC0,0x32,0xDC,0x9E,0xC7,0x26,0x3C,0x6D,0x8D,0x98,0xC1, - 0xBB,0x22,0xD4,0xD0,0x0F,0x33,0xEC,0x3E,0xB9,0xCC,0xE1,0xDC,0x6A,0x4C,0x77,0x36, - 0x14,0x1C,0xF9,0xBF,0x81,0x9F,0x28,0x5F,0x71,0x85,0x32,0x29,0x90,0x75,0x48,0xC4, - 0xB3,0x4A,0xCE,0xD8,0x44,0x8F,0x14,0x2F,0xFD,0x40,0x57,0xEF,0xAA,0x08,0x75,0xD9, - 0x46,0xD1,0xD6,0x6E,0x32,0x55,0x1F,0xC3,0x18,0xFE,0x84,0x1F,0xFC,0x84,0xD5,0xFF, - 0x71,0x5E,0x1B,0x48,0xC3,0x86,0x95,0x0E,0x28,0x08,0x27,0xD3,0x38,0x83,0x71,0x7B, - 0x4C,0x80,0x63,0x54,0x9A,0x56,0xB0,0xAC,0xCF,0x80,0xCA,0x31,0x09,0xEF,0xFE,0xF3, - 0xBE,0xAF,0x24,0x7E,0xA6,0xFE,0x53,0x3F,0xC2,0x8D,0x4A,0x33,0x68,0xD1,0x22,0xA6, - 0x66,0xAD,0x7B,0xEA,0xDE,0xB6,0x43,0xB0,0xA1,0x25,0x95,0x00,0xA3,0x3F,0x75,0x46, - 0x14,0x11,0x44,0xEC,0xD7,0x95,0xBC,0x92,0xF0,0x4F,0xA9,0x16,0x53,0x62,0x97,0x60, - 0x2A,0x0F,0x41,0xF1,0x71,0x24,0xBE,0xEE,0x94,0x7F,0x08,0xCD,0x60,0x93,0xB3,0x85, - 0x5B,0x07,0x00,0x3F,0xD8,0x0F,0x28,0x83,0x9A,0xD1,0x69,0x9F,0xD1,0xDA,0x2E,0xC3, - 0x90,0x01,0xA2,0xB9,0x6B,0x4E,0x2A,0x66,0x9D,0xDA,0xAE,0xA6,0xEA,0x2A,0xD3,0x68, - 0x2F,0x0C,0x0C,0x9C,0xD2,0x8C,0x4A,0xED,0xE2,0x9E,0x57,0x65,0x9D,0x09,0x87,0xA3, - 0xB4,0xC4,0x32,0x5D,0xC9,0xD4,0x32,0x2B,0xB1,0xE0,0x71,0x1E,0x64,0x4D,0xE6,0x90, - 0x71,0xE3,0x1E,0x40,0xED,0x7D,0xF3,0x84,0x0E,0xED,0xC8,0x78,0x76,0xAE,0xC0,0x71, - 0x27,0x72,0xBB,0x05,0xEA,0x02,0x64,0xFB,0xF3,0x48,0x6B,0xB5,0x42,0x93,0x3F,0xED, - 0x9F,0x13,0x53,0xD2,0xF7,0xFE,0x2A,0xEC,0x1D,0x47,0x25,0xDB,0x3C,0x91,0x86,0xC6, - 0x8E,0xF0,0x11,0xFD,0x23,0x74,0x36,0xF7,0xA4,0xF5,0x9E,0x7A,0x7E,0x53,0x50,0x44, - 0xD4,0x47,0xCA,0xD3,0xEB,0x38,0x6D,0xE6,0xD9,0x71,0x94,0x7F,0x4A,0xC6,0x69,0x4B, - 0x11,0xF4,0x52,0xEA,0x22,0xFE,0x8A,0xB0,0x36,0x67,0x8B,0x59,0xE8,0xE6,0x80,0x2A, - 0xEB,0x65,0x04,0x13,0xEE,0xEC,0xDC,0x9E,0x5F,0xB1,0xEC,0x05,0x6A,0x59,0xE6,0x9F, - 0x5E,0x59,0x6B,0x89,0xBF,0xF7,0x1A,0xCA,0x44,0xF9,0x5B,0x6A,0x71,0x85,0x03,0xE4, - 0x29,0x62,0xE0,0x70,0x6F,0x41,0xC4,0xCF,0xB2,0xB1,0xCC,0xE3,0x7E,0xA6,0x07,0xA8, - 0x87,0xE7,0x7F,0x84,0x93,0xDB,0x52,0x4B,0x6C,0xEC,0x7E,0xDD,0xD4,0x24,0x48,0x10, - 0x69,0x9F,0x04,0x60,0x74,0xE6,0x48,0x18,0xF3,0xE4,0x2C,0xB9,0x4F,0x2E,0x50,0x7A, - 0xDF,0xD4,0x54,0x69,0x2B,0x8B,0xA7,0xF3,0xCE,0xFF,0x1F,0xF3,0x3E,0x26,0x01,0x39, - 0x17,0x95,0x84,0x89,0xB0,0xF0,0x4C,0x4B,0x82,0x91,0x9F,0xC4,0x4B,0xAC,0x9D,0xA5, - 0x74,0xAF,0x17,0x25,0xC9,0xCA,0x32,0xD3,0xBC,0x89,0x8A,0x84,0x89,0xCC,0x0D,0xAE, - 0x7C,0xA2,0xDB,0x9C,0x6A,0x78,0x91,0xEE,0xEA,0x76,0x5D,0x4E,0x87,0x60,0xF5,0x69, - 0x15,0x67,0xD4,0x02,0xCF,0xAF,0x48,0x36,0x07,0xEA,0xBF,0x6F,0x66,0x2D,0x06,0x8F, - 0xC4,0x9A,0xFE,0xF9,0xF6,0x90,0x87,0x75,0xB8,0xF7,0xAD,0x0F,0x76,0x10,0x5A,0x3D, - 0x59,0xB0,0x2E,0xB3,0xC7,0x35,0x2C,0xCC,0x70,0x56,0x2B,0xCB,0xE3,0x37,0x96,0xC5, - 0x2F,0x46,0x1B,0x8A,0x22,0x46,0xC7,0x88,0xA7,0x26,0x32,0x98,0x61,0xDF,0x86,0x22, - 0x8A,0xF4,0x1C,0x2F,0x87,0xA1,0x09,0xAA,0xCC,0xA9,0xAE,0xD3,0xBD,0x00,0x45,0x1C, - 0x9A,0x54,0x87,0x86,0x52,0x87,0xEF,0xFF,0x1E,0x8F,0xA1,0x8F,0xC1,0x89,0x5C,0x35, - 0x1B,0xDA,0x2D,0x3A,0x2C,0x16,0xB2,0xC2,0xF1,0x56,0xE2,0x78,0xC1,0x6B,0x63,0x97, - 0xC5,0x56,0x8F,0xC9,0x32,0x7F,0x2C,0xAA,0xAF,0xA6,0xA8,0xAC,0x20,0x91,0x22,0x88, - 0xDE,0xE4,0x60,0x8B,0xF9,0x4B,0x42,0x25,0x1A,0xE3,0x7F,0x9C,0x2C,0x19,0x89,0x3A, - 0x7E,0x05,0xD4,0x36,0xCC,0x69,0x58,0xC2,0xC1,0x32,0x8B,0x2F,0x90,0x85,0xEB,0x7A, - 0x39,0x50,0xA5,0xA1,0x27,0x92,0xC5,0x66,0xB0,0x20,0x4F,0x58,0x7E,0x55,0x83,0x43, - 0x2B,0x45,0xE2,0x9C,0xE4,0xD8,0x12,0x90,0x2C,0x16,0x83,0x56,0x16,0x79,0x03,0xB3, - 0xAD,0x2D,0x61,0x18,0x1A,0x13,0x1F,0x37,0xE2,0xE1,0x9C,0x73,0x7B,0x80,0xD5,0xFD, - 0x2D,0x51,0x87,0xFC,0x7B,0xAA,0xD7,0x1F,0x2C,0x7A,0x8E,0xAF,0xF4,0x8D,0xBB,0xCD, - 0x95,0x11,0x7C,0x72,0x0B,0xEE,0x6F,0xE2,0xB9,0xAF,0xDE,0x37,0x83,0xDE,0x8C,0x8D, - 0x62,0x05,0x67,0xB7,0x96,0xC6,0x8D,0x56,0xB6,0x0D,0xD7,0x62,0xBA,0xD6,0x46,0x36, - 0xBD,0x8E,0xC8,0xE6,0xEA,0x2A,0x6C,0x10,0x14,0xFF,0x6B,0x5B,0xFA,0x82,0x3C,0x46, - 0xB1,0x30,0x43,0x46,0x51,0x8A,0x7D,0x9B,0x92,0x3E,0x83,0x79,0x5B,0x55,0x5D,0xB2, - 0x6C,0x5E,0xCE,0x90,0x62,0x8E,0x53,0x98,0xC9,0x0D,0x6D,0xE5,0x2D,0x57,0xCD,0xC5, - 0x81,0x57,0xBA,0xE1,0xE8,0xB8,0x8F,0x72,0xE5,0x4F,0x13,0xDC,0xEA,0x9D,0x71,0x15, - 0x10,0xB2,0x11,0x88,0xD5,0x09,0xD4,0x7F,0x5B,0x65,0x7F,0x2C,0x3B,0x38,0x4C,0x11, - 0x68,0x50,0x8D,0xFB,0x9E,0xB0,0x59,0xBF,0x94,0x80,0x89,0x4A,0xC5,0x1A,0x18,0x12, - 0x89,0x53,0xD1,0x4A,0x10,0x29,0xE8,0x8C,0x1C,0xEC,0xB6,0xEA,0x46,0xC7,0x17,0x8B, - 0x25,0x15,0x31,0xA8,0xA2,0x6B,0x43,0xB1,0x9D,0xE2,0xDB,0x0B,0x87,0x9B,0xB0,0x11, - 0x04,0x0E,0x71,0xD2,0x29,0x77,0x89,0x82,0x0A,0x66,0x41,0x7F,0x1D,0x0B,0x48,0xFF, - 0x72,0xBB,0x24,0xFD,0xC2,0x48,0xA1,0x9B,0xFE,0x7B,0x7F,0xCE,0x88,0xDB,0x86,0xD9, - 0x85,0x3B,0x1C,0xB0,0xDC,0xA8,0x33,0x07,0xBF,0x51,0x2E,0xE3,0x0E,0x9A,0x00,0x97, - 0x1E,0x06,0xC0,0x97,0x43,0x9D,0xD8,0xB6,0x45,0xC4,0x86,0x67,0x5F,0x00,0xF8,0x88, - 0x9A,0xA4,0x52,0x9E,0xC7,0xAA,0x8A,0x83,0x75,0xEC,0xC5,0x18,0xAE,0xCE,0xC3,0x2F, - 0x1A,0x2B,0xF9,0x18,0xFF,0xAE,0x1A,0xF5,0x53,0x0B,0xB5,0x33,0x51,0xA7,0xFD,0xE8, - 0xA8,0xE1,0xA2,0x64,0xB6,0x22,0x17,0x43,0x80,0xCC,0x0A,0xD8,0xAE,0x3B,0xBA,0x40, - 0xD7,0xD9,0x92,0x4A,0x89,0xDF,0x04,0x10,0xEE,0x9B,0x18,0x2B,0x6A,0x77,0x69,0x8A, - 0x68,0xF4,0xF9,0xB9,0xA2,0x21,0x15,0x6E,0xE6,0x1E,0x3B,0x03,0x62,0x30,0x9B,0x60, - 0x41,0x7E,0x25,0x9B,0x9E,0x8F,0xC5,0x52,0x10,0x08,0xF8,0xC2,0x69,0xA1,0x21,0x11, - 0x88,0x37,0x5E,0x79,0x35,0x66,0xFF,0x10,0x42,0x18,0x6E,0xED,0x97,0xB6,0x6B,0x1C, - 0x4E,0x36,0xE5,0x6D,0x7D,0xB4,0xE4,0xBF,0x20,0xB9,0xE0,0x05,0x3A,0x69,0xD5,0xB8, - 0xE3,0xD5,0xDC,0xE0,0xB9,0xAC,0x53,0x3E,0x07,0xA4,0x57,0xAD,0x77,0xFF,0x48,0x18, - 0x76,0x2A,0xAC,0x49,0x2A,0x8E,0x47,0x75,0x6D,0x9F,0x67,0x63,0x30,0x35,0x8C,0x39, - 0x05,0x39,0xD5,0x6F,0x64,0x3A,0x5B,0xAD,0xCA,0x0B,0xBB,0x82,0x52,0x99,0x45,0xB1, - 0x93,0x36,0x36,0x99,0xAF,0x13,0x20,0x44,0x36,0xD8,0x02,0x44,0x09,0x39,0x92,0x85, - 0xFF,0x4A,0x4A,0x97,0x87,0xA6,0x63,0xD7,0xC7,0xB5,0xB5,0x24,0xED,0x0F,0xB4,0x6F, - 0x0C,0x58,0x52,0x14,0xD9,0xA6,0x7B,0xD3,0x79,0xBC,0x38,0x58,0xA1,0xBD,0x3B,0x84, - 0x06,0xD8,0x1A,0x06,0xFD,0x6B,0xA8,0xEA,0x4B,0x69,0x28,0x04,0x37,0xAD,0x82,0x99, - 0xFB,0x0E,0x1B,0x85,0xBD,0xA8,0x5D,0x73,0xCD,0xDC,0x58,0x75,0x0A,0xBE,0x63,0x6C, - 0x48,0xE7,0x4C,0xE4,0x30,0x2B,0x04,0x60,0xB9,0x15,0xD8,0xDA,0x86,0x81,0x75,0x8F, - 0x96,0xD4,0x8D,0x1C,0x5D,0x70,0x85,0x7C,0x1C,0x67,0x7B,0xD5,0x08,0x67,0xA6,0xCE, - 0x4B,0x0A,0x66,0x70,0xB7,0xE5,0x63,0xD4,0x5B,0x8A,0x82,0xEA,0x10,0x67,0xCA,0xE2, - 0xF4,0xEF,0x17,0x85,0x2F,0x2A,0x5F,0x8A,0x97,0x82,0xF8,0x6A,0xD6,0x34,0x10,0xEA, - 0xEB,0xC9,0x5C,0x3C,0xE1,0x49,0xF8,0x46,0xEB,0xDE,0xBD,0xF6,0xA9,0x92,0xF1,0xAA, - 0xA6,0xA0,0x18,0xB0,0x3A,0xD3,0x0F,0x1F,0xF3,0x6F,0xFF,0x31,0x45,0x43,0x44,0xD3, - 0x50,0x9A,0xF7,0x88,0x09,0x96,0xC1,0xCE,0x76,0xCC,0xF2,0x2C,0x2C,0xBA,0xAD,0x82, - 0x77,0x8F,0x18,0x84,0xC0,0xD2,0x07,0x9C,0x36,0x90,0x83,0x4E,0x0B,0xA5,0x4F,0x43, - 0x3E,0x04,0xAB,0x78,0x4F,0xD6,0xFB,0x09,0x01,0x24,0x90,0xDA,0x6F,0x3C,0x3A,0x61, - 0x0D,0x7F,0x69,0x4A,0xEB,0x2B,0x30,0x02,0xB4,0xDB,0xE0,0x84,0xA9,0xEC,0xD7,0x35, - 0xBF,0x37,0x7D,0x85,0x58,0xCE,0xA9,0x4E,0xE4,0x80,0xC7,0xA8,0xD3,0x30,0x67,0x48, - 0xEB,0x29,0xAF,0x2F,0x74,0x6A,0xB4,0xA7,0x3F,0x0F,0x3F,0x92,0xAF,0xF3,0xCA,0xAC, - 0xAF,0x4B,0xD9,0x94,0xC0,0x43,0xCA,0x81,0x0D,0x2F,0x48,0xA1,0xB0,0x27,0xD5,0xD2, - 0xEF,0x4B,0x05,0x85,0xA3,0xDE,0x4D,0x93,0x30,0x3C,0xF0,0xBB,0x4A,0x8F,0x30,0x27, - 0x4C,0xEB,0xE3,0x3E,0x64,0xED,0x9A,0x2F,0x3B,0xF1,0x82,0xF0,0xBA,0xF4,0xCF,0x7F, - 0x40,0xCB,0xB0,0xE1,0x7F,0xBC,0xAA,0x57,0xD3,0xC9,0x74,0xF2,0xFA,0x43,0x0D,0x22, - 0xD0,0xF4,0x77,0x4E,0x93,0xD7,0x85,0x70,0x1F,0x99,0xBF,0xB6,0xDE,0x35,0xF1,0x30, - 0xA7,0x5E,0x71,0xF0,0x6B,0x01,0x2D,0x7B,0x64,0xF0,0x33,0x53,0x0A,0x39,0x88,0xF3, - 0x6B,0x3A,0xA6,0x6B,0x35,0xD2,0x2F,0x43,0xCD,0x02,0xFD,0xB5,0xE9,0xBC,0x5B,0xAA, - 0xD8,0xA4,0x19,0x7E,0x0E,0x5D,0x94,0x81,0x9E,0x6F,0x77,0xAD,0xD6,0x0E,0x74,0x93, - 0x96,0xE7,0xC4,0x18,0x5F,0xAD,0xF5,0x19, - ]; - } -} \ No newline at end of file diff --git a/SabreTools.Models/Nitro/Enums.cs b/SabreTools.Models/Nitro/Enums.cs deleted file mode 100644 index 0ead57a..0000000 --- a/SabreTools.Models/Nitro/Enums.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace SabreTools.Models.Nitro -{ - public enum Unitcode : byte - { - NDS = 0x00, - - NDSPlusDSi = 0x02, - - DSi = 0x03, - } -} \ No newline at end of file diff --git a/SabreTools.Models/Nitro/ExtendedDSiHeader.cs b/SabreTools.Models/Nitro/ExtendedDSiHeader.cs deleted file mode 100644 index cf4a766..0000000 --- a/SabreTools.Models/Nitro/ExtendedDSiHeader.cs +++ /dev/null @@ -1,298 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.Nitro -{ - /// - /// Nintendo DSi extended cart header - /// - /// - [StructLayout(LayoutKind.Sequential)] - public sealed class ExtendedDSiHeader - { - /// - /// Global MBK1..MBK5 Settings - /// - /// 5 entries - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)] - public uint[]? GlobalMBK15Settings; - - /// - /// Local MBK6..MBK8 Settings for ARM9 - /// - /// 3 entries - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] - public uint[]? LocalMBK68SettingsARM9; - - /// - /// Local MBK6..MBK8 Settings for ARM7 - /// - /// 3 entries - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] - public uint[]? LocalMBK68SettingsARM7; - - /// - /// Global MBK9 Setting - /// - public uint GlobalMBK9Setting; - - /// - /// Region Flags - /// - public uint RegionFlags; - - /// - /// Access control - /// - public uint AccessControl; - - /// - /// ARM7 SCFG EXT mask (controls which devices to enable) - /// - public uint ARM7SCFGEXTMask; - - /// - /// Reserved/flags? When bit2 of byte 0x1bf is set, usage of banner.sav from the title data dir is enabled.(additional banner data) - /// - public uint ReservedFlags; - - /// - /// ARM9i rom offset - /// - public uint ARM9iRomOffset; - - /// - /// Reserved - /// - public uint Reserved3; - - /// - /// ARM9i load address - /// - public uint ARM9iLoadAddress; - - /// - /// ARM9i size; - /// - public uint ARM9iSize; - - /// - /// ARM7i rom offset - /// - public uint ARM7iRomOffset; - - /// - /// Pointer to base address where various structures and parameters are passed to the title - what is that??? - /// - public uint Reserved4; - - /// - /// ARM7i load address - /// - public uint ARM7iLoadAddress; - - /// - /// ARM7i size; - /// - public uint ARM7iSize; - - /// - /// Digest NTR region offset - /// - public uint DigestNTRRegionOffset; - - /// - /// Digest NTR region length - /// - public uint DigestNTRRegionLength; - - // - /// Digest TWL region offset - /// - public uint DigestTWLRegionOffset; - - /// - /// Digest TWL region length - /// - public uint DigestTWLRegionLength; - - // - /// Digest Sector Hashtable region offset - /// - public uint DigestSectorHashtableRegionOffset; - - /// - /// Digest Sector Hashtable region length - /// - public uint DigestSectorHashtableRegionLength; - - // - /// Digest Block Hashtable region offset - /// - public uint DigestBlockHashtableRegionOffset; - - /// - /// Digest Block Hashtable region length - /// - public uint DigestBlockHashtableRegionLength; - - /// - /// Digest Sector size - /// - public uint DigestSectorSize; - - /// - /// Digeset Block Sectorount - /// - public uint DigestBlockSectorCount; - - /// - /// Icon Banner Size (usually 0x23C0) - /// - public uint IconBannerSize; - - /// - /// Unknown (used by DSi) - /// - public uint Unknown1; - - /// - /// NTR+TWL region ROM size (total size including DSi area) - /// - public uint NTRTWLRegionRomSize; - - /// - /// Unknown (used by DSi) - /// - /// 12 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)] - public byte[]? Unknown2; - - /// - /// Modcrypt area 1 offset - /// - public uint ModcryptArea1Offset; - - /// - /// Modcrypt area 1 size - /// - public uint ModcryptArea1Size; - - /// - /// Modcrypt area 2 offset - /// - public uint ModcryptArea2Offset; - - /// - /// Modcrypt area 2 size - /// - public uint ModcryptArea2Size; - - /// - /// Title ID - /// - /// 8 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] - public byte[]? TitleID; - - /// - /// DSiWare: "public.sav" size - /// - public uint DSiWarePublicSavSize; - - /// - /// DSiWare: "private.sav" size - /// - public uint DSiWarePrivateSavSize; - - /// - /// Reserved (zero) - /// - /// 176 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 176)] - public byte[]? ReservedZero; - - /// - /// Unknown (used by DSi) - /// - /// 16 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] - public byte[]? Unknown3; - - /// - /// ARM9 (with encrypted secure area) SHA1 HMAC hash - /// - /// 20 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)] - public byte[]? ARM9WithSecureAreaSHA1HMACHash; - - /// - /// ARM7 SHA1 HMAC hash - /// - /// 20 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)] - public byte[]? ARM7SHA1HMACHash; - - /// - /// Digest master SHA1 HMAC hash - /// - /// 20 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)] - public byte[]? DigestMasterSHA1HMACHash; - - /// - /// Banner SHA1 HMAC hash - /// - /// 20 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)] - public byte[]? BannerSHA1HMACHash; - - /// - /// ARM9i (decrypted) SHA1 HMAC hash - /// - /// 20 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)] - public byte[]? ARM9iDecryptedSHA1HMACHash; - - /// - /// ARM7i (decrypted) SHA1 HMAC hash - /// - /// 20 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)] - public byte[]? ARM7iDecryptedSHA1HMACHash; - - /// - /// Reserved - /// - /// 40 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 40)] - public byte[]? Reserved5; - - /// - /// ARM9 (without secure area) SHA1 HMAC hash - /// - /// 20 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)] - public byte[]? ARM9NoSecureAreaSHA1HMACHash; - - /// - /// Reserved - /// - /// 2636 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2636)] - public byte[]? Reserved6; - - /// - /// Reserved and unchecked region, always zero. Used for passing arguments in debug environment. - /// - /// 0x180 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x180)] - public byte[]? ReservedAndUnchecked; - - /// - /// RSA signature (the first 0xE00 bytes of the header are signed with an 1024-bit RSA signature). - /// - /// 0x80 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x80)] - public byte[]? RSASignature; - } -} \ No newline at end of file diff --git a/SabreTools.Models/Nitro/FileAllocationTableEntry.cs b/SabreTools.Models/Nitro/FileAllocationTableEntry.cs deleted file mode 100644 index 43c4819..0000000 --- a/SabreTools.Models/Nitro/FileAllocationTableEntry.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.Nitro -{ - /// - /// The structure of the file allocation table is very simple, - /// it's just a table of 8 byte entries - /// - /// - [StructLayout(LayoutKind.Sequential)] - public sealed class FileAllocationTableEntry - { - /// - /// Start offset of file - /// - public uint StartOffset; - - /// - /// End offset of file (after this is padding) - /// - public uint EndOffset; - } -} \ No newline at end of file diff --git a/SabreTools.Models/Nitro/FolderAllocationTableEntry.cs b/SabreTools.Models/Nitro/FolderAllocationTableEntry.cs deleted file mode 100644 index 7a8e5a3..0000000 --- a/SabreTools.Models/Nitro/FolderAllocationTableEntry.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.Nitro -{ - /// - /// Each folder in the file system has a 8 byte long entry. - /// The first one is for the root folder, and acts as an entry - /// point to the file system. - /// - /// - [StructLayout(LayoutKind.Sequential)] - public sealed class FolderAllocationTableEntry - { - /// - /// Start offset of folder contents within Name List - /// relative to start of NameTable - /// - public uint StartOffset; - - /// - /// Index of first file within folder in File Allocation Table - /// - public ushort FirstFileIndex; - - /// - /// Index of parent folder in current table; for root folder - /// this holds the number of entries in the table - /// - public byte ParentFolderIndex; - - /// - /// Unknown, always 0xF0 except for root folder - /// - public byte Unknown; - } -} \ No newline at end of file diff --git a/SabreTools.Models/Nitro/NameListEntry.cs b/SabreTools.Models/Nitro/NameListEntry.cs deleted file mode 100644 index 4da0790..0000000 --- a/SabreTools.Models/Nitro/NameListEntry.cs +++ /dev/null @@ -1,29 +0,0 @@ -namespace SabreTools.Models.Nitro -{ - /// - /// The name list holds the names of the folders, and their contents - /// in order, with references back to the Folder Allocation Table. - /// - /// - public sealed class NameListEntry - { - /// - /// The least significant 7 bits store the length of the name, - /// and the most significant bit indicates whether it is a - /// folder (1 = folder, 0 = file). - /// - public bool Folder { get; set; } - - /// - /// The variable length name (UTF-8) - /// - public string? Name { get; set; } - - /// - /// Only there if it is a folder. Refers to the the index of it - /// within the Folder allocation table, allowing its contents to - /// be found. - /// - public ushort Index { get; set; } - } -} \ No newline at end of file diff --git a/SabreTools.Models/Nitro/NameTable.cs b/SabreTools.Models/Nitro/NameTable.cs deleted file mode 100644 index fbbdba7..0000000 --- a/SabreTools.Models/Nitro/NameTable.cs +++ /dev/null @@ -1,25 +0,0 @@ -namespace SabreTools.Models.Nitro -{ - /// - /// The name table stores the names of the files and the structure - /// of the file system. From the information stored, the index of the - /// file's entry in the File Allocation Table can be found. - /// - /// It is split into two parts: - /// - Folder Allocation Table - /// - Name List - /// - /// - public sealed class NameTable - { - /// - /// Folder allocation table - /// - public FolderAllocationTableEntry[]? FolderAllocationTable { get; set; } - - /// - /// Name list - /// - public NameListEntry[]? NameList { get; set; } - } -} \ No newline at end of file diff --git a/SabreTools.Models/OLE/ArrayDimension.cs b/SabreTools.Models/OLE/ArrayDimension.cs deleted file mode 100644 index 591ee2f..0000000 --- a/SabreTools.Models/OLE/ArrayDimension.cs +++ /dev/null @@ -1,23 +0,0 @@ -namespace SabreTools.Models.OLE -{ - /// - /// The ArrayDimension packet represents the size and index offset of a dimension of an array - /// property type. - /// - /// - public class ArrayDimension - { - /// - /// An unsigned integer representing the size of the dimension. - /// - public uint Size { get; set; } - - /// - /// A signed integer representing the index offset of the dimension. For - /// example, an array dimension that is to be accessed with a 0-based index would have the value - /// zero, whereas an array dimension that is to be accessed with a 1-based index would have the - /// value 0x00000001. - /// - public int Value { get; set; } - } -} diff --git a/SabreTools.Models/OLE/ArrayHeader.cs b/SabreTools.Models/OLE/ArrayHeader.cs deleted file mode 100644 index caed60b..0000000 --- a/SabreTools.Models/OLE/ArrayHeader.cs +++ /dev/null @@ -1,29 +0,0 @@ -namespace SabreTools.Models.OLE -{ - /// - /// The ArrayHeader packet represents the type and dimensions of an array property type. - /// - /// - public class ArrayHeader - { - /// - /// MUST be set to the value obtained by clearing the VT_ARRAY (0x2000) bit of - /// this array property's PropertyType value. - /// - public PropertyType Type { get; set; } - - /// - /// An unsigned integer representing the number of dimensions in the array - /// property. MUST be at least 1 and at most 31. - /// - public uint NumDimensions { get; set; } - - /// - /// MUST be a sequence of ArrayDimension packets - /// - /// The number of scalar values in an array property can be calculated from the ArrayHeader packet - /// as the product of the Size fields of each of the ArrayDimension packets. - /// - public ArrayDimension[]? Dimensions { get; set; } - } -} diff --git a/SabreTools.Models/OLE/BLOB.cs b/SabreTools.Models/OLE/BLOB.cs deleted file mode 100644 index 70bbc39..0000000 --- a/SabreTools.Models/OLE/BLOB.cs +++ /dev/null @@ -1,19 +0,0 @@ -namespace SabreTools.Models.OLE -{ - /// - /// The BLOB packet represents binary data - /// - /// - public class BLOB - { - /// - /// The size in bytes of the field, not including padding (if any) - /// - public uint Size { get; set; } - - /// - /// MUST be an array of bytes, followed by zero padding to a multiple of 4 bytes. - /// - public byte[]? Bytes { get; set; } - } -} diff --git a/SabreTools.Models/OLE/CURRENCY.cs b/SabreTools.Models/OLE/CURRENCY.cs deleted file mode 100644 index 3f1a975..0000000 --- a/SabreTools.Models/OLE/CURRENCY.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace SabreTools.Models.OLE -{ - /// - /// The CURRENCY (Packet Version) packet represents a CURRENCY as specified in [MS-OAUT] - /// section 2.2.24. - /// - /// - public class CURRENCY - { - /// - /// The value of the int64 field specified in [MS-OAUT] section 2.2.24. - /// - public ulong Value { get; set; } - } -} diff --git a/SabreTools.Models/OLE/ClipboardData.cs b/SabreTools.Models/OLE/ClipboardData.cs deleted file mode 100644 index aa239ca..0000000 --- a/SabreTools.Models/OLE/ClipboardData.cs +++ /dev/null @@ -1,26 +0,0 @@ -namespace SabreTools.Models.OLE -{ - /// - /// The ClipboardData packet represents clipboard data - /// - /// - public class ClipboardData - { - /// - /// The total size in bytes of the and fields, - /// not including padding (if any). - /// - public uint Size { get; set; } - - /// - /// An application-specific identifier for the format of the data in the - /// field. - /// - public uint Format { get; set; } - - /// - /// MUST be an array of bytes, followed by zero padding to a multiple of 4 bytes - /// - public byte[]? Data { get; set; } - } -} diff --git a/SabreTools.Models/OLE/CodePageString.cs b/SabreTools.Models/OLE/CodePageString.cs deleted file mode 100644 index 8730089..0000000 --- a/SabreTools.Models/OLE/CodePageString.cs +++ /dev/null @@ -1,33 +0,0 @@ -namespace SabreTools.Models.OLE -{ - /// - /// The CodePageString packet represents a string whose encoding depends on the - /// value of the property set's CodePage property. - /// - /// - public class CodePageString - { - /// - /// The size in bytes of the field, including the null terminator, - /// but not including padding (if any). If the property set's CodePage property - /// has the value CP_WINUNICODE (0x04B0), then the value MUST be a multiple of 2 - /// - public uint Size { get; set; } - - /// - /// If is zero, this field MUST be zero bytes in length. If - /// is nonzero and the CodePage property set's CodePage property has the value CP_WINUNICODE (0x04B0), - /// then the value MUST be a null-terminated array of 16-bit Unicode characters, followed by zero - /// padding to a multiple of 4 bytes. If is nonzero and the property set's CodePage - /// property has any other value, it MUST be a null-terminated array of 8-bit characters from the code - /// page identified by the CodePage property, followed by zero padding to a multiple of 4 bytes. The - /// string represented by this field MAY contain embedded or additional trailing null characters and - /// an OLEPS implementation MUST be able to handle such strings. However, the manner in which - /// strings with embedded or additional trailing null characters are presented by the implementation - /// to an application is implementation-specific. For maximum interoperability, an OLEPS - /// implementation SHOULD NOT write strings with embedded or trailing null characters unless - /// specifically requested to do so by an application. - /// - public string? Characters { get; set; } - } -} diff --git a/SabreTools.Models/OLE/Constants.cs b/SabreTools.Models/OLE/Constants.cs deleted file mode 100644 index 6743352..0000000 --- a/SabreTools.Models/OLE/Constants.cs +++ /dev/null @@ -1,90 +0,0 @@ -namespace SabreTools.Models.OLE -{ - public static class Constants - { - #region Format IDs - - public const string SummaryInformationFMTIDString = "F29F85E0-4FF9-1068-AB91-08002B27B3D9"; - public static readonly GUID SummaryInformationFMTIDGUID = new() - { - Data1 = 0xF29F85E0, - Data2 = 0x4FF9, - Data3 = 0x1068, - Data4 = [0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9], - }; - - public const string DocSummaryInformationFMTIDString = "D5CDD502-2E9C-101B-9397-08002B2CF9AE"; - public static readonly GUID DocSummaryInformationFMTIDGUID = new() - { - Data1 = 0xD5CDD502, - Data2 = 0x2E9C, - Data3 = 0x101B, - Data4 = [0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE], - }; - - public const string UserDefinedPropertiesFMTIDString = "D5CDD502-2E9C-101B-9397-08002B2CF9AE"; - public static readonly GUID UserDefinedPropertiesFMTIDGUID = new() - { - Data1 = 0xD5CDD502, - Data2 = 0x2E9C, - Data3 = 0x101B, - Data4 = [0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE], - }; - - public const string GlobalInfoFMTIDString = "56616F00-C154-11CE-8553-00AA00A1F95B"; - public static readonly GUID GlobalInfoFMTIDGUID = new() - { - Data1 = 0x56616F00, - Data2 = 0xC154, - Data3 = 0x11CE, - Data4 = [0x85, 0x53, 0x00, 0xAA, 0x00, 0xA1, 0xF9, 0x5B], - }; - - public const string ImageContentsFMTIDString = "556616400-C154-11CE-8553-00AA00A1F95B"; - public static readonly GUID ImageContentsFMTIDGUID = new() - { - Data1 = 0x56616F00, - Data2 = 0xC154, - Data3 = 0x11CE, - Data4 = [0x85, 0x53, 0x00, 0xAA, 0x00, 0xA1, 0xF9, 0x5B], - }; - - public const string ImageInfoFMTIDString = "556616400-C154-11CE-8553-00AA00A1F95B"; - public static readonly GUID ImageInfoFMTIDGUID = new() - { - Data1 = 0x56616F00, - Data2 = 0xC154, - Data3 = 0x11CE, - Data4 = [0x85, 0x53, 0x00, 0xAA, 0x00, 0xA1, 0xF9, 0x5B], - }; - - public const string PropertyBagFMTIDString = "20001801-5DE6-11D1-8E38-00C04FB9386D"; - public static readonly GUID PropertyBagFMTIDGUID = new() - { - Data1 = 0x20001801, - Data2 = 0x5DE6, - Data3 = 0x11D1, - Data4 = [0x8E, 0x38, 0x00, 0xC0, 0x4F, 0xB9, 0x38, 0x6D], - }; - - #endregion - - #region Stream or Storage Names - - public static readonly string SummaryInformationName = (byte)0x05 + "SummaryInformation"; - - public static readonly string DocSummaryInformationName = (byte)0x05 + "DocumentSummaryInformation"; - - public static readonly string UserDefinedPropertiesName = (byte)0x05 + "DocumentSummaryInformation"; - - public static readonly string GlobalInfoName = (byte)0x05 + "GlobalInfo"; - - public static readonly string ImageContentsName = (byte)0x05 + "ImageContents"; - - public static readonly string ImageInfoName = (byte)0x05 + "ImageInfo"; - - public const string ControlStreamName = "{4c8cc155-6c1e-11d1-8e41-00c04fb9386d}"; - - #endregion - } -} \ No newline at end of file diff --git a/SabreTools.Models/OLE/ControlStream.cs b/SabreTools.Models/OLE/ControlStream.cs deleted file mode 100644 index a16f091..0000000 --- a/SabreTools.Models/OLE/ControlStream.cs +++ /dev/null @@ -1,35 +0,0 @@ -namespace SabreTools.Models.OLE -{ - /// - /// A file that has one or more property sets associated with it through the alternate - /// stream binding MUST have a control stream, which is an alternate stream with the name - /// "{4c8cc155-6c1e-11d1-8e41-00c04fb9386d}". This stream MUST contain the following packet. - /// - /// - public class ControlStream - { - /// - /// MUST be set to zero, and nonzero values MUST be rejected. - /// - public ushort Reserved1 { get; set; } - - /// - /// MUST be set to zero, and MUST be ignored. - /// - public ushort Reserved2 { get; set; } - - /// - /// An application-provided value that MUST NOT be interpreted by the - /// OLEPS implementation. If the application did not provide a value, - /// it SHOULD be set to zero. - /// - public uint ApplicationState { get; set; } - - /// - /// An application-provided value that MUST NOT be interpreted by the - /// OLEPS implementation. If the application did not provide a value, - /// it SHOULD be absent. - /// - public GUID? CLSID { get; set; } - } -} diff --git a/SabreTools.Models/OLE/DATE.cs b/SabreTools.Models/OLE/DATE.cs deleted file mode 100644 index 4fc7ed4..0000000 --- a/SabreTools.Models/OLE/DATE.cs +++ /dev/null @@ -1,16 +0,0 @@ -namespace SabreTools.Models.OLE -{ - /// - /// The DATE (Packet Version) packet represents a DATE as specified in [MS-OAUT] - /// section 2.2.25 - /// - /// - public class DATE - { - /// - /// The value of the DATE is an 8-byte IEEE floating-point number, as specified in - /// [MS-OAUT] section 2.2.25. - /// - public ulong Value { get; set; } - } -} diff --git a/SabreTools.Models/OLE/DECIMAL.cs b/SabreTools.Models/OLE/DECIMAL.cs deleted file mode 100644 index c8b6541..0000000 --- a/SabreTools.Models/OLE/DECIMAL.cs +++ /dev/null @@ -1,35 +0,0 @@ -namespace SabreTools.Models.OLE -{ - /// - /// The DECIMAL (Packet Version) packet represents a DECIMAL as specified in [MS-OAUT] section - /// 2.2.26 - /// - /// - public class DECIMAL - { - /// - /// MUST be set to zero and MUST be ignored - /// - public ushort Reserved { get; set; } - - /// - /// The value of the scale field specified in [MS-OAUT] section 2.2.26 - /// - public byte Scale { get; set; } - - /// - /// The value of the sign field specified in [MS-OAUT] section 2.2.26 - /// - public byte Sign { get; set; } - - /// - /// The value of the Hi32 field specified in [MS-OAUT] section 2.2.26 - /// - public uint Hi32 { get; set; } - - /// - /// The value of the Lo64 field specified in [MS-OAUT] section 2.2.26 - /// - public ulong Lo64 { get; set; } - } -} diff --git a/SabreTools.Models/OLE/Dictionary.cs b/SabreTools.Models/OLE/Dictionary.cs deleted file mode 100644 index 6480443..0000000 --- a/SabreTools.Models/OLE/Dictionary.cs +++ /dev/null @@ -1,24 +0,0 @@ -namespace SabreTools.Models.OLE -{ - /// - /// The Dictionary packet represents all mappings between property identifiers and - /// property names in a property set - /// - /// - public class Dictionary - { - /// - /// n unsigned integer representing the number of entries in the Dictionary - /// - public uint NumEntries { get; set; } - - /// - /// All Entry fields MUST be a sequence of DictionaryEntry packets. Entries are - /// not required to appear in any particular order. - /// - public DictionaryEntry[]? Entries { get; set; } - - // Padding (variable): Padding, if necessary, to a total length that is a multiple of 4 bytes. - // Padding would be after each dictionary entry - } -} diff --git a/SabreTools.Models/OLE/DictionaryEntry.cs b/SabreTools.Models/OLE/DictionaryEntry.cs deleted file mode 100644 index 149c2e4..0000000 --- a/SabreTools.Models/OLE/DictionaryEntry.cs +++ /dev/null @@ -1,35 +0,0 @@ -namespace SabreTools.Models.OLE -{ - /// - /// The DictionaryEntry packet represents a mapping between a property identifier and a - /// property name - /// - /// - public class DictionaryEntry - { - /// - /// An unsigned integer representing a property identifier. MUST be a valid - /// PropertyIdentifier value in the range 0x00000002 to 0x7FFFFFFF, inclusive - /// (this specifically excludes the property identifiers for any of the special - /// properties specified in section 2.18). - /// - public PropertyIdentifier PropertyIdentifier { get; set; } - - /// - /// If the property set's CodePage property has the value CP_WINUNICODE (0x04B0), - /// MUST be the length of the Name field in 16-bit Unicode characters, including - /// the null terminator but not including padding (if any). Otherwise, MUST be the - /// length of the Name field in 8-bit characters, including the null terminator. - /// - public uint Length { get; set; } - - /// - /// If the property set's CodePage property has the value CP_WINUNICODE (0x04B0), - /// MUST be a null-terminated array of 16-bit Unicode characters, followed by zero - /// padding to a multiple of 4 bytes. Otherwise, MUST be a null-terminated array of - /// 8-bit characters from the code page identified by the CodePage property and MUST - /// NOT be padded. - /// - public string? Name { get; set; } - } -} diff --git a/SabreTools.Models/OLE/Enums.cs b/SabreTools.Models/OLE/Enums.cs deleted file mode 100644 index c4dae7f..0000000 --- a/SabreTools.Models/OLE/Enums.cs +++ /dev/null @@ -1,503 +0,0 @@ -namespace SabreTools.Models.OLE -{ - /// - /// The PropertyIdentifier data type represents the property identifier of a property in a property set - /// - /// - /// The SummaryInformation property set format, identified by FMTID_SummaryInformation - /// ({F29F85E0-4FF9-1068-AB91-08002B27B3D9}), represents generic properties of a document. The properties - /// specific to the SummaryInformation property set are specified in the following table. Except where - /// otherwise stated, a SummaryInformation property set SHOULD have all of these properties, and SHOULD - /// NOT have any other properties, except for the special properties specified in section 2.18. - /// - /// - public enum PropertyIdentifier : uint - { - /// - /// Property identifier for the Dictionary property - /// - DICTIONARY_PROPERTY_IDENTIFIER = 0x00000000, - - /// - /// Property identifier for the CodePage property - /// - CODEPAGE_PROPERTY_IDENTIFIER = 0x00000001, - - /// - /// Property identifier for the Locale property - /// - LOCALE_PROPERTY_IDENTIFIER = 0x80000000, - - /// - /// Property identifier for the Behavior property - /// - BEHAVIOR_PROPERTY_IDENTIFIER = 0x80000003, - - #region SummaryInformation - - /// - /// The title of the document. - /// - /// VT_LPSTR - PIDSI_TITLE = 0x00000002, - - /// - /// The subject of the document. - /// - /// VT_LPSTR - PIDSI_SUBJECT = 0x00000003, - - /// - /// The author of the document. - /// - /// VT_LPSTR - PIDSI_AUTHOR = 0x00000004, - - /// - /// Keywords related to the document. - /// - /// VT_LPSTR - PIDSI_KEYWORDS = 0x00000005, - - /// - /// Comments related the document. - /// - /// VT_LPSTR - PIDSI_COMMENTS = 0x00000006, - - /// - /// The application-specific template from which the document was created. - /// - /// VT_LPSTR - PIDSI_TEMPLATE = 0x00000007, - - /// - /// The last author of the document. - /// - /// VT_LPSTR - PIDSI_LASTAUTHOR = 0x00000008, - - /// - /// An application-specific revision number for this version of the document. - /// - /// VT_LPSTR - PIDSI_REVNUMBER = 0x00000009, - - /// - /// A 64-bit unsigned integer indicating the total amount of time that - /// has been spent editing the document in 100-nanosecond - /// increments. MUST be encoded as a FILETIME by setting the - /// dwLowDataTime field to the low 32-bits and the dwHighDateTime - /// field to the high 32-bits. - /// - /// VT_FILETIME - PIDSI_EDITTIME = 0x0000000A, - - /// - /// The most recent time that the document was printed. - /// - /// VT_FILETIME - PIDSI_LASTPRINTED = 0x0000000B, - - /// - /// The time that the document was created. - /// - /// VT_FILETIME - PIDSI_CREATE_DTM = 0x0000000C, - - /// - /// The most recent time that the document was saved. - /// - /// VT_FILETIME - PIDSI_LASTSAVE_DTM = 0x0000000D, - - /// - /// The total number of pages in the document. - /// - /// VT_I4 - PIDSI_PAGECOUNT = 0x0000000E, - - /// - /// The total number of words in the document. - /// - /// VT_I4 - PIDSI_WORDCOUNT = 0x0000000F, - - /// - /// The total number of characters in the document. - /// - /// VT_I4 - PIDSI_CHARCOUNT = 0x00000010, - - /// - /// Application-specific clipboard data containing a thumbnail - /// representing the document's contents. MAY be absent. - /// - /// VT_CF - PIDSI_THUMBNAIL = 0x00000011, - - /// - /// The name of the application that was used to create the document. - /// - /// VT_LPSTR - PIDSI_APPNAME = 0x00000012, - - /// - /// A 32-bit signed integer representing a set of application-suggested - /// access control flags with the following values: - /// - 0x00000001: Password protected - /// - 0x00000002: Read-only recommended - /// - 0x00000004: Read-only enforced - /// - 0x00000008: Locked for annotations - /// - /// VT_I4 - PIDSI_DOC_SECURITY = 0x00000013, - - #endregion - } - - /// - /// The PropertyType enumeration represents the type of a property in a property set. The set of types - /// supported depends on the version of the property set, which is indicated by the Version field of the - /// PropertySetStream packet. In addition, the property types not supported in simple property sets - /// are specified as such. PropertyType is an enumeration, which MUST be one of the following values - /// - /// - public enum PropertyType : ushort - { - /// - /// Type is undefined, and the minimum property set version is 0 - /// - VT_EMPTY = 0x0000, - - /// - /// Type is null, and the minimum property set version is 0 - /// - VT_NULL = 0x0001, - - /// - /// Type is 16-bit signed integer, and the minimum property set version is 0 - /// - VT_I2 = 0x0002, - - /// - /// Type is 32-bit signed integer, and the minimum property set version is 0. - /// - VT_I4 = 0x0003, - - /// - /// Type is 4-byte (single-precision) IEEE floating-point number, and the - /// minimum property set version is 0. - /// - VT_R4 = 0x0004, - - /// - /// Type is 8-byte (double-precision) IEEE floating-point number, and the - /// minimum property set version is 0. - /// - VT_R8 = 0x0005, - - /// - /// Type is CURRENCY, and the minimum property set version is 0. - /// - VT_CY = 0x0006, - - /// - /// Type is DATE, and the minimum property set version is 0. - /// - VT_DATE = 0x0007, - - /// - /// Type is CodePageString, and the minimum property set version is 0. - /// - VT_BSTR = 0x0008, - - /// - /// Type is HRESULT, and the minimum property set version is 0. - /// - VT_ERROR = 0x000A, - - /// - /// Type is VARIANT_BOOL, and the minimum property set version is 0. - /// - VT_BOOL = 0x000B, - - /// - /// Type is DECIMAL, and the minimum property set version is 0. - /// - VT_DECIMAL = 0x000E, - - /// - /// Type is 1-byte signed integer, and the minimum property set version - /// is 1. - /// - VT_I1 = 0x0010, - - /// - /// Type is 1-byte unsigned integer, and the minimum property set version - /// is 0. - /// - VT_UI1 = 0x0011, - - /// - /// Type is 2-byte unsigned integer, and the minimum property set version - /// is 0. - /// - VT_UI2 = 0x0012, - - /// - /// Type is 4-byte unsigned integer, and the minimum property set version - /// is 0. - /// - VT_UI4 = 0x0013, - - /// - /// Type is 8-byte signed integer, and the minimum property set version - /// is 0. - /// - VT_I8 = 0x0014, - - /// - /// Type is 8-byte unsigned integer, and the minimum property set version - /// is 0. - /// - VT_UI8 = 0x0015, - - /// - /// Type is 4-byte signed integer, and the minimum property set version - /// is 1. - /// - VT_INT = 0x0016, - - /// - /// Type is 4-byte unsigned integer, and the minimum property set version - /// is 1. - /// - VT_UINT = 0x0017, - - /// - /// Type is CodePageString, and the minimum property set version is 0. - /// - VT_LPSTR = 0x001E, - - /// - /// Type is UnicodeString, and the minimum property set version is 0. - /// - VT_LPWSTR = 0x001F, - - /// - /// Type is FILETIME, and the minimum property set version is 0. - /// - VT_FILETIME = 0x0040, - - /// - /// Type is binary large object (BLOB), and the minimum property set - /// version is 0. - /// - VT_BLOB = 0x0041, - - /// - /// Type is Stream, and the minimum property set version is 0. VT_STREAM - /// is not allowed in a simple property set. - /// - VT_STREAM = 0x0042, - - /// - /// Type is Storage, and the minimum property set version is 0. VT_STORAGE - /// is not allowed in a simple property set. - /// - VT_STORAGE = 0x0043, - - /// - /// Type is Stream representing an Object in an application-specific manner, - /// and the minimum property set version is 0. VT_STREAMED_Object is not - /// allowed in a simple property set. - /// - VT_STREAMED_Object = 0x0044, - - /// - /// Type is Storage representing an Object in an application-specific manner, - /// and the minimum property set version is 0. VT_STORED_Object is not - /// allowed in a simple property set. - /// - VT_STORED_Object = 0x0045, - - /// - /// Type is BLOB representing an object in an application-specific manner. - /// The minimum property set version is 0. - /// - VT_BLOB_Object = 0x0046, - - /// - /// Type is PropertyIdentifier, and the minimum property set version is 0. - /// - VT_CF = 0x0047, - - /// - /// Type is CLSID, and the minimum property set version is 0. - /// - VT_CLSID = 0x0048, - - /// - /// Type is Stream with application-specific version GUID (VersionedStream). - /// The minimum property set version is 0. VT_VERSIONED_STREAM is not allowed - /// in a simple property set. - /// - VT_VERSIONED_STREAM = 0x0049, - - /// - /// Type is Vector, and the minimum property set version is 0 - /// - VT_VECTOR = 0x1000, - - /// - /// Type is Vector of 1-byte unsigned integers, and the minimum property set version - /// is 0. - /// - VT_VECTOR_UI1 = 0x1011, - - /// - /// Type is Vector of 2-byte unsigned integers, and the minimum property set version - /// is 0. - /// - VT_VECTOR_UI2 = 0x1012, - - /// - /// Type is Vector of 4-byte unsigned integers, and the minimum property set version - /// is 0. - /// - VT_VECTOR_UI4 = 0x1013, - - /// - /// Type is Vector of 8-byte signed integers, and the minimum property set version - /// is 0. - /// - VT_VECTOR_I8 = 0x1014, - - /// - /// Type is Vector of 8-byte unsigned integers and the minimum property set version - /// is 0. - /// - VT_VECTOR_UI8 = 0x1015, - - /// - /// Type is Vector of CodePageString, and the minimum property set version is 0. - /// - VT_VECTOR_LPSTR = 0x101E, - - /// - /// Type is Vector of UnicodeString, and the minimum property set version is 0. - /// - VT_VECTOR_LPWSTR = 0x101F, - - /// - /// Type is Vector of FILETIME, and the minimum property set version is 0. - /// - VT_VECTOR_FILETIME = 0x1040, - - /// - /// Type is Vector of PropertyIdentifier, and the minimum property set version is 0. - /// - VT_VECTOR_CF = 0x1047, - - /// - /// Type is Vector of CLSID, and the minimum property set version is 0. - /// - VT_VECTOR_CLSID = 0x1048, - - /// - /// Type is Array of 16-bit signed integers, and the minimum property set version - /// is 1. - /// - VT_ARRAY_I2 = 0x2002, - - /// - /// Type is Array of 32-bit signed integers, and the minimum property set version - /// is 1. - /// - VT_ARRAY_I4 = 0x2003, - - /// - /// Type is Array of 4-byte (single-precision) IEEE floating-point numbers, and the - /// minimum property set version is 1. - /// - VT_ARRAY_R4 = 0x2004, - - /// - /// Type is IEEE floating-point numbers, and the minimum property set version is 1. - /// - VT_ARRAY_R8 = 0x2005, - - /// - /// Type is Array of CURRENCY, and the minimum property set version is 1. - /// - VT_ARRAY_CY = 0x2006, - - /// - /// Type is Array of DATE, and the minimum property set version is 1. - /// - VT_ARRAY_DATE = 0x2007, - - /// - /// Type is Array of CodePageString, and the minimum property set version is 1. - /// - VT_ARRAY_BSTR = 0x2008, - - /// - /// Type is Array of HRESULT, and the minimum property set version is 1. - /// - VT_ARRAY_ERROR = 0x200A, - - /// - /// Type is Array of VARIANT_BOOL, and the minimum property set version is 1. - /// - VT_ARRAY_BOOL = 0x200B, - - /// - /// Type is Array of variable-typed properties, and the minimum property set - /// version is 1 - /// - VT_ARRAY_VARIANT = 0x200C, - - /// - /// Type is Array of DECIMAL, and the minimum property set version is 1 - /// - VT_ARRAY_DECIMAL = 0x200E, - - /// - /// Type is Array of 1-byte signed integers, and the minimum property set - /// version is 1 - /// - VT_ARRAY_I1 = 0x2010, - - /// - /// Type is Array of 1-byte unsigned integers, and the minimum property set - /// version is 1 - /// - VT_ARRAY_UI1 = 0x2011, - - /// - /// Type is Array of 2-byte unsigned integers, and the minimum property set - /// version is 1. - /// - VT_ARRAY_UI2 = 0x2012, - - /// - /// Type is Array of 4-byte unsigned integers, and the minimum property set - /// version is 1. - /// - VT_ARRAY_UI4 = 0x2013, - - /// - /// Type is Array of 4-byte signed integers, and the minimum property set version - /// is 1. - /// - VT_ARRAY_INT = 0x2016, - - /// - /// Type is Array of 4-byte unsigned integers, and the minimum property set version - /// is 1. - /// - VT_ARRAY_UINT = 0x2017, - } -} diff --git a/SabreTools.Models/OLE/FILETIME.cs b/SabreTools.Models/OLE/FILETIME.cs deleted file mode 100644 index ab4663c..0000000 --- a/SabreTools.Models/OLE/FILETIME.cs +++ /dev/null @@ -1,19 +0,0 @@ -namespace SabreTools.Models.OLE -{ - /// - /// The FILETIME (Packet Version) packet represents a FILETIME structure ([MS-DTYP] section 2.3.3 - /// - /// - public class FILETIME - { - /// - /// The value of the dwLowDateTime field specified in [MS-DTYP] section 2.3.3. - /// - public uint LowDateTime { get; set; } - - /// - /// The value of the dwHighDateTime field specified in [MS-DTYP] section 2.3.3. - /// - public uint HighDateTime { get; set; } - } -} diff --git a/SabreTools.Models/OLE/GUID.cs b/SabreTools.Models/OLE/GUID.cs deleted file mode 100644 index dbf219d..0000000 --- a/SabreTools.Models/OLE/GUID.cs +++ /dev/null @@ -1,29 +0,0 @@ -namespace SabreTools.Models.OLE -{ - /// - /// The GUID (Packet Version) packet represents a GUID - /// - /// - public class GUID - { - /// - /// The value of the Data1 field specified in [MS-DTYP] section 2.3.4 - /// - public uint Data1 { get; set; } - - /// - /// The value of the Data2 field specified in [MS-DTYP] section 2.3.4 - /// - public ushort Data2 { get; set; } - - /// - /// The value of the Data3 field specified in [MS-DTYP] section 2.3.4 - /// - public ushort Data3 { get; set; } - - /// - /// The value of the Data4 field specified in [MS-DTYP] section 2.3.4 - /// - public byte[]? Data4 { get; set; } - } -} diff --git a/SabreTools.Models/OLE/IndirectPropertyName.cs b/SabreTools.Models/OLE/IndirectPropertyName.cs deleted file mode 100644 index c7f1689..0000000 --- a/SabreTools.Models/OLE/IndirectPropertyName.cs +++ /dev/null @@ -1,19 +0,0 @@ -namespace SabreTools.Models.OLE -{ - /// - /// The IndirectPropertyName packet represents the name of a stream or storage as used in the - /// representation of the following property types in a non-simple property set: VT_STREAM (0x0042), - /// VT_STORAGE (0x0043), VT_STREAMED_OBJECT (0x0044), VT_STORED_OBJECT (0x0044), and - /// VT_VERSIONED_STREAM (0x0049). It MUST be represented as a CodePageString, and its value MUST - /// be derived from the property identifier of the property represented according to the following - /// Augmented Backus–Naur Form (ABNF) [RFC4234] syntax. - /// - /// Indirectproperty = "prop" propertyIdentifier - /// - /// Where PropertyIdentifier is the decimal string representation of the property identifier. This property - /// identifier MUST be a valid PropertyIdentifier value and MUST NOT be the property identifier for any of - /// the special properties specified in section 2.18. - /// - /// - public class IndirectPropertyName : CodePageString { } -} diff --git a/SabreTools.Models/OLE/PropertyIdentifierAndOffset.cs b/SabreTools.Models/OLE/PropertyIdentifierAndOffset.cs deleted file mode 100644 index 91a93ab..0000000 --- a/SabreTools.Models/OLE/PropertyIdentifierAndOffset.cs +++ /dev/null @@ -1,23 +0,0 @@ -namespace SabreTools.Models.OLE -{ - /// - /// The PropertyIdentifierAndOffset packet is used in the PropertySet packet to represent a - /// property identifier and the byte offset of the property in the PropertySet packet - /// - /// - public class PropertyIdentifierAndOffset - { - /// - /// An unsigned integer representing the property identifier of a property - /// in the property set. MUST be a valid PropertyIdentifier value. - /// - public PropertyIdentifier PropertyIdentifier { get; set; } - - /// - /// An unsigned integer representing the offset in bytes from the beginning - /// of the PropertySet packet to the beginning of the Property field for the - /// property represented. MUST be a multiple of 4 bytes. - /// - public uint Offset { get; set; } - } -} diff --git a/SabreTools.Models/OLE/PropertySet.cs b/SabreTools.Models/OLE/PropertySet.cs deleted file mode 100644 index 3056fbb..0000000 --- a/SabreTools.Models/OLE/PropertySet.cs +++ /dev/null @@ -1,36 +0,0 @@ -namespace SabreTools.Models.OLE -{ - /// - /// The PropertySet packet represents a property set. - /// - /// - public class PropertySet - { - /// - /// MUST be the total size in bytes of the PropertySet packet - /// - public uint Size { get; set; } - - /// - /// An unsigned integer representing the number of properties in the - /// property set. - /// - public uint NumProperties { get; set; } - - /// - /// All PropertyIdentifierAndOffset fields MUST be a sequence of - /// PropertyIdentifierAndOffset packets. The sequence MUST be in order of - /// increasing value of the Offset field. Packets are not required to be - /// in any particular order with regard to the value of the PropertyIdentifier - /// field. - /// - public PropertyIdentifierAndOffset[]? PropertyIdentifierAndOffsets { get; set; } - - /// - /// Each Property field is a sequence of property values, each of which MUST - /// be represented by a TypedPropertyValue packet or a Dictionary packet in - /// the special case of the Dictionary property. - /// - public object[]? Properties { get; set; } - } -} diff --git a/SabreTools.Models/OLE/PropertySetStream.cs b/SabreTools.Models/OLE/PropertySetStream.cs deleted file mode 100644 index 19e44ac..0000000 --- a/SabreTools.Models/OLE/PropertySetStream.cs +++ /dev/null @@ -1,106 +0,0 @@ -namespace SabreTools.Models.OLE -{ - /// - /// The PropertySetStream packet specifies the stream format for simple property - /// sets and the stream format for the CONTENTS stream in the Non-Simple Property - /// Set Storage Format. A simple property set MUST be represented by a stream - /// containing a PropertySetStream packet. - /// - /// The PropertySetStream packet usually represents exactly one property set, but - /// for historical reasons, the DocumentSummaryInfo and UserDefinedProperties - /// property sets are represented in the same stream.In this special case, a - /// PropertySetStream might represent two property sets. - /// - /// An implementation SHOULD enforce a limit on the total size of a PropertySetStream - /// packet. This limit MUST be at least 262,144 bytes, and for maximum interoperability - /// SHOULD be 2,097,152 bytes. - /// - /// - public class PropertySetStream - { - /// - /// MUST be set to 0xFFFE - /// - public ushort ByteOrder { get; set; } - - /// - /// An unsigned integer indicating the version number of the property set (or - /// property sets). MUST be 0x0000 or 0x0001. An OLEPS implementation MUST - /// accept version 0 property sets and SHOULD<5> also accept version 1 property - /// sets. This field MUST be set to 0x0001 if the property set or property sets - /// use any of the following features not supported by version 0 property sets: - /// - Property types not supported for version 0 property sets, as specified in - /// the PropertyType enumeration. - /// - The Behavior property. - /// - /// If the property set does not use any of these features, this field SHOULD be - /// set to 0x0000 for maximum interoperability. - /// - public ushort Version { get; set; } - - /// - /// An implementation-specific value that SHOULD be ignored, except possibly to - /// report this value to applications. It SHOULD NOT be interpreted by the - /// OLEPS implementation. - /// - public uint SystemIdentifier { get; set; } - - /// - /// MUST be a GUID (Packet Version) packet representing the associated CLSID of - /// the property set (or property sets). If no CLSID is provided by the - /// application, it SHOULD be set to GUID_NULL by default. - /// - public GUID? CLSID { get; set; } - - /// - /// An unsigned integer indicating the number of property sets represented by - /// this PropertySetStream structure. MUST be either 0x00000001 or 0x00000002. - /// - /// - 0x00000001: This structure contains one property set - /// - 0x00000002: This structure contains two property sets. - /// The optional fields for PropertySet 1 are present. - /// - public uint NumPropertySets { get; set; } - - /// - /// A GUID that MUST be set to the FMTID of the property set represented by the - /// field PropertySet 0. If NumPropertySets has the value 0x00000002, then this - /// GUID MUST be set to FMTID_DocSummaryInformation - /// ({D5CDD502-2E9C-101B-9397-08002B2CF9AE}). - /// - public GUID? FMTID0 { get; set; } - - /// - /// An unsigned integer that MUST be set to the offset in bytes from the beginning - /// of this PropertySetStream structure to the beginning of the field PropertySet 0. - /// - public uint Offset0 { get; set; } - - /// - /// If NumPropertySets has the value 0x00000002, it MUST be set to FMTID_UserDefinedProperties - /// ({D5CDD505-2E9C-101B-9397-08002B2CF9AE}). Otherwise, it MUST be absent. - /// - public GUID? FMTID1 { get; set; } - - /// - /// If NumPropertySets has the value 0x00000002, it MUST be set to the offset in bytes - /// from the beginning of this PropertySetStream structure to the beginning of the - /// field PropertySet 1. Otherwise, it MUST be absent. - /// - public uint? Offset1 { get; set; } - - /// - /// MUST be a PropertySet packet - /// - public PropertySet? PropertySet0 { get; set; } - - /// - /// If NumPropertySets has the value 0x00000002, it MUST be a PropertySet packet. - /// Otherwise, it MUST be absent. - /// - public PropertySet? PropertySet1 { get; set; } - - // Padding (variable): Contains additional padding added by the implementation. - // If present, padding MUST be zeroes and MUST be ignored. - } -} diff --git a/SabreTools.Models/OLE/TypedPropertyValue.cs b/SabreTools.Models/OLE/TypedPropertyValue.cs deleted file mode 100644 index ebb993a..0000000 --- a/SabreTools.Models/OLE/TypedPropertyValue.cs +++ /dev/null @@ -1,27 +0,0 @@ -namespace SabreTools.Models.OLE -{ - /// - /// The TypedPropertyValue structure represents the typed value of a property in a property set - /// - /// - public class TypedPropertyValue - { - /// - /// MUST be a value from the PropertyType enumeration, indicating the type of - /// property represented. - /// - public PropertyType Type { get; set; } - - /// - /// MUST be set to zero, and any nonzero value SHOULD be rejected - /// - public ushort Padding { get; set; } - - /// - /// MUST be the value of the property represented and serialized according to - /// the value of Type as follows. - /// - /// See documentation for required lengths - public byte[]? Value { get; set; } - } -} diff --git a/SabreTools.Models/OLE/UnicodeString.cs b/SabreTools.Models/OLE/UnicodeString.cs deleted file mode 100644 index 3779dfa..0000000 --- a/SabreTools.Models/OLE/UnicodeString.cs +++ /dev/null @@ -1,23 +0,0 @@ -namespace SabreTools.Models.OLE -{ - /// - /// The UnicodeString packet represents a Unicode string. - /// - /// - public class UnicodeString - { - /// - /// The length in 16-bit Unicode characters of the field, including the null - /// terminator, but not including padding (if any). - /// - public uint Length { get; set; } - - /// - /// If is zero, this field MUST be zero bytes in length. If is - /// nonzero, this field MUST be a null-terminated array of 16-bit Unicode characters, followed by zero - /// padding to a multiple of 4 bytes. The string represented by this field SHOULD NOT contain - /// embedded or additional trailing null characters. - /// - public string? Characters { get; set; } - } -} diff --git a/SabreTools.Models/OLE/VectorHeader.cs b/SabreTools.Models/OLE/VectorHeader.cs deleted file mode 100644 index 1f35db9..0000000 --- a/SabreTools.Models/OLE/VectorHeader.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace SabreTools.Models.OLE -{ - /// - /// The VectorHeader packet represents the number of scalar values in a vector property type. - /// - /// - public class VectorHeader - { - /// - /// An unsigned integer indicating the number of scalar values following the header. - /// - public uint Length { get; set; } - } -} diff --git a/SabreTools.Models/OLE/VersionedStream.cs b/SabreTools.Models/OLE/VersionedStream.cs deleted file mode 100644 index da8f73d..0000000 --- a/SabreTools.Models/OLE/VersionedStream.cs +++ /dev/null @@ -1,19 +0,0 @@ -namespace SabreTools.Models.OLE -{ - /// - /// The VersionedStream packet represents a stream with an application-specific version GUID. - /// - /// - public class VersionedStream - { - /// - /// MUST be a GUID (Packet Version). - /// - public GUID? VersionGuid { get; set; } - - /// - /// MUST be an IndirectPropertyName. - /// - public IndirectPropertyName? StreamName { get; set; } - } -} diff --git a/SabreTools.Models/PlayJ/AudioFile.cs b/SabreTools.Models/PlayJ/AudioFile.cs deleted file mode 100644 index 764accb..0000000 --- a/SabreTools.Models/PlayJ/AudioFile.cs +++ /dev/null @@ -1,50 +0,0 @@ -namespace SabreTools.Models.PlayJ -{ - /// - /// PlayJ audio file / CDS entry - /// - public sealed class AudioFile - { - /// - /// Header - /// - public AudioHeader? Header { get; set; } - - /// - /// Unknown block 1 - /// - public UnknownBlock1? UnknownBlock1 { get; set; } - - #region V1 Only - - /// - /// Value referred to by - /// - /// Typically 0x00000000 - public uint UnknownValue2 { get; set; } - - /// - /// Unknown block 3 (V1 only) - /// - public UnknownBlock3? UnknownBlock3 { get; set; } - - #endregion - - #region V2 Only - - /// - /// Number of data files embedded - /// - public uint DataFilesCount { get; set; } - - /// - /// Data files (V2 only) - /// - public DataFile[]? DataFiles { get; set; } - - // After the data files is a block starting with 0x00000001 - // This block then contains highly repeating data, possible audio samples? - - #endregion - } -} \ No newline at end of file diff --git a/SabreTools.Models/PlayJ/AudioHeader.cs b/SabreTools.Models/PlayJ/AudioHeader.cs deleted file mode 100644 index a379d85..0000000 --- a/SabreTools.Models/PlayJ/AudioHeader.cs +++ /dev/null @@ -1,93 +0,0 @@ -namespace SabreTools.Models.PlayJ -{ - /// - /// PlayJ audio header / CDS entry header - /// - /// V1 and V2 variants exist - public abstract class AudioHeader - { - /// - /// Signature (0x4B539DFF) - /// - public uint Signature { get; set; } - - /// - /// Version - /// - public uint Version { get; set; } - - // Header-specific data goes here - - /// - /// Length of the track name - /// - public ushort TrackLength { get; set; } - - /// - /// Track name (not null-terminated) - /// - public string? Track { get; set; } - - /// - /// Length of the artist name - /// - public ushort ArtistLength { get; set; } - - /// - /// Artist name (not null-terminated) - /// - public string? Artist { get; set; } - - /// - /// Length of the album name - /// - public ushort AlbumLength { get; set; } - - /// - /// Album name (not null-terminated) - /// - public string? Album { get; set; } - - /// - /// Length of the writer name - /// - public ushort WriterLength { get; set; } - - /// - /// Writer name (not null-terminated) - /// - public string? Writer { get; set; } - - /// - /// Length of the publisher name - /// - public ushort PublisherLength { get; set; } - - /// - /// Publisher name (not null-terminated) - /// - public string? Publisher { get; set; } - - /// - /// Length of the label name - /// - public ushort LabelLength { get; set; } - - /// - /// Label name (not null-terminated) - /// - public string? Label { get; set; } - - /// - /// Length of the comments - /// - /// Optional field only in some samples - public ushort CommentsLength { get; set; } - - /// - /// Comments (not null-terminated) - /// - /// Optional field only in some samples - public string? Comments { get; set; } - } -} \ No newline at end of file diff --git a/SabreTools.Models/PlayJ/AudioHeaderV1.cs b/SabreTools.Models/PlayJ/AudioHeaderV1.cs deleted file mode 100644 index 4577286..0000000 --- a/SabreTools.Models/PlayJ/AudioHeaderV1.cs +++ /dev/null @@ -1,62 +0,0 @@ -namespace SabreTools.Models.PlayJ -{ - /// - /// PlayJ audio header / CDS entry header (V1) - /// - public sealed class AudioHeaderV1 : AudioHeader - { - /// - /// Download track ID - /// - /// 0xFFFFFFFF if unset - public uint TrackID { get; set; } - - /// - /// Offset to unknown data block 1 - /// - public uint UnknownOffset1 { get; set; } - - /// - /// Offset to unknown data block 2 - /// - public uint UnknownOffset2 { get; set; } - - /// - /// Offset to unknown data block 3 - /// - public uint UnknownOffset3 { get; set; } - - /// - /// Unknown - /// - /// Always 0x00000001 - public uint Unknown1 { get; set; } - - /// - /// Unknown - /// - /// Typically 0x00000001 in download titles - public uint Unknown2 { get; set; } - - /// - /// Track year - /// - /// 0xFFFFFFFF if unset - public uint Year { get; set; } - - /// - /// Track number - /// - public byte TrackNumber { get; set; } - - /// - /// Subgenre - /// - public Subgenre Subgenre { get; set; } - - /// - /// Track duration in seconds - /// - public uint Duration { get; set; } - } -} \ No newline at end of file diff --git a/SabreTools.Models/PlayJ/AudioHeaderV2.cs b/SabreTools.Models/PlayJ/AudioHeaderV2.cs deleted file mode 100644 index 5156a51..0000000 --- a/SabreTools.Models/PlayJ/AudioHeaderV2.cs +++ /dev/null @@ -1,126 +0,0 @@ -namespace SabreTools.Models.PlayJ -{ - /// - /// PlayJ audio header / CDS entry header (V2) - /// - public sealed class AudioHeaderV2 : AudioHeader - { - /// - /// Unknown (Always 0x00000001) - /// - public uint Unknown1 { get; set; } - - /// - /// Unknown (Always 0x00000001) - /// - public uint Unknown2 { get; set; } - - /// - /// Unknown (Always 0x00000000) - /// - public uint Unknown3 { get; set; } - - /// - /// Unknown (Always 0x00000003) - /// - public uint Unknown4 { get; set; } - - /// - /// Unknown (Always 0x00000001) - /// - public uint Unknown5 { get; set; } - - /// - /// Unknown (Always 0x00000000) - /// - public uint Unknown6 { get; set; } - - /// - /// Offset to unknown block 1, relative to the track ID - /// - public uint UnknownOffset1 { get; set; } - - /// - /// Unknown - /// - public uint Unknown7 { get; set; } - - /// - /// Unknown (Always 0x00000004) - /// - public uint Unknown8 { get; set; } - - /// - /// Unknown (Always 0x00000002) - /// - public uint Unknown9 { get; set; } - - /// - /// Offset to unknown block 1, relative to the track ID - /// - /// Always identical to ? - public uint UnknownOffset2 { get; set; } - - /// - /// Unknown - /// - public uint Unknown10 { get; set; } - - /// - /// Unknown - /// - public uint Unknown11 { get; set; } - - /// - /// Unknown (Always 0x0000005) - /// - public uint Unknown12 { get; set; } - - /// - /// Unknown (Always 0x0000009) - /// - public uint Unknown13 { get; set; } - - /// - /// Unknown - /// - public uint Unknown14 { get; set; } - - /// - /// Unknown - /// - public uint Unknown15 { get; set; } - - /// - /// Unknown (Always 0x0000000) - /// - public uint Unknown16 { get; set; } - - /// - /// Unknown (Always 0x00000007) - /// - public uint Unknown17 { get; set; } - - /// - /// Download track ID - /// - /// 0xFFFFFFFF if unset - public uint TrackID { get; set; } - - /// - /// Track year -- UNCONFIRMED - /// - /// 0xFFFFFFFF if unset - public uint Year { get; set; } - - /// - /// Track number - /// - public uint TrackNumber { get; set; } - - /// - /// Unknown - /// - public uint Unknown18 { get; set; } - } -} \ No newline at end of file diff --git a/SabreTools.Models/PlayJ/Constants.cs b/SabreTools.Models/PlayJ/Constants.cs deleted file mode 100644 index 04cd2c4..0000000 --- a/SabreTools.Models/PlayJ/Constants.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace SabreTools.Models.PlayJ -{ - public static class Constants - { - public static readonly byte[] SignatureBytes = [0xFF, 0x9D, 0x53, 0x4B]; - - public const uint SignatureUInt32 = 0x4B539DFF; - } -} \ No newline at end of file diff --git a/SabreTools.Models/PlayJ/DataFile.cs b/SabreTools.Models/PlayJ/DataFile.cs deleted file mode 100644 index 30418e4..0000000 --- a/SabreTools.Models/PlayJ/DataFile.cs +++ /dev/null @@ -1,35 +0,0 @@ -namespace SabreTools.Models.PlayJ -{ - /// - /// Embedded data file (V2 only?) - /// - public sealed class DataFile - { - /// - /// Length of the data file name - /// - public ushort FileNameLength { get; set; } - - /// - /// Data file name - /// - public string? FileName { get; set; } - - /// - /// Length of the data - /// - public uint DataLength { get; set; } - - /// - /// Data - /// - public byte[]? Data { get; set; } - - // Notes about Data: - // - Each data block in the samples contains a GIF header - // - Each GIF header contains an application extension: http://www.vurdalakov.net/misc/gif/application-extension - // - Each GIF doesn't always stretch to the end of the data - // - Remaining data seems to be padded as 0x00 (typically 8 bytes) - // - GIF data is fully formed and may be copied to a standalone file - } -} \ No newline at end of file diff --git a/SabreTools.Models/PlayJ/Enums.cs b/SabreTools.Models/PlayJ/Enums.cs deleted file mode 100644 index ec9cd9e..0000000 --- a/SabreTools.Models/PlayJ/Enums.cs +++ /dev/null @@ -1,122 +0,0 @@ -namespace SabreTools.Models.PlayJ -{ - /// - public enum Genre - { - /// - /// Blues/Folk/Country - /// - BluesFolkCountry = 1, - - /// - /// Jazz - /// - Jazz = 5, - - /// - /// Reggae - /// - Reggae = 10, - - /// - /// Classical - /// - Classical = 12, - - /// - /// Electronic - /// - Electronic = 13, - - /// - /// Pop/Rock - /// - PopRock = 15, - - /// - /// World - /// - World = 16, - - /// - /// Urban - /// - Urban = 17, - - /// - /// Latin - /// - Latin = 18, - - /// - /// Soundtrack/Other - /// - SoundtrackOther = 20, - - /// - /// New Age - /// - NewAge = 21, - - /// - /// Spiritual - /// - Spiritual = 22, - - /// - /// Sway & Tech - /// - SwayAndTech = 23, - - /// - /// Jam Bands - /// - JamBands = 24, - - /// - /// Comedy - /// - Comedy = 25, - - /// - /// Brazilian - /// - Brazilian = 26, - } - - // TODO: Fill out the remaining subgenres from the wayback machine - /// - /// Every subgenre is uniquely associated with a genre - public enum Subgenre : byte - { - /// - /// Blues/Folk/Country > Blues (Modern/Electric) - /// - BluesModernElectric = 2, - - /// - /// Blues/Folk/Country > Blues (Modern/Acoustic) - /// - BluesModernAcoustic = 3, - - /// - /// Blues/Folk/Country > Blues (Traditional) - /// - BluesTraditional = 4, - - /// - /// Blues/Folk/Country > Folk (Traditional) - /// - FolkTraditional = 5, - - /// - /// Blues/Folk/Country > Folk (Contemporary) - /// - FolkContemporary = 6, - - /// - /// Blues/Folk/Country > Folk (Jazz) - /// - FolkJazz = 7, - } -} \ No newline at end of file diff --git a/SabreTools.Models/PlayJ/Playlist.cs b/SabreTools.Models/PlayJ/Playlist.cs deleted file mode 100644 index 65a6b5e..0000000 --- a/SabreTools.Models/PlayJ/Playlist.cs +++ /dev/null @@ -1,18 +0,0 @@ -namespace SabreTools.Models.PlayJ -{ - /// - /// PlayJ playlist file - /// - public sealed class Playlist - { - /// - /// Playlist header - /// - public PlaylistHeader? Header { get; set; } - - /// - /// Embedded audio files / headers - /// - public AudioFile[]? AudioFiles { get; set; } - } -} \ No newline at end of file diff --git a/SabreTools.Models/PlayJ/PlaylistHeader.cs b/SabreTools.Models/PlayJ/PlaylistHeader.cs deleted file mode 100644 index 7a90588..0000000 --- a/SabreTools.Models/PlayJ/PlaylistHeader.cs +++ /dev/null @@ -1,18 +0,0 @@ -namespace SabreTools.Models.PlayJ -{ - /// - /// PlayJ playlist header - /// - public sealed class PlaylistHeader - { - /// - /// Number of tracks contained within the playlist - /// - public uint TrackCount { get; set; } - - /// - /// 52 bytes of unknown data - /// - public byte[]? Data { get; set; } - } -} \ No newline at end of file diff --git a/SabreTools.Models/PlayJ/UnknownBlock1.cs b/SabreTools.Models/PlayJ/UnknownBlock1.cs deleted file mode 100644 index 9494c39..0000000 --- a/SabreTools.Models/PlayJ/UnknownBlock1.cs +++ /dev/null @@ -1,24 +0,0 @@ -namespace SabreTools.Models.PlayJ -{ - /// - /// Data referred to by or - /// - public sealed class UnknownBlock1 - { - /// - /// Length of the following data block - /// - public uint Length { get; set; } - - /// - /// Unknown data - /// - public byte[]? Data { get; set; } - - // Notes about Data: - // - Might be UInt16 offset and UInt16 length pairs - // - Might be relevant to ad data - // - Might be relevant to encryption - // - Highly repeating patterns in the values with only a few differences - } -} \ No newline at end of file diff --git a/SabreTools.Models/PlayJ/UnknownBlock3.cs b/SabreTools.Models/PlayJ/UnknownBlock3.cs deleted file mode 100644 index 691aaa1..0000000 --- a/SabreTools.Models/PlayJ/UnknownBlock3.cs +++ /dev/null @@ -1,18 +0,0 @@ -namespace SabreTools.Models.PlayJ -{ - /// - /// Data referred to by - /// - public sealed class UnknownBlock3 - { - /// - /// Unknown data - /// - public byte[]? Data { get; set; } - - // Notes about Data: - // - This may be where the encrypted audio samples live - // - It is also possible that it's where the ad data lives and samples follow - // + See V2 for example of why this would be the case - } -} \ No newline at end of file diff --git a/SabreTools.Models/RealArcade/Constants.cs b/SabreTools.Models/RealArcade/Constants.cs deleted file mode 100644 index 8b2a2e4..0000000 --- a/SabreTools.Models/RealArcade/Constants.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace SabreTools.Models.RealArcade -{ - public static class Constants - { - public static readonly byte[] MezzanineSignatureBytes = [0x58, 0x5A, 0x69, 0x70, 0x32, 0x2E, 0x30]; - - public const string MezzanineSignatureString = "XZip2.0"; - - public static readonly byte[] RgsSignatureBytes = [0x52, 0x41, 0x53, 0x47, 0x49, 0x32, 0x2E, 0x30]; - - public const string RgsSignatureString = "RASGI2.0"; - } -} \ No newline at end of file diff --git a/SabreTools.Models/RealArcade/Mezzanine.cs b/SabreTools.Models/RealArcade/Mezzanine.cs deleted file mode 100644 index 051db7c..0000000 --- a/SabreTools.Models/RealArcade/Mezzanine.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace SabreTools.Models.RealArcade -{ - /// - /// This is a placeholder model for future work - /// - public class Mezzanine - { - - } -} diff --git a/SabreTools.Models/RealArcade/RgsFile.cs b/SabreTools.Models/RealArcade/RgsFile.cs deleted file mode 100644 index fae6931..0000000 --- a/SabreTools.Models/RealArcade/RgsFile.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace SabreTools.Models.RealArcade -{ - /// - /// This is a placeholder model for future work - /// - public class RgsFile - { - - } -} diff --git a/SabreTools.Models/StarForce/Constants.cs b/SabreTools.Models/StarForce/Constants.cs deleted file mode 100644 index 5a33e0c..0000000 --- a/SabreTools.Models/StarForce/Constants.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace SabreTools.Models.StarForce -{ - public static class Constants - { - public static readonly byte[] SignatureBytes = [0x53, 0x46, 0x46, 0x53]; - - public const string SignatureString = "SFFS"; - - public const uint SignatureUInt32 = 0x53464653; - } -} \ No newline at end of file diff --git a/SabreTools.Models/StarForce/FileEntry.cs b/SabreTools.Models/StarForce/FileEntry.cs deleted file mode 100644 index eb738ce..0000000 --- a/SabreTools.Models/StarForce/FileEntry.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.StarForce -{ - /// - [StructLayout(LayoutKind.Sequential)] - public sealed class FileEntry - { - /// - /// MD5 hash of filename (not encrypted,) - /// - /// 0x10 bytes - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x10)] - public byte[]? FilenameMD5Hash; - - /// - /// Index of fileheader (encrypted with filename) - /// - public ulong FileHeaderIndex; - } -} diff --git a/SabreTools.Models/StarForce/FileHeader.cs b/SabreTools.Models/StarForce/FileHeader.cs deleted file mode 100644 index 60644e4..0000000 --- a/SabreTools.Models/StarForce/FileHeader.cs +++ /dev/null @@ -1,17 +0,0 @@ -namespace SabreTools.Models.StarForce -{ - /// - public sealed class FileHeader - { - /// - /// Start of file content (encrypted with filename) - /// - public ulong FileContentStart { get; set; } - - /// - /// File info (timestamps, size, data position, encrypted) - /// - /// Unknown format - public byte[]? FileInfo { get; set; } - } -} diff --git a/SabreTools.Models/StarForce/FileSystem.cs b/SabreTools.Models/StarForce/FileSystem.cs deleted file mode 100644 index bb46491..0000000 --- a/SabreTools.Models/StarForce/FileSystem.cs +++ /dev/null @@ -1,33 +0,0 @@ -namespace SabreTools.Models.StarForce -{ - /// - /// SFFS consists of 2 major parts: the container files that contain the game - /// content and a filesystem filter driver (sfvfs02.sys) that handles all file-io. - /// When a game has SFFS'ed files and uses some file-io api like CreateFile, the - /// SFFS filterdriver sees this request and handles it if needed.that way, SFFS is - /// totally transparent to the game, since it never knows if the data is coming from - /// real file API or from the SFFS filterdriver. during SF initialization, the - /// SF-process registers itself as a SFFS process in a processid list, maintained - /// from the filterdriver. Part of that registration are the names of the - /// containerfiles, the process uses and an application key, that is needed to - /// decrypt headerinfos. Note that SFFS itself is completly vm-free. - /// - /// - public sealed class FileSystem - { - /// - /// Header - /// - public Header? Header { get; set; } - - /// - /// Files - /// - public FileEntry[]? Files { get; set; } - - /// - /// File headers - /// - public FileHeader[]? FileHeaders { get; set; } - } -} diff --git a/SabreTools.Models/StarForce/Header.cs b/SabreTools.Models/StarForce/Header.cs deleted file mode 100644 index 3e3829f..0000000 --- a/SabreTools.Models/StarForce/Header.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.Runtime.InteropServices; - -namespace SabreTools.Models.StarForce -{ - /// - /// Header - /// - /// - [StructLayout(LayoutKind.Sequential)] - public sealed class Header - { - /// - /// "SFFS" - /// - public uint Magic; - - /// - /// Version (0x00000001) - /// - public uint Version; - - /// - /// Number of files in the container (encrypted with application key). - /// Minimal number here is usually 65h, so its not real file count - /// in some cases, more like index size - /// - public ulong FileCount; - } -}