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

```asm
<test_encrypt_cbc>:
  endbr64
  push   %rbp
  mov    $0x40,%edx
  sub    $0x390,%rsp
  movdqa D301(%rip),%xmm0
  mov    %fs:0x28,%rax
  mov    %rax,0x388(%rsp)
  xor    %eax,%eax
  lea    0x280(%rsp),%rbp
  mov    %rsp,%rcx
  lea    0x40(%rsp),%r8
  movaps %xmm0,(%rsp)
  movdqa D169(%rip),%xmm0
  lea    0x80(%rsp),%rsi
  mov    %rbp,%rdi
  movaps %xmm0,0x10(%rsp)
  movdqa D222(%rip),%xmm0
  movaps %xmm0,0x20(%rsp)
  movdqa D201(%rip),%xmm0
  movaps %xmm0,0x30(%rsp)
  movdqa D263(%rip),%xmm0
  movaps %xmm0,0x40(%rsp)
  movdqa D272(%rip),%xmm0
  movaps %xmm0,0x50(%rsp)
  movdqa D30(%rip),%xmm0
  movaps %xmm0,0x60(%rsp)
  movdqa D47(%rip),%xmm0
  movaps %xmm0,0x70(%rsp)
  movdqa D171(%rip),%xmm0
  movaps %xmm0,0x80(%rsp)
  movdqa D331(%rip),%xmm0
  movaps %xmm0,0x90(%rsp)
  movdqa D356(%rip),%xmm0
  movaps %xmm0,0xa0(%rsp)
  movdqa D202(%rip),%xmm0
  movaps %xmm0,0xb0(%rsp)
  movdqa D266(%rip),%xmm0
  movaps %xmm0,0xc0(%rsp)
  movdqa D135(%rip),%xmm0
  movaps %xmm0,0xd0(%rsp)
  movdqa D421(%rip),%xmm0
  movaps %xmm0,0xe0(%rsp)
  movdqa D414(%rip),%xmm0
  movaps %xmm0,0xf0(%rsp)
  movdqa D394(%rip),%xmm0
  movaps %xmm0,0x100(%rsp)
  movdqa D420(%rip),%xmm0
  movaps %xmm0,0x110(%rsp)
  movdqa D176(%rip),%xmm0
  movaps %xmm0,0x120(%rsp)
  movdqa D241(%rip),%xmm0
  movaps %xmm0,0x130(%rsp)
  movdqa D187(%rip),%xmm0
  movaps %xmm0,0x140(%rsp)
  movdqa D290(%rip),%xmm0
  movaps %xmm0,0x150(%rsp)
  movdqa D121(%rip),%xmm0
  movaps %xmm0,0x160(%rsp)
  movdqa D91(%rip),%xmm0
  movaps %xmm0,0x170(%rsp)
  movdqa D404(%rip),%xmm0
  movaps %xmm0,0x180(%rsp)
  movdqa D97(%rip),%xmm0
  movaps %xmm0,0x190(%rsp)
  movdqa D289(%rip),%xmm0
  movaps %xmm0,0x1a0(%rsp)
  movdqa D277(%rip),%xmm0
  movaps %xmm0,0x1b0(%rsp)
  movdqa D12(%rip),%xmm0
  movaps %xmm0,0x1c0(%rsp)
  movdqa D250(%rip),%xmm0
  movaps %xmm0,0x1d0(%rsp)
  movdqa D190(%rip),%xmm0
  movaps %xmm0,0x1e0(%rsp)
  movdqa D160(%rip),%xmm0
  movaps %xmm0,0x1f0(%rsp)
  movdqa D21(%rip),%xmm0
  movaps %xmm0,0x200(%rsp)
  movdqa D72(%rip),%xmm0
  movaps %xmm0,0x210(%rsp)
  movdqa D124(%rip),%xmm0
  movaps %xmm0,0x220(%rsp)
  movdqa D127(%rip),%xmm0
  movaps %xmm0,0x230(%rsp)
  movdqa D307(%rip),%xmm0
  movaps %xmm0,0x240(%rsp)
  movdqa D416(%rip),%xmm0
  movaps %xmm0,0x250(%rsp)
  movdqa D166(%rip),%xmm0
  movaps %xmm0,0x260(%rsp)
  movdqa D105(%rip),%xmm0
  movaps %xmm0,0x270(%rsp)
  call   <AES128_CBC_encrypt_buffer@plt>
  lea    D43(%rip),%rdi
  call   <printf@plt>
  lea    0x180(%rsp),%rdi
  mov    $0x40,%edx
  mov    %rbp,%rsi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L4
  lea    D220(%rip),%rdi
  call   <printf@plt>
L19:
  mov    0x388(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L25
  add    $0x390,%rsp
  pop    %rbp
  ret
  nopl   0x0(%rax)
L4:
  lea    D216(%rip),%rdi
  call   <printf@plt>
  jmp    L19
L25:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: data_label: D301
data_type: byte[16]
name: parse_data
arguments: data_label: D169
data_type: byte[16]
name: parse_data
arguments: data_label: D222
data_type: byte[16]
name: parse_data
arguments: data_label: D201
data_type: byte[16]
name: parse_data
arguments: data_label: D263
data_type: byte[16]
name: parse_data
arguments: data_label: D272
data_type: byte[16]
name: parse_data
arguments: data_label: D30
data_type: byte[16]
name: parse_data
arguments: data_label: D47
data_type: byte[16]
name: parse_data
arguments: data_label: D171
data_type: byte[16]
name: parse_data
arguments: data_label: D331
data_type: byte[16]
name: parse_data
arguments: data_label: D356
data_type: byte[16]
name: parse_data
arguments: data_label: D202
data_type: byte[16]
name: parse_data
arguments: data_label: D266
data_type: byte[16]
name: parse_data
arguments: data_label: D135
data_type: byte[16]
name: parse_data
arguments: data_label: D421
data_type: byte[16]
name: parse_data
arguments: data_label: D414
data_type: byte[16]
name: parse_data
arguments: data_label: D394
data_type: byte[16]
name: parse_data
arguments: data_label: D420
data_type: byte[16]
name: parse_data
arguments: data_label: D176
data_type: byte[16]
name: parse_data
arguments: data_label: D241
data_type: byte[16]
name: parse_data
arguments: data_label: D187
data_type: byte[16]
name: parse_data
arguments: data_label: D290
data_type: byte[16]
name: parse_data
arguments: data_label: D121
data_type: byte[16]
name: parse_data
arguments: data_label: D91
data_type: byte[16]
name: parse_data
arguments: data_label: D404
data_type: byte[16]
name: parse_data
arguments: data_label: D97
data_type: byte[16]
name: parse_data
arguments: data_label: D289
data_type: byte[16]
name: parse_data
arguments: data_label: D277
data_type: byte[16]
name: parse_data
arguments: data_label: D12
data_type: byte[16]
name: parse_data
arguments: data_label: D250
data_type: byte[16]
name: parse_data
arguments: data_label: D190
data_type: byte[16]
name: parse_data
arguments: data_label: D160
data_type: byte[16]
name: parse_data
arguments: data_label: D21
data_type: byte[16]
name: parse_data
arguments: data_label: D72
data_type: byte[16]
name: parse_data
arguments: data_label: D124
data_type: byte[16]
name: parse_data
arguments: data_label: D127
data_type: byte[16]
name: parse_data
arguments: data_label: D307
data_type: byte[16]
name: parse_data
arguments: data_label: D416
data_type: byte[16]
name: parse_data
arguments: data_label: D166
data_type: byte[16]
name: parse_data
arguments: data_label: D105
data_type: byte[16]
name: parse_data
arguments: data_label: D43
data_type: string
name: parse_data
arguments: data_label: D220
data_type: string
name: parse_data
arguments: data_label: D216
data_type: string

tool: {"D301": [0x2b,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00]}

tool: {"D169": [0x28,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xa6,0x00,0x00,0x00]}

tool: {"D222": [0xab,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x88,0x00,0x00,0x00]}

tool: {"D201": [0x09,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x3c,0x00,0x00,0x00]}

tool: {"D263": [0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00]}

tool: {"D272": [0x04,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x07,0x00,0x00,0x00]}

tool: {"D30": [0x08,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00]}

tool: {"D47": [0x0c,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00]}

tool: {"D171": [0x6b,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xe2,0x00,0x00,0x00]}

tool: {"D331": [0x2e,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x96,0x00,0x00,0x00]}

tool: {"D356": [0xe9,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x11,0x00,0x00,0x00]}

tool: {"D202": [0x73,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x2a,0x00,0x00,0x00]}

tool: {"D266": [0xae,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x57,0x00,0x00,0x00]}

tool: {"D135": [0x1e,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x9c,0x00,0x00,0x00]}

tool: {"D421": [0x9e,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0xac,0x00,0x00,0x00]}

tool: {"D414": [0x45,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x51,0x00,0x00,0x00]}

tool: {"D394": [0x30,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x46,0x00,0x00,0x00]}

tool: {"D420": [0xa3,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x11,0x00,0x00,0x00]}

tool: {"D176": [0xe5,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x19,0x00,0x00,0x00]}

tool: {"D241": [0x1a,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0xef,0x00,0x00,0x00]}

tool: {"D187": [0xf6,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x45,0x00,0x00,0x00]}

tool: {"D290": [0xdf,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x17,0x00,0x00,0x00]}

tool: {"D121": [0xad,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x7b,0x00,0x00,0x00]}

tool: {"D91": [0xe6,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x10,0x00,0x00,0x00]}

tool: {"D404": [0x76,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xac,0x00,0x00,0x00]}

tool: {"D97": [0x81,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x46,0x00,0x00,0x00]}

tool: {"D289": [0xce,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x9b,0x00,0x00,0x00]}

tool: {"D277": [0x12,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x7d,0x00,0x00,0x00]}

tool: {"D12": [0x50,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x9b,0x00,0x00,0x00]}

tool: {"D250": [0x50,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0xee,0x00,0x00,0x00]}

tool: {"D190": [0x95,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x3a,0x00,0x00,0x00]}

tool: {"D160": [0x91,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xb2,0x00,0x00,0x00]}

tool: {"D21": [0x73,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xb8,0x00,0x00,0x00]}

tool: {"D72": [0xe3,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x3b,0x00,0x00,0x00]}

tool: {"D124": [0x71,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0x9e,0x00,0x00,0x00]}

tool: {"D127": [0x22,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x16,0x00,0x00,0x00]}

tool: {"D307": [0x3f,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xa1,0x00,0x00,0x00]}

tool: {"D416": [0x68,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x09,0x00,0x00,0x00]}

tool: {"D166": [0x12,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x30,0x00,0x00,0x00]}

tool: {"D105": [0x75,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0xa7,0x00,0x00,0x00]}

tool: D43: CBC encrypt: 

tool: D220: SUCCESS!


tool: D216: FAILURE!


assistant: ```c
void test_encrypt_cbc(void) {
  uint8_t key[] = {0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c};
  uint8_t iv[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f};
  uint8_t in[] = {0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10};
  uint8_t out[] = {0x76, 0x49, 0xab, 0xac, 0x81, 0x19, 0xb2, 0x46, 0xce, 0xe9, 0x8e, 0x9b, 0x12, 0xe9, 0x19, 0x7d, 0x50, 0x86, 0xcb, 0x9b, 0x50, 0x72, 0x19, 0xee, 0x95, 0xdb, 0x11, 0x3a, 0x91, 0x76, 0x78, 0xb2, 0x73, 0xbe, 0xd6, 0xb8, 0xe3, 0xc1, 0x74, 0x3b, 0x71, 0x16, 0xe6, 0x9e, 0x22, 0x22, 0x95, 0x16, 0x3f, 0xf1, 0xca, 0xa1, 0x68, 0x1f, 0xac, 0x09, 0x12, 0x0e, 0xca, 0x30, 0x75, 0x86, 0xe1, 0xa7};
  uint8_t buffer[64];
  AES128_CBC_encrypt_buffer(buffer, in, 64, key, iv);
  printf("CBC encrypt: ");
  if (0 == strncmp((char *)out, (char *)buffer, 64)) {
    printf("SUCCESS!\n");
  } else {
    printf("FAILURE!\n");
  }
}
```