SepParseElamCertResources

NTSTATUS __stdcall SepParseElamCertResources(VOID *ResourceBase, UINT64 ResourceSize){
  NTSTATUS v2; 
  unsigned int v3; 
  WCHAR *v4; 
  WCHAR *v5; 
  NTSTATUS result; 
  WCHAR *v7; 
  WORD *v8; 
  unsigned int v9; 
  bool v10; 
  char v11; 
  WCHAR v12; 
  char v13; 
  unsigned int v14; 
  WCHAR v15; 
  unsigned __int16 *v16; 
  __int64 v17; 
  unsigned int v18; 
  WORD *v19; 
  WORD *v20; 
  unsigned int v21; 
  __int64 v22; 
  unsigned __int64 v23; 
  WORD v24; 
  unsigned __int64 v25; 
  __int64 v26; 
  __int16 v27; 
  __int64 v28; 
  __int64 v29; 
  __int64 v30; 
  WORD *v31; 
  __int64 v32; 
  int v33; 
  int v34; 
  WCHAR *v35; 
  unsigned int v36; 
  size_t pcchLength[2]; 
  size_t v38[2]; 
  WCHAR *v39; 
  __int16 v40[24]; 
  char v41[448]; 

  *(_QWORD *)pcchLength = 0i64;
  v2 = 0;
  *(_QWORD *)v38 = 0i64;
  if( ResourceSize - 2 > 0xFFFD )
    return -1073741811;
  v3 = *(unsigned __int16 *)ResourceBase;
  v4 = (WCHAR *)((char *)ResourceBase + ResourceSize);
  v39 = (WCHAR *)((char *)ResourceBase + ResourceSize);
  v5 = (WCHAR *)((char *)ResourceBase + 2);
  v36 = v3;
  v34 = 0;
  if( !v3 )
    return v2;
  while( 1 )
  {
    if( v5 + 1 > v4 )
      return -1073741811;
    result = RtlStringCchLengthW(v5, (unsigned __int64)((char *)v4 - (char *)v5) >> 1, (UINT64 *)pcchLength);
    if( result < 0 )
      return result;
    v7 = &v5[*(_QWORD *)pcchLength + 1];
    v8 = v7 + 1;
    v35 = v7;
    if( v7 + 1 >= v4 )
      return -1073741811;
    v9 = 0;
    v10 = 1;
    if( *v5 )
    {
      do
      {
        if( v9 >= 0x40 )
          return -1073741811;
        if( v10 )
        {
          if( v9 >= 0x40ui64 )
            _report_rangecheckfailure();
          v41[v9] = 0;
          v11 = 0;
        }
        else
        {
          v41[v9] *= 16;
          v11 = v41[v9];
        }
        v12 = *v5;
        if( *v5 == 32 )
        {
          if( !v10 )
            return -1073741811;
        }
        else
        {
          if( v12 <= 0x2Fu )
            return -1073741811;
          if( v12 > 0x39u )
          {
            if( v12 <= 0x40u )
              return -1073741811;
            if( v12 > 0x46u )
            {
              if( v12 <= 0x60u || v12 > 0x66u )
                return -1073741811;
              v13 = v12 - 87;
            }
            else
            {
              v13 = v12 - 55;
            }
          }
          else
          {
            v13 = v12 - 48;
          }
          v41[v9] = v11 + v13;
        }
        v14 = v9 + 1;
        if( v10 )
          v14 = v9;
        v9 = v14;
        if( *v5 != 32 )
          v10 = !v10;
        ++v5;
      }
      while( *v5 );
      if( !v10 )
        return -1073741811;
    }
    v15 = *v7;
    if( *v7 != 0x8004 && (v15 <= 0x800Bu || v15 > 0x800Eu) )
      return -1073741811;
    result = RtlStringCchLengthW(v7 + 1, (unsigned __int64)((char *)v4 - (char *)v8) >> 1, (UINT64 *)v38);
    if( result < 0 )
      return result;
    v17 = *(_QWORD *)v38;
    v18 = 0;
    v19 = &v8[*(_QWORD *)v38];
    v5 = v19 + 1;
    if( *(_QWORD *)v38 )
    {
      v20 = wcschr(v8, 59);
      if( !v20 )
      {
        v20 = v19;
        goto LABEL_54;
      }
      while( 1 )
      {
        v21 = 0;
        v22 = 0i64;
        v23 = (unsigned __int64)((char *)v20 - (char *)v8 + 1) >> 1;
        if( v8 > v20 )
          v23 = 0i64;
        if( v23 )
        {
          do
          {
            v24 = *v8;
            ++v22;
            ++v8;
            v25 = ((unsigned __int64)v18 << 6) + v21++;
            *(_WORD *)&v41[2 * v25 + 64] = v24;
          }
          while( v22 != v23 );
          v4 = v39;
        }
        v26 = v21;
        v27 = 2 * v21;
        *(_WORD *)&v41[128 * (unsigned __int64)v18 + 64 + 2 * v26] = 0;
        v28 = 2i64 * v18;
        v40[4 * v28] = v27;
        v40[4 * v28 + 1] = v27 + 2;
        *(_QWORD *)&v40[4 * v28 + 4] = &v41[128 * (unsigned __int64)v18 + 64];
        if( !*v20 )
          break;
        v31 = v20 + 1;
        if( !*v31 )
          break;
        v8 = v31;
        v20 = wcschr(v31, 59);
        if( !v20 )
        {
          v32 = -1i64;
          do
            ++v32;
          while( v8[v32] );
          v20 = &v8[v32];
        }
        if( ++v18 >= 3 )
          goto LABEL_34;
LABEL_54:
        if( !v20 )
          goto LABEL_34;
      }
      ++v18;
LABEL_34:
      v16 = v35;
    }
    v29 = v17 != 0 ? v18 : 0;
    v30 = -v17;
    if( !qword_140C1D910 )
      return -1073741637;
    v33 = v29;
    LOBYTE(v29) = 7;
    v2 = qword_140C1D910(v29, v41, v9, *v16, (unsigned __int64)v40 & -(__int64)(v30 != 0), v33, 0i64);
    if( v2 >= 0 && ++v34 < v36 )
      continue;
    return v2;
  }
}

Referenced by:

SeRegisterElamCertResources