aboutsummaryrefslogtreecommitdiffstats
path: root/fw/decomp
diff options
context:
space:
mode:
authoruser <user@clank>2026-10-01 16:02:20 +0200
committeruser <user@clank>2026-10-01 16:02:20 +0200
commit59c6ce33e5358a5eb4e58ed2415bb06ca319b44f (patch)
tree828466289a6d67d4d283c295a3e48c2bc6b8e607 /fw/decomp
parenttype the formatting-state helpers the hash-name rule cannot see, using size a... (diff)
downloadamd-psp-re-59c6ce33e5358a5eb4e58ed2415bb06ca319b44f.tar.gz
amd-psp-re-59c6ce33e5358a5eb4e58ed2415bb06ca319b44f.tar.xz
amd-psp-re-59c6ce33e5358a5eb4e58ed2415bb06ca319b44f.zip
derive HDCP2's session context, correcting an intersection test I got wrong
An earlier pass examined HDCP's three heaviest handlers -- hdcp2_rx_AKE_Send_Pairing_Info, hdcp2_rx_RepeaterAuth_ReceiverID_List and hdcp2_rx_AKE_Send_Cert, 590 dereferences between them -- took their INTERSECTION, found only two offsets in common, and recorded them as three unrelated message layouts not worth a shared structure. That was the wrong test, and it is the same mistake that made asd_link_cfg come out at half its real size. Handlers over a shared context each touch a different subset of fields, so the intersection shrinks as handlers are added while the union is what actually describes the structure. They do share 0x04, 0x10, 0x18 and 0x24, and two of them share the byte run at 0x107..0x10E, which the intersection of all three hid. The union across all builds gives 56 observed offsets from 0x04 to 0x268, with each field's width taken from the accesses themselves rather than assumed: dword runs at 0x18..0x28, 0x30..0x34, 0x3C..0x48 and 0x254..0x268, byte runs at 0x4F..0x54, 0x107..0x10E and 0x225..0x234, halfwords at 0x192..0x198, and single flag bytes at 0x2D, 0x38 and 0x24D. Unobserved spans are declared as padding rather than invented as fields, and the declaration is generated programmatically so the run arithmetic closes at 0x26C by construction instead of by hand. CAVEAT recorded in the declaration: 0x26C is the extent observed, not a bound the firmware checks, and the padding runs are genuinely unknown rather than known-unused -- precisely the situation that understated asd_link_cfg, so a richer build may extend this too. Two pieces of plumbing were ASD-specific and are now generic, since HDCP is the second module to need them: load_type_decls already read <TA>_INTERNAL_DECLS, so the structure is declared under that name, and the name-keyed arg1 map is now looked up per module through ARG1_BY_TA instead of being hardcoded to ASD. The gate for that block silently failed to be rewritten on the first attempt and was left as 'if ta == "asd"', which is why the typing did not fire until it was checked rather than assumed. Applied, the handlers read a1->field225, a1->field18, a1->field107 and so on, 3 of 3 functions on most builds. Measured across fw/decomp: typed field accesses 10789 -> 11436, raw pointer-arithmetic dereferences 9323 -> 8733, field share 53.6% -> 56.7%, struct-typed signatures 6.0% -> 6.2%.
Diffstat (limited to 'fw/decomp')
-rw-r--r--fw/decomp/hdcp.summary.json14
-rw-r--r--fw/decomp/hdcp_23.0.0.52_c6b25da3.c262
-rw-r--r--fw/decomp/hdcp_23.0.0.57_94971234.c282
-rw-r--r--fw/decomp/hdcp_23.0.0.59_520f9e97.c282
-rw-r--r--fw/decomp/hdcp_23.0.4.49_0478f2fb.c136
-rw-r--r--fw/decomp/hdcp_23.0.4.49_543e8a45.c136
-rw-r--r--fw/decomp/hdcp_23.0.8.49_40cdde34.c136
-rw-r--r--fw/decomp/hdcp_reference_hdcp2.c551
8 files changed, 890 insertions, 909 deletions
diff --git a/fw/decomp/hdcp.summary.json b/fw/decomp/hdcp.summary.json
index b01ee95..21dba8f 100644
--- a/fw/decomp/hdcp.summary.json
+++ b/fw/decomp/hdcp.summary.json
@@ -36,7 +36,7 @@
"types": 1,
"protos": 99,
"comments": 622,
- "struct_typed_sigs": 0
+ "struct_typed_sigs": 3
},
"decomp_fail": 0
},
@@ -77,7 +77,7 @@
"types": 1,
"protos": 53,
"comments": 16,
- "struct_typed_sigs": 0
+ "struct_typed_sigs": 3
},
"decomp_fail": 0
},
@@ -118,7 +118,7 @@
"types": 1,
"protos": 56,
"comments": 18,
- "struct_typed_sigs": 0
+ "struct_typed_sigs": 3
},
"decomp_fail": 0
},
@@ -159,7 +159,7 @@
"types": 1,
"protos": 57,
"comments": 19,
- "struct_typed_sigs": 0
+ "struct_typed_sigs": 3
},
"decomp_fail": 0
},
@@ -200,7 +200,7 @@
"types": 1,
"protos": 53,
"comments": 16,
- "struct_typed_sigs": 0
+ "struct_typed_sigs": 2
},
"decomp_fail": 0
},
@@ -241,7 +241,7 @@
"types": 1,
"protos": 53,
"comments": 16,
- "struct_typed_sigs": 0
+ "struct_typed_sigs": 2
},
"decomp_fail": 0
},
@@ -282,7 +282,7 @@
"types": 1,
"protos": 52,
"comments": 16,
- "struct_typed_sigs": 0
+ "struct_typed_sigs": 2
},
"decomp_fail": 0
}
diff --git a/fw/decomp/hdcp_23.0.0.52_c6b25da3.c b/fw/decomp/hdcp_23.0.0.52_c6b25da3.c
index 04fc8f2..a381b52 100644
--- a/fw/decomp/hdcp_23.0.0.52_c6b25da3.c
+++ b/fw/decomp/hdcp_23.0.0.52_c6b25da3.c
@@ -1070,7 +1070,7 @@ int __fastcall hdcp2_process_rx_message(int a1, int *a2, unsigned __int8 *a3, un
}
/* ==== hdcp2_rx_AKE_Send_Cert [tier=MNEM size=464] ==== */
-int __fastcall hdcp2_rx_AKE_Send_Cert(int a1, unsigned __int8 *a2, int a3, int *a4)
+int __fastcall hdcp2_rx_AKE_Send_Cert(struct hdcp2_session *a1, unsigned __int8 *a2, int a3, int *a4)
{
int *v4; // r4
unsigned __int8 *v5; // r6
@@ -1089,7 +1089,7 @@ int __fastcall hdcp2_rx_AKE_Send_Cert(int a1, unsigned __int8 *a2, int a3, int *
char v19[159]; // [sp+Dh] [bp-A3h] BYREF
int v20; // [sp+ACh] [bp-4h]
- v7 = a1 == 0;
+ v7 = a1 == nullptr;
v20 = dword_4045E8;
result = 1;
if ( !v7 )
@@ -1101,7 +1101,7 @@ int __fastcall hdcp2_rx_AKE_Send_Cert(int a1, unsigned __int8 *a2, int a3, int *
if ( a4 != nullptr )
{
*a4 = 100;
- if ( *(_DWORD *)(a1 + 16) == 6 )
+ if ( a1->field10 == 6 )
{
if ( a3 == 523 )
{
@@ -1111,12 +1111,12 @@ int __fastcall hdcp2_rx_AKE_Send_Cert(int a1, unsigned __int8 *a2, int a3, int *
LABEL_8:
if ( ((int (__fastcall *)(unsigned __int8 *, int))loc_4043E8)(a1: v5, a2: 522) == 0 )
goto LABEL_18;
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v9 = 103;
goto LABEL_15;
}
LABEL_7:
- *(_BYTE *)(a1 + 45) = 1;
+ a1->field2D = 1;
goto LABEL_8;
}
}
@@ -1124,7 +1124,7 @@ LABEL_7:
{
if ( a2[530] == 2 )
{
- *(_DWORD *)(a1 + 36) = 22;
+ a1->field18[3] = 22;
v10 = a2[526];
v11 = a2[522];
v12 = a2[528];
@@ -1132,27 +1132,27 @@ LABEL_7:
v14 = a2[525];
v15 = a2[529];
v16 = a2[523];
- *(_BYTE *)(a1 + 268) = a2[527];
- *(_BYTE *)(a1 + 264) = v16;
- *(_BYTE *)(a1 + 267) = v10;
- *(_BYTE *)(a1 + 269) = v12;
- *(_BYTE *)(a1 + 270) = v15;
- *(_BYTE *)(a1 + 263) = v11;
- *(_BYTE *)(a1 + 265) = v13;
- *(_BYTE *)(a1 + 266) = v14;
+ a1->field107[5] = a2[527];
+ a1->field107[1] = v16;
+ a1->field107[4] = v10;
+ a1->field107[6] = v12;
+ a1->field107[7] = v15;
+ a1->field107[0] = v11;
+ a1->field107[2] = v13;
+ a1->field107[3] = v14;
sub_401058();
if ( v5[532] << 31 == 0 )
goto LABEL_8;
goto LABEL_7;
}
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v9 = 104;
LABEL_15:
*v4 = v9;
result = 0;
goto LABEL_16;
}
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v9 = 109;
goto LABEL_15;
}
@@ -1166,16 +1166,16 @@ LABEL_18:
sub_401058();
sub_401058();
sub_401058();
- *(_BYTE *)(a1 + 84) = v5[136] >> 4;
+ a1->field4F[5] = v5[136] >> 4;
if ( sub_401A8A() != 0 )
goto LABEL_21;
if ( sub_401B02() != 0 )
{
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
*v4 = 112;
goto LABEL_21;
}
- if ( *(_DWORD *)(a1 + 616) != 0 && sub_401A50() != 0 )
+ if ( a1->field254[5] != 0 && sub_401A50() != 0 )
goto LABEL_21;
bzero(result: v19, a2: 0x9Bu);
v17 = sub_401988();
@@ -1184,7 +1184,7 @@ LABEL_18:
if ( v17 == 23 )
{
v18 = 112;
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
result = 17;
goto LABEL_31;
}
@@ -1193,8 +1193,8 @@ LABEL_21:
}
else
{
- if ( receiver_id_lookup(a1) == 0 )
- *(_DWORD *)(a1 + 40) = 1;
+ if ( receiver_id_lookup((int)a1) == 0 )
+ a1->field18[4] = 1;
v18 = 0;
result = 0;
LABEL_31:
@@ -1384,76 +1384,76 @@ LABEL_6:
}
/* ==== hdcp2_rx_AKE_Send_Pairing_Info [tier=MNEM size=208] ==== */
-int __fastcall hdcp2_rx_AKE_Send_Pairing_Info(int a1, int *a2, int a3, int *a4)
+int __fastcall hdcp2_rx_AKE_Send_Pairing_Info(struct hdcp2_session *a1, int *a2, int a3, int *a4)
{
int result; // r0
- __int16 v7; // r7
+ unsigned __int16 v7; // r7
unsigned int v8; // r3
- __int16 v9; // r12
- __int16 v10; // lr
+ unsigned __int16 v9; // r12
+ unsigned __int16 v10; // lr
unsigned int v11; // r6
unsigned int v12; // r3
- char v13; // r12
- char v14; // r4
- char v15; // r7
- char v16; // r6
- char v17; // r2
+ unsigned __int8 v13; // r12
+ unsigned __int8 v14; // r4
+ unsigned __int8 v15; // r7
+ unsigned __int8 v16; // r6
+ unsigned __int8 v17; // r2
int v18; // r0
result = 1;
- if ( a1 != 0 && a2 != nullptr && a4 != nullptr )
+ if ( a1 != nullptr && a2 != nullptr && a4 != nullptr )
{
if ( a3 == 16 )
{
*a4 = 100;
- v7 = *(_WORD *)(a1 + 406);
- v8 = *(unsigned __int16 *)(a1 + 408);
- v9 = *(_WORD *)(a1 + 404);
- *(_BYTE *)(a1 + 553) = v7;
- v10 = *(_WORD *)(a1 + 402);
+ v7 = a1->field192[2];
+ v8 = a1->field192[3];
+ v9 = a1->field192[1];
+ a1->field225[4] = v7;
+ v10 = a1->field192[0];
v11 = v8 >> 8;
- *(_BYTE *)(a1 + 555) = v8;
- *(_BYTE *)(a1 + 554) = HIBYTE(v7);
- *(_BYTE *)(a1 + 552) = HIBYTE(v9);
- *(_BYTE *)(a1 + 550) = HIBYTE(v10);
- v12 = *(_DWORD *)(a1 + 36);
- *(_BYTE *)(a1 + 551) = v9;
- *(_BYTE *)(a1 + 549) = v10;
- *(_BYTE *)(a1 + 556) = v11;
+ a1->field225[6] = v8;
+ a1->field225[5] = HIBYTE(v7);
+ a1->field225[3] = HIBYTE(v9);
+ a1->field225[1] = HIBYTE(v10);
+ v12 = a1->field18[3];
+ a1->field225[2] = v9;
+ a1->field225[0] = v10;
+ a1->field225[7] = v11;
if ( v12 < 0x16 )
{
- *(_BYTE *)(a1 + 557) = 0;
- *(_BYTE *)(a1 + 561) = 0;
- *(_BYTE *)(a1 + 564) = 0;
- *(_BYTE *)(a1 + 563) = 0;
- *(_BYTE *)(a1 + 562) = 0;
- *(_BYTE *)(a1 + 560) = 0;
- *(_BYTE *)(a1 + 559) = 0;
- *(_BYTE *)(a1 + 558) = 0;
+ a1->field225[8] = 0;
+ a1->field225[12] = 0;
+ a1->field225[15] = 0;
+ a1->field225[14] = 0;
+ a1->field225[13] = 0;
+ a1->field225[11] = 0;
+ a1->field225[10] = 0;
+ a1->field225[9] = 0;
}
else
{
- v13 = *(_BYTE *)(a1 + 264);
- *(_BYTE *)(a1 + 561) = *(_BYTE *)(a1 + 267);
- *(_BYTE *)(a1 + 557) = *(_BYTE *)(a1 + 263);
- v14 = *(_BYTE *)(a1 + 269);
- v15 = *(_BYTE *)(a1 + 265);
- v16 = *(_BYTE *)(a1 + 266);
- v17 = *(_BYTE *)(a1 + 268);
- *(_BYTE *)(a1 + 564) = *(_BYTE *)(a1 + 270);
- *(_BYTE *)(a1 + 563) = v14;
- *(_BYTE *)(a1 + 562) = v17;
- *(_BYTE *)(a1 + 560) = v16;
- *(_BYTE *)(a1 + 559) = v15;
- *(_BYTE *)(a1 + 558) = v13;
+ v13 = a1->field107[1];
+ a1->field225[12] = a1->field107[4];
+ a1->field225[8] = a1->field107[0];
+ v14 = a1->field107[6];
+ v15 = a1->field107[2];
+ v16 = a1->field107[3];
+ v17 = a1->field107[5];
+ a1->field225[15] = a1->field107[7];
+ a1->field225[14] = v14;
+ a1->field225[13] = v17;
+ a1->field225[11] = v16;
+ a1->field225[10] = v15;
+ a1->field225[9] = v13;
}
sub_401058();
- stream_slot_alloc(a1);
+ stream_slot_alloc((int)a1);
v18 = 0;
}
else
{
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v18 = 109;
}
*a4 = v18;
@@ -1613,34 +1613,34 @@ LABEL_14:
}
/* ==== hdcp2_rx_RepeaterAuth_ReceiverID_List [tier=MNEM size=1032] ==== */
-int __fastcall hdcp2_rx_RepeaterAuth_ReceiverID_List(int a1, char *a2, unsigned int a3, int *a4)
+int __fastcall hdcp2_rx_RepeaterAuth_ReceiverID_List(struct hdcp2_session *a1, char *a2, unsigned int a3, int *a4)
{
int *v4; // r11
int v9; // r3
int result; // r0
- int v11; // r8
- int v12; // r10
+ unsigned int v11; // r8
+ unsigned int v12; // r10
int v13; // r9
unsigned int v14; // r0
bool v15; // zf
int v16; // r0
unsigned int v17; // r0
- int v18; // r1
- int v19; // r8
+ unsigned int v18; // r1
+ int field38; // r8
int v20; // r7
__int64 v21; // r2
char *v22; // r0
- int v23; // r1
+ unsigned int v23; // r1
unsigned int v24; // r8
int v25; // r7
unsigned int v26; // r1
int v27; // r0
int v28; // r1
- int v29; // r2
+ unsigned int v29; // r2
int v30; // r1
char *v31; // r1
- int v32; // r3
- int v33; // r7
+ unsigned int v32; // r3
+ unsigned int v33; // r7
unsigned int i; // r7
unsigned __int8 *v35; // r1
int v36; // r0
@@ -1669,19 +1669,19 @@ int __fastcall hdcp2_rx_RepeaterAuth_ReceiverID_List(int a1, char *a2, unsigned
v47 = 0;
bzero_core(result: v53, a2: 0x10Cu);
result = 1;
- if ( a1 == 0 || a2 == nullptr || a4 == nullptr )
+ if ( a1 == nullptr || a2 == nullptr || a4 == nullptr )
goto LABEL_33;
*a4 = 100;
- if ( *(_BYTE *)(a1 + 589) != 0 )
+ if ( a1->field24D != 0 )
{
if ( sub_4019BC() != 0 )
{
result = 20;
goto LABEL_33;
}
- *(_BYTE *)(a1 + 589) = 0;
+ a1->field24D = 0;
}
- if ( *(_DWORD *)(a1 + 16) != 6 )
+ if ( a1->field10 != 6 )
{
if ( a3 == 176 )
{
@@ -1690,13 +1690,13 @@ int __fastcall hdcp2_rx_RepeaterAuth_ReceiverID_List(int a1, char *a2, unsigned
buffer_copy_bounded(a1: (int *)a2, a2: (int)&v47, a3: 2u, a4: v9);
v14 = v47;
v11 = (v47 & 8) != 0;
- *(_DWORD *)(a1 + 52) = v11;
- *(_DWORD *)(a1 + 68) = (v14 & 2) != 0;
- *(_DWORD *)(a1 + 64) = v14 & 1;
- *(_DWORD *)(a1 + 60) = (v14 >> 9) & 7;
- *(_BYTE *)(a1 + 56) = (v14 >> 4) & 0x1F;
+ a1->field30[1] = v11;
+ a1->field3C[2] = (v14 & 2) != 0;
+ a1->field3C[1] = v14 & 1;
+ a1->field3C[0] = (v14 >> 9) & 7;
+ a1->field38 = (v14 >> 4) & 0x1F;
v12 = (v14 & 4) != 0;
- *(_DWORD *)(a1 + 48) = v12;
+ a1->field30[0] = v12;
v43 = (unsigned __int8)a2[2];
v45 = (unsigned __int8)a2[3];
v44 = (unsigned __int8)a2[4];
@@ -1708,22 +1708,22 @@ int __fastcall hdcp2_rx_RepeaterAuth_ReceiverID_List(int a1, char *a2, unsigned
}
goto LABEL_27;
}
- if ( *(_DWORD *)(a1 + 36) != 20 )
+ if ( a1->field18[3] != 20 )
{
if ( a3 <= 1 )
goto LABEL_27;
v11 = (unsigned __int8)a2[1];
- *(_DWORD *)(a1 + 52) = v11;
+ a1->field30[1] = v11;
v12 = (unsigned __int8)*a2;
- *(_DWORD *)(a1 + 48) = v12;
- *(_BYTE *)(a1 + 56) = a2[2];
- *(_DWORD *)(a1 + 60) = (unsigned __int8)a2[3];
- *(_DWORD *)(a1 + 64) = (unsigned __int8)a2[5];
- *(_DWORD *)(a1 + 68) = (unsigned __int8)a2[4];
+ a1->field30[0] = v12;
+ a1->field38 = a2[2];
+ a1->field3C[0] = (unsigned __int8)a2[3];
+ a1->field3C[1] = (unsigned __int8)a2[5];
+ a1->field3C[2] = (unsigned __int8)a2[4];
if ( a2[1] != 0 || *a2 != 0 )
{
LABEL_30:
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v16 = 107;
goto LABEL_31;
}
@@ -1740,25 +1740,25 @@ LABEL_30:
goto LABEL_17;
}
LABEL_27:
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v16 = 109;
goto LABEL_31;
}
if ( a3 <= 1 )
goto LABEL_27;
v11 = (unsigned __int8)a2[1];
- *(_DWORD *)(a1 + 52) = v11;
+ a1->field30[1] = v11;
v12 = (unsigned __int8)*a2;
- *(_DWORD *)(a1 + 48) = v12;
- *(_BYTE *)(a1 + 56) = a2[2];
- *(_DWORD *)(a1 + 60) = (unsigned __int8)a2[3];
+ a1->field30[0] = v12;
+ a1->field38 = a2[2];
+ a1->field3C[0] = (unsigned __int8)a2[3];
if ( a2[1] != 0 || *a2 != 0 )
goto LABEL_30;
if ( 5 * (unsigned __int8)a2[2] + 36 != a3 )
goto LABEL_27;
a3 = 0;
v42 = 32;
- *(_DWORD *)(a1 + 72) = 0;
+ a1->field3C[3] = 0;
sub_401058();
sub_401058();
v41 = 0;
@@ -1771,11 +1771,11 @@ LABEL_17:
v15 = v12 == 0;
if ( !v15 )
goto LABEL_30;
- if ( *(_DWORD *)(a1 + 64) == 0 && *(_DWORD *)(a1 + 68) == 0 )
+ if ( a1->field3C[1] == 0 && a1->field3C[2] == 0 )
goto LABEL_35;
- if ( (unsigned int)(*(_DWORD *)(a1 + 28) - 1) > 1 )
+ if ( a1->field18[1] - 1 > 1 )
goto LABEL_35;
- *(_DWORD *)(a1 + 32) = 0;
+ a1->field18[2] = 0;
if ( sub_401A6E() == 0 )
goto LABEL_35;
LABEL_25:
@@ -1786,10 +1786,10 @@ LABEL_33:
((void (__fastcall *)(int, int))loc_4045EC)(a1: result, a2: *v4 - v55);
LABEL_35:
v17 = v43 | (v45 << 8) | (v44 << 16);
- v18 = *(_DWORD *)(a1 + 72);
- if ( v17 != 0 && v18 == 0 || v18 == 1 && v17 < *(_DWORD *)(a1 + 596) )
+ v18 = a1->field3C[3];
+ if ( v17 != 0 && v18 == 0 || v18 == 1 && v17 < a1->field254[0] )
{
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v16 = 108;
LABEL_31:
*a4 = v16;
@@ -1798,19 +1798,19 @@ LABEL_32:
}
else
{
- v19 = *(unsigned __int8 *)(a1 + 56);
- *(_DWORD *)(a1 + 596) = v17;
- *(_DWORD *)(a1 + 72) = 1;
- v20 = 5 * v19;
+ field38 = a1->field38;
+ a1->field254[0] = v17;
+ a1->field3C[3] = 1;
+ v20 = 5 * field38;
sub_401058();
- if ( *(_DWORD *)(a1 + 16) == 6 )
+ if ( a1->field10 == 6 )
{
- v21 = *(_QWORD *)(a1 + 48);
- *((_BYTE *)v53 + 5 * v19) = *(_DWORD *)(a1 + 60);
+ v21 = *(_QWORD *)a1->field30;
+ *((_BYTE *)v53 + 5 * field38) = a1->field3C[0];
v22 = (char *)v53 + v20;
- v23 = *(_DWORD *)(a1 + 36);
+ v23 = a1->field18[3];
v22[2] = BYTE4(v21);
- v22[1] = v19;
+ v22[1] = field38;
v22[3] = v21;
if ( v23 == 20 )
{
@@ -1819,9 +1819,9 @@ LABEL_32:
v25 = v20 + 4;
goto LABEL_48;
}
- v29 = *(_DWORD *)(a1 + 68);
+ v29 = a1->field3C[2];
a3 = (unsigned int)v53;
- v22[5] = *(_QWORD *)(a1 + 64);
+ v22[5] = *(_QWORD *)&a1->field3C[1];
v27 = 9;
*((_BYTE *)&v53[1] + v20) = v29;
v28 = 6;
@@ -1854,7 +1854,7 @@ LABEL_48:
a4: &v46,
a5: 32) != 0 )
{
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
*a4 = 106;
bzero_core(result: v51, a2: 0x20u);
bzero_core(result: v53, a2: 0x10Cu);
@@ -1865,16 +1865,16 @@ LABEL_48:
v32 = v51[5];
a3 = v51[6];
v33 = v51[7];
- *(_DWORD *)(a1 + 600) = v51[4];
- *(_DWORD *)(a1 + 604) = v32;
- *(_DWORD *)(a1 + 608) = a3;
- *(_DWORD *)(a1 + 612) = v33;
+ a1->field254[1] = v51[4];
+ a1->field254[2] = v32;
+ a1->field254[3] = a3;
+ a1->field254[4] = v33;
}
bzero_core(result: v51, a2: 0x20u);
bzero_core(result: v53, a2: 0x10Cu);
- for ( i = 0; i < *(unsigned __int8 *)(a1 + 56); ++i )
+ for ( i = 0; i < a1->field38; ++i )
{
- v35 = (unsigned __int8 *)(a1 + 85 + 5 * i);
+ v35 = &a1->pad55[5 * i];
v36 = *v35;
a3 = v35[3];
v37 = v35[1];
@@ -1887,18 +1887,16 @@ LABEL_48:
if ( sub_401A50() != 0 )
goto LABEL_25;
bzero(result: v50, a2: 0x9Bu);
- v39 = *(unsigned __int8 *)(a1 + 79);
- v49 = *(_BYTE *)(a1 + 83);
- v48 = v39
- | (*(unsigned __int8 *)(a1 + 80) << 8)
- | ((*(unsigned __int8 *)(a1 + 81) | (*(unsigned __int8 *)(a1 + 82) << 8)) << 16);
+ v39 = a1->field4F[0];
+ v49 = a1->field4F[4];
+ v48 = v39 | (a1->field4F[1] << 8) | ((a1->field4F[2] | (a1->field4F[3] << 8)) << 16);
v40 = sub_401988();
- if ( v40 != 0 || (a3 = *(unsigned __int8 *)(a1 + 56), sub_401058(), (v40 = sub_401988()) != 0) )
+ if ( v40 != 0 || (a3 = a1->field38, sub_401058(), (v40 = sub_401988()) != 0) )
{
if ( v40 != 23 )
goto LABEL_25;
LABEL_60:
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
*a4 = 112;
goto LABEL_25;
}
diff --git a/fw/decomp/hdcp_23.0.0.57_94971234.c b/fw/decomp/hdcp_23.0.0.57_94971234.c
index 8ded7d9..658ad7a 100644
--- a/fw/decomp/hdcp_23.0.0.57_94971234.c
+++ b/fw/decomp/hdcp_23.0.0.57_94971234.c
@@ -1213,7 +1213,7 @@ int __fastcall hdcp2_process_rx_message(int a1, int *a2, unsigned __int8 *a3, un
}
/* ==== hdcp2_rx_AKE_Send_Cert [tier=MNEM size=464] ==== */
-int __fastcall hdcp2_rx_AKE_Send_Cert(int a1, unsigned __int8 *a2, int a3, int *a4)
+int __fastcall hdcp2_rx_AKE_Send_Cert(struct hdcp2_session *a1, unsigned __int8 *a2, int a3, int *a4)
{
int *v4; // r4
unsigned __int8 *v5; // r6
@@ -1241,7 +1241,7 @@ int __fastcall hdcp2_rx_AKE_Send_Cert(int a1, unsigned __int8 *a2, int a3, int *
char v28[159]; // [sp+Dh] [bp-A3h] BYREF
int v29; // [sp+ACh] [bp-4h]
- v8 = a1 == 0;
+ v8 = a1 == nullptr;
v29 = dword_4041F8;
result = 1;
if ( !v8 )
@@ -1253,7 +1253,7 @@ int __fastcall hdcp2_rx_AKE_Send_Cert(int a1, unsigned __int8 *a2, int a3, int *
if ( a4 != nullptr )
{
*a4 = 100;
- if ( *(_DWORD *)(a1 + 16) == 6 )
+ if ( a1->field10 == 6 )
{
if ( a3 == 523 )
{
@@ -1264,12 +1264,12 @@ int __fastcall hdcp2_rx_AKE_Send_Cert(int a1, unsigned __int8 *a2, int a3, int *
LABEL_8:
if ( ((int (__fastcall *)(unsigned __int8 *, int))loc_403FDC)(a1: v5, a2: 522) == 0 )
goto LABEL_18;
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v10 = 103;
goto LABEL_15;
}
LABEL_7:
- *(_BYTE *)(a1 + 45) = 1;
+ a1->field2D = 1;
v6 = 2;
goto LABEL_8;
}
@@ -1278,7 +1278,7 @@ LABEL_7:
{
if ( a2[530] == 2 )
{
- *(_DWORD *)(a1 + 36) = 22;
+ a1->field18[3] = 22;
v11 = a2[526];
v12 = a2[522];
v13 = a2[528];
@@ -1286,28 +1286,28 @@ LABEL_7:
v15 = a2[525];
v16 = a2[529];
v17 = a2[523];
- *(_BYTE *)(a1 + 268) = a2[527];
- *(_BYTE *)(a1 + 264) = v17;
- *(_BYTE *)(a1 + 267) = v11;
- *(_BYTE *)(a1 + 269) = v13;
- *(_BYTE *)(a1 + 270) = v16;
- *(_BYTE *)(a1 + 263) = v12;
- *(_BYTE *)(a1 + 265) = v14;
- *(_BYTE *)(a1 + 266) = v15;
+ a1->field107[5] = a2[527];
+ a1->field107[1] = v17;
+ a1->field107[4] = v11;
+ a1->field107[6] = v13;
+ a1->field107[7] = v16;
+ a1->field107[0] = v12;
+ a1->field107[2] = v14;
+ a1->field107[3] = v15;
sub_401058();
v6 = 1;
if ( v5[532] << 31 == 0 )
goto LABEL_8;
goto LABEL_7;
}
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v10 = 104;
LABEL_15:
*v4 = v10;
result = 0;
goto LABEL_16;
}
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v10 = 109;
goto LABEL_15;
}
@@ -1321,8 +1321,8 @@ LABEL_18:
sub_401058();
sub_401058();
sub_401058();
- *(_BYTE *)(a1 + 84) = v5[136] >> 4;
- if ( sub_40454C(a1: *(_DWORD *)(a1 + 4), a2: v6) != 0 )
+ a1->field4F[5] = v5[136] >> 4;
+ if ( sub_40454C(a1: a1->field04, a2: v6) != 0 )
goto LABEL_21;
v18 = v5[1];
v19 = v5[2] | (v5[3] << 8);
@@ -1330,25 +1330,25 @@ LABEL_18:
v24 = *v5 | (v18 << 8) | (v19 << 16);
if ( sub_4045DE(a1: &v24) != 0 )
{
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
*v4 = 112;
goto LABEL_21;
}
- v6 = a1 + 616;
- if ( *(_DWORD *)(a1 + 616) != 0 && sub_40450A(a1: a1 + 616) != 0 )
+ v6 = (int)&a1->field254[5];
+ if ( a1->field254[5] != 0 && sub_40450A(a1: &a1->field254[5]) != 0 )
goto LABEL_21;
bzero(result: v28, a2: 0x9Bu);
v20 = v5[1];
v21 = v5[2] | (v5[3] << 8);
v27 = v5[4];
v26 = *v5 | (v20 << 8) | (v21 << 16);
- v22 = sub_404438(a1: *(_DWORD *)(a1 + 4), a2: &v26, a3: 1, a4: a1 + 616);
+ v22 = sub_404438(a1: a1->field04, a2: &v26, a3: 1, a4: &a1->field254[5]);
if ( v22 != 0 )
{
if ( v22 == 23 )
{
v23 = 112;
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
result = 17;
goto LABEL_31;
}
@@ -1357,8 +1357,8 @@ LABEL_21:
}
else
{
- if ( receiver_id_lookup(a1) == 0 )
- *(_DWORD *)(a1 + 40) = 1;
+ if ( receiver_id_lookup((int)a1) == 0 )
+ a1->field18[4] = 1;
v23 = 0;
result = 0;
LABEL_31:
@@ -1548,76 +1548,76 @@ LABEL_6:
}
/* ==== hdcp2_rx_AKE_Send_Pairing_Info [tier=MNEM size=208] ==== */
-int __fastcall hdcp2_rx_AKE_Send_Pairing_Info(int a1, int *a2, int a3, int *a4)
+int __fastcall hdcp2_rx_AKE_Send_Pairing_Info(struct hdcp2_session *a1, int *a2, int a3, int *a4)
{
int result; // r0
- __int16 v7; // r7
+ unsigned __int16 v7; // r7
unsigned int v8; // r3
- __int16 v9; // r12
- __int16 v10; // lr
+ unsigned __int16 v9; // r12
+ unsigned __int16 v10; // lr
unsigned int v11; // r6
unsigned int v12; // r3
- char v13; // r12
- char v14; // r4
- char v15; // r7
- char v16; // r6
- char v17; // r2
+ unsigned __int8 v13; // r12
+ unsigned __int8 v14; // r4
+ unsigned __int8 v15; // r7
+ unsigned __int8 v16; // r6
+ unsigned __int8 v17; // r2
int v18; // r0
result = 1;
- if ( a1 != 0 && a2 != nullptr && a4 != nullptr )
+ if ( a1 != nullptr && a2 != nullptr && a4 != nullptr )
{
if ( a3 == 16 )
{
*a4 = 100;
- v7 = *(_WORD *)(a1 + 406);
- v8 = *(unsigned __int16 *)(a1 + 408);
- v9 = *(_WORD *)(a1 + 404);
- *(_BYTE *)(a1 + 553) = v7;
- v10 = *(_WORD *)(a1 + 402);
+ v7 = a1->field192[2];
+ v8 = a1->field192[3];
+ v9 = a1->field192[1];
+ a1->field225[4] = v7;
+ v10 = a1->field192[0];
v11 = v8 >> 8;
- *(_BYTE *)(a1 + 555) = v8;
- *(_BYTE *)(a1 + 554) = HIBYTE(v7);
- *(_BYTE *)(a1 + 552) = HIBYTE(v9);
- *(_BYTE *)(a1 + 550) = HIBYTE(v10);
- v12 = *(_DWORD *)(a1 + 36);
- *(_BYTE *)(a1 + 551) = v9;
- *(_BYTE *)(a1 + 549) = v10;
- *(_BYTE *)(a1 + 556) = v11;
+ a1->field225[6] = v8;
+ a1->field225[5] = HIBYTE(v7);
+ a1->field225[3] = HIBYTE(v9);
+ a1->field225[1] = HIBYTE(v10);
+ v12 = a1->field18[3];
+ a1->field225[2] = v9;
+ a1->field225[0] = v10;
+ a1->field225[7] = v11;
if ( v12 < 0x16 )
{
- *(_BYTE *)(a1 + 557) = 0;
- *(_BYTE *)(a1 + 561) = 0;
- *(_BYTE *)(a1 + 564) = 0;
- *(_BYTE *)(a1 + 563) = 0;
- *(_BYTE *)(a1 + 562) = 0;
- *(_BYTE *)(a1 + 560) = 0;
- *(_BYTE *)(a1 + 559) = 0;
- *(_BYTE *)(a1 + 558) = 0;
+ a1->field225[8] = 0;
+ a1->field225[12] = 0;
+ a1->field225[15] = 0;
+ a1->field225[14] = 0;
+ a1->field225[13] = 0;
+ a1->field225[11] = 0;
+ a1->field225[10] = 0;
+ a1->field225[9] = 0;
}
else
{
- v13 = *(_BYTE *)(a1 + 264);
- *(_BYTE *)(a1 + 561) = *(_BYTE *)(a1 + 267);
- *(_BYTE *)(a1 + 557) = *(_BYTE *)(a1 + 263);
- v14 = *(_BYTE *)(a1 + 269);
- v15 = *(_BYTE *)(a1 + 265);
- v16 = *(_BYTE *)(a1 + 266);
- v17 = *(_BYTE *)(a1 + 268);
- *(_BYTE *)(a1 + 564) = *(_BYTE *)(a1 + 270);
- *(_BYTE *)(a1 + 563) = v14;
- *(_BYTE *)(a1 + 562) = v17;
- *(_BYTE *)(a1 + 560) = v16;
- *(_BYTE *)(a1 + 559) = v15;
- *(_BYTE *)(a1 + 558) = v13;
+ v13 = a1->field107[1];
+ a1->field225[12] = a1->field107[4];
+ a1->field225[8] = a1->field107[0];
+ v14 = a1->field107[6];
+ v15 = a1->field107[2];
+ v16 = a1->field107[3];
+ v17 = a1->field107[5];
+ a1->field225[15] = a1->field107[7];
+ a1->field225[14] = v14;
+ a1->field225[13] = v17;
+ a1->field225[11] = v16;
+ a1->field225[10] = v15;
+ a1->field225[9] = v13;
}
sub_401058();
- stream_slot_alloc(a1);
+ stream_slot_alloc((int)a1);
v18 = 0;
}
else
{
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v18 = 109;
}
*a4 = v18;
@@ -1777,41 +1777,41 @@ LABEL_14:
}
/* ==== hdcp2_rx_RepeaterAuth_ReceiverID_List [tier=MNEM size=1032] ==== */
-int __fastcall hdcp2_rx_RepeaterAuth_ReceiverID_List(int a1, char *a2, unsigned int a3, int *a4)
+int __fastcall hdcp2_rx_RepeaterAuth_ReceiverID_List(struct hdcp2_session *a1, char *a2, unsigned int a3, int *a4)
{
int *v4; // r11
int v9; // r3
int result; // r0
- int v11; // r8
- int v12; // r10
+ unsigned int v11; // r8
+ unsigned int v12; // r10
int v13; // r9
unsigned int v14; // r0
bool v15; // zf
int v16; // r0
unsigned int v17; // r0
- int v18; // r1
- int v19; // r8
+ unsigned int v18; // r1
+ int field38; // r8
int v20; // r7
__int64 v21; // r2
char *v22; // r0
- int v23; // r1
+ unsigned int v23; // r1
unsigned int v24; // r8
int v25; // r7
unsigned int v26; // r1
int v27; // r0
int v28; // r1
- int v29; // r2
+ unsigned int v29; // r2
int v30; // r1
char *v31; // r1
- int v32; // r3
- int v33; // r7
+ unsigned int v32; // r3
+ unsigned int v33; // r7
unsigned int i; // r7
unsigned __int8 *v35; // r1
int v36; // r0
int v37; // r2
int v38; // r3
int v39; // r1
- int v40; // r0
+ unsigned int field04; // r0
int v41; // r0
char v42; // [sp+4h] [bp-210h]
int v43; // [sp+8h] [bp-20Ch]
@@ -1834,19 +1834,19 @@ int __fastcall hdcp2_rx_RepeaterAuth_ReceiverID_List(int a1, char *a2, unsigned
v48 = 0;
bzero_core(result: v54, a2: 0x10Cu);
result = 1;
- if ( a1 == 0 || a2 == nullptr || a4 == nullptr )
+ if ( a1 == nullptr || a2 == nullptr || a4 == nullptr )
goto LABEL_33;
*a4 = 100;
- if ( *(_BYTE *)(a1 + 589) != 0 )
+ if ( a1->field24D != 0 )
{
- if ( sub_404464(a1: *(_DWORD *)(a1 + 4)) != 0 )
+ if ( sub_404464(a1: a1->field04) != 0 )
{
result = 20;
goto LABEL_33;
}
- *(_BYTE *)(a1 + 589) = 0;
+ a1->field24D = 0;
}
- if ( *(_DWORD *)(a1 + 16) != 6 )
+ if ( a1->field10 != 6 )
{
if ( a3 == 176 )
{
@@ -1855,13 +1855,13 @@ int __fastcall hdcp2_rx_RepeaterAuth_ReceiverID_List(int a1, char *a2, unsigned
buffer_copy_bounded(a1: (int *)a2, a2: (int)&v48, a3: 2u, a4: v9);
v14 = v48;
v11 = (v48 & 8) != 0;
- *(_DWORD *)(a1 + 52) = v11;
- *(_DWORD *)(a1 + 68) = (v14 & 2) != 0;
- *(_DWORD *)(a1 + 64) = v14 & 1;
- *(_DWORD *)(a1 + 60) = (v14 >> 9) & 7;
- *(_BYTE *)(a1 + 56) = (v14 >> 4) & 0x1F;
+ a1->field30[1] = v11;
+ a1->field3C[2] = (v14 & 2) != 0;
+ a1->field3C[1] = v14 & 1;
+ a1->field3C[0] = (v14 >> 9) & 7;
+ a1->field38 = (v14 >> 4) & 0x1F;
v12 = (v14 & 4) != 0;
- *(_DWORD *)(a1 + 48) = v12;
+ a1->field30[0] = v12;
v44 = (unsigned __int8)a2[2];
v46 = (unsigned __int8)a2[3];
v45 = (unsigned __int8)a2[4];
@@ -1873,22 +1873,22 @@ int __fastcall hdcp2_rx_RepeaterAuth_ReceiverID_List(int a1, char *a2, unsigned
}
goto LABEL_27;
}
- if ( *(_DWORD *)(a1 + 36) != 20 )
+ if ( a1->field18[3] != 20 )
{
if ( a3 <= 1 )
goto LABEL_27;
v11 = (unsigned __int8)a2[1];
- *(_DWORD *)(a1 + 52) = v11;
+ a1->field30[1] = v11;
v12 = (unsigned __int8)*a2;
- *(_DWORD *)(a1 + 48) = v12;
- *(_BYTE *)(a1 + 56) = a2[2];
- *(_DWORD *)(a1 + 60) = (unsigned __int8)a2[3];
- *(_DWORD *)(a1 + 64) = (unsigned __int8)a2[5];
- *(_DWORD *)(a1 + 68) = (unsigned __int8)a2[4];
+ a1->field30[0] = v12;
+ a1->field38 = a2[2];
+ a1->field3C[0] = (unsigned __int8)a2[3];
+ a1->field3C[1] = (unsigned __int8)a2[5];
+ a1->field3C[2] = (unsigned __int8)a2[4];
if ( a2[1] != 0 || *a2 != 0 )
{
LABEL_30:
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v16 = 107;
goto LABEL_31;
}
@@ -1905,25 +1905,25 @@ LABEL_30:
goto LABEL_17;
}
LABEL_27:
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v16 = 109;
goto LABEL_31;
}
if ( a3 <= 1 )
goto LABEL_27;
v11 = (unsigned __int8)a2[1];
- *(_DWORD *)(a1 + 52) = v11;
+ a1->field30[1] = v11;
v12 = (unsigned __int8)*a2;
- *(_DWORD *)(a1 + 48) = v12;
- *(_BYTE *)(a1 + 56) = a2[2];
- *(_DWORD *)(a1 + 60) = (unsigned __int8)a2[3];
+ a1->field30[0] = v12;
+ a1->field38 = a2[2];
+ a1->field3C[0] = (unsigned __int8)a2[3];
if ( a2[1] != 0 || *a2 != 0 )
goto LABEL_30;
if ( 5 * (unsigned __int8)a2[2] + 36 != a3 )
goto LABEL_27;
a3 = 0;
v43 = 32;
- *(_DWORD *)(a1 + 72) = 0;
+ a1->field3C[3] = 0;
sub_401058();
sub_401058();
v42 = 0;
@@ -1936,12 +1936,12 @@ LABEL_17:
v15 = v12 == 0;
if ( !v15 )
goto LABEL_30;
- if ( *(_DWORD *)(a1 + 64) == 0 && *(_DWORD *)(a1 + 68) == 0 )
+ if ( a1->field3C[1] == 0 && a1->field3C[2] == 0 )
goto LABEL_35;
- if ( (unsigned int)(*(_DWORD *)(a1 + 28) - 1) > 1 )
+ if ( a1->field18[1] - 1 > 1 )
goto LABEL_35;
- *(_DWORD *)(a1 + 32) = 0;
- if ( sub_40452A(a1: *(_DWORD *)(a1 + 4), a2: 1) == 0 )
+ a1->field18[2] = 0;
+ if ( sub_40452A(a1: a1->field04, a2: 1) == 0 )
goto LABEL_35;
LABEL_25:
result = 17;
@@ -1951,10 +1951,10 @@ LABEL_33:
((void (__fastcall *)(int, int))loc_4041FC)(a1: result, a2: *v4 - v56);
LABEL_35:
v17 = v44 | (v46 << 8) | (v45 << 16);
- v18 = *(_DWORD *)(a1 + 72);
- if ( v17 != 0 && v18 == 0 || v18 == 1 && v17 < *(_DWORD *)(a1 + 596) )
+ v18 = a1->field3C[3];
+ if ( v17 != 0 && v18 == 0 || v18 == 1 && v17 < a1->field254[0] )
{
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v16 = 108;
LABEL_31:
*a4 = v16;
@@ -1963,19 +1963,19 @@ LABEL_32:
}
else
{
- v19 = *(unsigned __int8 *)(a1 + 56);
- *(_DWORD *)(a1 + 596) = v17;
- *(_DWORD *)(a1 + 72) = 1;
- v20 = 5 * v19;
+ field38 = a1->field38;
+ a1->field254[0] = v17;
+ a1->field3C[3] = 1;
+ v20 = 5 * field38;
sub_401058();
- if ( *(_DWORD *)(a1 + 16) == 6 )
+ if ( a1->field10 == 6 )
{
- v21 = *(_QWORD *)(a1 + 48);
- *((_BYTE *)v54 + 5 * v19) = *(_DWORD *)(a1 + 60);
+ v21 = *(_QWORD *)a1->field30;
+ *((_BYTE *)v54 + 5 * field38) = a1->field3C[0];
v22 = (char *)v54 + v20;
- v23 = *(_DWORD *)(a1 + 36);
+ v23 = a1->field18[3];
v22[2] = BYTE4(v21);
- v22[1] = v19;
+ v22[1] = field38;
v22[3] = v21;
if ( v23 == 20 )
{
@@ -1984,9 +1984,9 @@ LABEL_32:
v25 = v20 + 4;
goto LABEL_48;
}
- v29 = *(_DWORD *)(a1 + 68);
+ v29 = a1->field3C[2];
a3 = (unsigned int)v54;
- v22[5] = *(_QWORD *)(a1 + 64);
+ v22[5] = *(_QWORD *)&a1->field3C[1];
v27 = 9;
*((_BYTE *)&v54[1] + v20) = v29;
v28 = 6;
@@ -2019,7 +2019,7 @@ LABEL_48:
a4: &v47,
a5: 32) != 0 )
{
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
*a4 = 106;
bzero_core(result: v52, a2: 0x20u);
bzero_core(result: v54, a2: 0x10Cu);
@@ -2030,16 +2030,16 @@ LABEL_48:
v32 = v52[5];
a3 = v52[6];
v33 = v52[7];
- *(_DWORD *)(a1 + 600) = v52[4];
- *(_DWORD *)(a1 + 604) = v32;
- *(_DWORD *)(a1 + 608) = a3;
- *(_DWORD *)(a1 + 612) = v33;
+ a1->field254[1] = v52[4];
+ a1->field254[2] = v32;
+ a1->field254[3] = a3;
+ a1->field254[4] = v33;
}
bzero_core(result: v52, a2: 0x20u);
bzero_core(result: v54, a2: 0x10Cu);
- for ( i = 0; i < *(unsigned __int8 *)(a1 + 56); ++i )
+ for ( i = 0; i < a1->field38; ++i )
{
- v35 = (unsigned __int8 *)(a1 + 85 + 5 * i);
+ v35 = &a1->pad55[5 * i];
v36 = *v35;
a3 = v35[3];
v37 = v35[1];
@@ -2049,25 +2049,21 @@ LABEL_48:
if ( sub_4045DE(a1: &v49) != 0 )
goto LABEL_60;
}
- if ( sub_40450A(a1: a1 + 616) != 0 )
+ if ( sub_40450A(a1: &a1->field254[5]) != 0 )
goto LABEL_25;
bzero(result: v51, a2: 0x9Bu);
- v39 = *(unsigned __int8 *)(a1 + 79);
- v50 = *(_BYTE *)(a1 + 83);
- v40 = *(_DWORD *)(a1 + 4);
- v49 = v39
- | (*(unsigned __int8 *)(a1 + 80) << 8)
- | ((*(unsigned __int8 *)(a1 + 81) | (*(unsigned __int8 *)(a1 + 82) << 8)) << 16);
- v41 = sub_404438(a1: v40, a2: &v49, a3: 1, a4: a1 + 616);
+ v39 = a1->field4F[0];
+ v50 = a1->field4F[4];
+ field04 = a1->field04;
+ v49 = v39 | (a1->field4F[1] << 8) | ((a1->field4F[2] | (a1->field4F[3] << 8)) << 16);
+ v41 = sub_404438(a1: field04, a2: &v49, a3: 1, a4: &a1->field254[5]);
if ( v41 != 0
- || (a3 = *(unsigned __int8 *)(a1 + 56),
- sub_401058(),
- (v41 = sub_404438(a1: *(_DWORD *)(a1 + 4), a2: &v49, a3, a4: a1 + 616)) != 0) )
+ || (a3 = a1->field38, sub_401058(), (v41 = sub_404438(a1: a1->field04, a2: &v49, a3, a4: &a1->field254[5])) != 0) )
{
if ( v41 != 23 )
goto LABEL_25;
LABEL_60:
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
*a4 = 112;
goto LABEL_25;
}
diff --git a/fw/decomp/hdcp_23.0.0.59_520f9e97.c b/fw/decomp/hdcp_23.0.0.59_520f9e97.c
index b03cc79..84717d4 100644
--- a/fw/decomp/hdcp_23.0.0.59_520f9e97.c
+++ b/fw/decomp/hdcp_23.0.0.59_520f9e97.c
@@ -1363,7 +1363,7 @@ int __fastcall hdcp2_process_rx_message(int a1, int *a2, unsigned __int8 *a3, un
}
/* ==== hdcp2_rx_AKE_Send_Cert [tier=MNEM size=464] ==== */
-int __fastcall hdcp2_rx_AKE_Send_Cert(int a1, unsigned __int8 *a2, int a3, int *a4)
+int __fastcall hdcp2_rx_AKE_Send_Cert(struct hdcp2_session *a1, unsigned __int8 *a2, int a3, int *a4)
{
int *v4; // r4
unsigned __int8 *v5; // r6
@@ -1391,7 +1391,7 @@ int __fastcall hdcp2_rx_AKE_Send_Cert(int a1, unsigned __int8 *a2, int a3, int *
char v28[159]; // [sp+Dh] [bp-A3h] BYREF
int v29; // [sp+ACh] [bp-4h]
- v8 = a1 == 0;
+ v8 = a1 == nullptr;
v29 = dword_404280;
result = 1;
if ( !v8 )
@@ -1403,7 +1403,7 @@ int __fastcall hdcp2_rx_AKE_Send_Cert(int a1, unsigned __int8 *a2, int a3, int *
if ( a4 != nullptr )
{
*a4 = 100;
- if ( *(_DWORD *)(a1 + 16) == 6 )
+ if ( a1->field10 == 6 )
{
if ( a3 == 523 )
{
@@ -1414,12 +1414,12 @@ int __fastcall hdcp2_rx_AKE_Send_Cert(int a1, unsigned __int8 *a2, int a3, int *
LABEL_8:
if ( ((int (__fastcall *)(unsigned __int8 *, int))loc_404064)(a1: v5, a2: 522) == 0 )
goto LABEL_18;
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v10 = 103;
goto LABEL_15;
}
LABEL_7:
- *(_BYTE *)(a1 + 45) = 1;
+ a1->field2D = 1;
v6 = 2;
goto LABEL_8;
}
@@ -1428,7 +1428,7 @@ LABEL_7:
{
if ( a2[530] == 2 )
{
- *(_DWORD *)(a1 + 36) = 22;
+ a1->field18[3] = 22;
v11 = a2[526];
v12 = a2[522];
v13 = a2[528];
@@ -1436,28 +1436,28 @@ LABEL_7:
v15 = a2[525];
v16 = a2[529];
v17 = a2[523];
- *(_BYTE *)(a1 + 268) = a2[527];
- *(_BYTE *)(a1 + 264) = v17;
- *(_BYTE *)(a1 + 267) = v11;
- *(_BYTE *)(a1 + 269) = v13;
- *(_BYTE *)(a1 + 270) = v16;
- *(_BYTE *)(a1 + 263) = v12;
- *(_BYTE *)(a1 + 265) = v14;
- *(_BYTE *)(a1 + 266) = v15;
+ a1->field107[5] = a2[527];
+ a1->field107[1] = v17;
+ a1->field107[4] = v11;
+ a1->field107[6] = v13;
+ a1->field107[7] = v16;
+ a1->field107[0] = v12;
+ a1->field107[2] = v14;
+ a1->field107[3] = v15;
sub_401058();
v6 = 1;
if ( v5[532] << 31 == 0 )
goto LABEL_8;
goto LABEL_7;
}
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v10 = 104;
LABEL_15:
*v4 = v10;
result = 0;
goto LABEL_16;
}
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v10 = 109;
goto LABEL_15;
}
@@ -1471,8 +1471,8 @@ LABEL_18:
sub_401058();
sub_401058();
sub_401058();
- *(_BYTE *)(a1 + 84) = v5[136] >> 4;
- if ( sub_4045D4(a1: *(_DWORD *)(a1 + 4), a2: v6) != 0 )
+ a1->field4F[5] = v5[136] >> 4;
+ if ( sub_4045D4(a1: a1->field04, a2: v6) != 0 )
goto LABEL_21;
v18 = v5[1];
v19 = v5[2] | (v5[3] << 8);
@@ -1480,25 +1480,25 @@ LABEL_18:
v24 = *v5 | (v18 << 8) | (v19 << 16);
if ( sub_404666(a1: &v24) != 0 )
{
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
*v4 = 112;
goto LABEL_21;
}
- v6 = a1 + 616;
- if ( *(_DWORD *)(a1 + 616) != 0 && sub_404592(a1: a1 + 616) != 0 )
+ v6 = (int)&a1->field254[5];
+ if ( a1->field254[5] != 0 && sub_404592(a1: &a1->field254[5]) != 0 )
goto LABEL_21;
bzero(result: v28, a2: 0x9Bu);
v20 = v5[1];
v21 = v5[2] | (v5[3] << 8);
v27 = v5[4];
v26 = *v5 | (v20 << 8) | (v21 << 16);
- v22 = sub_4044C0(a1: *(_DWORD *)(a1 + 4), a2: &v26, a3: 1, a4: a1 + 616);
+ v22 = sub_4044C0(a1: a1->field04, a2: &v26, a3: 1, a4: &a1->field254[5]);
if ( v22 != 0 )
{
if ( v22 == 23 )
{
v23 = 112;
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
result = 17;
goto LABEL_31;
}
@@ -1507,8 +1507,8 @@ LABEL_21:
}
else
{
- if ( receiver_id_lookup(a1) == 0 )
- *(_DWORD *)(a1 + 40) = 1;
+ if ( receiver_id_lookup((int)a1) == 0 )
+ a1->field18[4] = 1;
v23 = 0;
result = 0;
LABEL_31:
@@ -1698,76 +1698,76 @@ LABEL_6:
}
/* ==== hdcp2_rx_AKE_Send_Pairing_Info [tier=MNEM size=208] ==== */
-int __fastcall hdcp2_rx_AKE_Send_Pairing_Info(int a1, int *a2, int a3, int *a4)
+int __fastcall hdcp2_rx_AKE_Send_Pairing_Info(struct hdcp2_session *a1, int *a2, int a3, int *a4)
{
int result; // r0
- __int16 v7; // r7
+ unsigned __int16 v7; // r7
unsigned int v8; // r3
- __int16 v9; // r12
- __int16 v10; // lr
+ unsigned __int16 v9; // r12
+ unsigned __int16 v10; // lr
unsigned int v11; // r6
unsigned int v12; // r3
- char v13; // r12
- char v14; // r4
- char v15; // r7
- char v16; // r6
- char v17; // r2
+ unsigned __int8 v13; // r12
+ unsigned __int8 v14; // r4
+ unsigned __int8 v15; // r7
+ unsigned __int8 v16; // r6
+ unsigned __int8 v17; // r2
int v18; // r0
result = 1;
- if ( a1 != 0 && a2 != nullptr && a4 != nullptr )
+ if ( a1 != nullptr && a2 != nullptr && a4 != nullptr )
{
if ( a3 == 16 )
{
*a4 = 100;
- v7 = *(_WORD *)(a1 + 406);
- v8 = *(unsigned __int16 *)(a1 + 408);
- v9 = *(_WORD *)(a1 + 404);
- *(_BYTE *)(a1 + 553) = v7;
- v10 = *(_WORD *)(a1 + 402);
+ v7 = a1->field192[2];
+ v8 = a1->field192[3];
+ v9 = a1->field192[1];
+ a1->field225[4] = v7;
+ v10 = a1->field192[0];
v11 = v8 >> 8;
- *(_BYTE *)(a1 + 555) = v8;
- *(_BYTE *)(a1 + 554) = HIBYTE(v7);
- *(_BYTE *)(a1 + 552) = HIBYTE(v9);
- *(_BYTE *)(a1 + 550) = HIBYTE(v10);
- v12 = *(_DWORD *)(a1 + 36);
- *(_BYTE *)(a1 + 551) = v9;
- *(_BYTE *)(a1 + 549) = v10;
- *(_BYTE *)(a1 + 556) = v11;
+ a1->field225[6] = v8;
+ a1->field225[5] = HIBYTE(v7);
+ a1->field225[3] = HIBYTE(v9);
+ a1->field225[1] = HIBYTE(v10);
+ v12 = a1->field18[3];
+ a1->field225[2] = v9;
+ a1->field225[0] = v10;
+ a1->field225[7] = v11;
if ( v12 < 0x16 )
{
- *(_BYTE *)(a1 + 557) = 0;
- *(_BYTE *)(a1 + 561) = 0;
- *(_BYTE *)(a1 + 564) = 0;
- *(_BYTE *)(a1 + 563) = 0;
- *(_BYTE *)(a1 + 562) = 0;
- *(_BYTE *)(a1 + 560) = 0;
- *(_BYTE *)(a1 + 559) = 0;
- *(_BYTE *)(a1 + 558) = 0;
+ a1->field225[8] = 0;
+ a1->field225[12] = 0;
+ a1->field225[15] = 0;
+ a1->field225[14] = 0;
+ a1->field225[13] = 0;
+ a1->field225[11] = 0;
+ a1->field225[10] = 0;
+ a1->field225[9] = 0;
}
else
{
- v13 = *(_BYTE *)(a1 + 264);
- *(_BYTE *)(a1 + 561) = *(_BYTE *)(a1 + 267);
- *(_BYTE *)(a1 + 557) = *(_BYTE *)(a1 + 263);
- v14 = *(_BYTE *)(a1 + 269);
- v15 = *(_BYTE *)(a1 + 265);
- v16 = *(_BYTE *)(a1 + 266);
- v17 = *(_BYTE *)(a1 + 268);
- *(_BYTE *)(a1 + 564) = *(_BYTE *)(a1 + 270);
- *(_BYTE *)(a1 + 563) = v14;
- *(_BYTE *)(a1 + 562) = v17;
- *(_BYTE *)(a1 + 560) = v16;
- *(_BYTE *)(a1 + 559) = v15;
- *(_BYTE *)(a1 + 558) = v13;
+ v13 = a1->field107[1];
+ a1->field225[12] = a1->field107[4];
+ a1->field225[8] = a1->field107[0];
+ v14 = a1->field107[6];
+ v15 = a1->field107[2];
+ v16 = a1->field107[3];
+ v17 = a1->field107[5];
+ a1->field225[15] = a1->field107[7];
+ a1->field225[14] = v14;
+ a1->field225[13] = v17;
+ a1->field225[11] = v16;
+ a1->field225[10] = v15;
+ a1->field225[9] = v13;
}
sub_401058();
- stream_slot_alloc(a1);
+ stream_slot_alloc((int)a1);
v18 = 0;
}
else
{
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v18 = 109;
}
*a4 = v18;
@@ -1927,41 +1927,41 @@ LABEL_14:
}
/* ==== hdcp2_rx_RepeaterAuth_ReceiverID_List [tier=MNEM size=1032] ==== */
-int __fastcall hdcp2_rx_RepeaterAuth_ReceiverID_List(int a1, char *a2, unsigned int a3, int *a4)
+int __fastcall hdcp2_rx_RepeaterAuth_ReceiverID_List(struct hdcp2_session *a1, char *a2, unsigned int a3, int *a4)
{
int *v4; // r11
int v9; // r3
int result; // r0
- int v11; // r8
- int v12; // r10
+ unsigned int v11; // r8
+ unsigned int v12; // r10
int v13; // r9
unsigned int v14; // r0
bool v15; // zf
int v16; // r0
unsigned int v17; // r0
- int v18; // r1
- int v19; // r8
+ unsigned int v18; // r1
+ int field38; // r8
int v20; // r7
__int64 v21; // r2
char *v22; // r0
- int v23; // r1
+ unsigned int v23; // r1
unsigned int v24; // r8
int v25; // r7
unsigned int v26; // r1
int v27; // r0
int v28; // r1
- int v29; // r2
+ unsigned int v29; // r2
int v30; // r1
char *v31; // r1
- int v32; // r3
- int v33; // r7
+ unsigned int v32; // r3
+ unsigned int v33; // r7
unsigned int i; // r7
unsigned __int8 *v35; // r1
int v36; // r0
int v37; // r2
int v38; // r3
int v39; // r1
- int v40; // r0
+ unsigned int field04; // r0
int v41; // r0
char v42; // [sp+4h] [bp-210h]
int v43; // [sp+8h] [bp-20Ch]
@@ -1984,19 +1984,19 @@ int __fastcall hdcp2_rx_RepeaterAuth_ReceiverID_List(int a1, char *a2, unsigned
v48 = 0;
bzero_core(result: v54, a2: 0x10Cu);
result = 1;
- if ( a1 == 0 || a2 == nullptr || a4 == nullptr )
+ if ( a1 == nullptr || a2 == nullptr || a4 == nullptr )
goto LABEL_33;
*a4 = 100;
- if ( *(_BYTE *)(a1 + 589) != 0 )
+ if ( a1->field24D != 0 )
{
- if ( sub_4044EC(a1: *(_DWORD *)(a1 + 4)) != 0 )
+ if ( sub_4044EC(a1: a1->field04) != 0 )
{
result = 20;
goto LABEL_33;
}
- *(_BYTE *)(a1 + 589) = 0;
+ a1->field24D = 0;
}
- if ( *(_DWORD *)(a1 + 16) != 6 )
+ if ( a1->field10 != 6 )
{
if ( a3 == 176 )
{
@@ -2005,13 +2005,13 @@ int __fastcall hdcp2_rx_RepeaterAuth_ReceiverID_List(int a1, char *a2, unsigned
buffer_copy_bounded(a1: (int *)a2, a2: (int)&v48, a3: 2u, a4: v9);
v14 = v48;
v11 = (v48 & 8) != 0;
- *(_DWORD *)(a1 + 52) = v11;
- *(_DWORD *)(a1 + 68) = (v14 & 2) != 0;
- *(_DWORD *)(a1 + 64) = v14 & 1;
- *(_DWORD *)(a1 + 60) = (v14 >> 9) & 7;
- *(_BYTE *)(a1 + 56) = (v14 >> 4) & 0x1F;
+ a1->field30[1] = v11;
+ a1->field3C[2] = (v14 & 2) != 0;
+ a1->field3C[1] = v14 & 1;
+ a1->field3C[0] = (v14 >> 9) & 7;
+ a1->field38 = (v14 >> 4) & 0x1F;
v12 = (v14 & 4) != 0;
- *(_DWORD *)(a1 + 48) = v12;
+ a1->field30[0] = v12;
v44 = (unsigned __int8)a2[2];
v46 = (unsigned __int8)a2[3];
v45 = (unsigned __int8)a2[4];
@@ -2023,22 +2023,22 @@ int __fastcall hdcp2_rx_RepeaterAuth_ReceiverID_List(int a1, char *a2, unsigned
}
goto LABEL_27;
}
- if ( *(_DWORD *)(a1 + 36) != 20 )
+ if ( a1->field18[3] != 20 )
{
if ( a3 <= 1 )
goto LABEL_27;
v11 = (unsigned __int8)a2[1];
- *(_DWORD *)(a1 + 52) = v11;
+ a1->field30[1] = v11;
v12 = (unsigned __int8)*a2;
- *(_DWORD *)(a1 + 48) = v12;
- *(_BYTE *)(a1 + 56) = a2[2];
- *(_DWORD *)(a1 + 60) = (unsigned __int8)a2[3];
- *(_DWORD *)(a1 + 64) = (unsigned __int8)a2[5];
- *(_DWORD *)(a1 + 68) = (unsigned __int8)a2[4];
+ a1->field30[0] = v12;
+ a1->field38 = a2[2];
+ a1->field3C[0] = (unsigned __int8)a2[3];
+ a1->field3C[1] = (unsigned __int8)a2[5];
+ a1->field3C[2] = (unsigned __int8)a2[4];
if ( a2[1] != 0 || *a2 != 0 )
{
LABEL_30:
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v16 = 107;
goto LABEL_31;
}
@@ -2055,25 +2055,25 @@ LABEL_30:
goto LABEL_17;
}
LABEL_27:
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v16 = 109;
goto LABEL_31;
}
if ( a3 <= 1 )
goto LABEL_27;
v11 = (unsigned __int8)a2[1];
- *(_DWORD *)(a1 + 52) = v11;
+ a1->field30[1] = v11;
v12 = (unsigned __int8)*a2;
- *(_DWORD *)(a1 + 48) = v12;
- *(_BYTE *)(a1 + 56) = a2[2];
- *(_DWORD *)(a1 + 60) = (unsigned __int8)a2[3];
+ a1->field30[0] = v12;
+ a1->field38 = a2[2];
+ a1->field3C[0] = (unsigned __int8)a2[3];
if ( a2[1] != 0 || *a2 != 0 )
goto LABEL_30;
if ( 5 * (unsigned __int8)a2[2] + 36 != a3 )
goto LABEL_27;
a3 = 0;
v43 = 32;
- *(_DWORD *)(a1 + 72) = 0;
+ a1->field3C[3] = 0;
sub_401058();
sub_401058();
v42 = 0;
@@ -2086,12 +2086,12 @@ LABEL_17:
v15 = v12 == 0;
if ( !v15 )
goto LABEL_30;
- if ( *(_DWORD *)(a1 + 64) == 0 && *(_DWORD *)(a1 + 68) == 0 )
+ if ( a1->field3C[1] == 0 && a1->field3C[2] == 0 )
goto LABEL_35;
- if ( (unsigned int)(*(_DWORD *)(a1 + 28) - 1) > 1 )
+ if ( a1->field18[1] - 1 > 1 )
goto LABEL_35;
- *(_DWORD *)(a1 + 32) = 0;
- if ( sub_4045B2(a1: *(_DWORD *)(a1 + 4), a2: 1) == 0 )
+ a1->field18[2] = 0;
+ if ( sub_4045B2(a1: a1->field04, a2: 1) == 0 )
goto LABEL_35;
LABEL_25:
result = 17;
@@ -2101,10 +2101,10 @@ LABEL_33:
((void (__fastcall *)(int, int))loc_404284)(a1: result, a2: *v4 - v56);
LABEL_35:
v17 = v44 | (v46 << 8) | (v45 << 16);
- v18 = *(_DWORD *)(a1 + 72);
- if ( v17 != 0 && v18 == 0 || v18 == 1 && v17 < *(_DWORD *)(a1 + 596) )
+ v18 = a1->field3C[3];
+ if ( v17 != 0 && v18 == 0 || v18 == 1 && v17 < a1->field254[0] )
{
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v16 = 108;
LABEL_31:
*a4 = v16;
@@ -2113,19 +2113,19 @@ LABEL_32:
}
else
{
- v19 = *(unsigned __int8 *)(a1 + 56);
- *(_DWORD *)(a1 + 596) = v17;
- *(_DWORD *)(a1 + 72) = 1;
- v20 = 5 * v19;
+ field38 = a1->field38;
+ a1->field254[0] = v17;
+ a1->field3C[3] = 1;
+ v20 = 5 * field38;
sub_401058();
- if ( *(_DWORD *)(a1 + 16) == 6 )
+ if ( a1->field10 == 6 )
{
- v21 = *(_QWORD *)(a1 + 48);
- *((_BYTE *)v54 + 5 * v19) = *(_DWORD *)(a1 + 60);
+ v21 = *(_QWORD *)a1->field30;
+ *((_BYTE *)v54 + 5 * field38) = a1->field3C[0];
v22 = (char *)v54 + v20;
- v23 = *(_DWORD *)(a1 + 36);
+ v23 = a1->field18[3];
v22[2] = BYTE4(v21);
- v22[1] = v19;
+ v22[1] = field38;
v22[3] = v21;
if ( v23 == 20 )
{
@@ -2134,9 +2134,9 @@ LABEL_32:
v25 = v20 + 4;
goto LABEL_48;
}
- v29 = *(_DWORD *)(a1 + 68);
+ v29 = a1->field3C[2];
a3 = (unsigned int)v54;
- v22[5] = *(_QWORD *)(a1 + 64);
+ v22[5] = *(_QWORD *)&a1->field3C[1];
v27 = 9;
*((_BYTE *)&v54[1] + v20) = v29;
v28 = 6;
@@ -2169,7 +2169,7 @@ LABEL_48:
a4: &v47,
a5: 32) != 0 )
{
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
*a4 = 106;
bzero_core(result: v52, a2: 0x20u);
bzero_core(result: v54, a2: 0x10Cu);
@@ -2180,16 +2180,16 @@ LABEL_48:
v32 = v52[5];
a3 = v52[6];
v33 = v52[7];
- *(_DWORD *)(a1 + 600) = v52[4];
- *(_DWORD *)(a1 + 604) = v32;
- *(_DWORD *)(a1 + 608) = a3;
- *(_DWORD *)(a1 + 612) = v33;
+ a1->field254[1] = v52[4];
+ a1->field254[2] = v32;
+ a1->field254[3] = a3;
+ a1->field254[4] = v33;
}
bzero_core(result: v52, a2: 0x20u);
bzero_core(result: v54, a2: 0x10Cu);
- for ( i = 0; i < *(unsigned __int8 *)(a1 + 56); ++i )
+ for ( i = 0; i < a1->field38; ++i )
{
- v35 = (unsigned __int8 *)(a1 + 85 + 5 * i);
+ v35 = &a1->pad55[5 * i];
v36 = *v35;
a3 = v35[3];
v37 = v35[1];
@@ -2199,25 +2199,21 @@ LABEL_48:
if ( sub_404666(a1: &v49) != 0 )
goto LABEL_60;
}
- if ( sub_404592(a1: a1 + 616) != 0 )
+ if ( sub_404592(a1: &a1->field254[5]) != 0 )
goto LABEL_25;
bzero(result: v51, a2: 0x9Bu);
- v39 = *(unsigned __int8 *)(a1 + 79);
- v50 = *(_BYTE *)(a1 + 83);
- v40 = *(_DWORD *)(a1 + 4);
- v49 = v39
- | (*(unsigned __int8 *)(a1 + 80) << 8)
- | ((*(unsigned __int8 *)(a1 + 81) | (*(unsigned __int8 *)(a1 + 82) << 8)) << 16);
- v41 = sub_4044C0(a1: v40, a2: &v49, a3: 1, a4: a1 + 616);
+ v39 = a1->field4F[0];
+ v50 = a1->field4F[4];
+ field04 = a1->field04;
+ v49 = v39 | (a1->field4F[1] << 8) | ((a1->field4F[2] | (a1->field4F[3] << 8)) << 16);
+ v41 = sub_4044C0(a1: field04, a2: &v49, a3: 1, a4: &a1->field254[5]);
if ( v41 != 0
- || (a3 = *(unsigned __int8 *)(a1 + 56),
- sub_401058(),
- (v41 = sub_4044C0(a1: *(_DWORD *)(a1 + 4), a2: &v49, a3, a4: a1 + 616)) != 0) )
+ || (a3 = a1->field38, sub_401058(), (v41 = sub_4044C0(a1: a1->field04, a2: &v49, a3, a4: &a1->field254[5])) != 0) )
{
if ( v41 != 23 )
goto LABEL_25;
LABEL_60:
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
*a4 = 112;
goto LABEL_25;
}
diff --git a/fw/decomp/hdcp_23.0.4.49_0478f2fb.c b/fw/decomp/hdcp_23.0.4.49_0478f2fb.c
index e66a02f..d3d07db 100644
--- a/fw/decomp/hdcp_23.0.4.49_0478f2fb.c
+++ b/fw/decomp/hdcp_23.0.4.49_0478f2fb.c
@@ -1077,7 +1077,7 @@ int __fastcall hdcp2_process_rx_message(int a1, int *a2, unsigned __int8 *a3, un
}
/* ==== hdcp2_rx_AKE_Send_Cert [tier=MNEM size=464] ==== */
-int __fastcall hdcp2_rx_AKE_Send_Cert(int a1, unsigned __int8 *a2, int a3, int *a4)
+int __fastcall hdcp2_rx_AKE_Send_Cert(struct hdcp2_session *a1, unsigned __int8 *a2, int a3, int *a4)
{
int *v4; // r4
unsigned __int8 *v5; // r6
@@ -1096,7 +1096,7 @@ int __fastcall hdcp2_rx_AKE_Send_Cert(int a1, unsigned __int8 *a2, int a3, int *
char v19[159]; // [sp+Dh] [bp-A3h] BYREF
int v20; // [sp+ACh] [bp-4h]
- v7 = a1 == 0;
+ v7 = a1 == nullptr;
v20 = dword_4045AC;
result = 1;
if ( !v7 )
@@ -1108,7 +1108,7 @@ int __fastcall hdcp2_rx_AKE_Send_Cert(int a1, unsigned __int8 *a2, int a3, int *
if ( a4 != nullptr )
{
*a4 = 100;
- if ( *(_DWORD *)(a1 + 16) == 6 )
+ if ( a1->field10 == 6 )
{
if ( a3 == 523 )
{
@@ -1118,12 +1118,12 @@ int __fastcall hdcp2_rx_AKE_Send_Cert(int a1, unsigned __int8 *a2, int a3, int *
LABEL_8:
if ( ((int (__fastcall *)(unsigned __int8 *, int))loc_4043AC)(a1: v5, a2: 522) == 0 )
goto LABEL_18;
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v9 = 103;
goto LABEL_15;
}
LABEL_7:
- *(_BYTE *)(a1 + 45) = 1;
+ a1->field2D = 1;
goto LABEL_8;
}
}
@@ -1131,7 +1131,7 @@ LABEL_7:
{
if ( a2[530] == 2 )
{
- *(_DWORD *)(a1 + 36) = 22;
+ a1->field18[3] = 22;
v10 = a2[526];
v11 = a2[522];
v12 = a2[528];
@@ -1139,27 +1139,27 @@ LABEL_7:
v14 = a2[525];
v15 = a2[529];
v16 = a2[523];
- *(_BYTE *)(a1 + 268) = a2[527];
- *(_BYTE *)(a1 + 264) = v16;
- *(_BYTE *)(a1 + 267) = v10;
- *(_BYTE *)(a1 + 269) = v12;
- *(_BYTE *)(a1 + 270) = v15;
- *(_BYTE *)(a1 + 263) = v11;
- *(_BYTE *)(a1 + 265) = v13;
- *(_BYTE *)(a1 + 266) = v14;
+ a1->field107[5] = a2[527];
+ a1->field107[1] = v16;
+ a1->field107[4] = v10;
+ a1->field107[6] = v12;
+ a1->field107[7] = v15;
+ a1->field107[0] = v11;
+ a1->field107[2] = v13;
+ a1->field107[3] = v14;
sub_401058();
if ( v5[532] << 31 == 0 )
goto LABEL_8;
goto LABEL_7;
}
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v9 = 104;
LABEL_15:
*v4 = v9;
result = 0;
goto LABEL_16;
}
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v9 = 109;
goto LABEL_15;
}
@@ -1173,16 +1173,16 @@ LABEL_18:
sub_401058();
sub_401058();
sub_401058();
- *(_BYTE *)(a1 + 84) = v5[136] >> 4;
+ a1->field4F[5] = v5[136] >> 4;
if ( sub_401A8A() != 0 )
goto LABEL_21;
if ( sub_401B02() != 0 )
{
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
*v4 = 112;
goto LABEL_21;
}
- if ( *(_DWORD *)(a1 + 616) != 0 && sub_401A50() != 0 )
+ if ( a1->field254[5] != 0 && sub_401A50() != 0 )
goto LABEL_21;
bzero(result: v19, a2: 0x9Bu);
v17 = sub_401988();
@@ -1191,7 +1191,7 @@ LABEL_18:
if ( v17 == 23 )
{
v18 = 112;
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
result = 17;
goto LABEL_31;
}
@@ -1200,8 +1200,8 @@ LABEL_21:
}
else
{
- if ( receiver_id_lookup(a1) == 0 )
- *(_DWORD *)(a1 + 40) = 1;
+ if ( receiver_id_lookup((int)a1) == 0 )
+ a1->field18[4] = 1;
v18 = 0;
result = 0;
LABEL_31:
@@ -1391,76 +1391,76 @@ LABEL_6:
}
/* ==== hdcp2_rx_AKE_Send_Pairing_Info [tier=MNEM size=208] ==== */
-int __fastcall hdcp2_rx_AKE_Send_Pairing_Info(int a1, int *a2, int a3, int *a4)
+int __fastcall hdcp2_rx_AKE_Send_Pairing_Info(struct hdcp2_session *a1, int *a2, int a3, int *a4)
{
int result; // r0
- __int16 v7; // r7
+ unsigned __int16 v7; // r7
unsigned int v8; // r3
- __int16 v9; // r12
- __int16 v10; // lr
+ unsigned __int16 v9; // r12
+ unsigned __int16 v10; // lr
unsigned int v11; // r6
unsigned int v12; // r3
- char v13; // r12
- char v14; // r4
- char v15; // r7
- char v16; // r6
- char v17; // r2
+ unsigned __int8 v13; // r12
+ unsigned __int8 v14; // r4
+ unsigned __int8 v15; // r7
+ unsigned __int8 v16; // r6
+ unsigned __int8 v17; // r2
int v18; // r0
result = 1;
- if ( a1 != 0 && a2 != nullptr && a4 != nullptr )
+ if ( a1 != nullptr && a2 != nullptr && a4 != nullptr )
{
if ( a3 == 16 )
{
*a4 = 100;
- v7 = *(_WORD *)(a1 + 406);
- v8 = *(unsigned __int16 *)(a1 + 408);
- v9 = *(_WORD *)(a1 + 404);
- *(_BYTE *)(a1 + 553) = v7;
- v10 = *(_WORD *)(a1 + 402);
+ v7 = a1->field192[2];
+ v8 = a1->field192[3];
+ v9 = a1->field192[1];
+ a1->field225[4] = v7;
+ v10 = a1->field192[0];
v11 = v8 >> 8;
- *(_BYTE *)(a1 + 555) = v8;
- *(_BYTE *)(a1 + 554) = HIBYTE(v7);
- *(_BYTE *)(a1 + 552) = HIBYTE(v9);
- *(_BYTE *)(a1 + 550) = HIBYTE(v10);
- v12 = *(_DWORD *)(a1 + 36);
- *(_BYTE *)(a1 + 551) = v9;
- *(_BYTE *)(a1 + 549) = v10;
- *(_BYTE *)(a1 + 556) = v11;
+ a1->field225[6] = v8;
+ a1->field225[5] = HIBYTE(v7);
+ a1->field225[3] = HIBYTE(v9);
+ a1->field225[1] = HIBYTE(v10);
+ v12 = a1->field18[3];
+ a1->field225[2] = v9;
+ a1->field225[0] = v10;
+ a1->field225[7] = v11;
if ( v12 < 0x16 )
{
- *(_BYTE *)(a1 + 557) = 0;
- *(_BYTE *)(a1 + 561) = 0;
- *(_BYTE *)(a1 + 564) = 0;
- *(_BYTE *)(a1 + 563) = 0;
- *(_BYTE *)(a1 + 562) = 0;
- *(_BYTE *)(a1 + 560) = 0;
- *(_BYTE *)(a1 + 559) = 0;
- *(_BYTE *)(a1 + 558) = 0;
+ a1->field225[8] = 0;
+ a1->field225[12] = 0;
+ a1->field225[15] = 0;
+ a1->field225[14] = 0;
+ a1->field225[13] = 0;
+ a1->field225[11] = 0;
+ a1->field225[10] = 0;
+ a1->field225[9] = 0;
}
else
{
- v13 = *(_BYTE *)(a1 + 264);
- *(_BYTE *)(a1 + 561) = *(_BYTE *)(a1 + 267);
- *(_BYTE *)(a1 + 557) = *(_BYTE *)(a1 + 263);
- v14 = *(_BYTE *)(a1 + 269);
- v15 = *(_BYTE *)(a1 + 265);
- v16 = *(_BYTE *)(a1 + 266);
- v17 = *(_BYTE *)(a1 + 268);
- *(_BYTE *)(a1 + 564) = *(_BYTE *)(a1 + 270);
- *(_BYTE *)(a1 + 563) = v14;
- *(_BYTE *)(a1 + 562) = v17;
- *(_BYTE *)(a1 + 560) = v16;
- *(_BYTE *)(a1 + 559) = v15;
- *(_BYTE *)(a1 + 558) = v13;
+ v13 = a1->field107[1];
+ a1->field225[12] = a1->field107[4];
+ a1->field225[8] = a1->field107[0];
+ v14 = a1->field107[6];
+ v15 = a1->field107[2];
+ v16 = a1->field107[3];
+ v17 = a1->field107[5];
+ a1->field225[15] = a1->field107[7];
+ a1->field225[14] = v14;
+ a1->field225[13] = v17;
+ a1->field225[11] = v16;
+ a1->field225[10] = v15;
+ a1->field225[9] = v13;
}
sub_401058();
- stream_slot_alloc(a1);
+ stream_slot_alloc((int)a1);
v18 = 0;
}
else
{
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v18 = 109;
}
*a4 = v18;
diff --git a/fw/decomp/hdcp_23.0.4.49_543e8a45.c b/fw/decomp/hdcp_23.0.4.49_543e8a45.c
index d9560cc..ac9e4e8 100644
--- a/fw/decomp/hdcp_23.0.4.49_543e8a45.c
+++ b/fw/decomp/hdcp_23.0.4.49_543e8a45.c
@@ -1077,7 +1077,7 @@ int __fastcall hdcp2_process_rx_message(int a1, int *a2, unsigned __int8 *a3, un
}
/* ==== hdcp2_rx_AKE_Send_Cert [tier=MNEM size=464] ==== */
-int __fastcall hdcp2_rx_AKE_Send_Cert(int a1, unsigned __int8 *a2, int a3, int *a4)
+int __fastcall hdcp2_rx_AKE_Send_Cert(struct hdcp2_session *a1, unsigned __int8 *a2, int a3, int *a4)
{
int *v4; // r4
unsigned __int8 *v5; // r6
@@ -1096,7 +1096,7 @@ int __fastcall hdcp2_rx_AKE_Send_Cert(int a1, unsigned __int8 *a2, int a3, int *
char v19[159]; // [sp+Dh] [bp-A3h] BYREF
int v20; // [sp+ACh] [bp-4h]
- v7 = a1 == 0;
+ v7 = a1 == nullptr;
v20 = dword_4045A8;
result = 1;
if ( !v7 )
@@ -1108,7 +1108,7 @@ int __fastcall hdcp2_rx_AKE_Send_Cert(int a1, unsigned __int8 *a2, int a3, int *
if ( a4 != nullptr )
{
*a4 = 100;
- if ( *(_DWORD *)(a1 + 16) == 6 )
+ if ( a1->field10 == 6 )
{
if ( a3 == 523 )
{
@@ -1118,12 +1118,12 @@ int __fastcall hdcp2_rx_AKE_Send_Cert(int a1, unsigned __int8 *a2, int a3, int *
LABEL_8:
if ( ((int (__fastcall *)(unsigned __int8 *, int))loc_4043A8)(a1: v5, a2: 522) == 0 )
goto LABEL_18;
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v9 = 103;
goto LABEL_15;
}
LABEL_7:
- *(_BYTE *)(a1 + 45) = 1;
+ a1->field2D = 1;
goto LABEL_8;
}
}
@@ -1131,7 +1131,7 @@ LABEL_7:
{
if ( a2[530] == 2 )
{
- *(_DWORD *)(a1 + 36) = 22;
+ a1->field18[3] = 22;
v10 = a2[526];
v11 = a2[522];
v12 = a2[528];
@@ -1139,27 +1139,27 @@ LABEL_7:
v14 = a2[525];
v15 = a2[529];
v16 = a2[523];
- *(_BYTE *)(a1 + 268) = a2[527];
- *(_BYTE *)(a1 + 264) = v16;
- *(_BYTE *)(a1 + 267) = v10;
- *(_BYTE *)(a1 + 269) = v12;
- *(_BYTE *)(a1 + 270) = v15;
- *(_BYTE *)(a1 + 263) = v11;
- *(_BYTE *)(a1 + 265) = v13;
- *(_BYTE *)(a1 + 266) = v14;
+ a1->field107[5] = a2[527];
+ a1->field107[1] = v16;
+ a1->field107[4] = v10;
+ a1->field107[6] = v12;
+ a1->field107[7] = v15;
+ a1->field107[0] = v11;
+ a1->field107[2] = v13;
+ a1->field107[3] = v14;
sub_401058();
if ( v5[532] << 31 == 0 )
goto LABEL_8;
goto LABEL_7;
}
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v9 = 104;
LABEL_15:
*v4 = v9;
result = 0;
goto LABEL_16;
}
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v9 = 109;
goto LABEL_15;
}
@@ -1173,16 +1173,16 @@ LABEL_18:
sub_401058();
sub_401058();
sub_401058();
- *(_BYTE *)(a1 + 84) = v5[136] >> 4;
+ a1->field4F[5] = v5[136] >> 4;
if ( sub_401A8A() != 0 )
goto LABEL_21;
if ( sub_401B02() != 0 )
{
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
*v4 = 112;
goto LABEL_21;
}
- if ( *(_DWORD *)(a1 + 616) != 0 && sub_401A50() != 0 )
+ if ( a1->field254[5] != 0 && sub_401A50() != 0 )
goto LABEL_21;
bzero(result: v19, a2: 0x9Bu);
v17 = sub_401988();
@@ -1191,7 +1191,7 @@ LABEL_18:
if ( v17 == 23 )
{
v18 = 112;
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
result = 17;
goto LABEL_31;
}
@@ -1200,8 +1200,8 @@ LABEL_21:
}
else
{
- if ( receiver_id_lookup(a1) == 0 )
- *(_DWORD *)(a1 + 40) = 1;
+ if ( receiver_id_lookup((int)a1) == 0 )
+ a1->field18[4] = 1;
v18 = 0;
result = 0;
LABEL_31:
@@ -1391,76 +1391,76 @@ LABEL_6:
}
/* ==== hdcp2_rx_AKE_Send_Pairing_Info [tier=MNEM size=208] ==== */
-int __fastcall hdcp2_rx_AKE_Send_Pairing_Info(int a1, int *a2, int a3, int *a4)
+int __fastcall hdcp2_rx_AKE_Send_Pairing_Info(struct hdcp2_session *a1, int *a2, int a3, int *a4)
{
int result; // r0
- __int16 v7; // r7
+ unsigned __int16 v7; // r7
unsigned int v8; // r3
- __int16 v9; // r12
- __int16 v10; // lr
+ unsigned __int16 v9; // r12
+ unsigned __int16 v10; // lr
unsigned int v11; // r6
unsigned int v12; // r3
- char v13; // r12
- char v14; // r4
- char v15; // r7
- char v16; // r6
- char v17; // r2
+ unsigned __int8 v13; // r12
+ unsigned __int8 v14; // r4
+ unsigned __int8 v15; // r7
+ unsigned __int8 v16; // r6
+ unsigned __int8 v17; // r2
int v18; // r0
result = 1;
- if ( a1 != 0 && a2 != nullptr && a4 != nullptr )
+ if ( a1 != nullptr && a2 != nullptr && a4 != nullptr )
{
if ( a3 == 16 )
{
*a4 = 100;
- v7 = *(_WORD *)(a1 + 406);
- v8 = *(unsigned __int16 *)(a1 + 408);
- v9 = *(_WORD *)(a1 + 404);
- *(_BYTE *)(a1 + 553) = v7;
- v10 = *(_WORD *)(a1 + 402);
+ v7 = a1->field192[2];
+ v8 = a1->field192[3];
+ v9 = a1->field192[1];
+ a1->field225[4] = v7;
+ v10 = a1->field192[0];
v11 = v8 >> 8;
- *(_BYTE *)(a1 + 555) = v8;
- *(_BYTE *)(a1 + 554) = HIBYTE(v7);
- *(_BYTE *)(a1 + 552) = HIBYTE(v9);
- *(_BYTE *)(a1 + 550) = HIBYTE(v10);
- v12 = *(_DWORD *)(a1 + 36);
- *(_BYTE *)(a1 + 551) = v9;
- *(_BYTE *)(a1 + 549) = v10;
- *(_BYTE *)(a1 + 556) = v11;
+ a1->field225[6] = v8;
+ a1->field225[5] = HIBYTE(v7);
+ a1->field225[3] = HIBYTE(v9);
+ a1->field225[1] = HIBYTE(v10);
+ v12 = a1->field18[3];
+ a1->field225[2] = v9;
+ a1->field225[0] = v10;
+ a1->field225[7] = v11;
if ( v12 < 0x16 )
{
- *(_BYTE *)(a1 + 557) = 0;
- *(_BYTE *)(a1 + 561) = 0;
- *(_BYTE *)(a1 + 564) = 0;
- *(_BYTE *)(a1 + 563) = 0;
- *(_BYTE *)(a1 + 562) = 0;
- *(_BYTE *)(a1 + 560) = 0;
- *(_BYTE *)(a1 + 559) = 0;
- *(_BYTE *)(a1 + 558) = 0;
+ a1->field225[8] = 0;
+ a1->field225[12] = 0;
+ a1->field225[15] = 0;
+ a1->field225[14] = 0;
+ a1->field225[13] = 0;
+ a1->field225[11] = 0;
+ a1->field225[10] = 0;
+ a1->field225[9] = 0;
}
else
{
- v13 = *(_BYTE *)(a1 + 264);
- *(_BYTE *)(a1 + 561) = *(_BYTE *)(a1 + 267);
- *(_BYTE *)(a1 + 557) = *(_BYTE *)(a1 + 263);
- v14 = *(_BYTE *)(a1 + 269);
- v15 = *(_BYTE *)(a1 + 265);
- v16 = *(_BYTE *)(a1 + 266);
- v17 = *(_BYTE *)(a1 + 268);
- *(_BYTE *)(a1 + 564) = *(_BYTE *)(a1 + 270);
- *(_BYTE *)(a1 + 563) = v14;
- *(_BYTE *)(a1 + 562) = v17;
- *(_BYTE *)(a1 + 560) = v16;
- *(_BYTE *)(a1 + 559) = v15;
- *(_BYTE *)(a1 + 558) = v13;
+ v13 = a1->field107[1];
+ a1->field225[12] = a1->field107[4];
+ a1->field225[8] = a1->field107[0];
+ v14 = a1->field107[6];
+ v15 = a1->field107[2];
+ v16 = a1->field107[3];
+ v17 = a1->field107[5];
+ a1->field225[15] = a1->field107[7];
+ a1->field225[14] = v14;
+ a1->field225[13] = v17;
+ a1->field225[11] = v16;
+ a1->field225[10] = v15;
+ a1->field225[9] = v13;
}
sub_401058();
- stream_slot_alloc(a1);
+ stream_slot_alloc((int)a1);
v18 = 0;
}
else
{
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v18 = 109;
}
*a4 = v18;
diff --git a/fw/decomp/hdcp_23.0.8.49_40cdde34.c b/fw/decomp/hdcp_23.0.8.49_40cdde34.c
index df8cd27..68aeacd 100644
--- a/fw/decomp/hdcp_23.0.8.49_40cdde34.c
+++ b/fw/decomp/hdcp_23.0.8.49_40cdde34.c
@@ -1077,7 +1077,7 @@ int __fastcall hdcp2_process_rx_message(int a1, int *a2, unsigned __int8 *a3, un
}
/* ==== hdcp2_rx_AKE_Send_Cert [tier=MNEM size=464] ==== */
-int __fastcall hdcp2_rx_AKE_Send_Cert(int a1, unsigned __int8 *a2, int a3, int *a4)
+int __fastcall hdcp2_rx_AKE_Send_Cert(struct hdcp2_session *a1, unsigned __int8 *a2, int a3, int *a4)
{
int *v4; // r4
unsigned __int8 *v5; // r6
@@ -1096,7 +1096,7 @@ int __fastcall hdcp2_rx_AKE_Send_Cert(int a1, unsigned __int8 *a2, int a3, int *
char v19[159]; // [sp+Dh] [bp-A3h] BYREF
int v20; // [sp+ACh] [bp-4h]
- v7 = a1 == 0;
+ v7 = a1 == nullptr;
v20 = dword_4045C8;
result = 1;
if ( !v7 )
@@ -1108,7 +1108,7 @@ int __fastcall hdcp2_rx_AKE_Send_Cert(int a1, unsigned __int8 *a2, int a3, int *
if ( a4 != nullptr )
{
*a4 = 100;
- if ( *(_DWORD *)(a1 + 16) == 6 )
+ if ( a1->field10 == 6 )
{
if ( a3 == 523 )
{
@@ -1118,12 +1118,12 @@ int __fastcall hdcp2_rx_AKE_Send_Cert(int a1, unsigned __int8 *a2, int a3, int *
LABEL_8:
if ( ((int (__fastcall *)(unsigned __int8 *, int))loc_4043C8)(a1: v5, a2: 522) == 0 )
goto LABEL_18;
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v9 = 103;
goto LABEL_15;
}
LABEL_7:
- *(_BYTE *)(a1 + 45) = 1;
+ a1->field2D = 1;
goto LABEL_8;
}
}
@@ -1131,7 +1131,7 @@ LABEL_7:
{
if ( a2[530] == 2 )
{
- *(_DWORD *)(a1 + 36) = 22;
+ a1->field18[3] = 22;
v10 = a2[526];
v11 = a2[522];
v12 = a2[528];
@@ -1139,27 +1139,27 @@ LABEL_7:
v14 = a2[525];
v15 = a2[529];
v16 = a2[523];
- *(_BYTE *)(a1 + 268) = a2[527];
- *(_BYTE *)(a1 + 264) = v16;
- *(_BYTE *)(a1 + 267) = v10;
- *(_BYTE *)(a1 + 269) = v12;
- *(_BYTE *)(a1 + 270) = v15;
- *(_BYTE *)(a1 + 263) = v11;
- *(_BYTE *)(a1 + 265) = v13;
- *(_BYTE *)(a1 + 266) = v14;
+ a1->field107[5] = a2[527];
+ a1->field107[1] = v16;
+ a1->field107[4] = v10;
+ a1->field107[6] = v12;
+ a1->field107[7] = v15;
+ a1->field107[0] = v11;
+ a1->field107[2] = v13;
+ a1->field107[3] = v14;
sub_401058();
if ( v5[532] << 31 == 0 )
goto LABEL_8;
goto LABEL_7;
}
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v9 = 104;
LABEL_15:
*v4 = v9;
result = 0;
goto LABEL_16;
}
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v9 = 109;
goto LABEL_15;
}
@@ -1173,16 +1173,16 @@ LABEL_18:
sub_401058();
sub_401058();
sub_401058();
- *(_BYTE *)(a1 + 84) = v5[136] >> 4;
+ a1->field4F[5] = v5[136] >> 4;
if ( sub_401A8A() != 0 )
goto LABEL_21;
if ( sub_401B02() != 0 )
{
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
*v4 = 112;
goto LABEL_21;
}
- if ( *(_DWORD *)(a1 + 616) != 0 && sub_401A50() != 0 )
+ if ( a1->field254[5] != 0 && sub_401A50() != 0 )
goto LABEL_21;
bzero(result: v19, a2: 0x9Bu);
v17 = sub_401988();
@@ -1191,7 +1191,7 @@ LABEL_18:
if ( v17 == 23 )
{
v18 = 112;
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
result = 17;
goto LABEL_31;
}
@@ -1200,8 +1200,8 @@ LABEL_21:
}
else
{
- if ( receiver_id_lookup(a1) == 0 )
- *(_DWORD *)(a1 + 40) = 1;
+ if ( receiver_id_lookup((int)a1) == 0 )
+ a1->field18[4] = 1;
v18 = 0;
result = 0;
LABEL_31:
@@ -1391,76 +1391,76 @@ LABEL_6:
}
/* ==== hdcp2_rx_AKE_Send_Pairing_Info [tier=MNEM size=208] ==== */
-int __fastcall hdcp2_rx_AKE_Send_Pairing_Info(int a1, int *a2, int a3, int *a4)
+int __fastcall hdcp2_rx_AKE_Send_Pairing_Info(struct hdcp2_session *a1, int *a2, int a3, int *a4)
{
int result; // r0
- __int16 v7; // r7
+ unsigned __int16 v7; // r7
unsigned int v8; // r3
- __int16 v9; // r12
- __int16 v10; // lr
+ unsigned __int16 v9; // r12
+ unsigned __int16 v10; // lr
unsigned int v11; // r6
unsigned int v12; // r3
- char v13; // r12
- char v14; // r4
- char v15; // r7
- char v16; // r6
- char v17; // r2
+ unsigned __int8 v13; // r12
+ unsigned __int8 v14; // r4
+ unsigned __int8 v15; // r7
+ unsigned __int8 v16; // r6
+ unsigned __int8 v17; // r2
int v18; // r0
result = 1;
- if ( a1 != 0 && a2 != nullptr && a4 != nullptr )
+ if ( a1 != nullptr && a2 != nullptr && a4 != nullptr )
{
if ( a3 == 16 )
{
*a4 = 100;
- v7 = *(_WORD *)(a1 + 406);
- v8 = *(unsigned __int16 *)(a1 + 408);
- v9 = *(_WORD *)(a1 + 404);
- *(_BYTE *)(a1 + 553) = v7;
- v10 = *(_WORD *)(a1 + 402);
+ v7 = a1->field192[2];
+ v8 = a1->field192[3];
+ v9 = a1->field192[1];
+ a1->field225[4] = v7;
+ v10 = a1->field192[0];
v11 = v8 >> 8;
- *(_BYTE *)(a1 + 555) = v8;
- *(_BYTE *)(a1 + 554) = HIBYTE(v7);
- *(_BYTE *)(a1 + 552) = HIBYTE(v9);
- *(_BYTE *)(a1 + 550) = HIBYTE(v10);
- v12 = *(_DWORD *)(a1 + 36);
- *(_BYTE *)(a1 + 551) = v9;
- *(_BYTE *)(a1 + 549) = v10;
- *(_BYTE *)(a1 + 556) = v11;
+ a1->field225[6] = v8;
+ a1->field225[5] = HIBYTE(v7);
+ a1->field225[3] = HIBYTE(v9);
+ a1->field225[1] = HIBYTE(v10);
+ v12 = a1->field18[3];
+ a1->field225[2] = v9;
+ a1->field225[0] = v10;
+ a1->field225[7] = v11;
if ( v12 < 0x16 )
{
- *(_BYTE *)(a1 + 557) = 0;
- *(_BYTE *)(a1 + 561) = 0;
- *(_BYTE *)(a1 + 564) = 0;
- *(_BYTE *)(a1 + 563) = 0;
- *(_BYTE *)(a1 + 562) = 0;
- *(_BYTE *)(a1 + 560) = 0;
- *(_BYTE *)(a1 + 559) = 0;
- *(_BYTE *)(a1 + 558) = 0;
+ a1->field225[8] = 0;
+ a1->field225[12] = 0;
+ a1->field225[15] = 0;
+ a1->field225[14] = 0;
+ a1->field225[13] = 0;
+ a1->field225[11] = 0;
+ a1->field225[10] = 0;
+ a1->field225[9] = 0;
}
else
{
- v13 = *(_BYTE *)(a1 + 264);
- *(_BYTE *)(a1 + 561) = *(_BYTE *)(a1 + 267);
- *(_BYTE *)(a1 + 557) = *(_BYTE *)(a1 + 263);
- v14 = *(_BYTE *)(a1 + 269);
- v15 = *(_BYTE *)(a1 + 265);
- v16 = *(_BYTE *)(a1 + 266);
- v17 = *(_BYTE *)(a1 + 268);
- *(_BYTE *)(a1 + 564) = *(_BYTE *)(a1 + 270);
- *(_BYTE *)(a1 + 563) = v14;
- *(_BYTE *)(a1 + 562) = v17;
- *(_BYTE *)(a1 + 560) = v16;
- *(_BYTE *)(a1 + 559) = v15;
- *(_BYTE *)(a1 + 558) = v13;
+ v13 = a1->field107[1];
+ a1->field225[12] = a1->field107[4];
+ a1->field225[8] = a1->field107[0];
+ v14 = a1->field107[6];
+ v15 = a1->field107[2];
+ v16 = a1->field107[3];
+ v17 = a1->field107[5];
+ a1->field225[15] = a1->field107[7];
+ a1->field225[14] = v14;
+ a1->field225[13] = v17;
+ a1->field225[11] = v16;
+ a1->field225[10] = v15;
+ a1->field225[9] = v13;
}
sub_401058();
- stream_slot_alloc(a1);
+ stream_slot_alloc((int)a1);
v18 = 0;
}
else
{
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v18 = 109;
}
*a4 = v18;
diff --git a/fw/decomp/hdcp_reference_hdcp2.c b/fw/decomp/hdcp_reference_hdcp2.c
index 4b7bd77..c13c3b7 100644
--- a/fw/decomp/hdcp_reference_hdcp2.c
+++ b/fw/decomp/hdcp_reference_hdcp2.c
@@ -2151,7 +2151,7 @@ int __fastcall hdcp2_process_rx_message(int a1, int *a2, unsigned __int8 *a3, un
}
/* ==== hdcp2_rx_AKE_Send_Cert [tier=EXACT size=464] ==== */
-int __fastcall hdcp2_rx_AKE_Send_Cert(int a1, unsigned __int8 *a2, int a3, int *a4)
+int __fastcall hdcp2_rx_AKE_Send_Cert(struct hdcp2_session *a1, unsigned __int8 *a2, int a3, int *a4)
{
int *v4; // r4
unsigned __int8 *v5; // r6
@@ -2181,7 +2181,7 @@ int __fastcall hdcp2_rx_AKE_Send_Cert(int a1, unsigned __int8 *a2, int a3, int *
int v30; // [sp+ACh] [bp-4h]
v7 = off_403224;
- v9 = a1 == 0;
+ v9 = a1 == nullptr;
v30 = *off_403224;
result = 1;
if ( !v9 )
@@ -2193,7 +2193,7 @@ int __fastcall hdcp2_rx_AKE_Send_Cert(int a1, unsigned __int8 *a2, int a3, int *
if ( a4 != nullptr )
{
*a4 = 100;
- if ( *(_DWORD *)(a1 + 16) == 6 )
+ if ( a1->field10 == 6 )
{
if ( a3 == 523 )
{
@@ -2204,12 +2204,12 @@ int __fastcall hdcp2_rx_AKE_Send_Cert(int a1, unsigned __int8 *a2, int a3, int *
LABEL_8:
if ( ((int (__fastcall *)(unsigned __int8 *, int))loc_404118)(a1: v5, a2: 522) == 0 )
goto LABEL_18;
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v11 = 103;
goto LABEL_15;
}
LABEL_7:
- *(_BYTE *)(a1 + 45) = 1;
+ a1->field2D = 1;
v6 = 2;
goto LABEL_8;
}
@@ -2218,7 +2218,7 @@ LABEL_7:
{
if ( a2[530] == 2 )
{
- *(_DWORD *)(a1 + 36) = 22;
+ a1->field18[3] = 22;
v12 = a2[526];
v13 = a2[522];
v14 = a2[528];
@@ -2226,28 +2226,28 @@ LABEL_7:
v16 = a2[525];
v17 = a2[529];
v18 = a2[523]; // a4
- *(_BYTE *)(a1 + 268) = a2[527];
- *(_BYTE *)(a1 + 264) = v18;
- *(_BYTE *)(a1 + 267) = v12;
- *(_BYTE *)(a1 + 269) = v14;
- *(_BYTE *)(a1 + 270) = v17; // unsigned int
- *(_BYTE *)(a1 + 263) = v13;
- *(_BYTE *)(a1 + 265) = v15;
- *(_BYTE *)(a1 + 266) = v16;
- sub_401058(a1: a1 + 271, a2: a2 + 530, a3: 3);// result
+ a1->field107[5] = a2[527];
+ a1->field107[1] = v18;
+ a1->field107[4] = v12;
+ a1->field107[6] = v14;
+ a1->field107[7] = v17; // unsigned int
+ a1->field107[0] = v13;
+ a1->field107[2] = v15;
+ a1->field107[3] = v16;
+ sub_401058(); // result
v6 = 1;
if ( v5[532] << 31 == 0 )
goto LABEL_8;
goto LABEL_7;
}
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v11 = 104;
LABEL_15:
*v4 = v11;
result = 0;
goto LABEL_16;
}
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v11 = 109;
goto LABEL_15;
}
@@ -2258,11 +2258,11 @@ LABEL_16:
{
((void (__fastcall *)(int, int))loc_404338)(a1: result, a2: *v7 - v30);
LABEL_18:
- sub_401058(a1: a1 + 79, a2: v5, a3: 5); // unsigned int
- sub_401058(a1: a1 + 418, a2: v5 + 5, a3: 128);// unsigned int
- sub_401058(a1: a1 + 546, a2: v5 + 133, a3: 3);// unsigned int
- *(_BYTE *)(a1 + 84) = v5[136] >> 4;
- if ( disp_hdcp2_set_receiver_id(a1: *(_DWORD *)(a1 + 4), a2: v6) != 0 )
+ sub_401058(); // unsigned int
+ sub_401058(); // unsigned int
+ sub_401058(); // unsigned int
+ a1->field4F[5] = v5[136] >> 4;
+ if ( disp_hdcp2_set_receiver_id(a1: a1->field04, a2: v6) != 0 )
goto LABEL_21; // a1
v19 = v5[1];
v20 = v5[2] | (v5[3] << 8);
@@ -2270,25 +2270,25 @@ LABEL_18:
v25 = *v5 | (v19 << 8) | (v20 << 16);
if ( disp_srm_check_receiver_id(a1: (int)&v25) != 0 )// a1
{
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
*v4 = 112;
goto LABEL_21;
}
- v6 = a1 + 616;
- if ( *(_DWORD *)(a1 + 616) != 0 && disp_hdcp2_teardown(a1: a1 + 616) != 0 )
+ v6 = (int)&a1->field254[5];
+ if ( a1->field254[5] != 0 && disp_hdcp2_teardown(a1: (int)&a1->field254[5]) != 0 )
goto LABEL_21; // a1
bzero(result: v29, a2: 0x9Bu);
v21 = v5[1];
v22 = v5[2] | (v5[3] << 8);
v28 = v5[4];
v27 = *v5 | (v21 << 8) | (v22 << 16);
- v23 = disp_hdcp2_set_topology(a1: *(_DWORD *)(a1 + 4), a2: (int)&v27, a3: 1, a4: a1 + 616);// a3
+ v23 = disp_hdcp2_set_topology(a1: a1->field04, a2: (int)&v27, a3: 1, a4: (int)&a1->field254[5]);// a3
if ( v23 != 0 )
{
if ( v23 == 23 )
{
v24 = 112;
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
result = 17;
goto LABEL_31;
}
@@ -2297,8 +2297,8 @@ LABEL_21:
}
else
{
- if ( receiver_id_lookup(a1) == 0 )
- *(_DWORD *)(a1 + 40) = 1;
+ if ( receiver_id_lookup((int)a1) == 0 )
+ a1->field18[4] = 1;
v24 = 0;
result = 0;
LABEL_31:
@@ -2480,76 +2480,76 @@ LABEL_6:
}
/* ==== hdcp2_rx_AKE_Send_Pairing_Info [tier=EXACT size=208] ==== */
-int __fastcall hdcp2_rx_AKE_Send_Pairing_Info(int a1, int *a2, int a3, int *a4)
+int __fastcall hdcp2_rx_AKE_Send_Pairing_Info(struct hdcp2_session *a1, int *a2, int a3, int *a4)
{
int result; // r0
- __int16 v7; // r7
+ unsigned __int16 v7; // r7
unsigned int v8; // r3
- __int16 v9; // r12
- __int16 v10; // lr
+ unsigned __int16 v9; // r12
+ unsigned __int16 v10; // lr
unsigned int v11; // r6
unsigned int v12; // r3
- char v13; // r12
- char v14; // r4
- char v15; // r7
- char v16; // r6
- char v17; // r2
+ unsigned __int8 v13; // r12
+ unsigned __int8 v14; // r4
+ unsigned __int8 v15; // r7
+ unsigned __int8 v16; // r6
+ unsigned __int8 v17; // r2
int v18; // r0
result = 1;
- if ( a1 != 0 && a2 != nullptr && a4 != nullptr )
+ if ( a1 != nullptr && a2 != nullptr && a4 != nullptr )
{
if ( a3 == 16 )
{
*a4 = 100;
- v7 = *(_WORD *)(a1 + 406);
- v8 = *(unsigned __int16 *)(a1 + 408);
- v9 = *(_WORD *)(a1 + 404);
- *(_BYTE *)(a1 + 553) = v7;
- v10 = *(_WORD *)(a1 + 402);
+ v7 = a1->field192[2];
+ v8 = a1->field192[3];
+ v9 = a1->field192[1];
+ a1->field225[4] = v7;
+ v10 = a1->field192[0];
v11 = v8 >> 8;
- *(_BYTE *)(a1 + 555) = v8;
- *(_BYTE *)(a1 + 554) = HIBYTE(v7);
- *(_BYTE *)(a1 + 552) = HIBYTE(v9);
- *(_BYTE *)(a1 + 550) = HIBYTE(v10);
- v12 = *(_DWORD *)(a1 + 36); // a4
- *(_BYTE *)(a1 + 551) = v9;
- *(_BYTE *)(a1 + 549) = v10;
- *(_BYTE *)(a1 + 556) = v11;
+ a1->field225[6] = v8;
+ a1->field225[5] = HIBYTE(v7);
+ a1->field225[3] = HIBYTE(v9);
+ a1->field225[1] = HIBYTE(v10);
+ v12 = a1->field18[3]; // a4
+ a1->field225[2] = v9;
+ a1->field225[0] = v10;
+ a1->field225[7] = v11;
if ( v12 < 0x16 )
{
- *(_BYTE *)(a1 + 557) = 0;
- *(_BYTE *)(a1 + 561) = 0;
- *(_BYTE *)(a1 + 564) = 0;
- *(_BYTE *)(a1 + 563) = 0;
- *(_BYTE *)(a1 + 562) = 0;
- *(_BYTE *)(a1 + 560) = 0;
- *(_BYTE *)(a1 + 559) = 0;
- *(_BYTE *)(a1 + 558) = 0;
+ a1->field225[8] = 0;
+ a1->field225[12] = 0;
+ a1->field225[15] = 0;
+ a1->field225[14] = 0;
+ a1->field225[13] = 0;
+ a1->field225[11] = 0;
+ a1->field225[10] = 0;
+ a1->field225[9] = 0;
}
else
{
- v13 = *(_BYTE *)(a1 + 264);
- *(_BYTE *)(a1 + 561) = *(_BYTE *)(a1 + 267);
- *(_BYTE *)(a1 + 557) = *(_BYTE *)(a1 + 263);
- v14 = *(_BYTE *)(a1 + 269);
- v15 = *(_BYTE *)(a1 + 265);
- v16 = *(_BYTE *)(a1 + 266);
- v17 = *(_BYTE *)(a1 + 268);
- *(_BYTE *)(a1 + 564) = *(_BYTE *)(a1 + 270);
- *(_BYTE *)(a1 + 563) = v14;
- *(_BYTE *)(a1 + 562) = v17;
- *(_BYTE *)(a1 + 560) = v16;
- *(_BYTE *)(a1 + 559) = v15;
- *(_BYTE *)(a1 + 558) = v13;
+ v13 = a1->field107[1];
+ a1->field225[12] = a1->field107[4];
+ a1->field225[8] = a1->field107[0];
+ v14 = a1->field107[6];
+ v15 = a1->field107[2];
+ v16 = a1->field107[3];
+ v17 = a1->field107[5];
+ a1->field225[15] = a1->field107[7];
+ a1->field225[14] = v14;
+ a1->field225[13] = v17;
+ a1->field225[11] = v16;
+ a1->field225[10] = v15;
+ a1->field225[9] = v13;
}
- sub_401058(a1: a1 + 354, a2, a3: 16); // unsigned int
- stream_slot_alloc(a1); // int
+ sub_401058(); // unsigned int
+ stream_slot_alloc((int)a1); // int
v18 = 0;
}
else
{
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
v18 = 109;
}
*a4 = v18;
@@ -2709,304 +2709,295 @@ LABEL_14:
}
/* ==== hdcp2_rx_RepeaterAuth_ReceiverID_List [tier=EXACT size=1032] ==== */
-int __fastcall hdcp2_rx_RepeaterAuth_ReceiverID_List(int a1, char *a2, unsigned int a3, int *a4)
+int __fastcall hdcp2_rx_RepeaterAuth_ReceiverID_List(struct hdcp2_session *a1, char *a2, unsigned int a3, int *a4)
{
int *v4; // r11
int v9; // r3
int result; // r0
- int v11; // r8
- int v12; // r10
+ unsigned int v11; // r8
+ unsigned int v12; // r10
int v13; // r9
- int v14; // r9
- unsigned int v15; // r0
- int v16; // r6
- bool v17; // zf
- int v18; // r0
- int v19; // r9
- unsigned int v20; // r0
- int v21; // r1
- int v22; // r8
- int v23; // r7
- __int64 v24; // r2
- char *v25; // r0
- int v26; // r1
- unsigned int v27; // r8
- int v28; // r7
- unsigned int v29; // r1
- int v30; // r0
- int v31; // r1
- int v32; // r2
- int v33; // r1
- char *v34; // r1
- int v35; // r3
- int v36; // r7
+ unsigned int v14; // r0
+ bool v15; // zf
+ int v16; // r0
+ unsigned int v17; // r0
+ unsigned int v18; // r1
+ int field38; // r8
+ int v20; // r7
+ __int64 v21; // r2
+ char *v22; // r0
+ unsigned int v23; // r1
+ unsigned int v24; // r8
+ int v25; // r7
+ unsigned int v26; // r1
+ int v27; // r0
+ int v28; // r1
+ unsigned int v29; // r2
+ int v30; // r1
+ char *v31; // r1
+ unsigned int v32; // r3
+ unsigned int v33; // r7
unsigned int i; // r7
- unsigned __int8 *v38; // r1
- int v39; // r0
- int v40; // r2
- int v41; // r3
- int v42; // r1
- int v43; // r0
- int v44; // r0
- char v45; // [sp+4h] [bp-210h]
- int v46; // [sp+8h] [bp-20Ch]
- int v47; // [sp+Ch] [bp-208h]
- int v48; // [sp+10h] [bp-204h]
- int v49; // [sp+14h] [bp-200h]
- int v50; // [sp+18h] [bp-1FCh] BYREF
- unsigned __int16 v51; // [sp+1Ch] [bp-1F8h] BYREF
- unsigned int v52; // [sp+20h] [bp-1F4h] BYREF
- unsigned __int8 v53; // [sp+24h] [bp-1F0h]
- _BYTE v54[155]; // [sp+25h] [bp-1EFh] BYREF
- _DWORD v55[8]; // [sp+C0h] [bp-154h] BYREF
- int v56[8]; // [sp+E0h] [bp-134h] BYREF
- _DWORD v57[50]; // [sp+100h] [bp-114h] BYREF
- int v58; // [sp+1C8h] [bp-4Ch] BYREF
- int v59[10]; // [sp+1E8h] [bp-2Ch] BYREF
- int v60; // [sp+210h] [bp-4h]
+ unsigned __int8 *v35; // r1
+ int v36; // r0
+ int v37; // r2
+ int v38; // r3
+ int v39; // r1
+ unsigned int field04; // r0
+ int v41; // r0
+ char v42; // [sp+4h] [bp-210h]
+ int v43; // [sp+8h] [bp-20Ch]
+ int v44; // [sp+Ch] [bp-208h]
+ int v45; // [sp+10h] [bp-204h]
+ int v46; // [sp+14h] [bp-200h]
+ int v47; // [sp+18h] [bp-1FCh] BYREF
+ unsigned __int16 v48; // [sp+1Ch] [bp-1F8h] BYREF
+ unsigned int v49; // [sp+20h] [bp-1F4h] BYREF
+ unsigned __int8 v50; // [sp+24h] [bp-1F0h]
+ _BYTE v51[155]; // [sp+25h] [bp-1EFh] BYREF
+ _DWORD v52[8]; // [sp+C0h] [bp-154h] BYREF
+ int v53[8]; // [sp+E0h] [bp-134h] BYREF
+ _DWORD v54[58]; // [sp+100h] [bp-114h] BYREF
+ int v55[10]; // [sp+1E8h] [bp-2Ch] BYREF
+ int v56; // [sp+210h] [bp-4h]
v4 = off_40394C;
- v60 = *off_40394C;
- v51 = 0;
- bzero_core(result: v57, a2: 0x10Cu);
+ v56 = *off_40394C;
+ v48 = 0;
+ bzero_core(result: v54, a2: 0x10Cu);
result = 1;
- if ( a1 == 0 || a2 == nullptr || a4 == nullptr )
+ if ( a1 == nullptr || a2 == nullptr || a4 == nullptr )
goto LABEL_33;
*a4 = 100;
- if ( *(_BYTE *)(a1 + 589) != 0 )
+ if ( a1->field24D != 0 )
{ // a1
- if ( disp_hdcp2_disable(a1: *(_DWORD *)(a1 + 4)) != 0 )
+ if ( disp_hdcp2_disable(a1: a1->field04) != 0 )
{
result = 20;
goto LABEL_33;
}
- *(_BYTE *)(a1 + 589) = 0;
+ a1->field24D = 0;
}
- if ( *(_DWORD *)(a1 + 16) != 6 )
+ if ( a1->field10 != 6 )
{
if ( a3 == 176 )
{
- v45 = *a2;
- v14 = (unsigned __int8)a2[1]; // unsigned int
- buffer_copy_bounded(a1: (int *)a2, a2: (int)&v51, a3: 2u, a4: v9);// int *
- v15 = v51;
- v11 = (v51 & 8) != 0;
- *(_DWORD *)(a1 + 52) = v11;
- *(_DWORD *)(a1 + 68) = (v15 & 2) != 0;
- *(_DWORD *)(a1 + 64) = v15 & 1;
- *(_DWORD *)(a1 + 60) = (v15 >> 9) & 7;
- v16 = (v15 >> 4) & 0x1F;
- *(_BYTE *)(a1 + 56) = v16;
- v12 = (v15 & 4) != 0;
- *(_DWORD *)(a1 + 48) = v12;
- v47 = (unsigned __int8)a2[2];
- v49 = (unsigned __int8)a2[3];
- v48 = (unsigned __int8)a2[4];
- v46 = 16; // unsigned int
- sub_401058(a1: v56, a2: a2 + 5, a3: 16); // result
- sub_401058(a1: a1 + 85, a2: a2 + 21, a3: 5 * v16);// unsigned int
- a3 = v14 << 8;
+ v42 = *a2;
+ v13 = (unsigned __int8)a2[1]; // unsigned int
+ buffer_copy_bounded(a1: (int *)a2, a2: (int)&v48, a3: 2u, a4: v9);// int *
+ v14 = v48;
+ v11 = (v48 & 8) != 0;
+ a1->field30[1] = v11;
+ a1->field3C[2] = (v14 & 2) != 0;
+ a1->field3C[1] = v14 & 1;
+ a1->field3C[0] = (v14 >> 9) & 7;
+ a1->field38 = (v14 >> 4) & 0x1F;
+ v12 = (v14 & 4) != 0;
+ a1->field30[0] = v12;
+ v44 = (unsigned __int8)a2[2];
+ v46 = (unsigned __int8)a2[3];
+ v45 = (unsigned __int8)a2[4];
+ v43 = 16; // unsigned int
+ sub_401058(); // result
+ sub_401058(); // unsigned int
+ a3 = v13 << 8;
goto LABEL_17;
}
goto LABEL_27;
}
- if ( *(_DWORD *)(a1 + 36) != 20 )
+ if ( a1->field18[3] != 20 )
{
if ( a3 <= 1 )
goto LABEL_27;
v11 = (unsigned __int8)a2[1];
- *(_DWORD *)(a1 + 52) = v11;
+ a1->field30[1] = v11;
v12 = (unsigned __int8)*a2;
- *(_DWORD *)(a1 + 48) = v12;
- v19 = (unsigned __int8)a2[2];
- *(_BYTE *)(a1 + 56) = v19;
- *(_DWORD *)(a1 + 60) = (unsigned __int8)a2[3];
- *(_DWORD *)(a1 + 64) = (unsigned __int8)a2[5];
- *(_DWORD *)(a1 + 68) = (unsigned __int8)a2[4];
+ a1->field30[0] = v12;
+ a1->field38 = a2[2];
+ a1->field3C[0] = (unsigned __int8)a2[3];
+ a1->field3C[1] = (unsigned __int8)a2[5];
+ a1->field3C[2] = (unsigned __int8)a2[4];
if ( a2[1] != 0 || *a2 != 0 )
{
LABEL_30:
- *(_DWORD *)(a1 + 24) = 7;
- v18 = 107;
+ a1->field18[0] = 7;
+ v16 = 107;
goto LABEL_31;
}
if ( 5 * (unsigned __int8)a2[2] + 25 == a3 )
{
- v47 = (unsigned __int8)a2[6];
- v49 = (unsigned __int8)a2[7];
- v48 = (unsigned __int8)a2[8];
- v46 = 16; // unsigned int
- sub_401058(a1: v56, a2: a2 + 9, a3: 16); // result
- sub_401058(a1: a1 + 85, a2: a2 + 25, a3: 5 * v19);// unsigned int
+ v44 = (unsigned __int8)a2[6];
+ v46 = (unsigned __int8)a2[7];
+ v45 = (unsigned __int8)a2[8];
+ v43 = 16; // unsigned int
+ sub_401058(); // result
+ sub_401058(); // unsigned int
a3 = 0;
- v45 = 0;
+ v42 = 0;
goto LABEL_17;
}
LABEL_27:
- *(_DWORD *)(a1 + 24) = 7;
- v18 = 109;
+ a1->field18[0] = 7;
+ v16 = 109;
goto LABEL_31;
}
if ( a3 <= 1 )
goto LABEL_27;
v11 = (unsigned __int8)a2[1];
- *(_DWORD *)(a1 + 52) = v11;
+ a1->field30[1] = v11;
v12 = (unsigned __int8)*a2;
- *(_DWORD *)(a1 + 48) = v12;
- v13 = (unsigned __int8)a2[2];
- *(_BYTE *)(a1 + 56) = v13;
- *(_DWORD *)(a1 + 60) = (unsigned __int8)a2[3];
+ a1->field30[0] = v12;
+ a1->field38 = a2[2];
+ a1->field3C[0] = (unsigned __int8)a2[3];
if ( a2[1] != 0 || *a2 != 0 )
goto LABEL_30;
if ( 5 * (unsigned __int8)a2[2] + 36 != a3 )
goto LABEL_27;
a3 = 0;
- v46 = 32;
- *(_DWORD *)(a1 + 72) = 0; // unsigned int
- sub_401058(a1: v56, a2: a2 + 4, a3: 32); // result
- sub_401058(a1: a1 + 85, a2: a2 + 36, a3: 5 * v13);// unsigned int
+ v43 = 32;
+ a1->field3C[3] = 0; // unsigned int
+ sub_401058(); // result
+ sub_401058(); // unsigned int
+ v42 = 0;
+ v44 = 0;
+ v46 = 0;
v45 = 0;
- v47 = 0;
- v49 = 0;
- v48 = 0;
LABEL_17:
- v17 = v11 == 0;
+ v15 = v11 == 0;
if ( v11 == 0 )
- v17 = v12 == 0;
- if ( !v17 )
+ v15 = v12 == 0;
+ if ( !v15 )
goto LABEL_30;
- if ( *(_DWORD *)(a1 + 64) == 0 && *(_DWORD *)(a1 + 68) == 0 )
+ if ( a1->field3C[1] == 0 && a1->field3C[2] == 0 )
goto LABEL_35;
- if ( (unsigned int)(*(_DWORD *)(a1 + 28) - 1) > 1 )
+ if ( a1->field18[1] - 1 > 1 )
goto LABEL_35;
- *(_DWORD *)(a1 + 32) = 0; // a2
- if ( disp_hdcp2_set_caps(a1: *(_DWORD *)(a1 + 4), a2: 1) == 0 )
+ a1->field18[2] = 0; // a2
+ if ( disp_hdcp2_set_caps(a1: a1->field04, a2: 1) == 0 )
goto LABEL_35; // a1
LABEL_25:
result = 17;
LABEL_33:
- while ( *v4 != v60 )
+ while ( *v4 != v56 )
{
- ((void (__fastcall *)(int, int))loc_404338)(a1: result, a2: *v4 - v60);
+ ((void (__fastcall *)(int, int))loc_404338)(a1: result, a2: *v4 - v56);
LABEL_35:
- v20 = v47 | (v49 << 8) | (v48 << 16);
- v21 = *(_DWORD *)(a1 + 72);
- if ( v20 != 0 && v21 == 0 || v21 == 1 && v20 < *(_DWORD *)(a1 + 596) )
+ v17 = v44 | (v46 << 8) | (v45 << 16);
+ v18 = a1->field3C[3];
+ if ( v17 != 0 && v18 == 0 || v18 == 1 && v17 < a1->field254[0] )
{
- *(_DWORD *)(a1 + 24) = 7;
- v18 = 108;
+ a1->field18[0] = 7;
+ v16 = 108;
LABEL_31:
- *a4 = v18;
+ *a4 = v16;
LABEL_32:
result = 0;
}
else
{
- v22 = *(unsigned __int8 *)(a1 + 56);
- *(_DWORD *)(a1 + 596) = v20;
- *(_DWORD *)(a1 + 72) = 1;
- v23 = 5 * v22;
- sub_401058(a1: v57, a2: a1 + 85, a3: 5 * v22);// unsigned int
- if ( *(_DWORD *)(a1 + 16) == 6 )
+ field38 = a1->field38;
+ a1->field254[0] = v17;
+ a1->field3C[3] = 1;
+ v20 = 5 * field38;
+ sub_401058(); // unsigned int
+ if ( a1->field10 == 6 )
{
- v24 = *(_QWORD *)(a1 + 48);
- *((_BYTE *)v57 + 5 * v22) = *(_DWORD *)(a1 + 60);
- v25 = (char *)v57 + v23;
- v26 = *(_DWORD *)(a1 + 36);
- v25[2] = BYTE4(v24);
- v25[1] = v22;
- v25[3] = v24;
- if ( v26 == 20 )
+ v21 = *(_QWORD *)a1->field30;
+ *((_BYTE *)v54 + 5 * field38) = a1->field3C[0];
+ v22 = (char *)v54 + v20;
+ v23 = a1->field18[3];
+ v22[2] = BYTE4(v21);
+ v22[1] = field38;
+ v22[3] = v21;
+ if ( v23 == 20 )
{
- v27 = v46;
- a3 = (unsigned int)v57;
- v28 = v23 + 4;
+ v24 = v43;
+ a3 = (unsigned int)v54;
+ v25 = v20 + 4;
goto LABEL_48;
}
- v32 = *(_DWORD *)(a1 + 68);
- a3 = (unsigned int)v57;
- v25[5] = *(_QWORD *)(a1 + 64);
- v30 = 9;
- *((_BYTE *)&v57[1] + v23) = v32; // a4
- v31 = 6;
- v27 = v46;
+ v29 = a1->field3C[2];
+ a3 = (unsigned int)v54;
+ v22[5] = *(_QWORD *)&a1->field3C[1];
+ v27 = 9;
+ *((_BYTE *)&v54[1] + v20) = v29; // a4
+ v28 = 6;
+ v24 = v43;
}
else
{
- v27 = v46;
- v29 = a3 >> 8;
- *((_BYTE *)v57 + v23) = v45 | a3;
- a3 = (unsigned int)v57;
- *((_BYTE *)v57 + v23 + 1) = v29;
- v30 = 5;
- v31 = 2;
+ v24 = v43;
+ v26 = a3 >> 8;
+ *((_BYTE *)v54 + v20) = v42 | a3;
+ a3 = (unsigned int)v54;
+ *((_BYTE *)v54 + v20 + 1) = v26;
+ v27 = 5;
+ v28 = 2;
}
- v33 = v31 + v23;
- v28 = v23 + v30;
- *((_BYTE *)v57 + v33) = v47;
- v34 = (char *)v57 + v33;
- v34[2] = v48;
- v34[1] = v49;
+ v30 = v28 + v20;
+ v25 = v20 + v27;
+ *((_BYTE *)v54 + v30) = v44;
+ v31 = (char *)v54 + v30;
+ v31[2] = v45;
+ v31[1] = v46;
LABEL_48:
- sub_401058(a1: &v58, a2: a1 + 274, a3: 32);// unsigned int
- v59[8] = v27;
- memcpy_aligned(result: v59, a2: v56, a3: v27);// unsigned int
+ sub_401058(); // unsigned int
+ v55[8] = v24;
+ memcpy_aligned(result: v55, a2: v53, a3: v24);// unsigned int
if ( ((int (__fastcall *)(_DWORD *, int, _DWORD *, int *, int))loc_403FF4)(
- a1: v57,
- a2: v28,
- a3: v55,
- a4: &v50,
+ a1: v54,
+ a2: v25,
+ a3: v52,
+ a4: &v47,
a5: 32) != 0 )
{
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
*a4 = 106;
- bzero_core(result: v55, a2: 0x20u);
- bzero_core(result: v57, a2: 0x10Cu);
+ bzero_core(result: v52, a2: 0x20u);
+ bzero_core(result: v54, a2: 0x10Cu);
goto LABEL_32;
}
- if ( v50 == 32 )
+ if ( v47 == 32 )
{
- v35 = v55[5];
- a3 = v55[6];
- v36 = v55[7];
- *(_DWORD *)(a1 + 600) = v55[4];
- *(_DWORD *)(a1 + 604) = v35;
- *(_DWORD *)(a1 + 608) = a3;
- *(_DWORD *)(a1 + 612) = v36;
+ v32 = v52[5];
+ a3 = v52[6];
+ v33 = v52[7];
+ a1->field254[1] = v52[4];
+ a1->field254[2] = v32;
+ a1->field254[3] = a3;
+ a1->field254[4] = v33;
}
- bzero_core(result: v55, a2: 0x20u);
- bzero_core(result: v57, a2: 0x10Cu);
- for ( i = 0; i < *(unsigned __int8 *)(a1 + 56); ++i )
+ bzero_core(result: v52, a2: 0x20u);
+ bzero_core(result: v54, a2: 0x10Cu);
+ for ( i = 0; i < a1->field38; ++i )
{
- v38 = (unsigned __int8 *)(a1 + 85 + 5 * i);
- v39 = *v38;
- a3 = v38[3];
- v40 = v38[1];
- v41 = v38[2];
- v53 = v38[4];
- v52 = v39 | (v40 << 8) | ((v41 | (a3 << 8)) << 16);
- if ( disp_srm_check_receiver_id(a1: (int)&v52) != 0 )
+ v35 = &a1->pad55[5 * i];
+ v36 = *v35;
+ a3 = v35[3];
+ v37 = v35[1];
+ v38 = v35[2];
+ v50 = v35[4];
+ v49 = v36 | (v37 << 8) | ((v38 | (a3 << 8)) << 16);
+ if ( disp_srm_check_receiver_id(a1: (int)&v49) != 0 )
goto LABEL_60; // a1
}
- if ( disp_hdcp2_teardown(a1: a1 + 616) != 0 )
+ if ( disp_hdcp2_teardown(a1: (int)&a1->field254[5]) != 0 )
goto LABEL_25; // a1
- bzero(result: v54, a2: 0x9Bu);
- v42 = *(unsigned __int8 *)(a1 + 79);
- v53 = *(_BYTE *)(a1 + 83);
- v43 = *(_DWORD *)(a1 + 4); // a1
- v52 = v42
- | (*(unsigned __int8 *)(a1 + 80) << 8)
- | ((*(unsigned __int8 *)(a1 + 81) | (*(unsigned __int8 *)(a1 + 82) << 8)) << 16);
- v44 = disp_hdcp2_set_topology(a1: v43, a2: (int)&v52, a3: 1, a4: a1 + 616);// a3
- if ( v44 != 0
- || (a3 = *(unsigned __int8 *)(a1 + 56),
- sub_401058(a1: &v52, a2: a1 + 85, a3: 5 * a3),
- (v44 = disp_hdcp2_set_topology(a1: *(_DWORD *)(a1 + 4), a2: (int)&v52, a3, a4: a1 + 616)) != 0) )// a4
+ bzero(result: v51, a2: 0x9Bu);
+ v39 = a1->field4F[0];
+ v50 = a1->field4F[4];
+ field04 = a1->field04; // a1
+ v49 = v39 | (a1->field4F[1] << 8) | ((a1->field4F[2] | (a1->field4F[3] << 8)) << 16);
+ v41 = disp_hdcp2_set_topology(a1: field04, a2: (int)&v49, a3: 1, a4: (int)&a1->field254[5]);// a3
+ if ( v41 != 0
+ || (a3 = a1->field38,
+ sub_401058(),
+ (v41 = disp_hdcp2_set_topology(a1: a1->field04, a2: (int)&v49, a3, a4: (int)&a1->field254[5])) != 0) )// a4
{
- if ( v44 != 23 )
+ if ( v41 != 23 )
goto LABEL_25;
LABEL_60:
- *(_DWORD *)(a1 + 24) = 7;
+ a1->field18[0] = 7;
*a4 = 112;
goto LABEL_25;
}