user: Translate the below assembly code into C programming language:

```asm
<SHA256_Xcompare_31>:
  endbr64
  push   %r13
  xor    %esi,%esi
  mov    $0x20,%edx
  push   %r12
  push   %rbp
  sub    $0x70,%rsp
  movdqa D49(%rip),%xmm0
  mov    %fs:0x28,%rax
  mov    %rax,0x68(%rsp)
  xor    %eax,%eax
  lea    0x40(%rsp),%rbp
  mov    %rsp,%r13
  lea    0x20(%rsp),%r12
  movaps %xmm0,(%rsp)
  movdqa D39(%rip),%xmm0
  mov    %rbp,%rdi
  movabs $0xa8b95fa7c7551778,%rax
  mov    %rax,0x10(%rsp)
  movaps %xmm0,0x20(%rsp)
  movdqa D37(%rip),%xmm0
  movb   $0x7a,0x18(%rsp)
  movaps %xmm0,0x30(%rsp)
  call   <memset@plt>
  mov    $0x19,%edx
  mov    %rbp,%rsi
  mov    %r13,%rdi
  call   <SHA256_VST@plt>
  mov    $0x20,%edx
  mov    %rbp,%rsi
  mov    %r12,%rdi
  lea    D19(%rip),%rcx
  call   <check_test@plt>
  xor    %esi,%esi
  mov    $0x20,%edx
  mov    %rbp,%rdi
  call   <memset@plt>
  mov    $0x19,%edx
  mov    %rbp,%rsi
  mov    %r13,%rdi
  call   <SHA256_NSS@plt>
  mov    $0x20,%edx
  mov    %rbp,%rsi
  mov    %r12,%rdi
  lea    D42(%rip),%rcx
  call   <check_test@plt>
  xor    %esi,%esi
  mov    $0x20,%edx
  mov    %rbp,%rdi
  call   <memset@plt>
  mov    $0x19,%edx
  mov    %rbp,%rsi
  mov    %r13,%rdi
  call   <SHA256_sodium@plt>
  mov    $0x20,%edx
  mov    %rbp,%rsi
  mov    %r12,%rdi
  lea    D44(%rip),%rcx
  call   <check_test@plt>
  mov    0x68(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L7
  add    $0x70,%rsp
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L7:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: data_label: D49
type: byte[16]
name: unpack_data
arguments: data_label: D39
type: byte[16]
name: unpack_data
arguments: data_label: D37
type: byte[16]
name: unpack_data
arguments: data_label: D19
type: string
name: unpack_data
arguments: data_label: D42
type: string
name: unpack_data
arguments: data_label: D44
type: string

tool: {"D49": [0xa4,0x79,0x3c,0xdc,0x43,0x27,0x46,0xf3,0xfb,0xb1,0x23,0x2d,0xc1,0x2c,0xdd,0x1c]}

tool: {"D39": [0xff,0xe6,0x32,0xd4,0xd7,0x51,0x8b,0x14,0x20,0xde,0x4f,0x19,0x0a,0xb2,0x5b,0xa8]}

tool: {"D37": [0x85,0x63,0x92,0x6f,0x8f,0x8e,0x00,0xfb,0xf8,0xee,0xc5,0xe0,0x1d,0x74,0x4e,0x49]}

tool: D19: Disagreement between given answer and SHA256_VST in SHA256_Xcompare_31


tool: D42: Disagreement between given answer and SHA256_NSS in SHA256_Xcompare_31


tool: D44: Disagreement between given answer and SHA256_sodium in SHA256_Xcompare_31


assistant: ```c
void SHA256_Xcompare_31() {
  unsigned char input[25] = {164, 121, 60, 220, 67, 39, 70, 243, 251, 177, 35, 45, 193, 44, 221, 28, 120, 23, 85, 199, 167, 95, 185, 168, 122};
  unsigned char result0[32] = {0xFF, 0xE6, 0x32, 0xD4, 0xD7, 0x51, 0x8B, 0x14, 0x20, 0xDE, 0x4F, 0x19, 0x0A, 0xB2, 0x5B, 0xA8, 0x85, 0x63, 0x92, 0x6F, 0x8F, 0x8E, 0x00, 0xFB, 0xF8, 0xEE, 0xC5, 0xE0, 0x1D, 0x74, 0x4E, 0x49};
  unsigned char result1[32];
  memset(result1, 0, 32);
  SHA256_VST(input, result1, 25);
  check_test(result0, result1, 32, "Disagreement between given answer and SHA256_VST in SHA256_Xcompare_31\n");
  memset(result1, 0, 32);
  SHA256_NSS(input, result1, 25);
  check_test(result0, result1, 32, "Disagreement between given answer and SHA256_NSS in SHA256_Xcompare_31\n");
  memset(result1, 0, 32);
  SHA256_sodium(input, result1, 25);
  check_test(result0, result1, 32, "Disagreement between given answer and SHA256_sodium in SHA256_Xcompare_31\n");
}
```