SecureDump_SymmetricEncryptionSetup

NTSTATUS __stdcall SecureDump_SymmetricEncryptionSetup(){
  NTSTATUS SymmetricKey; 
  VOID **PoolWithTag; 
  _BCRYPT_ALG_HANDLE v2; 
  UINT32 v3; 
  UCHAR *v4; 
  UINT32 v5; 
  UINT32 pbSecret; 
  UINT32 cbSecret; 
  UINT32 v9; 
  int pbOutput; 
  UINT32 pcbResult; 

  pcbResult = 0;
  pbOutput = 0;
  dword_140C4C5D8 = 1;
  SymmetricKey = (unsigned int)BCryptOpenAlgorithmProvider(
                                 &hAlgorithm,
                                 (_LPCWSTR)L"XTS-AES",
                                 (_LPCWSTR)L"Microsoft Primitive Provider",
                                 1u);
  if( SymmetricKey < 0 )
    goto LABEL_11;
  PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 0x40ui64, 1886217299i64);
  v4 = (UCHAR *)PoolWithTag;
  if( !PoolWithTag )
  {
    SymmetricKey = -1073741670;
    goto LABEL_11;
  }
  SymmetricKey = (unsigned int)BCryptGenRandom(v2, (PUCHAR)PoolWithTag, 0x40u, v3);
  if( SymmetricKey >= 0 )
  {
    SymmetricKey = (unsigned int)BCryptGenerateSymmetricKey(hAlgorithm, &hObject, 0i64, 0, v4, 0x40u, v9);
    ExFreePoolWithTag(v4, 0);
    if( SymmetricKey < 0 )
      goto LABEL_11;
    SymmetricKey = (unsigned int)BCryptGetProperty(
                                   *(BCRYPT_HANDLE *)&hObject,
                                   (_LPCWSTR)L"KeyLength",
                                   (PUCHAR)&pbOutput,
                                   v5,
                                   &pcbResult,
                                   cbSecret);
    if( SymmetricKey < 0 )
      goto LABEL_11;
    if( pbOutput == 512 )
    {
      pbInput = 4096;
      SymmetricKey = (unsigned int)BCryptSetProperty(
                                     *(BCRYPT_HANDLE *)&hObject,
                                     (_LPCWSTR)L"MessageBlockLength",
                                     (PUCHAR)&pbInput,
                                     4u,
                                     pbSecret);
    }
  }
  else
  {
    ExFreePoolWithTag(v4, 0);
  }
  if( SymmetricKey < 0 )
LABEL_11:
    SecureDump_LogErrorEvent(1);
  return SymmetricKey;
}

Referenced by:

SecureDump_Init