user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<selfTest>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x70,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x7,-0x50(%rbp)
  movl   $0x4,-0x4c(%rbp)
  movl   $0xb,-0x48(%rbp)
  movl   $0xb,-0x44(%rbp)
  movl   $0xe,-0x40(%rbp)
  movl   $0x17,-0x30(%rbp)
  movl   $0xc,-0x2c(%rbp)
  movl   $0x2,-0x28(%rbp)
  movl   $0xa,-0x24(%rbp)
  movl   $0xb,-0x20(%rbp)
  lea    -0x30(%rbp),%rdx
  lea    -0x50(%rbp),%rsi
  lea    -0x70(%rbp),%rax
  mov    $0x5,%ecx
  mov    %rax,%rdi
  call   <otp_encrypt@plt>
  mov    -0x70(%rbp),%eax
  cmp    $0x3,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x6c(%rbp),%eax
  cmp    $0x10,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x68(%rbp),%eax
  cmp    $0xd,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x64(%rbp),%eax
  cmp    $0x15,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x60(%rbp),%eax
  cmp    $0x19,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  lea    -0x30(%rbp),%rdx
  lea    -0x70(%rbp),%rsi
  lea    -0x70(%rbp),%rax
  mov    $0x5,%ecx
  mov    %rax,%rdi
  call   <otp_decrypt@plt>
  mov    -0x70(%rbp),%edx
  mov    -0x50(%rbp),%eax
  cmp    %eax,%edx
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x6c(%rbp),%edx
  mov    -0x4c(%rbp),%eax
  cmp    %eax,%edx
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x68(%rbp),%edx
  mov    -0x48(%rbp),%eax
  cmp    %eax,%edx
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x64(%rbp),%edx
  mov    -0x44(%rbp),%eax
  cmp    %eax,%edx
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x60(%rbp),%edx
  mov    -0x40(%rbp),%eax
  cmp    %eax,%edx
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  lea    -0x70(%rbp),%rax
  lea    D19(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <otp_encode@plt>
  mov    -0x70(%rbp),%edx
  mov    -0x50(%rbp),%eax
  cmp    %eax,%edx
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x6c(%rbp),%eax
  cmp    $0x1a,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x68(%rbp),%edx
  mov    -0x48(%rbp),%eax
  cmp    %eax,%edx
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x64(%rbp),%edx
  mov    -0x44(%rbp),%eax
  cmp    %eax,%edx
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x60(%rbp),%edx
  mov    -0x40(%rbp),%eax
  cmp    %eax,%edx
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  lea    -0x50(%rbp),%rcx
  lea    -0xd(%rbp),%rax
  mov    $0x5,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <otp_decode@plt>
  lea    -0xd(%rbp),%rax
  lea    D15(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strstr@plt>
  mov    %eax,%edi
  call   <assert@plt>
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L4
  call   <__stack_chk_fail@plt>
L4:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_label: D19
type_guessed: string
name: unpack_data
arguments: data_label: D15
type_guessed: string

tool: D19: H LLO

tool: D15: HELLO

assistant: ```c
void selfTest() {
  int buffer[5];
  int inputMsg[] = {7, 4, 11, 11, 14};
  int inputKey[] = {23, 12, 2, 10, 11};
  otp_encrypt(buffer, inputMsg, inputKey, 5);
  assert(buffer[0] == 3);
  assert(buffer[1] == 16);
  assert(buffer[2] == 13);
  assert(buffer[3] == 21);
  assert(buffer[4] == 25);
  otp_decrypt(buffer, buffer, inputKey, 5);
  assert(buffer[0] == inputMsg[0]);
  assert(buffer[1] == inputMsg[1]);
  assert(buffer[2] == inputMsg[2]);
  assert(buffer[3] == inputMsg[3]);
  assert(buffer[4] == inputMsg[4]);
  otp_encode(buffer, "H LLO");
  assert(buffer[0] == inputMsg[0]);
  assert(buffer[1] == 26);
  assert(buffer[2] == inputMsg[2]);
  assert(buffer[3] == inputMsg[3]);
  assert(buffer[4] == inputMsg[4]);
  char buffer2[5];
  otp_decode(buffer2, inputMsg, 5);
  assert(strstr(buffer2, "HELLO"));
}
```