user: What is the c source code of the assembly code below?

```asm
<sceda_func>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xa0,%rsp
  mov    %rdi,-0x78(%rbp)
  mov    %rsi,-0x80(%rbp)
  mov    %edx,-0x84(%rbp)
  mov    %rcx,-0x90(%rbp)
  mov    %r8,-0x98(%rbp)
  mov    %r9d,-0x88(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x90(%rbp),%rcx
  lea    -0x40(%rbp),%rax
  mov    $0x10,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  lea    -0x40(%rbp),%rax
  add    $0x10,%rax
  mov    -0x98(%rbp),%rcx
  mov    $0x8,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  lea    -0x40(%rbp),%rax
  add    $0x18,%rax
  mov    -0x98(%rbp),%rcx
  mov    $0x8,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  lea    -0x40(%rbp),%rax
  add    $0x20,%rax
  mov    -0x98(%rbp),%rcx
  mov    $0x8,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  lea    -0x40(%rbp),%rax
  add    $0x28,%rax
  mov    -0x98(%rbp),%rcx
  mov    $0x8,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  movb   $0x0,-0x10(%rbp)
  mov    -0x80(%rbp),%rax
  mov    %rax,-0x58(%rbp)
  mov    -0x78(%rbp),%rax
  mov    %rax,-0x60(%rbp)
  movl   $0x0,-0x68(%rbp)
  jmp    L69
L71:
  lea    -0x40(%rbp),%rcx
  lea    -0x50(%rbp),%rax
  mov    $0x31,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sceda_digest@plt>
  cmpl   $0x0,-0x88(%rbp)
  je     L68
  lea    -0x40(%rbp),%rax
  add    $0x10,%rax
  mov    -0x58(%rbp),%rcx
  mov    $0x10,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  jmp    L58
L68:
  lea    -0x40(%rbp),%rax
  add    $0x20,%rax
  mov    -0x58(%rbp),%rcx
  mov    $0x10,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
L58:
  movl   $0x0,-0x64(%rbp)
  jmp    L64
L33:
  mov    -0x64(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%ecx
  mov    -0x64(%rbp),%eax
  cltq
  movzbl -0x50(%rbp,%rax,1),%edx
  mov    -0x64(%rbp),%eax
  movslq %eax,%rsi
  mov    -0x60(%rbp),%rax
  add    %rsi,%rax
  xor    %ecx,%edx
  mov    %dl,(%rax)
  addl   $0x1,-0x64(%rbp)
L64:
  cmpl   $0xf,-0x64(%rbp)
  jle    L33
  cmpl   $0x0,-0x88(%rbp)
  je     L53
  lea    -0x40(%rbp),%rax
  add    $0x20,%rax
  mov    -0x60(%rbp),%rcx
  mov    $0x10,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  jmp    L57
L53:
  lea    -0x40(%rbp),%rax
  add    $0x10,%rax
  mov    -0x60(%rbp),%rcx
  mov    $0x10,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
L57:
  movzbl -0x20(%rbp),%eax
  add    $0x1,%eax
  mov    %al,-0x20(%rbp)
  addq   $0x10,-0x58(%rbp)
  addq   $0x10,-0x60(%rbp)
  addl   $0x1,-0x68(%rbp)
L69:
  mov    -0x68(%rbp),%eax
  cmp    -0x84(%rbp),%eax
  jl     L71
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L12
  call   <__stack_chk_fail@plt>
L12:
  leave
  ret
```

assistant: ```c
void sceda_func(unsigned char *output, const unsigned char *original, int blockC, const unsigned char *key, const unsigned char *iv, int decrypting) {
  unsigned char blockKey[49], hashedBlockKey[16], *pt2;
  const unsigned char *pt1;
  int i, j;
  memcpy(blockKey, key, 16);
  memcpy(blockKey + 16, iv, 8);
  memcpy(blockKey + 24, iv, 8);
  memcpy(blockKey + 32, iv, 8);
  memcpy(blockKey + 40, iv, 8);
  blockKey[48] = 0;
  pt1 = original;
  pt2 = output;
  for (i = 0; i < blockC; i++) {
    sceda_digest(hashedBlockKey, blockKey, 49);
    if (decrypting) {
      memcpy(blockKey + 16, pt1, 16);
    } else {
      memcpy(blockKey + 32, pt1, 16);
    }
    for (j = 0; j < 16; j++) {
      pt2[j] = pt1[j] ^ hashedBlockKey[j];
    }
    if (decrypting) {
      memcpy(blockKey + 32, pt2, 16);
    } else {
      memcpy(blockKey + 16, pt2, 16);
    }
    blockKey[32]++;
    pt1 += 16;
    pt2 += 16;
  }
}
```