aboutsummaryrefslogtreecommitdiffstats
path: root/fw/pseudo/gcp.gcp_cmd03_ActivateDRMCertAuthSession.after.c
blob: 87b40356a6ba1a6130d97880aed374e0a8fa865e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
int __fastcall gcp_cmd03_ActivateDRMCertAuthSession(struct gcp_ctx *ctx, struct ta_params *params)
{
  unsigned __int64 *p_arg10; // r4
  unsigned int arg10; // r6
  int v5; // r4
  struct gcp_drm_session *v6; // r6
  unsigned int *p_state; // r7
  struct gcp_ctx *v8; // r4
  unsigned __int8 *body; // r0
  int v10; // r2
  int v11; // r3
  int v12; // r6
  _DWORD dst[65]; // [sp+8h] [bp-108h] BYREF
  int v15; // [sp+10Ch] [bp-4h]

  v15 = dword_405CE4;
  p_arg10 = &params->arg10;
  arg10 = params->arg10;
  gcp_log(level: 0, fmt: aAmdTaGcpActiva);
  if ( arg10 < 0x20 )
  {
    v6 = &ctx->drm[arg10];
    p_state = &v6->state;
    if ( v6->state == 1 )
    {
      gcp_lib_zero_fill_words(dst, len: 0x100u);
      v8 = (struct gcp_ctx *)((char *)p_arg10 + 4);
      sub_402820(a1: (int)v8, a2: (int)v8, a3: 256);
      v5 = gcp_cmdFE08_KeyExchangeAuthenticatedSession__h1(ctx: v8, params: (struct ta_params *)0x100);
      sub_402820(a1: (int)dst, a2: (int)dst, a3: 256);
      if ( v5 == 0 )
      {
        body = v6->body;
        v10 = dst[1];
        v11 = dst[2];
        v12 = dst[3];
        *(_DWORD *)body = dst[0];
        *((_DWORD *)body + 1) = v10;
        *((_DWORD *)body + 2) = v11;
        *((_DWORD *)body + 3) = v12;
        *p_state = 2;
      }
    }
    else
    {
      v5 = 1046;
    }
    gcp_log(level: 0, fmt: aAmdTaGcpActiva_0);
  }
  else
  {
    gcp_log(level: 0, fmt: (const char *)off_402714);
    v5 = 1043;
  }
  if ( dword_405CE4 != v15 )
  {
    ((void (__fastcall *)(int))loc_405CE8)(a1: dword_405CE4 - v15);
    JUMPOUT(0x4026B0);
  }
  return v5;
}