Difference between revisions of "/dev/es"
< /dev
Jump to navigation
Jump to search
BrianJones (talk | contribs) (minor updates) |
ExtremsAlt (talk | contribs) (Undo revision 100487 by BrianJones (talk)) |
||
Line 107: | Line 107: | ||
| style="vertical-align: top;" rowspan="3" |0x01 | | style="vertical-align: top;" rowspan="3" |0x01 | ||
| style="vertical-align: top;" rowspan="3" |ES_AddTicket | | style="vertical-align: top;" rowspan="3" |ES_AddTicket | ||
− | | style="vertical ... | + | | style="vertical-align: top;" rowspan="3" |3 |
+ | | style="vertical-align: top;" rowspan="3" |0 | ||
+ | | style="vertical-align: top;" |? | ||
+ | | style="vertical-align: top;" |0x2A4 | ||
+ | | style="vertical-align: top;" rowspan="3" |ES_AddTicket(const signed_blob *stik, u32 stik_size, const signed_blob *certificates, u32 certificates_size, const signed_blob *crl, u32 crl_size) | ||
+ | | style="vertical-align: top;" rowspan="3" |? | ||
+ | |- style="background-color: #eee;" | ||
+ | |? | ||
+ | |? | ||
+ | |- style="background-color: #eee;" | ||
+ | |? | ||
+ | |? | ||
+ | |- | ||
+ | | style="vertical-align: top;" rowspan="4" |0x02 | ||
+ | | style="vertical-align: top;" rowspan="4" |ES_AddTitleStart | ||
+ | | style="vertical-align: top;" rowspan="4" |4 | ||
+ | | style="vertical-align: top;" rowspan="4" |0 | ||
+ | | style="vertical-align: top;" |? | ||
+ | | style="vertical-align: top;" |? | ||
+ | | style="vertical-align: top;" rowspan="4" |ES_AddTitleStart(const signed_blob *stmd, u32 tmd_size, const signed_blob *certificates, u32 certificates_size, const signed_blob *crl, u32 crl_size) | ||
+ | | style="vertical-align: top;" rowspan="4" |? | ||
+ | |- | ||
+ | |? | ||
+ | |? | ||
+ | |- | ||
+ | |? | ||
+ | |? | ||
+ | |- | ||
+ | |? | ||
+ | |0x1c | ||
+ | |- style="background-color: #eee;" | ||
+ | | style="vertical-align: top;" rowspan="2" |0x03 | ||
+ | | style="vertical-align: top;" rowspan="2" |ES_AddContentStart | ||
+ | | style="vertical-align: top;" rowspan="2" |2 | ||
+ | | style="vertical-align: top;" rowspan="2" |0 | ||
+ | | style="vertical-align: top;" |? | ||
+ | | style="vertical-align: top;" |0x8 | ||
+ | | style="vertical-align: top;" rowspan="2" |ES_AddContentStart(u64 titleID, u32 cid) | ||
+ | | style="vertical-align: top;" rowspan="2" |? | ||
+ | |- style="background-color: #eee;" | ||
+ | |? | ||
+ | |0x4 | ||
+ | |- | ||
+ | | style="vertical-align: top;" rowspan="2" |0x04 | ||
+ | | style="vertical-align: top;" rowspan="2" |ES_AddContentData | ||
+ | | style="vertical-align: top;" rowspan="2" |2 | ||
+ | | style="vertical-align: top;" rowspan="2" |0 | ||
+ | | style="vertical-align: top;" |? | ||
+ | | style="vertical-align: top;" |0x4 | ||
+ | | style="vertical-align: top;" rowspan="2" |ES_AddContentData(s32 cfd, u8 *data, u32 data_size) | ||
+ | | style="vertical-align: top;" rowspan="2" |? | ||
+ | |- | ||
+ | |? | ||
+ | |? | ||
+ | |- style="background-color: #eee;" | ||
+ | | style="vertical-align: top;" |0x05 | ||
+ | | style="vertical-align: top;" |ES_AddContentFinish | ||
+ | | style="vertical-align: top;" |1 | ||
+ | | style="vertical-align: top;" |0 | ||
+ | | style="vertical-align: top;" |? | ||
+ | | style="vertical-align: top;" |0x4 | ||
+ | | style="vertical-align: top;" |ES_AddContentFinish(u32 cid) | ||
+ | | style="vertical-align: top;" |? | ||
+ | |- | ||
+ | | style="vertical-align: top;" rowspan="1" |0x06 | ||
+ | | style="vertical-align: top;" rowspan="1" |ES_AddTitleFinish | ||
+ | | style="vertical-align: top;" rowspan="1" |0 | ||
+ | | style="vertical-align: top;" rowspan="1" |0 | ||
+ | | style="vertical-align: top;" | | ||
+ | | style="vertical-align: top;" | | ||
+ | | style="vertical-align: top;" rowspan="1" |ES_AddTitleFinish(void) | ||
+ | | style="vertical-align: top;" rowspan="1" |? | ||
+ | |- style="background-color: #eee;" | ||
+ | | style="vertical-align: top;" |0x07 | ||
+ | | style="vertical-align: top;" |ES_GetDeviceID | ||
+ | | style="vertical-align: top;" |0 | ||
+ | | style="vertical-align: top;" |1 | ||
+ | | style="vertical-align: top;" |? | ||
+ | | style="vertical-align: top;" |0x4 | ||
+ | | style="vertical-align: top;" |ES_GetDeviceID(u32 *device_id) | ||
+ | | style="vertical-align: top;" |? | ||
+ | |- | ||
+ | | style="vertical-align: top;" rowspan="2" |0x08 | ||
+ | | style="vertical-align: top;" rowspan="2" |ES_LaunchTitle | ||
+ | | style="vertical-align: top;" rowspan="2" |2 | ||
+ | | style="vertical-align: top;" rowspan="2" |0 | ||
+ | | style="vertical-align: top;" |? | ||
+ | | style="vertical-align: top;" |0x8 | ||
+ | | style="vertical-align: top;" rowspan="2" |ES_LaunchTitleBackground(u64 titleID, const tikview *view); ES_LaunchTitle(u64 titleID, const tikview *view); | ||
+ | | style="vertical-align: top;" rowspan="2" |? | ||
+ | |- | ||
+ | | style="vertical-align: top;" |? | ||
+ | | style="vertical-align: top;" |0xd8 | ||
+ | |- style="background-color: #eee;" | ||
+ | | style="vertical-align: top;" |0x09 | ||
+ | | style="vertical-align: top;" |ES_OpenContent | ||
+ | | style="vertical-align: top;" |1 | ||
+ | | style="vertical-align: top;" |0 | ||
+ | | style="vertical-align: top;" |? | ||
+ | | style="vertical-align: top;" |0x4 | ||
+ | | style="vertical-align: top;" |ES_OpenContent(u16 index) | ||
+ | | style="vertical-align: top;" |? | ||
+ | |- | ||
+ | | style="vertical-align: top;" rowspan="2" |0x0A | ||
+ | | style="vertical-align: top;" rowspan="2" |ES_ReadContent | ||
+ | | style="vertical-align: top;" rowspan="2" |1 | ||
+ | | style="vertical-align: top;" rowspan="2" |1 | ||
+ | | style="vertical-align: top;" |? | ||
+ | | style="vertical-align: top;" |0x4 | ||
+ | | style="vertical-align: top;" rowspan="2" |ES_ReadContent(s32 cfd, u8 *data, u32 data_size) | ||
+ | | style="vertical-align: top;" rowspan="2" |? | ||
+ | |- | ||
+ | | style="vertical-align: top;" |? | ||
+ | | style="vertical-align: top;" |? | ||
+ | |- style="background-color: #eee;" | ||
+ | | style="vertical-align: top;" |0x0B | ||
+ | | style="vertical-align: top;" |ES_CloseContent | ||
+ | | style="vertical-align: top;" |1 | ||
+ | | style="vertical-align: top;" |0 | ||
+ | | style="vertical-align: top;" |? | ||
+ | | style="vertical-align: top;" |0x4 | ||
+ | | style="vertical-align: top;" |ES_CloseContent(s32 cfd) | ||
+ | | style="vertical-align: top;" |? | ||
+ | |- | ||
+ | | style="vertical-align: top;" rowspan="1" |0x0C | ||
+ | | style="vertical-align: top;" rowspan="1" |ES_GetOwnedTitlesCount | ||
+ | | style="vertical-align: top;" rowspan="1" |0 | ||
+ | | style="vertical-align: top;" rowspan="1" |1 | ||
+ | | style="vertical-align: top;" |u32* count | ||
+ | | style="vertical-align: top;" |0x4 | ||
+ | | style="vertical-align: top;" rowspan="1" |ES_GetNumOwnedTitles(u32 *cnt) | ||
+ | | style="vertical-align: top;" rowspan="1" |? | ||
+ | |- style="background-color: #eee;" | ||
+ | | style="vertical-align: top;" rowspan="2" |0x0D | ||
+ | | style="vertical-align: top;" rowspan="2" |ES_GetOwnedTitles | ||
+ | | style="vertical-align: top;" rowspan="2" |1 | ||
+ | | style="vertical-align: top;" rowspan="2" |1 | ||
+ | | style="vertical-align: top;" |u32* count | ||
+ | | style="vertical-align: top;" |0x4 | ||
+ | | style="vertical-align: top;" rowspan="2" |ES_GetOwnedTitles(u64 *titles, u32 cnt) | ||
+ | | style="vertical-align: top;" rowspan="2" |? | ||
+ | |- style="background-color: #eee;" | ||
+ | | style="vertical-align: top;" |u64 titles[] | ||
+ | | style="vertical-align: top;" |[count]*0x8 | ||
+ | |- | ||
+ | | style="vertical-align: top;" |0x0E | ||
+ | | style="vertical-align: top;" |ES_GetTitlesCount | ||
+ | | style="vertical-align: top;" |0 | ||
+ | | style="vertical-align: top;" |1 | ||
+ | | style="vertical-align: top;" |u32* count | ||
+ | | style="vertical-align: top;" |0x4 | ||
+ | | style="vertical-align: top;" |ES_GetNumTitles(u32 *cnt) | ||
+ | | style="vertical-align: top;" |Sets the u32 pointed to by ''count'' to the number of titles on the system under /title. | ||
+ | |- style="background-color: #eee;" | ||
+ | | style="vertical-align: top;" rowspan="2" |0x0F | ||
+ | | style="vertical-align: top;" rowspan="2" |ES_GetTitles | ||
+ | | style="vertical-align: top;" rowspan="2" |1 | ||
+ | | style="vertical-align: top;" rowspan="2" |1 | ||
+ | | style="vertical-align: top;" |u32* count | ||
+ | | style="vertical-align: top;" |0x4 | ||
+ | | style="vertical-align: top;" rowspan="2" |ES_GetTitles(u64 *titles, u32 cnt) | ||
+ | | style="vertical-align: top;" rowspan="2" |Fills out ''buffer'' with at most ''count'' 8 byte title ids of titles on the system under /title. It also update ''count'' for the number of title its copied. | ||
+ | |- style="background-color: #eee;" | ||
+ | |u64 buffer[] | ||
+ | |[count]*0x8 | ||
+ | |- | ||
+ | | style="vertical-align: top;" rowspan="2" |0x10 | ||
+ | | style="vertical-align: top;" rowspan="2" |ES_GetTitleContentsCount | ||
+ | | style="vertical-align: top;" rowspan="2" |1 | ||
+ | | style="vertical-align: top;" rowspan="2" |1 | ||
+ | | style="vertical-align: top;" |u64 title_id | ||
+ | | style="vertical-align: top;" |0x8 | ||
+ | | style="vertical-align: top;" rowspan="2" |ES_GetTitleContentsCount(u64 titleID, u32 *num) | ||
+ | | style="vertical-align: top;" rowspan="2" |Gets the number of contents from the tmd. It checks that the contents are present in the title's private content directory or linked via /shared1/content.map | ||
+ | |- | ||
+ | |u32* count | ||
+ | |0x4 | ||
+ | |- style="background-color: #eee;" | ||
+ | | style="vertical-align: top;" rowspan="3" |0x11 | ||
+ | | style="vertical-align: top;" rowspan="3" |ES_GetTitleContents | ||
+ | | style="vertical-align: top;" rowspan="3" |2 | ||
+ | | style="vertical-align: top;" rowspan="3" |1 | ||
+ | | style="vertical-align: top;" |u64 title_id | ||
+ | | style="vertical-align: top;" |0x8 | ||
+ | | style="vertical-align: top;" rowspan="3" |No | ||
+ | | style="vertical-align: top;" rowspan="3" |Fills out ''content_ids'' with the content ids from the title's tmd. It checks if the contents are present in the title's private content directory or linked via /shared1/content.map | ||
+ | |- style="background-color: #eee;" | ||
+ | |u32* count | ||
+ | |0x4 | ||
+ | |- style="background-color: #eee;" | ||
+ | |u32 content_ids[] | ||
+ | |[count]*0x4 | ||
+ | |- | ||
+ | | style="vertical-align: top;" rowspan="2" |0x12 | ||
+ | | style="vertical-align: top;" rowspan="2" |ES_GetNumTicketViews | ||
+ | | style="vertical-align: top;" rowspan="2" |1 | ||
+ | | style="vertical-align: top;" rowspan="2" |1 | ||
+ | | style="vertical-align: top;" |u64 title_id | ||
+ | | style="vertical-align: top;" |0x8 | ||
+ | | style="vertical-align: top;" rowspan="2" |ES_GetNumTicketViews(u64 titleID, u32 *cnt) | ||
+ | | style="vertical-align: top;" rowspan="2" |? | ||
+ | |- | ||
+ | |u32* count | ||
+ | |0x4 | ||
+ | |- style="background-color: #eee;" | ||
+ | | style="vertical-align: top;" rowspan="3" |0x13 | ||
+ | | style="vertical-align: top;" rowspan="3" |ES_GetTicketViews | ||
+ | | style="vertical-align: top;" rowspan="3" |2 | ||
+ | | style="vertical-align: top;" rowspan="3" |1 | ||
+ | | style="vertical-align: top;" |u64 title_id | ||
+ | | style="vertical-align: top;" |0x8 | ||
+ | | style="vertical-align: top;" rowspan="3" |ES_GetTicketViews(u64 titleID, tikview *views, u32 cnt) | ||
+ | | style="vertical-align: top;" rowspan="3" |? | ||
+ | |- style="background-color: #eee;" | ||
+ | |u32* count | ||
+ | |0x4 | ||
+ | |- style="background-color: #eee;" | ||
+ | |tikview_t ticketviews[] | ||
+ | |[count]*0xd8 | ||
+ | |- | ||
+ | | style="vertical-align: top;" rowspan="2" |0x14 | ||
+ | | style="vertical-align: top;" rowspan="2" |ES_GetTmdViewSize | ||
+ | | style="vertical-align: top;" rowspan="2" |1 | ||
+ | | style="vertical-align: top;" rowspan="2" |1 | ||
+ | | style="vertical-align: top;" |u64 title_id | ||
+ | | style="vertical-align: top;" |0x8 | ||
+ | | style="vertical-align: top;" rowspan="2" |ES_GetTMDViewSize(u64 titleID, u32 *size) | ||
+ | | style="vertical-align: top;" rowspan="2" |? | ||
+ | |- | ||
+ | |u32* count | ||
+ | |0x4 | ||
+ | |- style="background-color: #eee;" | ||
+ | | style="vertical-align: top;" rowspan="3" |0x15 | ||
+ | | style="vertical-align: top;" rowspan="3" |ES_GetTmdView | ||
+ | | style="vertical-align: top;" rowspan="3" |2 | ||
+ | | style="vertical-align: top;" rowspan="3" |1 | ||
+ | | style="vertical-align: top;" |u64 title_id | ||
+ | | style="vertical-align: top;" |0x8 | ||
+ | | style="vertical-align: top;" rowspan="3" |ES_GetTMDView(u64 titleID, u8 *data, u32 size) | ||
+ | | style="vertical-align: top;" rowspan="3" |? | ||
+ | |- style="background-color: #eee;" | ||
+ | |u32* count | ||
+ | |0x4 | ||
+ | |- style="background-color: #eee;" | ||
+ | |tmdiew_t tmdview | ||
+ | |[count] | ||
+ | |- | ||
+ | | style="vertical-align: top;"|0x16 | ||
+ | | style="vertical-align: top;"|ES_GetConsumption | ||
+ | | style="vertical-align: top;"|1 | ||
+ | | style="vertical-align: top;"|2 | ||
+ | | style="vertical-align: top;"|? | ||
+ | | style="vertical-align: top;"|? | ||
+ | | style="vertical-align: top;"|No | ||
+ | | style="vertical-align: top;"|? | ||
+ | |- | ||
+ | |- | ||
+ | | style="vertical-align: top;"|0x17 | ||
+ | | style="vertical-align: top;"|ES_DELETETITLE | ||
+ | | style="vertical-align: top;"|1 | ||
+ | | style="vertical-align: top;"|0 | ||
+ | | style="vertical-align: top;"|u64 titleID | ||
+ | | style="vertical-align: top;"|0x8 | ||
+ | | style="vertical-align: top;"|ES_DeleteTitle(u64 titleID) | ||
+ | | style="vertical-align: top;"|? | ||
+ | |- | ||
− | == | + | |- |
+ | | style="vertical-align: top;"|0x18 | ||
+ | | style="vertical-align: top;"|ES_DeleteTicket | ||
+ | | style="vertical-align: top;"|1 | ||
+ | | style="vertical-align: top;"|0 | ||
+ | | style="vertical-align: top;"|? | ||
+ | | style="vertical-align: top;"|? | ||
+ | | style="vertical-align: top;"|ES_DeleteTicket(const tikview *view) | ||
+ | | style="vertical-align: top;"|? | ||
+ | |- | ||
+ | |- | ||
+ | | style="vertical-align: top;"|0x19 | ||
+ | | style="vertical-align: top;"|ES_DIGetTmdViewSize | ||
+ | | style="vertical-align: top;"|1 | ||
+ | | style="vertical-align: top;"|0 | ||
+ | | style="vertical-align: top;"|? | ||
+ | | style="vertical-align: top;"|? | ||
+ | | style="vertical-align: top;"|No | ||
+ | | style="vertical-align: top;"|? | ||
+ | |- | ||
+ | |- | ||
+ | | style="vertical-align: top;"|0x1A | ||
+ | | style="vertical-align: top;"|ES_DIGetTmdViewSize | ||
+ | | style="vertical-align: top;"|2 | ||
+ | | style="vertical-align: top;"|1 | ||
+ | | style="vertical-align: top;"|? | ||
+ | | style="vertical-align: top;"|? | ||
+ | | style="vertical-align: top;"|No | ||
+ | | style="vertical-align: top;"|? | ||
+ | |- | ||
+ | |- | ||
+ | | style="vertical-align: top;"|0x1B | ||
+ | | style="vertical-align: top;"|ES_DiGetTicketView | ||
+ | | style="vertical-align: top;"|1 | ||
+ | | style="vertical-align: top;"|1 | ||
+ | | style="vertical-align: top;"|? | ||
+ | | style="vertical-align: top;"|? | ||
+ | | style="vertical-align: top;"|No | ||
+ | | style="vertical-align: top;"|? | ||
+ | |- | ||
+ | |- | ||
+ | | style="vertical-align: top;"|0x1C | ||
+ | | style="vertical-align: top;"|ES_DiVerify | ||
+ | | style="vertical-align: top;"|4 | ||
+ | | style="vertical-align: top;"|2 | ||
+ | | style="vertical-align: top;"|? | ||
+ | | style="vertical-align: top;"|? | ||
+ | | style="vertical-align: top;"|ES_Identify(const signed_blob *certificates, u32 certificates_size, const signed_blob *stmd, u32 tmd_size, const signed_blob *sticket, u32 ticket_size, u32 *keyid) | ||
+ | | style="vertical-align: top;"|? | ||
+ | |- | ||
+ | |- | ||
+ | | style="vertical-align: top;"|0x1D | ||
+ | | style="vertical-align: top;"|ES_GetTitleDir | ||
+ | | style="vertical-align: top;"|1 | ||
+ | | style="vertical-align: top;"|1 | ||
+ | | style="vertical-align: top;"|? | ||
+ | | style="vertical-align: top;"|? | ||
+ | | style="vertical-align: top;"|ES_GetDataDir(u64 titleID,char *filepath) | ||
+ | | style="vertical-align: top;"|? | ||
+ | |- | ||
+ | |- | ||
+ | | style="vertical-align: top;"|0x1E | ||
+ | | style="vertical-align: top;"|ES_GetDeviceCert | ||
+ | | style="vertical-align: top;"|1 | ||
+ | | style="vertical-align: top;"|0 | ||
+ | | style="vertical-align: top;"|? | ||
+ | | style="vertical-align: top;"|? | ||
+ | | style="vertical-align: top;"|ES_GetDeviceCert(u8 *outbuf) | ||
+ | | style="vertical-align: top;"|? | ||
+ | |- | ||
− | + | |- | |
+ | | style="vertical-align: top;"|0x1F | ||
+ | | style="vertical-align: top;"|ES_GetDeviceCert | ||
+ | | style="vertical-align: top;"|6 | ||
+ | | style="vertical-align: top;"|0 | ||
+ | | style="vertical-align: top;"|? | ||
+ | | style="vertical-align: top;"|? | ||
+ | | style="vertical-align: top;"|ES_ImportBoot(const signed_blob *tik, u32 tik_size,const signed_blob *tik_certs,u32 tik_certs_size,const signed_blob *tmd,u32 tmd_size,const signed_blob *tmd_certs,u32 tmd_certs_size,const u8 *content,u32 content_size) | ||
+ | | style="vertical-align: top;"|? | ||
+ | |- | ||
+ | |- | ||
+ | | style="vertical-align: top;"|0x20 | ||
+ | | style="vertical-align: top;"|ES_GetTitleId | ||
+ | | style="vertical-align: top;"|0 | ||
+ | | style="vertical-align: top;"|1 | ||
+ | | style="vertical-align: top;"|? | ||
+ | | style="vertical-align: top;"|? | ||
+ | | style="vertical-align: top;"|ES_GetTitleID(u64 *titleID) | ||
+ | | style="vertical-align: top;"|? | ||
+ | |- | ||
+ | |- | ||
+ | | style="vertical-align: top;"|0x21 | ||
+ | | style="vertical-align: top;"|ES_SetUid | ||
+ | | style="vertical-align: top;"|1 | ||
+ | | style="vertical-align: top;"|0 | ||
+ | | style="vertical-align: top;"|? | ||
+ | | style="vertical-align: top;"|? | ||
+ | | style="vertical-align: top;"|ES_SetUID(u64 uid) | ||
+ | | style="vertical-align: top;"|? | ||
+ | |- | ||
+ | | style="vertical-align: top;" |0x22 | ||
+ | | style="vertical-align: top;" |ES_DeleteTitleContent | ||
+ | | style="vertical-align: top;" |1 | ||
+ | | style="vertical-align: top;" |0 | ||
+ | | style="vertical-align: top;" |? | ||
+ | | style="vertical-align: top;" |? | ||
+ | | style="vertical-align: top;" |ES_DeleteTitleContent(u64 titleID) | ||
+ | | style="vertical-align: top;" |Deletes all files containing the substring "app" in a title's content directory (/title/xxxxxxxx/yyyyyyyy/content). | ||
+ | |- | ||
+ | | style="vertical-align: top;" |0x23 | ||
+ | | style="vertical-align: top;" |ES_SeekContent | ||
+ | | style="vertical-align: top;" |3 | ||
+ | | style="vertical-align: top;" |0 | ||
+ | | style="vertical-align: top;" |? | ||
+ | | style="vertical-align: top;" |? | ||
+ | | style="vertical-align: top;" |s32 ES_SeekContent(s32 cfd, s32 where, s32 whence) | ||
+ | | style="vertical-align: top;" |? | ||
+ | |- | ||
+ | | style="vertical-align: top;" |0x24 | ||
+ | | style="vertical-align: top;" |ES_OpenTitleContent | ||
+ | | style="vertical-align: top;" |3 | ||
+ | | style="vertical-align: top;" |0 | ||
+ | | style="vertical-align: top;" |? | ||
+ | | style="vertical-align: top;" |? | ||
+ | | style="vertical-align: top;" |s32 ES_OpenTitleContent(u64 titleID, tikview *views, u16 index) | ||
+ | | style="vertical-align: top;" |? | ||
+ | |- | ||
+ | | style="vertical-align: top;" |0x25 | ||
+ | | style="vertical-align: top;" |ES_LaunchBC | ||
+ | | style="vertical-align: top;" |0 | ||
+ | | style="vertical-align: top;" |0 | ||
+ | | style="vertical-align: top;" |? | ||
+ | | style="vertical-align: top;" |? | ||
+ | | style="vertical-align: top;" |No | ||
+ | | style="vertical-align: top;" |? | ||
+ | |- | ||
+ | | style="vertical-align: top;" |0x38 | ||
+ | | style="vertical-align: top;" |? (ES_DeleteSharedContent) | ||
+ | | style="vertical-align: top;" |1 | ||
+ | | style="vertical-align: top;" |0 | ||
+ | | style="vertical-align: top;" |u8 sha1[] | ||
+ | | style="vertical-align: top;" |0x14 | ||
+ | | style="vertical-align: top;" |? | ||
+ | | style="vertical-align: top;" |Deletes the content file from /shared1 with the given sha1 checksum. It aborts if the tmd of an essential system title references the content. It rebuilds content.map after, removing the entry for the deleted file. | ||
+ | |- | ||
+ | | style="vertical-align: top;" rowspan="2" |0x3e | ||
+ | | style="vertical-align: top;" rowspan="2" |? | ||
+ | | style="vertical-align: top;" rowspan="2" |2 | ||
+ | | style="vertical-align: top;" rowspan="2" |0 | ||
+ | | style="vertical-align: top;" |u64 title_id | ||
+ | | style="vertical-align: top;" |0x8 | ||
+ | | style="vertical-align: top;" rowspan="2" |? | ||
+ | | style="vertical-align: top;" rowspan="2" |Deletes a specific content from a title's private content directory. | ||
+ | |- | ||
+ | |u32 content_id | ||
+ | |0x4 | ||
+ | |- style="background-color: #eee;" | ||
+ | | style="vertical-align: top;"|0x3f | ||
+ | | style="vertical-align: top;"|? | ||
+ | | style="vertical-align: top;"|0 | ||
+ | | style="vertical-align: top;"|0 | ||
+ | | style="vertical-align: top;"| | ||
+ | | style="vertical-align: top;"| | ||
+ | | style="vertical-align: top;"|? | ||
+ | | style="vertical-align: top;"|returns -1017 | ||
+ | |- | ||
+ | | style="vertical-align: top;" rowspan="2" |0x40 | ||
+ | | style="vertical-align: top;" rowspan="2" |? | ||
+ | | style="vertical-align: top;" rowspan="2" |1 | ||
+ | | style="vertical-align: top;" rowspan="2" |1 | ||
+ | | style="vertical-align: top;" |tikview_t ticketview | ||
+ | | style="vertical-align: top;" |0xd8 | ||
+ | | style="vertical-align: top;" rowspan="2" |? | ||
+ | | style="vertical-align: top;" rowspan="2" |Copies the ticket associated with ''ticketview'' into ''ticket_buffer'' based on some access checks [currently unknown ticket offsets +0x1e8 to +0x1ef, +0x1f0.] | ||
+ | |- | ||
+ | |tik_t ticket_buffer | ||
+ | |0x2a4 | ||
+ | |- style="background-color: #eee;" | ||
+ | | style="vertical-align: top;"|0x45 | ||
+ | | style="vertical-align: top;"|? | ||
+ | | style="vertical-align: top;"|0 | ||
+ | | style="vertical-align: top;"|0 | ||
+ | | style="vertical-align: top;"| | ||
+ | | style="vertical-align: top;"| | ||
+ | | style="vertical-align: top;"|? | ||
+ | | style="vertical-align: top;"|Used by system menu 4.2 to check if the wii is a region changed Korean wii. returns -1017 if the keys are not found. see [[Error_003]] | ||
+ | |} | ||
− | + | == /dev/es error codes == | |
+ | {{stub}} | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Error code | ||
+ | ! POSIX equivalent | ||
+ | ! Notes | ||
+ | |- | ||
+ | | -106 | ||
+ | | ? | ||
+ | | Invalid TMD when using ES_OpenContent or <marcan> HUGHLALUGH SOMETHING FUCKED UP AND I'M NOT TELLING, or access denied | ||
+ | |- | ||
+ | | -1009 | ||
+ | | EIO | ||
+ | | Read failure (short read) | ||
+ | |- | ||
+ | | -1010 | ||
+ | | EIO | ||
+ | | Write failure (short write) | ||
+ | |- | ||
+ | | -1012 | ||
+ | | ? | ||
+ | | Invalid signature type | ||
+ | |- | ||
+ | | -1015 | ||
+ | | ? | ||
+ | | Invalid value for byte at 0x180 in ticket (valid:0,1,2) | ||
+ | |- | ||
+ | | -1017 | ||
+ | | EINVAL | ||
+ | | Wrong IN or OUT size, wrong size for a part of the vector, vector alignment problems, non-existant ioctl | ||
+ | |- | ||
+ | | -1020 | ||
+ | | ? | ||
+ | | ConsoleID mismatch | ||
+ | |- | ||
+ | | -1022 | ||
+ | | ? | ||
+ | | Content did not match hash in TMD | ||
+ | |- | ||
+ | | -1024 | ||
+ | | ENOMEM | ||
+ | | Memory allocation failure | ||
+ | |- | ||
+ | | -1026 | ||
+ | | EACCESS | ||
+ | | Incorrect access rights | ||
+ | |- | ||
+ | | -1028 | ||
+ | | ENOENT | ||
+ | | No ticket installed | ||
+ | |- | ||
+ | | -1029 | ||
+ | | ? | ||
+ | | Installed Ticket/TMD is invalid | ||
+ | |- | ||
+ | | -1035 | ||
+ | | ? | ||
+ | | Title with a higher version is already installed | ||
+ | |- | ||
+ | | -1036 | ||
+ | | ? | ||
+ | | Required sysversion(IOS) is not installed | ||
+ | |- | ||
+ | | -2008 | ||
+ | | EINVAL | ||
+ | | Invalid parameter(s) | ||
+ | |- | ||
+ | | -2011 | ||
+ | | ? | ||
+ | | Signature check failed | ||
+ | |- | ||
+ | | -2013 | ||
+ | | ? | ||
+ | | Keyring is full (contains 0x20 keys) | ||
+ | |- | ||
+ | | -2014 | ||
+ | | ? | ||
+ | | Bad hash length (!= 20) | ||
+ | |- | ||
+ | | -2016 | ||
+ | | ? | ||
+ | | unaligned data | ||
+ | |- | ||
+ | | -4100 | ||
+ | | ? | ||
+ | | Wrong Ticket-, Cert size or invalid Ticket-, Cert data | ||
+ | |} | ||
− | [[ | + | [[Category:IOS API documentation]] |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− |
Revision as of 07:00, 5 August 2012
The ES (ETicket Services) is responsible for the security of Wii, making it OUR enemy! Along with the rest of IOS, this is generally considered a "private interface" -- game developers never call any of these functions directly.
Most of these are now implemented in libogc -- see http://devkitpro.svn.sourceforge.net/viewvc/devkitpro/trunk/libogc/libogc/es.c?view=log.
Please feel free to submit patches to implement the remaining functions.
Known ES Functions
ios_ioctlv( fd, 0x01, 3, 0, vec); // ES_AddTicket(const signed_blob *stik, u32 stik_size, const signed_blob *certificates, u32 certificates_size, const signed_blob *crl, u32 crl_size) ios_ioctlv( fd, 0x02, 4, 0, vec); // ES_AddTitleStart(const signed_blob *stmd, u32 tmd_size, const signed_blob *certificates, u32 certificates_size, const signed_blob *crl, u32 crl_size) ios_ioctlv( fd, 0x03, 2, 0, vec); // ES_AddContentStart(u64 titleID, u32 cid) ios_ioctlv( fd, 0x04, 2, 0, vec); // ES_AddContentData(s32 cfd, u8 *data, u32 data_size) ios_ioctlv( fd, 0x05, 1, 0, vec); // ES_AddContentFinish(u32 cid) ios_ioctlv( fd, 0x06, 0, 0, vec); // ES_AddTitleFinish(void) ios_ioctlv( fd, 0x07, 0, 1, vec); // ES_GetDeviceID ios_ioctlvReboot(fd, 0x08, 2, 0, vec); // ES_LaunchTitle(u64 titleID, const tikview *view) ios_ioctlv( fd, 0x09, 1, 0, vec); // ES_OpenContent(u16 index) ios_ioctlv( fd, 0x0A, 1, 1, vec); // ES_ReadContent(s32 cfd, u8 *data, u32 data_size) ios_ioctlv( fd, 0x0B, 1, 0, vec); // ES_CloseContent(s32 cfd) ios_ioctlv( fd, 0x0C, 0, 1, vec); // ES_GetOwnedTitlesCount ios_ioctlv( fd, 0x0D, 1, 1, vec); // ES_GetOwnedTitles ios_ioctlv( fd, 0x0E, 0, 1, vec); // ES_GetTitlesCount ios_ioctlv( fd, 0x0F, 1, 1, vec); // ES_GetTitles ios_ioctlv( fd, 0x10, 1, 1, vec); // ES_GetTitleContentsCount ios_ioctlv( fd, 0x11, 2, 1, vec); // ES_GetTitleContent ios_ioctlv( fd, 0x12, 1, 1, vec); // ES_GetNumTicketViews(u64 titleID, u32 *cnt) ios_ioctlv( fd, 0x13, 2, 1, vec); // ES_GetTicketViews(u64 titleID, tikview *views, u32 cnt) ios_ioctlv( fd, 0x14, 1, 1, vec); // ES_GetTmdViewSize ios_ioctlv( fd, 0x15, 2, 1, vec); // ES_GetTmdView ios_ioctlv( fd, 0x16, 1, 2, vec); // ES_GetConsumption ios_ioctlv( fd, 0x17, 1, 0, vec); // ES_DeleteTitle ios_ioctlv( fd, 0x18, 1, 0, vec); // ES_DeleteTicket ios_ioctlv( fd, 0x19, 1, 1, vec); // ES_DIGetTmdViewSize( u8 *TMD, u32 *TMDViewSize ) ios_ioctlv( fd, 0x1A, 2, 1, vec); // ES_DiGetTmdView ios_ioctlv( fd, 0x1B, 1, 1, vec); // ES_DiGetTicketView ios_ioctlv( fd, 0x1C, 4, 2, vec); // ES_DiVerify ios_ioctlv( fd, 0x1D, 1, 1, vec); // ES_GetDataDir ios_ioctlv( fd, 0x1E, 0, 1, vec); // ES_GetDeviceCert(u8 *outbuf) ios_ioctlv( fd, 0x1F, 6, 0, vec); // ES_ImportBoot( const signed_blob *tik, u32 tik_size, const signed_blob *tik_certs, u32 tik_certs_size, const signed_blob *tmd, u32 tmd_size, const signed_blob *tmd_certs, u32 tmd_certs_size, const u8 *content, u32 content_size ) ios_ioctlv( fd, 0x20, 0, 1, vec); // ES_GetTitleId ios_ioctlv( fd, 0x21, 1, 0, vec); // ES_SetUid ios_ioctlv( fd, 0x22, 1, 0, vec); // ES_DeleteTitleContent(u64 titleID) - deletes all files containing 'app' in a /title/xxxxxxxx/yyyyyyyy/content ios_ioctlv( fd, 0x23, 3, 0, vec); // ES_SeekContent ios_ioctlv( fd, 0x24, 3, 0, vec); // ES_OpenTitleContent(u64 titleID, const tikview *view, u16 index) ios_ioctlv( fd, 0x25, 0, 0, vec); // ES_LaunchBC(void) ios_ioctlv( fd, 0x26, 1, 1, vec); // ES_ExportTitleInit ios_ioctlv( fd, 0x27, 2, 0, vec); // ES_ExportContentBegin ios_ioctlv( fd, 0x28, 1, 1, vec); // ES_ExportContentData ios_ioctlv( fd, 0x29, 1, 0, vec); // ES_ExportContentEnd ios_ioctlv( fd, 0x2A, 0, 0, vec); // ES_ExportTitleDone(void) ios_ioctlv( fd, 0x2B, 1, 0, vec); // ES_AddTmd ios_ioctlv( fd, 0x2C, 3, 2, vec); // ES_Encrypt(u32 keynum, u8 *iv, u8 *source, u32 size, u8 *dest) ios_ioctlv( fd, 0x2D, 3, 2, vec); // ES_Decrypt(u32 keynum, u8 *iv, u8 *source, u32 size, u8 *dest) ios_ioctlv( fd, 0x2E, 0, 1, vec); // ES_GetBoot2Version(u32 *version) ios_ioctlv( fd, 0x2F, 0, 0, vec); // ES_AddTitleCancel(void) ios_ioctlv( fd, 0x30, 1, 2, vec); // ES_Sign(u8 *source, u32 size, u8 *sig, u8 *certs) ios_ioctlv( fd, 0x31, 3, 0, vec); // ES_VerifySign // the following functions are only available in IOS28+ ios_ioctlv( fd, 0x32, 1, 1, vec); // ES_GetStoredContentCount ios_ioctlv( fd, 0x33, 2, 1, vec); // ES_GetStoredContent ios_ioctlv( fd, 0x34, 1, 1, vec); // ES_GetStoredTmdSize ios_ioctlv( fd, 0x35, 2, 1, vec); // ES_GetStoredTmd ios_ioctlv( fd, 0x36, 0, 1, vec); // ES_GetSharedContentCount ios_ioctlv( fd, 0x37, 1, 1, vec); // ES_GetSharedContents ios_ioctlv( fd, 0x38, 1, 0, vec); // ?(ES_DeleteSharedContent) ios_ioctlv( fd, 0x39, 0, 1, vec); // ES_GetDiTmdSize ios_ioctlv( fd, 0x3A, 1, 1, vec); // ES_GetDiTmd ios_ioctlv( fd, 0x3B, 4, 2, vec); // Unknown ... calls ES_DiVerify ios_ioctlv( fd, 0x3C, 2, 1, vec); // ES_SetupStreamKey ... calls ES_DiVerify(tikview,tmd,u32) ios_ioctlv( fd, 0x3D, 0, 1, vec); // ES_DeleteStreamKey ... wrapper for syscall 5c // the following functions are only available in IOS37+ but not in IOS38 ios_ioctlv( fd, 0x3E, 2, 0, vec); // Unknown ... Deletes a content from a title's private directory // the following functions are only available in IOS37v3609+ but not in IOS38 ios_ioctlv( fd, 0x3F, ?, ?, vec); // non-existant ioctl why? ... because. ios_ioctlv( fd, 0x40, 1, 1, vec); // Unknown -- takes in a ticket? // the following functions are only available in IOS56+ ios_ioctlv( fd, 0x41, 1, 1, vec); // Unknown -- retrieves a key? ios_ioctlv( fd, 0x42, 2, 0, vec); // Unknown -- something with a key? // the following functions are only available in IOS56v5405+/IOS57v5661+/IOS61v5405+/IOS70+ Please check (I thought it was a rule never add new functions existing IOS) ios_ioctlv( fd, 0x43, 1, 1, vec); // Unknown -- something with a ticket and maybe a ".tv1" file? ios_ioctlv( fd, 0x44, 2, 1, vec); // Unknown -- similar to ioctl 43 ios_ioctlv( fd, 0x45, 0, 0, vec); // Unknown ... korean-common-key check
/dev/es IOS_Ioctlv
This article is a stub. You can help WiiBrew by expanding it. |
number | name | in count | out count | vec entry target | vec entry size [bytes] | libogc prototype | Description |
---|---|---|---|---|---|---|---|
0x00 | ? | ? | ? | ? | ? | ? | returns -1017 non-existant ioctl |
0x01 | ES_AddTicket | 3 | 0 | ? | 0x2A4 | ES_AddTicket(const signed_blob *stik, u32 stik_size, const signed_blob *certificates, u32 certificates_size, const signed_blob *crl, u32 crl_size) | ? |
? | ? | ||||||
? | ? | ||||||
0x02 | ES_AddTitleStart | 4 | 0 | ? | ? | ES_AddTitleStart(const signed_blob *stmd, u32 tmd_size, const signed_blob *certificates, u32 certificates_size, const signed_blob *crl, u32 crl_size) | ? |
? | ? | ||||||
? | ? | ||||||
? | 0x1c | ||||||
0x03 | ES_AddContentStart | 2 | 0 | ? | 0x8 | ES_AddContentStart(u64 titleID, u32 cid) | ? |
? | 0x4 | ||||||
0x04 | ES_AddContentData | 2 | 0 | ? | 0x4 | ES_AddContentData(s32 cfd, u8 *data, u32 data_size) | ? |
? | ? | ||||||
0x05 | ES_AddContentFinish | 1 | 0 | ? | 0x4 | ES_AddContentFinish(u32 cid) | ? |
0x06 | ES_AddTitleFinish | 0 | 0 | ES_AddTitleFinish(void) | ? | ||
0x07 | ES_GetDeviceID | 0 | 1 | ? | 0x4 | ES_GetDeviceID(u32 *device_id) | ? |
0x08 | ES_LaunchTitle | 2 | 0 | ? | 0x8 | ES_LaunchTitleBackground(u64 titleID, const tikview *view); ES_LaunchTitle(u64 titleID, const tikview *view); | ? |
? | 0xd8 | ||||||
0x09 | ES_OpenContent | 1 | 0 | ? | 0x4 | ES_OpenContent(u16 index) | ? |
0x0A | ES_ReadContent | 1 | 1 | ? | 0x4 | ES_ReadContent(s32 cfd, u8 *data, u32 data_size) | ? |
? | ? | ||||||
0x0B | ES_CloseContent | 1 | 0 | ? | 0x4 | ES_CloseContent(s32 cfd) | ? |
0x0C | ES_GetOwnedTitlesCount | 0 | 1 | u32* count | 0x4 | ES_GetNumOwnedTitles(u32 *cnt) | ? |
0x0D | ES_GetOwnedTitles | 1 | 1 | u32* count | 0x4 | ES_GetOwnedTitles(u64 *titles, u32 cnt) | ? |
u64 titles[] | [count]*0x8 | ||||||
0x0E | ES_GetTitlesCount | 0 | 1 | u32* count | 0x4 | ES_GetNumTitles(u32 *cnt) | Sets the u32 pointed to by count to the number of titles on the system under /title. |
0x0F | ES_GetTitles | 1 | 1 | u32* count | 0x4 | ES_GetTitles(u64 *titles, u32 cnt) | Fills out buffer with at most count 8 byte title ids of titles on the system under /title. It also update count for the number of title its copied. |
u64 buffer[] | [count]*0x8 | ||||||
0x10 | ES_GetTitleContentsCount | 1 | 1 | u64 title_id | 0x8 | ES_GetTitleContentsCount(u64 titleID, u32 *num) | Gets the number of contents from the tmd. It checks that the contents are present in the title's private content directory or linked via /shared1/content.map |
u32* count | 0x4 | ||||||
0x11 | ES_GetTitleContents | 2 | 1 | u64 title_id | 0x8 | No | Fills out content_ids with the content ids from the title's tmd. It checks if the contents are present in the title's private content directory or linked via /shared1/content.map |
u32* count | 0x4 | ||||||
u32 content_ids[] | [count]*0x4 | ||||||
0x12 | ES_GetNumTicketViews | 1 | 1 | u64 title_id | 0x8 | ES_GetNumTicketViews(u64 titleID, u32 *cnt) | ? |
u32* count | 0x4 | ||||||
0x13 | ES_GetTicketViews | 2 | 1 | u64 title_id | 0x8 | ES_GetTicketViews(u64 titleID, tikview *views, u32 cnt) | ? |
u32* count | 0x4 | ||||||
tikview_t ticketviews[] | [count]*0xd8 | ||||||
0x14 | ES_GetTmdViewSize | 1 | 1 | u64 title_id | 0x8 | ES_GetTMDViewSize(u64 titleID, u32 *size) | ? |
u32* count | 0x4 | ||||||
0x15 | ES_GetTmdView | 2 | 1 | u64 title_id | 0x8 | ES_GetTMDView(u64 titleID, u8 *data, u32 size) | ? |
u32* count | 0x4 | ||||||
tmdiew_t tmdview | [count] | ||||||
0x16 | ES_GetConsumption | 1 | 2 | ? | ? | No | ? |
0x17 | ES_DELETETITLE | 1 | 0 | u64 titleID | 0x8 | ES_DeleteTitle(u64 titleID) | ? |
0x18 | ES_DeleteTicket | 1 | 0 | ? | ? | ES_DeleteTicket(const tikview *view) | ? |
0x19 | ES_DIGetTmdViewSize | 1 | 0 | ? | ? | No | ? |
0x1A | ES_DIGetTmdViewSize | 2 | 1 | ? | ? | No | ? |
0x1B | ES_DiGetTicketView | 1 | 1 | ? | ? | No | ? |
0x1C | ES_DiVerify | 4 | 2 | ? | ? | ES_Identify(const signed_blob *certificates, u32 certificates_size, const signed_blob *stmd, u32 tmd_size, const signed_blob *sticket, u32 ticket_size, u32 *keyid) | ? |
0x1D | ES_GetTitleDir | 1 | 1 | ? | ? | ES_GetDataDir(u64 titleID,char *filepath) | ? |
0x1E | ES_GetDeviceCert | 1 | 0 | ? | ? | ES_GetDeviceCert(u8 *outbuf) | ? |
0x1F | ES_GetDeviceCert | 6 | 0 | ? | ? | ES_ImportBoot(const signed_blob *tik, u32 tik_size,const signed_blob *tik_certs,u32 tik_certs_size,const signed_blob *tmd,u32 tmd_size,const signed_blob *tmd_certs,u32 tmd_certs_size,const u8 *content,u32 content_size) | ? |
0x20 | ES_GetTitleId | 0 | 1 | ? | ? | ES_GetTitleID(u64 *titleID) | ? |
0x21 | ES_SetUid | 1 | 0 | ? | ? | ES_SetUID(u64 uid) | ? |
0x22 | ES_DeleteTitleContent | 1 | 0 | ? | ? | ES_DeleteTitleContent(u64 titleID) | Deletes all files containing the substring "app" in a title's content directory (/title/xxxxxxxx/yyyyyyyy/content). |
0x23 | ES_SeekContent | 3 | 0 | ? | ? | s32 ES_SeekContent(s32 cfd, s32 where, s32 whence) | ? |
0x24 | ES_OpenTitleContent | 3 | 0 | ? | ? | s32 ES_OpenTitleContent(u64 titleID, tikview *views, u16 index) | ? |
0x25 | ES_LaunchBC | 0 | 0 | ? | ? | No | ? |
0x38 | ? (ES_DeleteSharedContent) | 1 | 0 | u8 sha1[] | 0x14 | ? | Deletes the content file from /shared1 with the given sha1 checksum. It aborts if the tmd of an essential system title references the content. It rebuilds content.map after, removing the entry for the deleted file. |
0x3e | ? | 2 | 0 | u64 title_id | 0x8 | ? | Deletes a specific content from a title's private content directory. |
u32 content_id | 0x4 | ||||||
0x3f | ? | 0 | 0 | ? | returns -1017 | ||
0x40 | ? | 1 | 1 | tikview_t ticketview | 0xd8 | ? | Copies the ticket associated with ticketview into ticket_buffer based on some access checks [currently unknown ticket offsets +0x1e8 to +0x1ef, +0x1f0.] |
tik_t ticket_buffer | 0x2a4 | ||||||
0x45 | ? | 0 | 0 | ? | Used by system menu 4.2 to check if the wii is a region changed Korean wii. returns -1017 if the keys are not found. see Error_003 |
/dev/es error codes
This article is a stub. You can help WiiBrew by expanding it. |
Error code | POSIX equivalent | Notes |
---|---|---|
-106 | ? | Invalid TMD when using ES_OpenContent or <marcan> HUGHLALUGH SOMETHING FUCKED UP AND I'M NOT TELLING, or access denied |
-1009 | EIO | Read failure (short read) |
-1010 | EIO | Write failure (short write) |
-1012 | ? | Invalid signature type |
-1015 | ? | Invalid value for byte at 0x180 in ticket (valid:0,1,2) |
-1017 | EINVAL | Wrong IN or OUT size, wrong size for a part of the vector, vector alignment problems, non-existant ioctl |
-1020 | ? | ConsoleID mismatch |
-1022 | ? | Content did not match hash in TMD |
-1024 | ENOMEM | Memory allocation failure |
-1026 | EACCESS | Incorrect access rights |
-1028 | ENOENT | No ticket installed |
-1029 | ? | Installed Ticket/TMD is invalid |
-1035 | ? | Title with a higher version is already installed |
-1036 | ? | Required sysversion(IOS) is not installed |
-2008 | EINVAL | Invalid parameter(s) |
-2011 | ? | Signature check failed |
-2013 | ? | Keyring is full (contains 0x20 keys) |
-2014 | ? | Bad hash length (!= 20) |
-2016 | ? | unaligned data |
-4100 | ? | Wrong Ticket-, Cert size or invalid Ticket-, Cert data |