tp/include/revolution/esp.h

139 lines
3.0 KiB
C

#ifndef _REVOLUTION_ESP_H_
#define _REVOLUTION_ESP_H_
#ifdef __cplusplus
extern "C" {
#endif
#include <revolution/types.h>
#include <revolution/private/iostypes.h>
typedef u32 ESId;
typedef u32 ESContentId;
typedef u64 ESTitleId;
typedef u64 ESTicketId;
typedef u8 ESVersion;
typedef u16 ESTitleVersion;
typedef ESTitleId ESSysVersion;
typedef u32 ESTitleType;
typedef u16 ESContentType;
typedef u8 ESTmdReserved[62];
typedef u8 ESTicketReserved[48];
typedef u8 ESSysAccessMask[2];
typedef u8 ESCidxMask[64];
#pragma pack(push, 4)
typedef struct {
ESVersion version;
ESSysVersion sysVersion;
ESTitleId titleId;
ESTitleType type;
u16 groupId;
ESTmdReserved reserved;
ESTitleVersion titleVersion;
u16 numContents;
} ESTmdViewHeader;
typedef struct {
ESContentId cid;
u16 index;
ESContentType type;
u64 size;
} ESCmdView;
typedef struct {
u32 code;
u32 limit;
} ESLpEntry;
typedef struct {
ESVersion version;
ESTicketId ticketID;
ESId devID;
ESTitleId titleID;
ESSysAccessMask sysAccessMask;
u16 ticketVer;
u32 accTitleID;
u32 accTitleMask;
u8 license;
ESTicketReserved reserved;
u8 audit;
ESCidxMask cidxMask;
ESLpEntry limits[8];
} ESTicketView;
typedef struct {
ESTmdViewHeader head;
ESCmdView contents[512];
} ESTmdView;
typedef struct {
ESContentId cid;
u16 index;
ESContentType type;
u64 size;
IOSCHash hash;
} ESContentMeta;
typedef struct {
ESVersion version;
ESVersion caCrlVersion;
ESVersion signerCrlVersion;
ESSysVersion sysVersion;
ESTitleId titleId;
ESTitleType type;
u16 groupId;
ESTmdReserved reserved;
u32 accessRights;
ESTitleVersion titleVersion;
u16 numContents;
u16 bootIndex;
} ESTitleMetaHeader;
typedef struct {
IOSCSigRsa2048 sig;
ESTitleMetaHeader head;
ESContentMeta contents[512];
} ESTitleMeta;
typedef struct {
IOSCSigRsa2048 sig;
IOSCEccPublicKey serverPubKey;
ESVersion version;
ESVersion caCrlVersion;
ESVersion signerCrlVersion;
IOSCAesKey titleKey;
ESTicketId ticketId;
ESId deviceId;
ESTitleId titleId;
ESSysAccessMask sysAccessMask;
u16 ticketVersion;
u32 accessTitleId;
u32 accessTitleMask;
u8 licenseType;
ESTicketReserved reserved;
u8 audit;
ESCidxMask cidxMask;
ESLpEntry limits[8];
} ESTicket;
#pragma pack(pop)
s32 ESP_InitLib(void);
s32 ESP_CloseLib(void);
s32 ESP_LaunchTitle(u64 titleID, ESTicketView* pTicketView);
s32 ESP_GetTicketViews(ESTitleId titleId, ESTicketView* ticketViewList, u32* ticketViewCnt);
s32 ESP_DiGetTicketView(const void* ticket, ESTicketView* ticketView);
s32 ESP_DiGetTmd(ESTitleMeta* tmd, u32* tmdSize);
s32 ESP_GetTmdView(ESTitleId titleId, ESTmdView* tmdView, u32* size);
s32 ESP_GetDataDir(ESTitleId titleId, char* dataDir);
s32 ESP_GetTitleId(ESTitleId* titleId);
s32 ESP_GetConsumption(ESTicketId ticketId, ESLpEntry* entries, u32* nEntries);
#ifdef __cplusplus
}
#endif
#endif // _REVOLUTION_ESP_H_