utility_retcode_t rtsp_parse_response(struct rtsp_response *response) { utility_retcode_t ret; FUNC_ENTER; ret = parse_status_line(response); if (UTILITY_SUCCESS != ret) { ERRR("Failed to parse status line\n"); goto out; } ret = get_header_list(response); if (UTILITY_SUCCESS != ret) { ERRR("Failed to parse headers\n"); goto out; } /* Here we will need to parse the message body, if any. */ out: FUNC_RETURN; return ret; }
int main(int argc, char **argv) { header_keys keys; u8 rawkheaderBk[0x90]; if(argc < 2) { printf("USAGE: PrxEncrypter [prx]\n"); return 0; } memset(in_buffer, 0, sizeof(in_buffer)); memset(out_buffer, 0, sizeof(out_buffer)); memset(kirk_raw, 0, sizeof(kirk_raw)); memset(kirk_enc, 0, sizeof(kirk_enc)); memset(elf, 0, sizeof(elf)); kirk_init(); int elfSize = load_elf(argv[1]); if(elfSize < 0) { printf("Cannot open %s\n", argv[1]); return 0; } Header_List *target_header = get_header_list( elfSize ); if( target_header == NULL ) { printf("PRX SIGNER: Elf is to big\n"); return 0; } u8 *kirkHeader = target_header->kirkHeader; u8 *pspHeader = target_header->pspHeader; int krawSize = get_kirk_size(kirkHeader); if (is_compressed(pspHeader)) { elfSize = get_elf_size(pspHeader); gzip_compress(elf, elf, elfSize); } memcpy(kirk_raw, kirkHeader, 0x110); memcpy(rawkheaderBk, kirk_raw, sizeof(rawkheaderBk)); kirk_decrypt_keys((u8*)&keys, kirk_raw); memcpy(kirk_raw, &keys, sizeof(header_keys)); memcpy(kirk_raw+0x110, elf, elfSize); if(kirk_CMD0(kirk_enc, kirk_raw, sizeof(kirk_enc), 0) != 0) { printf("PRX SIGNER: Could not encrypt elf\n"); return 0; } memcpy(kirk_enc, rawkheaderBk, sizeof(rawkheaderBk)); if(kirk_forge(kirk_enc, sizeof(kirk_enc)) != 0) { printf("PRX SIGNER: Could not forge cmac block\n"); return 0; } memcpy(out_buffer, pspHeader, 0x150); memcpy(out_buffer+0x150, kirk_enc+0x110, krawSize-0x110); return dumpFile("./data.psp", out_buffer, (krawSize-0x110)+0x150); }