mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-01-02 15:02:11 +00:00
617 lines
14 KiB
C
617 lines
14 KiB
C
|
/*
|
||
|
* Copyright (c) 2011-2013 by naehrwert
|
||
|
* This file is released under the GPLv2.
|
||
|
*/
|
||
|
|
||
|
#ifndef _SCE_H_
|
||
|
#define _SCE_H_
|
||
|
|
||
|
#include <stdio.h>
|
||
|
#include <string.h>
|
||
|
|
||
|
#include "types.h"
|
||
|
#include "list.h"
|
||
|
|
||
|
/*! SCE file align. */
|
||
|
#define SCE_ALIGN 0x10
|
||
|
/*! Header align. */
|
||
|
#define HEADER_ALIGN 0x80
|
||
|
|
||
|
/*! SCE header magic value ("SCE\0"). */
|
||
|
#define SCE_HEADER_MAGIC 0x53434500
|
||
|
|
||
|
/*! SCE header versions. */
|
||
|
/*! Header version 2. */
|
||
|
#define SCE_HEADER_VERSION_2 2
|
||
|
|
||
|
/*! Key revisions. */
|
||
|
#define KEY_REVISION_0 0x00
|
||
|
#define KEY_REVISION_092_330 0x01
|
||
|
#define KEY_REVISION_1 0x02
|
||
|
//#define KEY_REVISION_ 0x03
|
||
|
#define KEY_REVISION_340_342 0x04
|
||
|
//#define KEY_REVISION_ 0x05
|
||
|
//#define KEY_REVISION_ 0x06
|
||
|
#define KEY_REVISION_350 0x07
|
||
|
//#define KEY_REVISION_ 0x08
|
||
|
//#define KEY_REVISION_ 0x09
|
||
|
#define KEY_REVISION_355 0x0a
|
||
|
//#define KEY_REVISION_ 0x0b
|
||
|
//#define KEY_REVISION_ 0x0c
|
||
|
#define KEY_REVISION_356 0x0d
|
||
|
//#define KEY_REVISION_ 0x0e
|
||
|
//#define KEY_REVISION_ 0x0f
|
||
|
#define KEY_REVISION_360_361 0x10
|
||
|
//#define KEY_REVISION_ 0x11
|
||
|
//#define KEY_REVISION_ 0x12
|
||
|
#define KEY_REVISION_365 0x13
|
||
|
//#define KEY_REVISION_ 0x14
|
||
|
//#define KEY_REVISION_ 0x15
|
||
|
#define KEY_REVISION_370_373 0x16
|
||
|
//#define KEY_REVISION_ 0x17
|
||
|
//#define KEY_REVISION_ 0x18
|
||
|
#define KEY_REVISION_DEBUG 0x8000
|
||
|
|
||
|
/*! SCE header types. */
|
||
|
/*! SELF header. */
|
||
|
#define SCE_HEADER_TYPE_SELF 1
|
||
|
/*! RVK header. */
|
||
|
#define SCE_HEADER_TYPE_RVK 2
|
||
|
/*! PKG header. */
|
||
|
#define SCE_HEADER_TYPE_PKG 3
|
||
|
/*! SPP header. */
|
||
|
#define SCE_HEADER_TYPE_SPP 4
|
||
|
|
||
|
/*! Sub header types. */
|
||
|
/*! SCE version header. */
|
||
|
#define SUB_HEADER_TYPE_SCEVERSION 1
|
||
|
/*! SELF header. */
|
||
|
#define SUB_HEADER_TYPE_SELF 3
|
||
|
|
||
|
/*! Control info types. */
|
||
|
/*! Control flags. */
|
||
|
#define CONTROL_INFO_TYPE_FLAGS 1
|
||
|
/*! Digest. */
|
||
|
#define CONTROL_INFO_TYPE_DIGEST 2
|
||
|
/*! NPDRM block. */
|
||
|
#define CONTROL_INFO_TYPE_NPDRM 3
|
||
|
|
||
|
/*! Optional header types. */
|
||
|
/*! Capability flags header. */
|
||
|
#define OPT_HEADER_TYPE_CAP_FLAGS 1
|
||
|
/*! Individuals seed header. */
|
||
|
#define OPT_HEADER_TYPE_INDIV_SEED 2
|
||
|
|
||
|
/*! Metadata key/iv lengths. */
|
||
|
#define METADATA_INFO_KEYBITS 128
|
||
|
#define METADATA_INFO_KEY_LEN 16
|
||
|
#define METADATA_INFO_KEYPAD_LEN 16
|
||
|
#define METADATA_INFO_IV_LEN 16
|
||
|
#define METADATA_INFO_IVPAD_LEN 16
|
||
|
|
||
|
/*! Metadata section types. */
|
||
|
/*! Segment header. */
|
||
|
#define METADATA_SECTION_TYPE_SHDR 1
|
||
|
/*! Program header. */
|
||
|
#define METADATA_SECTION_TYPE_PHDR 2
|
||
|
/*! Unknown header type 3. */
|
||
|
#define METADATA_SECTION_TYPE_UNK_3 3
|
||
|
|
||
|
/*! Section is hashed. */
|
||
|
#define METADATA_SECTION_HASHED 2
|
||
|
/*! Section is not encrypted. */
|
||
|
#define METADATA_SECTION_NOT_ENCRYPTED 1
|
||
|
/*! Section is encrypted. */
|
||
|
#define METADATA_SECTION_ENCRYPTED 3
|
||
|
/*! Section is not compressed. */
|
||
|
#define METADATA_SECTION_NOT_COMPRESSED 1
|
||
|
/*! Section is compressed. */
|
||
|
#define METADATA_SECTION_COMPRESSED 2
|
||
|
|
||
|
/*! Signature sizes. */
|
||
|
/*! Signature S part size. */
|
||
|
#define SIGNATURE_S_SIZE 21
|
||
|
/*! Signature R part size. */
|
||
|
#define SIGNATURE_R_SIZE 21
|
||
|
|
||
|
/*! Compressed. */
|
||
|
#define SECTION_INFO_COMPRESSED 2
|
||
|
/*! Not compressed. */
|
||
|
#define SECTION_INFO_NOT_COMPRESSED 1
|
||
|
|
||
|
/*! SCE version not present. */
|
||
|
#define SCE_VERSION_NOT_PRESENT 0
|
||
|
/*! SCE version present. */
|
||
|
#define SCE_VERSION_PRESENT 1
|
||
|
|
||
|
/*! SELF types. */
|
||
|
/*! lv0. */
|
||
|
#define SELF_TYPE_LV0 1
|
||
|
/*! lv1. */
|
||
|
#define SELF_TYPE_LV1 2
|
||
|
/*! lv2. */
|
||
|
#define SELF_TYPE_LV2 3
|
||
|
/*! Application. */
|
||
|
#define SELF_TYPE_APP 4
|
||
|
/*! Isolated SPU module. */
|
||
|
#define SELF_TYPE_ISO 5
|
||
|
/*! Secure loader. */
|
||
|
#define SELF_TYPE_LDR 6
|
||
|
/*! Unknown type 7. */
|
||
|
#define SELF_TYPE_UNK_7 7
|
||
|
/*! NPDRM application. */
|
||
|
#define SELF_TYPE_NPDRM 8
|
||
|
|
||
|
/*! NPDRM control info magic value ("NPD\0"). */
|
||
|
#define NP_CI_MAGIC 0x4E504400
|
||
|
|
||
|
/*! NPDRM license types. */
|
||
|
#define NP_LICENSE_NETWORK 1
|
||
|
#define NP_LICENSE_LOCAL 2
|
||
|
#define NP_LICENSE_FREE 3
|
||
|
|
||
|
/*! NPDRM application types. */
|
||
|
#define NP_TYPE_UPDATE 0x20
|
||
|
#define NP_TYPE_SPRX 0
|
||
|
#define NP_TYPE_EXEC 1
|
||
|
#define NP_TYPE_USPRX (NP_TYPE_UPDATE | NP_TYPE_SPRX)
|
||
|
#define NP_TYPE_UEXEC (NP_TYPE_UPDATE | NP_TYPE_EXEC)
|
||
|
|
||
|
/*! SCE header. */
|
||
|
typedef struct _sce_header
|
||
|
{
|
||
|
/*! Magic value. */
|
||
|
scetool::u32 magic;
|
||
|
/*! Header version .*/
|
||
|
scetool::u32 version;
|
||
|
/*! Key revision. */
|
||
|
scetool::u16 key_revision;
|
||
|
/*! Header type. */
|
||
|
scetool::u16 header_type;
|
||
|
/*! Metadata offset. */
|
||
|
scetool::u32 metadata_offset;
|
||
|
/*! Header length. */
|
||
|
scetool::u64 header_len;
|
||
|
/*! Length of encapsulated data. */
|
||
|
scetool::u64 data_len;
|
||
|
} sce_header_t;
|
||
|
|
||
|
/*! SELF header. */
|
||
|
typedef struct _self_header
|
||
|
{
|
||
|
/*! Header type. */
|
||
|
scetool::u64 header_type;
|
||
|
/*! Application info offset. */
|
||
|
scetool::u64 app_info_offset;
|
||
|
/*! ELF offset. */
|
||
|
scetool::u64 elf_offset;
|
||
|
/*! Program headers offset. */
|
||
|
scetool::u64 phdr_offset;
|
||
|
/*! Section headers offset. */
|
||
|
scetool::u64 shdr_offset;
|
||
|
/*! Section info offset. */
|
||
|
scetool::u64 section_info_offset;
|
||
|
/*! SCE version offset. */
|
||
|
scetool::u64 sce_version_offset;
|
||
|
/*! Control info offset. */
|
||
|
scetool::u64 control_info_offset;
|
||
|
/*! Control info size. */
|
||
|
scetool::u64 control_info_size;
|
||
|
/*! Padding. */
|
||
|
scetool::u64 padding;
|
||
|
} self_header_t;
|
||
|
|
||
|
/*! Metadata info. */
|
||
|
typedef struct _metadata_info
|
||
|
{
|
||
|
/*! Key. */
|
||
|
scetool::u8 key[METADATA_INFO_KEY_LEN];
|
||
|
/*! Key padding. */
|
||
|
scetool::u8 key_pad[METADATA_INFO_KEYPAD_LEN];
|
||
|
/*! IV. */
|
||
|
scetool::u8 iv[METADATA_INFO_IV_LEN];
|
||
|
/*! IV padding. */
|
||
|
scetool::u8 iv_pad[METADATA_INFO_IVPAD_LEN];
|
||
|
} metadata_info_t;
|
||
|
|
||
|
typedef struct _metadata_header
|
||
|
{
|
||
|
/*! Signature input length. */
|
||
|
scetool::u64 sig_input_length;
|
||
|
scetool::u32 unknown_0;
|
||
|
/*! Section count. */
|
||
|
scetool::u32 section_count;
|
||
|
/*! Key count. */
|
||
|
scetool::u32 key_count;
|
||
|
/*! Optional header size. */
|
||
|
scetool::u32 opt_header_size;
|
||
|
scetool::u32 unknown_1;
|
||
|
scetool::u32 unknown_2;
|
||
|
} metadata_header_t;
|
||
|
|
||
|
/*! Metadata section header. */
|
||
|
typedef struct _metadata_section_header
|
||
|
{
|
||
|
/*! Data offset. */
|
||
|
scetool::u64 data_offset;
|
||
|
/*! Data size. */
|
||
|
scetool::u64 data_size;
|
||
|
/*! Type. */
|
||
|
scetool::u32 type;
|
||
|
/*! Index. */
|
||
|
scetool::u32 index;
|
||
|
/*! Hashed. */
|
||
|
scetool::u32 hashed;
|
||
|
/*! SHA1 index. */
|
||
|
scetool::u32 sha1_index;
|
||
|
/*! Encrypted. */
|
||
|
scetool::u32 encrypted;
|
||
|
/*! Key index. */
|
||
|
scetool::u32 key_index;
|
||
|
/*! IV index. */
|
||
|
scetool::u32 iv_index;
|
||
|
/*! Compressed. */
|
||
|
scetool::u32 compressed;
|
||
|
} metadata_section_header_t;
|
||
|
|
||
|
/*! SCE file signature. */
|
||
|
typedef struct _signature
|
||
|
{
|
||
|
scetool::u8 r[SIGNATURE_R_SIZE];
|
||
|
scetool::u8 s[SIGNATURE_S_SIZE];
|
||
|
scetool::u8 padding[6];
|
||
|
} signature_t;
|
||
|
|
||
|
/*! Section info. */
|
||
|
typedef struct _section_info
|
||
|
{
|
||
|
scetool::u64 offset;
|
||
|
scetool::u64 size;
|
||
|
scetool::u32 compressed;
|
||
|
scetool::u32 unknown_0;
|
||
|
scetool::u32 unknown_1;
|
||
|
scetool::u32 encrypted;
|
||
|
} section_info_t;
|
||
|
|
||
|
/*! SCE version. */
|
||
|
typedef struct _sce_version
|
||
|
{
|
||
|
/*! Header type. */
|
||
|
scetool::u32 header_type;
|
||
|
/*! SCE version section present? */
|
||
|
scetool::u32 present;
|
||
|
/*! Size. */
|
||
|
scetool::u32 size;
|
||
|
scetool::u32 unknown_3;
|
||
|
} sce_version_t;
|
||
|
|
||
|
/*! SCE version data 0x30. */
|
||
|
typedef struct _sce_version_data_30
|
||
|
{
|
||
|
scetool::u16 unknown_1; //Dunno.
|
||
|
scetool::u16 unknown_2; //0x0001
|
||
|
scetool::u32 unknown_3; //Padding?
|
||
|
scetool::u32 unknown_4; //Number of sections?
|
||
|
scetool::u32 unknown_5; //Padding?
|
||
|
/*! Data offset. */
|
||
|
scetool::u64 offset;
|
||
|
/*! Data size. */
|
||
|
scetool::u64 size;
|
||
|
} sce_version_data_30_t;
|
||
|
|
||
|
//(auth_id & AUTH_ONE_MASK) has to be 0x1000000000000000
|
||
|
#define AUTH_ONE_MASK 0xF000000000000000
|
||
|
#define AUTH_TERRITORY_MASK 0x0FF0000000000000
|
||
|
#define VENDOR_TERRITORY_MASK 0xFF000000
|
||
|
#define VENDOR_ID_MASK 0x00FFFFFF
|
||
|
|
||
|
/*! Application info. */
|
||
|
typedef struct _app_info
|
||
|
{
|
||
|
/*! Auth ID. */
|
||
|
scetool::u64 auth_id;
|
||
|
/*! Vendor ID. */
|
||
|
scetool::u32 vendor_id;
|
||
|
/*! SELF type. */
|
||
|
scetool::u32 self_type;
|
||
|
/*! Version. */
|
||
|
scetool::u64 version;
|
||
|
/*! Padding. */
|
||
|
scetool::u64 padding;
|
||
|
} app_info_t;
|
||
|
|
||
|
/*! Control info. */
|
||
|
typedef struct _control_info
|
||
|
{
|
||
|
/*! Control info type. */
|
||
|
scetool::u32 type;
|
||
|
/*! Size of following data. */
|
||
|
scetool::u32 size;
|
||
|
/*! Next flag (1 if another info follows). */
|
||
|
scetool::u64 next;
|
||
|
} control_info_t;
|
||
|
|
||
|
#define CI_FLAG_00_80 0x80
|
||
|
#define CI_FLAG_00_40 0x40 //root access
|
||
|
#define CI_FLAG_00_20 0x20 //kernel access
|
||
|
|
||
|
#define CI_FLAG_17_01 0x01
|
||
|
#define CI_FLAG_17_02 0x02
|
||
|
#define CI_FLAG_17_04 0x04
|
||
|
#define CI_FLAG_17_08 0x08
|
||
|
#define CI_FLAG_17_10 0x10
|
||
|
|
||
|
//1B:
|
||
|
//bdj 0x01, 0x09
|
||
|
//psp_emu 0x08
|
||
|
//psp_transl 0x0C
|
||
|
#define CI_FLAG_1B_01 0x01 //may use shared mem?
|
||
|
#define CI_FLAG_1B_02 0x02
|
||
|
#define CI_FLAG_1B_04 0x04
|
||
|
#define CI_FLAG_1B_08 0x08 //ss
|
||
|
|
||
|
#define CI_FLAG_1F_SHAREABLE 0x01
|
||
|
#define CI_FLAG_1F_02 0x02 //internal?
|
||
|
#define CI_FLAG_1F_FACTORY 0x04
|
||
|
#define CI_FLAG_1F_08 0x08 //???
|
||
|
|
||
|
/*! Control info data flags. */
|
||
|
typedef struct _ci_data_flags
|
||
|
{
|
||
|
scetool::u8 data[0x20];
|
||
|
} ci_data_flags_t;
|
||
|
|
||
|
/*! Control info data digest 0x30. */
|
||
|
typedef struct _ci_data_digest_30
|
||
|
{
|
||
|
scetool::u8 digest[20];
|
||
|
scetool::u64 unknown_0;
|
||
|
} ci_data_digest_30_t;
|
||
|
|
||
|
/*! Control info data digest 0x40. */
|
||
|
typedef struct _ci_data_digest_40
|
||
|
{
|
||
|
scetool::u8 digest1[20];
|
||
|
scetool::u8 digest2[20];
|
||
|
scetool::u64 fw_version;
|
||
|
} ci_data_digest_40_t;
|
||
|
|
||
|
/*! Control info data NPDRM. */
|
||
|
typedef struct _ci_data_npdrm
|
||
|
{
|
||
|
/*! Magic. */
|
||
|
scetool::u32 magic;
|
||
|
scetool::u32 unknown_0;
|
||
|
/*! License type. */
|
||
|
scetool::u32 license_type;
|
||
|
/*! Application type. */
|
||
|
scetool::u32 app_type;
|
||
|
/*! Content ID. */
|
||
|
scetool::u8 content_id[0x30];
|
||
|
/*! Random padding. */
|
||
|
scetool::u8 rndpad[0x10];
|
||
|
/*! ContentID_FileName hash. */
|
||
|
scetool::u8 hash_cid_fname[0x10];
|
||
|
/*! Control info hash. */
|
||
|
scetool::u8 hash_ci[0x10];
|
||
|
scetool::u64 unknown_1;
|
||
|
scetool::u64 unknown_2;
|
||
|
} ci_data_npdrm_t;
|
||
|
|
||
|
/*! Optional header. */
|
||
|
typedef struct _opt_header
|
||
|
{
|
||
|
/*! Type. */
|
||
|
scetool::u32 type;
|
||
|
/*! Size. */
|
||
|
scetool::u32 size;
|
||
|
/*! Next flag (1 if another header follows). */
|
||
|
scetool::u64 next;
|
||
|
} opt_header_t;
|
||
|
|
||
|
/*! Capability flags. */
|
||
|
#define CAP_FLAG_1 0x01 //only seen in PPU selfs
|
||
|
#define CAP_FLAG_2 0x02 //only seen in PPU selfs
|
||
|
#define CAP_FLAG_4 0x04 //only seen in bdj PPU self
|
||
|
#define CAP_FLAG_REFTOOL 0x08
|
||
|
#define CAP_FLAG_DEBUG 0x10
|
||
|
#define CAP_FLAG_RETAIL 0x20
|
||
|
#define CAP_FLAG_SYSDBG 0x40
|
||
|
|
||
|
#define UNK7_2000 0x2000 //hddbind?
|
||
|
#define UNK7_20000 0x20000 //flashbind?
|
||
|
#define UNK7_40000 0x40000 //discbind?
|
||
|
#define UNK7_80000 0x80000
|
||
|
|
||
|
#define UNK7_PS3SWU 0x116000 //dunno...
|
||
|
|
||
|
/*! SCE file capability flags. */
|
||
|
typedef struct _oh_data_cap_flags
|
||
|
{
|
||
|
scetool::u64 unk3; //0
|
||
|
scetool::u64 unk4; //0
|
||
|
/*! Flags. */
|
||
|
scetool::u64 flags;
|
||
|
scetool::u32 unk6;
|
||
|
scetool::u32 unk7;
|
||
|
} oh_data_cap_flags_t;
|
||
|
|
||
|
/*! Section context. */
|
||
|
typedef struct _sce_section_ctxt
|
||
|
{
|
||
|
/*! Data buffer. */
|
||
|
void *buffer;
|
||
|
/*! Size. */
|
||
|
scetool::u32 size;
|
||
|
/*! Offset. */
|
||
|
scetool::u32 offset;
|
||
|
/*! May be compressed. */
|
||
|
BOOL may_compr;
|
||
|
} sce_section_ctxt_t;
|
||
|
|
||
|
typedef struct _makeself_ctxt
|
||
|
{
|
||
|
/*! ELF file buffer (for ELF -> SELF). */
|
||
|
scetool::u8 *elf;
|
||
|
/*! ELF file length. */
|
||
|
scetool::u32 elf_len;
|
||
|
/*! ELF header. */
|
||
|
void *ehdr;
|
||
|
/*! ELF header size. */
|
||
|
scetool::u32 ehsize;
|
||
|
/*! Program headers. */
|
||
|
void *phdrs;
|
||
|
/*! Program headers size. */
|
||
|
scetool::u32 phsize;
|
||
|
/*! Section headers. */
|
||
|
void *shdrs;
|
||
|
/*! Section headers size. */
|
||
|
scetool::u32 shsize;
|
||
|
/*! Section info count. */
|
||
|
scetool::u32 si_cnt;
|
||
|
/*! Number of section infos that are present as data sections. */
|
||
|
scetool::u32 si_sec_cnt;
|
||
|
} makeself_ctxt_t;
|
||
|
|
||
|
/*! SCE file buffer context. */
|
||
|
typedef struct _sce_buffer_ctxt
|
||
|
{
|
||
|
/*! SCE file buffer. */
|
||
|
scetool::u8 *scebuffer;
|
||
|
|
||
|
/*! SCE header. */
|
||
|
sce_header_t *sceh;
|
||
|
/*! File type dependent header. */
|
||
|
union
|
||
|
{
|
||
|
struct
|
||
|
{
|
||
|
/*! SELF header. */
|
||
|
self_header_t *selfh;
|
||
|
/*! Application info. */
|
||
|
app_info_t *ai;
|
||
|
/*! Section info. */
|
||
|
section_info_t *si;
|
||
|
/*! SCE version. */
|
||
|
sce_version_t *sv;
|
||
|
/*! Control infos. */
|
||
|
list_t *cis;
|
||
|
/*! Optional headers. */
|
||
|
list_t *ohs;
|
||
|
} self;
|
||
|
};
|
||
|
/*! Metadata info. */
|
||
|
metadata_info_t *metai;
|
||
|
/*! Metadata header. */
|
||
|
metadata_header_t *metah;
|
||
|
/*! Metadata section headers. */
|
||
|
metadata_section_header_t *metash;
|
||
|
/*! SCE file keys. */
|
||
|
scetool::u8 *keys;
|
||
|
/*! Keys length. */
|
||
|
scetool::u32 keys_len;
|
||
|
/*! Signature. */
|
||
|
signature_t *sig;
|
||
|
|
||
|
/*! Metadata decrypted? */
|
||
|
BOOL mdec;
|
||
|
|
||
|
/*! Data layout. */
|
||
|
/*! SCE header offset. */
|
||
|
scetool::u32 off_sceh;
|
||
|
union
|
||
|
{
|
||
|
struct
|
||
|
{
|
||
|
/*! SELF header offset. */
|
||
|
scetool::u32 off_selfh;
|
||
|
/*! Application info offset. */
|
||
|
scetool::u32 off_ai;
|
||
|
/*! ELF header offset. */
|
||
|
scetool::u32 off_ehdr;
|
||
|
/*! Program header offset. */
|
||
|
scetool::u32 off_phdr;
|
||
|
/*! Section info offset. */
|
||
|
scetool::u32 off_si;
|
||
|
/*! SCE version offset. */
|
||
|
scetool::u32 off_sv;
|
||
|
/*! Control infos offset. */
|
||
|
scetool::u32 off_cis;
|
||
|
/*! Optional headers offset. */
|
||
|
scetool::u32 off_ohs;
|
||
|
} off_self;
|
||
|
};
|
||
|
/*! Metadata info offset. */
|
||
|
scetool::u32 off_metai;
|
||
|
/*! Metadata header offset. */
|
||
|
scetool::u32 off_metah;
|
||
|
/*! Metadata section headers offset. */
|
||
|
scetool::u32 off_metash;
|
||
|
/*! Keys offset. */
|
||
|
scetool::u32 off_keys;
|
||
|
/*! Signature offset. */
|
||
|
scetool::u32 off_sig;
|
||
|
/*! Header padding end offset. */
|
||
|
scetool::u32 off_hdrpad;
|
||
|
|
||
|
/*! File creation type dependent data. */
|
||
|
union
|
||
|
{
|
||
|
/*! ELF -> SELF. */
|
||
|
makeself_ctxt_t *makeself;
|
||
|
};
|
||
|
|
||
|
/*! Data sections. */
|
||
|
list_t *secs;
|
||
|
} sce_buffer_ctxt_t;
|
||
|
|
||
|
/*! Create SCE file context from SCE file buffer. */
|
||
|
sce_buffer_ctxt_t *sce_create_ctxt_from_buffer(scetool::u8 *scebuffer);
|
||
|
|
||
|
/*! Create SCE file context for SELF creation. */
|
||
|
sce_buffer_ctxt_t *sce_create_ctxt_build_self(scetool::u8 *elf, scetool::u32 elf_len);
|
||
|
|
||
|
/*! Add data section to SCE context. */
|
||
|
void sce_add_data_section(sce_buffer_ctxt_t *ctxt, void *buffer, scetool::u32 size, BOOL may_compr);
|
||
|
|
||
|
/*! Set metadata section header. */
|
||
|
void sce_set_metash(sce_buffer_ctxt_t *ctxt, scetool::u32 type, BOOL encrypted, scetool::u32 idx);
|
||
|
|
||
|
/*! Compress data. */
|
||
|
void sce_compress_data(sce_buffer_ctxt_t *ctxt);
|
||
|
|
||
|
/*! Layout offsets for SCE file creation. */
|
||
|
void sce_layout_ctxt(sce_buffer_ctxt_t *ctxt);
|
||
|
|
||
|
/*! Encrypt context. */
|
||
|
BOOL sce_encrypt_ctxt(sce_buffer_ctxt_t *ctxt, scetool::u8 *keyset);
|
||
|
|
||
|
/*! Write context to file. */
|
||
|
BOOL sce_write_ctxt(sce_buffer_ctxt_t *ctxt, scetool::s8 *fname);
|
||
|
|
||
|
/*! Decrypt header (use passed metadata_into if not NULL). */
|
||
|
BOOL sce_decrypt_header(sce_buffer_ctxt_t *ctxt, scetool::u8 *metadata_info, scetool::u8 *keyset);
|
||
|
|
||
|
/*! Decrypt data. */
|
||
|
BOOL sce_decrypt_data(sce_buffer_ctxt_t *ctxt);
|
||
|
|
||
|
/*! Print SCE file info. */
|
||
|
void sce_print_info(FILE *fp, sce_buffer_ctxt_t *ctxt);
|
||
|
|
||
|
/*! Get version string from version. */
|
||
|
scetool::s8 *sce_version_to_str(scetool::u64 version);
|
||
|
|
||
|
/*! Get version from version string. */
|
||
|
scetool::u64 sce_str_to_version(scetool::s8 *version);
|
||
|
|
||
|
/*! Convert hex version to dec version. */
|
||
|
scetool::u64 sce_hexver_to_decver(scetool::u64 version);
|
||
|
|
||
|
/*! Get control info. */
|
||
|
control_info_t *sce_get_ctrl_info(sce_buffer_ctxt_t *ctxt, scetool::u32 type);
|
||
|
|
||
|
/*! Get optional header. */
|
||
|
opt_header_t *sce_get_opt_header(sce_buffer_ctxt_t *ctxt, scetool::u32 type);
|
||
|
|
||
|
#endif
|