Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int __cdecl init_eeprom_key(int eeprom_offset_id, void *key_seed1)
- {
- int _offset_id; // r5
- int _offset_0x80_block_id; // r0
- int addr_0x320_0x80block; // r6
- int addr_0x340_0x80block; // r7
- unsigned int counter0; // r4
- unsigned int v7; // r5
- unsigned int counter1; // r4
- int status_enc_data; // [sp+0h] [bp-50h]
- unsigned __int8 *addr_0x300_0x80block; // [sp+10h] [bp-40h]
- unsigned __int8 *cmac; // [sp+14h] [bp-3Ch]
- unsigned __int8 data_buffer; // [sp+18h] [bp-38h]
- int _secondary_offset; // [sp+28h] [bp-28h]
- void *aes_ctx; // [sp+2Ch] [bp-24h]
- unsigned __int8 *derived_key1_; // [sp+30h] [bp-20h]
- unsigned __int8 *key_0x40; // [sp+34h] [bp-1Ch]
- unsigned __int8 *key_seed_data1_; // [sp+38h] [bp-18h]
- _offset_id = eeprom_offset_id;
- _secondary_offset = 0x10 * eeprom_offset_id + 0x2A0;
- _offset_0x80_block_id = eeprom_offset_id << 7;
- cmac = (unsigned __int8 *)(_offset_0x80_block_id + 0x2E0);
- addr_0x320_0x80block = _offset_0x80_block_id + 0x320;
- addr_0x340_0x80block = _offset_0x80_block_id + 0x340;
- key_seed_data1_ = (unsigned __int8 *)&key_seed_data1;
- addr_0x300_0x80block = (unsigned __int8 *)(_offset_0x80_block_id + 0x300);
- memcpy(&key_seed_data1, key_seed1, 0x10);
- key_0x40 = (unsigned __int8 *)&key_0x40buf;
- aes_ctx = &aes_ctx_30;
- derived_key1_ = (unsigned __int8 *)&derived_key1;
- if ( !get_key_from_secure_vault(0x40, &key_0x40buf, 0x10) )
- {
- aes_ebc_encrypt_init_wrapper(key_0x40, aes_ctx);
- counter0 = 0;
- v7 = _offset_id + 1;
- while ( counter0 < v7 )
- {
- aes_ecb_encrypt_wrapper(key_seed_data1_, aes_ctx);
- ++counter0;
- }
- memcpy(derived_key1_, key_seed_data1_, 0x10);
- counter1 = 0;
- do
- {
- aes_ecb_encrypt_wrapper(derived_key1_, aes_ctx);
- ++counter1;
- }
- while ( counter1 < 4 );
- memcpy(&data_buffer, sc_init_status_unk1, 0x10);
- aes_ebc_encrypt_init_wrapper(key_seed_data1_, aes_ctx);
- aes_ecb_encrypt_wrapper(&data_buffer, aes_ctx);
- if ( !write_eprom2(_secondary_offset, &data_buffer, 0x10) )
- {
- memcpy(&status_enc_data, sc_init_status_unk1, 0x10);
- aes_ebc_encrypt_init_wrapper(derived_key1_, aes_ctx);
- aes_ecb_encrypt_wrapper((unsigned __int8 *)&status_enc_data, aes_ctx);
- if ( !update_eprom_cmac((unsigned __int8 *)&status_enc_data, 0x10, key_seed_data1_, (int)cmac) )
- {
- memcpy(&status_enc_data, sc_init_status_unk2, 0x10);
- aes_ebc_encrypt_init_wrapper(derived_key1_, aes_ctx);
- aes_ecb_encrypt_wrapper((unsigned __int8 *)&status_enc_data, aes_ctx);
- if ( !update_eprom_cmac((unsigned __int8 *)&status_enc_data, 0x10, key_seed_data1_, (int)addr_0x300_0x80block) )
- {
- memcpy(&status_enc_data, sc_init_status_unk3, 0x10);
- aes_ebc_encrypt_init_wrapper(derived_key1_, aes_ctx);
- aes_ecb_encrypt_wrapper((unsigned __int8 *)&status_enc_data, aes_ctx);
- if ( !update_eprom_cmac((unsigned __int8 *)&status_enc_data, 0x10, key_seed_data1_, addr_0x320_0x80block) )
- {
- memcpy(&status_enc_data, sc_init_status_unk4, 0x10);
- aes_ebc_encrypt_init_wrapper(derived_key1_, aes_ctx);
- aes_ecb_encrypt_wrapper((unsigned __int8 *)&status_enc_data, aes_ctx);
- update_eprom_cmac((unsigned __int8 *)&status_enc_data, 0x10, key_seed_data1_, addr_0x340_0x80block);
- }
- }
- }
- }
- }
- memset_func(key_0x40, 0, 0x10);
- memset_func(key_seed_data1_, 0, 0x10);
- memset_func(derived_key1_, 0, 0x10);
- memset_func(aes_ctx, 0, 0xC0);
- memset_func(&data_buffer, 0, 0x10);
- memset_func(&status_enc_data, 0, 0x10);
- JUMPOUT(loc_700);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement