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

```asm
<wsha1_transform>:
  endbr64
  sub    $0x158,%rsp
  mov    %rsi,%r9
  xor    %eax,%eax
  mov    %fs:0x28,%rdx
  mov    %rdx,0x148(%rsp)
  mov    (%rdi),%edx
  bswap  %edx
  mov    %edx,(%rdi)
  mov    0x4(%rdi),%edx
  bswap  %edx
  mov    %edx,0x4(%rdi)
  mov    0x8(%rdi),%edx
  bswap  %edx
  mov    %edx,0x8(%rdi)
  mov    0xc(%rdi),%edx
  bswap  %edx
  mov    %edx,0xc(%rdi)
  mov    0x10(%rdi),%edx
  bswap  %edx
  mov    %edx,0x10(%rdi)
  mov    0x14(%rdi),%edx
  bswap  %edx
  mov    %edx,0x14(%rdi)
  mov    0x18(%rdi),%edx
  bswap  %edx
  mov    %edx,0x18(%rdi)
  mov    0x1c(%rdi),%edx
  bswap  %edx
  mov    %edx,0x1c(%rdi)
  mov    0x20(%rdi),%edx
  bswap  %edx
  mov    %edx,0x20(%rdi)
  mov    0x24(%rdi),%edx
  bswap  %edx
  mov    %edx,0x24(%rdi)
  mov    0x28(%rdi),%edx
  bswap  %edx
  mov    %edx,0x28(%rdi)
  mov    0x2c(%rdi),%edx
  bswap  %edx
  mov    %edx,0x2c(%rdi)
  mov    0x30(%rdi),%edx
  bswap  %edx
  mov    %edx,0x30(%rdi)
  mov    0x34(%rdi),%edx
  bswap  %edx
  mov    %edx,0x34(%rdi)
  mov    0x38(%rdi),%edx
  bswap  %edx
  mov    %edx,0x38(%rdi)
  mov    0x3c(%rdi),%edx
  movdqu (%rdi),%xmm6
  movdqu 0x10(%rdi),%xmm7
  bswap  %edx
  mov    %edx,0x3c(%rdi)
  mov    0x10(%rdi),%rdx
  movaps %xmm6,(%rsp)
  movdqu 0x20(%rdi),%xmm6
  movq   0x8(%rsp),%xmm4
  movaps %xmm7,0x10(%rsp)
  movdqu 0x30(%rdi),%xmm7
  movq   %rdx,%xmm1
  movq   0x18(%rsp),%xmm2
  movaps %xmm6,0x20(%rsp)
  lea    0x40(%rsp),%rdx
  movaps %xmm7,0x30(%rsp)
L22:
  movq   -0x20(%rdx),%xmm3
  add    $0x4,%eax
  lea    0x14(%rdx),%r8
  mov    %rdx,%rcx
  movq   -0xc(%rdx),%xmm0
  movq   -0x40(%rdx),%xmm5
  lea    -0x20(%rdx),%rdi
  lea    -0x18(%rdx),%rsi
  add    $0x20,%rdx
  pxor   %xmm4,%xmm5
  pxor   %xmm3,%xmm0
  pxor   %xmm5,%xmm0
  movq   -0x58(%rdx),%xmm5
  movdqa %xmm0,%xmm4
  psrld  $0x1f,%xmm0
  pslld  $0x1,%xmm4
  pxor   %xmm1,%xmm5
  por    %xmm4,%xmm0
  movq   -0x38(%rdx),%xmm4
  movq   %xmm0,-0x20(%rdx)
  movq   -0x24(%rdx),%xmm0
  pxor   %xmm4,%xmm0
  pxor   %xmm5,%xmm0
  movq   -0x50(%rdx),%xmm5
  movdqa %xmm0,%xmm1
  pslld  $0x1,%xmm0
  psrld  $0x1f,%xmm1
  pxor   %xmm2,%xmm5
  por    %xmm1,%xmm0
  movq   -0x30(%rdx),%xmm1
  movq   %xmm0,-0x18(%rdx)
  movq   -0x1c(%rdx),%xmm0
  pxor   %xmm1,%xmm0
  pxor   %xmm5,%xmm0
  movdqa %xmm0,%xmm2
  pslld  $0x1,%xmm0
  psrld  $0x1f,%xmm2
  por    %xmm2,%xmm0
  movq   -0x28(%rdx),%xmm2
  movq   %xmm0,-0x10(%rdx)
  movq   -0x14(%rdx),%xmm0
  pxor   %xmm3,%xmm0
  movq   -0x48(%rdx),%xmm3
  pxor   %xmm2,%xmm3
  pxor   %xmm3,%xmm0
  movdqa %xmm0,%xmm3
  pslld  $0x1,%xmm0
  psrld  $0x1f,%xmm3
  por    %xmm3,%xmm0
  movq   %xmm0,-0x8(%rdx)
  cmp    $0x1c,%eax
  jne    L22
  xor    %eax,%eax
  nopl   0x0(%rax,%rax,1)
L12:
  movq   (%rcx,%rax,8),%xmm1
  movq   (%r8,%rax,8),%xmm0
  movq   (%rsi,%rax,8),%xmm2
  pxor   %xmm1,%xmm0
  movq   (%rdi,%rax,8),%xmm1
  pxor   %xmm2,%xmm1
  pxor   %xmm1,%xmm0
  movdqa %xmm0,%xmm1
  pslld  $0x1,%xmm0
  psrld  $0x1f,%xmm1
  por    %xmm1,%xmm0
  movq   %xmm0,(%rdx,%rax,8)
  add    $0x1,%rax
  cmp    $0x4,%eax
  jne    L12
  mov    (%r9),%edi
  mov    0x10(%r9),%esi
  mov    (%rsp),%edx
  mov    0x8(%r9),%r10d
  mov    %edi,%ecx
  mov    0xc(%r9),%eax
  mov    0x4(%r9),%r8d
  rol    $0x5,%ecx
  lea    0x5a827999(%rsi,%rdx,1),%edx
  mov    0x4(%rsp),%r11d
  add    %ecx,%edx
  mov    %r10d,%ecx
  xor    %eax,%ecx
  and    %r8d,%ecx
  ror    $0x2,%r8d
  xor    %eax,%ecx
  lea    0x5a827999(%rax,%r11,1),%eax
  mov    0x8(%rsp),%r11d
  add    %edx,%ecx
  mov    %r8d,%edx
  xor    %r10d,%edx
  and    %edi,%edx
  ror    $0x2,%edi
  xor    %r10d,%edx
  lea    0x5a827999(%r10,%r11,1),%r10d
  mov    0xc(%rsp),%r11d
  add    %eax,%edx
  mov    %ecx,%eax
  rol    $0x5,%eax
  add    %eax,%edx
  mov    %r8d,%eax
  xor    %edi,%eax
  and    %ecx,%eax
  ror    $0x2,%ecx
  xor    %r8d,%eax
  lea    0x5a827999(%r8,%r11,1),%r8d
  mov    0x10(%rsp),%r11d
  add    %r10d,%eax
  mov    %edx,%r10d
  rol    $0x5,%r10d
  add    %r10d,%eax
  mov    %edi,%r10d
  xor    %ecx,%r10d
  and    %edx,%r10d
  ror    $0x2,%edx
  xor    %edi,%r10d
  lea    0x5a827999(%rdi,%r11,1),%edi
  add    %r8d,%r10d
  mov    %eax,%r8d
  rol    $0x5,%r8d
  add    %r10d,%r8d
  mov    %ecx,%r10d
  xor    %edx,%r10d
  mov    %r8d,%r11d
  and    %eax,%r10d
  xor    %ecx,%r10d
  add    %r10d,%edi
  rol    $0x5,%r11d
  mov    0x14(%rsp),%r10d
  add    %edi,%r11d
  ror    $0x2,%eax
  mov    %edx,%edi
  xor    %eax,%edi
  lea    0x5a827999(%rcx,%r10,1),%ecx
  mov    %r11d,%r10d
  and    %r8d,%edi
  rol    $0x5,%r10d
  xor    %edx,%edi
  add    %ecx,%edi
  mov    %r8d,%ecx
  mov    0x18(%rsp),%r8d
  add    %edi,%r10d
  ror    $0x2,%ecx
  mov    %eax,%edi
  xor    %ecx,%edi
  lea    0x5a827999(%rdx,%r8,1),%edx
  mov    %r10d,%r8d
  and    %r11d,%edi
  rol    $0x5,%r8d
  xor    %eax,%edi
  add    %edx,%edi
  mov    %r11d,%edx
  mov    0x1c(%rsp),%r11d
  add    %edi,%r8d
  ror    $0x2,%edx
  mov    %ecx,%edi
  xor    %edx,%edi
  lea    0x5a827999(%rax,%r11,1),%eax
  mov    0x20(%rsp),%r11d
  and    %r10d,%edi
  xor    %ecx,%edi
  lea    0x5a827999(%rcx,%r11,1),%ecx
  mov    0x24(%rsp),%r11d
  add    %eax,%edi
  mov    %r8d,%eax
  rol    $0x5,%eax
  add    %eax,%edi
  mov    %r10d,%eax
  mov    %edx,%r10d
  ror    $0x2,%eax
  xor    %eax,%r10d
  and    %r8d,%r10d
  ror    $0x2,%r8d
  xor    %edx,%r10d
  lea    0x5a827999(%rdx,%r11,1),%edx
  mov    0x2c(%rsp),%r11d
  add    %r10d,%ecx
  mov    %edi,%r10d
  rol    $0x5,%r10d
  add    %r10d,%ecx
  mov    %eax,%r10d
  xor    %r8d,%r10d
  and    %edi,%r10d
  ror    $0x2,%edi
  xor    %eax,%r10d
  add    %r10d,%edx
  mov    %ecx,%r10d
  rol    $0x5,%r10d
  add    %r10d,%edx
  mov    0x28(%rsp),%r10d
  lea    0x5a827999(%rax,%r10,1),%r10d
  mov    %r8d,%eax
  xor    %edi,%eax
  and    %ecx,%eax
  ror    $0x2,%ecx
  xor    %r8d,%eax
  lea    0x5a827999(%r8,%r11,1),%r8d
  mov    0x30(%rsp),%r11d
  add    %eax,%r10d
  mov    %edx,%eax
  rol    $0x5,%eax
  add    %r10d,%eax
  mov    %edi,%r10d
  xor    %ecx,%r10d
  and    %edx,%r10d
  ror    $0x2,%edx
  xor    %edi,%r10d
  lea    0x5a827999(%rdi,%r11,1),%edi
  mov    0x34(%rsp),%r11d
  add    %r8d,%r10d
  mov    %eax,%r8d
  rol    $0x5,%r8d
  add    %r10d,%r8d
  mov    %ecx,%r10d
  xor    %edx,%r10d
  and    %eax,%r10d
  ror    $0x2,%eax
  xor    %ecx,%r10d
  lea    0x5a827999(%rcx,%r11,1),%ecx
  mov    0x38(%rsp),%r11d
  add    %edi,%r10d
  mov    %r8d,%edi
  rol    $0x5,%edi
  add    %r10d,%edi
  mov    %edx,%r10d
  xor    %eax,%r10d
  and    %r8d,%r10d
  xor    %edx,%r10d
  lea    0x5a827999(%rdx,%r11,1),%edx
  mov    0x3c(%rsp),%r11d
  add    %ecx,%r10d
  mov    %edi,%ecx
  rol    $0x5,%ecx
  add    %r10d,%ecx
  ror    $0x2,%r8d
  mov    %eax,%r10d
  xor    %r8d,%r10d
  and    %edi,%r10d
  ror    $0x2,%edi
  xor    %eax,%r10d
  lea    0x5a827999(%rax,%r11,1),%eax
  mov    0x40(%rsp),%r11d
  add    %edx,%r10d
  mov    %ecx,%edx
  rol    $0x5,%edx
  add    %r10d,%edx
  mov    %r8d,%r10d
  xor    %edi,%r10d
  and    %ecx,%r10d
  ror    $0x2,%ecx
  xor    %r8d,%r10d
  lea    0x5a827999(%r8,%r11,1),%r8d
  mov    0x44(%rsp),%r11d
  add    %eax,%r10d
  mov    %edx,%eax
  rol    $0x5,%eax
  add    %r10d,%eax
  mov    %ecx,%r10d
  xor    %edi,%r10d
  and    %edx,%r10d
  ror    $0x2,%edx
  xor    %edi,%r10d
  lea    0x5a827999(%rdi,%r11,1),%edi
  mov    0x48(%rsp),%r11d
  add    %r8d,%r10d
  mov    %eax,%r8d
  rol    $0x5,%r8d
  add    %r10d,%r8d
  mov    %ecx,%r10d
  xor    %edx,%r10d
  and    %eax,%r10d
  ror    $0x2,%eax
  xor    %ecx,%r10d
  lea    0x5a827999(%rcx,%r11,1),%ecx
  mov    0x4c(%rsp),%r11d
  add    %edi,%r10d
  mov    %r8d,%edi
  rol    $0x5,%edi
  add    %r10d,%edi
  mov    %edx,%r10d
  xor    %eax,%r10d
  and    %r8d,%r10d
  xor    %edx,%r10d
  ror    $0x2,%r8d
  lea    0x5a827999(%rdx,%r11,1),%edx
  add    %r10d,%ecx
  mov    %edi,%r10d
  rol    $0x5,%r10d
  add    %r10d,%ecx
  mov    %eax,%r10d
  xor    %r8d,%r10d
  and    %edi,%r10d
  ror    $0x2,%edi
  xor    %eax,%r10d
  add    %r10d,%edx
  mov    %ecx,%r10d
  rol    $0x5,%r10d
  add    %r10d,%edx
  mov    %edi,%r10d
  mov    0x50(%rsp),%edi
  lea    0x6ed9eba1(%rax,%rdi,1),%eax
  mov    %r8d,%edi
  xor    %r10d,%edi
  xor    %ecx,%edi
  ror    $0x2,%ecx
  add    %edi,%eax
  mov    %edx,%edi
  rol    $0x5,%edi
  add    %edi,%eax
  mov    0x54(%rsp),%edi
  lea    0x6ed9eba1(%r8,%rdi,1),%edi
  mov    %r10d,%r8d
  xor    %ecx,%r8d
  xor    %edx,%r8d
  ror    $0x2,%edx
  add    %r8d,%edi
  mov    %eax,%r8d
  rol    $0x5,%r8d
  add    %r8d,%edi
  mov    0x58(%rsp),%r8d
  lea    0x6ed9eba1(%r10,%r8,1),%r10d
  mov    %ecx,%r8d
  xor    %edx,%r8d
  xor    %eax,%r8d
  ror    $0x2,%eax
  add    %r8d,%r10d
  mov    %edi,%r8d
  rol    $0x5,%r8d
  add    %r10d,%r8d
  mov    0x5c(%rsp),%r10d
  lea    0x6ed9eba1(%rcx,%r10,1),%ecx
  mov    %edx,%r10d
  xor    %eax,%r10d
  xor    %edi,%r10d
  add    %r10d,%ecx
  mov    %r8d,%r10d
  ror    $0x2,%edi
  rol    $0x5,%r10d
  add    %r10d,%ecx
  mov    0x60(%rsp),%r10d
  lea    0x6ed9eba1(%rdx,%r10,1),%edx
  mov    %eax,%r10d
  xor    %edi,%r10d
  xor    %r8d,%r10d
  ror    $0x2,%r8d
  add    %r10d,%edx
  mov    %ecx,%r10d
  rol    $0x5,%r10d
  add    %r10d,%edx
  mov    0x64(%rsp),%r10d
  lea    0x6ed9eba1(%rax,%r10,1),%eax
  mov    %edi,%r10d
  xor    %r8d,%r10d
  xor    %ecx,%r10d
  ror    $0x2,%ecx
  add    %r10d,%eax
  mov    %edx,%r10d
  rol    $0x5,%r10d
  add    %r10d,%eax
  mov    0x68(%rsp),%r10d
  lea    0x6ed9eba1(%rdi,%r10,1),%edi
  mov    %r8d,%r10d
  xor    %ecx,%r10d
  xor    %edx,%r10d
  ror    $0x2,%edx
  add    %r10d,%edi
  mov    %eax,%r10d
  rol    $0x5,%r10d
  add    %edi,%r10d
  mov    0x6c(%rsp),%edi
  lea    0x6ed9eba1(%r8,%rdi,1),%r8d
  mov    %ecx,%edi
  xor    %edx,%edi
  xor    %eax,%edi
  ror    $0x2,%eax
  add    %edi,%r8d
  mov    %r10d,%edi
  rol    $0x5,%edi
  add    %r8d,%edi
  mov    0x70(%rsp),%r8d
  lea    0x6ed9eba1(%rcx,%r8,1),%ecx
  mov    %edx,%r8d
  xor    %eax,%r8d
  xor    %r10d,%r8d
  add    %r8d,%ecx
  mov    %edi,%r8d
  rol    $0x5,%r8d
  add    %r8d,%ecx
  mov    %r10d,%r8d
  mov    0x74(%rsp),%r10d
  ror    $0x2,%r8d
  lea    0x6ed9eba1(%rdx,%r10,1),%edx
  mov    %eax,%r10d
  xor    %r8d,%r10d
  xor    %edi,%r10d
  ror    $0x2,%edi
  add    %r10d,%edx
  mov    %ecx,%r10d
  rol    $0x5,%r10d
  add    %r10d,%edx
  mov    0x78(%rsp),%r10d
  lea    0x6ed9eba1(%rax,%r10,1),%eax
  mov    %r8d,%r10d
  xor    %edi,%r10d
  xor    %ecx,%r10d
  ror    $0x2,%ecx
  add    %r10d,%eax
  mov    %edx,%r10d
  rol    $0x5,%r10d
  add    %r10d,%eax
  mov    0x7c(%rsp),%r10d
  lea    0x6ed9eba1(%r8,%r10,1),%r10d
  mov    %edi,%r8d
  xor    %ecx,%r8d
  xor    %edx,%r8d
  ror    $0x2,%edx
  add    %r8d,%r10d
  mov    %eax,%r8d
  rol    $0x5,%r8d
  add    %r10d,%r8d
  mov    0x80(%rsp),%r10d
  lea    0x6ed9eba1(%rdi,%r10,1),%r10d
  mov    %ecx,%edi
  xor    %edx,%edi
  xor    %eax,%edi
  ror    $0x2,%eax
  add    %edi,%r10d
  mov    %r8d,%edi
  rol    $0x5,%edi
  add    %r10d,%edi
  mov    0x84(%rsp),%r10d
  lea    0x6ed9eba1(%rcx,%r10,1),%ecx
  mov    %edx,%r10d
  xor    %eax,%r10d
  xor    %r8d,%r10d
  ror    $0x2,%r8d
  add    %r10d,%ecx
  mov    %edi,%r10d
  rol    $0x5,%r10d
  add    %r10d,%ecx
  mov    0x88(%rsp),%r10d
  lea    0x6ed9eba1(%rdx,%r10,1),%edx
  mov    %eax,%r10d
  xor    %r8d,%r10d
  xor    %edi,%r10d
  ror    $0x2,%edi
  add    %r10d,%edx
  mov    %ecx,%r10d
  rol    $0x5,%r10d
  add    %r10d,%edx
  mov    0x8c(%rsp),%r10d
  lea    0x6ed9eba1(%rax,%r10,1),%eax
  mov    %r8d,%r10d
  xor    %edi,%r10d
  xor    %ecx,%r10d
  ror    $0x2,%ecx
  add    %r10d,%eax
  mov    %edx,%r10d
  rol    $0x5,%r10d
  add    %r10d,%eax
  mov    0x90(%rsp),%r10d
  lea    0x6ed9eba1(%r8,%r10,1),%r8d
  mov    %ecx,%r10d
  xor    %edi,%r10d
  xor    %edx,%r10d
  ror    $0x2,%edx
  add    %r10d,%r8d
  mov    %eax,%r10d
  rol    $0x5,%r10d
  add    %r8d,%r10d
  mov    0x94(%rsp),%r8d
  lea    0x6ed9eba1(%rdi,%r8,1),%edi
  mov    %ecx,%r8d
  xor    %edx,%r8d
  xor    %eax,%r8d
  ror    $0x2,%eax
  add    %r8d,%edi
  mov    %r10d,%r8d
  rol    $0x5,%r8d
  add    %edi,%r8d
  mov    0x98(%rsp),%edi
  lea    0x6ed9eba1(%rcx,%rdi,1),%ecx
  mov    %edx,%edi
  xor    %eax,%edi
  xor    %r10d,%edi
  ror    $0x2,%r10d
  add    %edi,%ecx
  mov    %r8d,%edi
  mov    %r10d,%r11d
  rol    $0x5,%edi
  add    %edi,%ecx
  mov    0x9c(%rsp),%edi
  lea    0x6ed9eba1(%rdx,%rdi,1),%edx
  mov    %eax,%edi
  xor    %r10d,%edi
  xor    %r8d,%edi
  add    %edi,%edx
  mov    %ecx,%edi
  ror    $0x2,%r8d
  rol    $0x5,%edi
  and    %r8d,%r11d
  add    %edi,%edx
  mov    %r10d,%edi
  or     %r8d,%edi
  and    %ecx,%edi
  ror    $0x2,%ecx
  or     %r11d,%edi
  mov    0xa0(%rsp),%r11d
  lea    -0x70e44324(%rax,%r11,1),%eax
  mov    %ecx,%r11d
  add    %edi,%eax
  mov    %edx,%edi
  and    %r8d,%r11d
  rol    $0x5,%edi
  add    %eax,%edi
  mov    %ecx,%eax
  or     %r8d,%eax
  and    %edx,%eax
  ror    $0x2,%edx
  or     %r11d,%eax
  mov    0xa4(%rsp),%r11d
  lea    -0x70e44324(%r10,%r11,1),%r10d
  mov    %ecx,%r11d
  add    %r10d,%eax
  mov    %edi,%r10d
  and    %edx,%r11d
  rol    $0x5,%r10d
  add    %r10d,%eax
  mov    %ecx,%r10d
  or     %edx,%r10d
  and    %edi,%r10d
  ror    $0x2,%edi
  or     %r11d,%r10d
  mov    0xa8(%rsp),%r11d
  lea    -0x70e44324(%r8,%r11,1),%r8d
  mov    %edx,%r11d
  add    %r10d,%r8d
  mov    %eax,%r10d
  and    %edi,%r11d
  rol    $0x5,%r10d
  add    %r8d,%r10d
  mov    %edx,%r8d
  or     %edi,%r8d
  and    %eax,%r8d
  or     %r11d,%r8d
  mov    0xac(%rsp),%r11d
  lea    -0x70e44324(%rcx,%r11,1),%ecx
  mov    %edi,%r11d
  add    %ecx,%r8d
  mov    %r10d,%ecx
  ror    $0x2,%eax
  rol    $0x5,%ecx
  and    %eax,%r11d
  add    %r8d,%ecx
  mov    %edi,%r8d
  or     %eax,%r8d
  and    %r10d,%r8d
  ror    $0x2,%r10d
  or     %r11d,%r8d
  mov    0xb0(%rsp),%r11d
  lea    -0x70e44324(%rdx,%r11,1),%edx
  mov    %eax,%r11d
  add    %edx,%r8d
  mov    %ecx,%edx
  and    %r10d,%r11d
  rol    $0x5,%edx
  add    %r8d,%edx
  mov    %eax,%r8d
  or     %r10d,%r8d
  and    %ecx,%r8d
  ror    $0x2,%ecx
  or     %r11d,%r8d
  mov    0xb4(%rsp),%r11d
  lea    -0x70e44324(%rdi,%r11,1),%edi
  mov    %edx,%r11d
  add    %r8d,%edi
  rol    $0x5,%r11d
  mov    %r10d,%r8d
  add    %edi,%r11d
  mov    %r10d,%edi
  and    %ecx,%r8d
  or     %ecx,%edi
  and    %edx,%edi
  ror    $0x2,%edx
  or     %r8d,%edi
  mov    0xb8(%rsp),%r8d
  lea    -0x70e44324(%rax,%r8,1),%eax
  mov    %r11d,%r8d
  add    %eax,%edi
  rol    $0x5,%r8d
  mov    %ecx,%eax
  add    %edi,%r8d
  mov    %ecx,%edi
  and    %edx,%eax
  or     %edx,%edi
  and    %r11d,%edi
  or     %eax,%edi
  mov    0xbc(%rsp),%eax
  lea    -0x70e44324(%r10,%rax,1),%eax
  lea    (%rdi,%rax,1),%r10d
  mov    %r8d,%edi
  mov    %r11d,%eax
  mov    %edx,%r11d
  rol    $0x5,%edi
  ror    $0x2,%eax
  add    %r10d,%edi
  mov    %edx,%r10d
  and    %eax,%r11d
  or     %eax,%r10d
  and    %r8d,%r10d
  ror    $0x2,%r8d
  or     %r11d,%r10d
  mov    0xc0(%rsp),%r11d
  lea    -0x70e44324(%rcx,%r11,1),%ecx
  mov    %eax,%r11d
  add    %ecx,%r10d
  mov    %edi,%ecx
  and    %r8d,%r11d
  rol    $0x5,%ecx
  add    %r10d,%ecx
  mov    %eax,%r10d
  or     %r8d,%r10d
  and    %edi,%r10d
  ror    $0x2,%edi
  or     %r11d,%r10d
  mov    0xc4(%rsp),%r11d
  lea    -0x70e44324(%rdx,%r11,1),%edx
  mov    %r8d,%r11d
  add    %edx,%r10d
  mov    %ecx,%edx
  and    %edi,%r11d
  rol    $0x5,%edx
  add    %r10d,%edx
  mov    %r8d,%r10d
  or     %edi,%r10d
  and    %ecx,%r10d
  ror    $0x2,%ecx
  or     %r11d,%r10d
  mov    0xc8(%rsp),%r11d
  lea    -0x70e44324(%rax,%r11,1),%eax
  mov    %edi,%r11d
  add    %eax,%r10d
  mov    %edx,%eax
  and    %ecx,%r11d
  rol    $0x5,%eax
  add    %r10d,%eax
  mov    %edi,%r10d
  or     %ecx,%r10d
  and    %edx,%r10d
  or     %r11d,%r10d
  mov    0xcc(%rsp),%r11d
  lea    -0x70e44324(%r8,%r11,1),%r8d
  mov    %ecx,%r11d
  add    %r8d,%r10d
  mov    %eax,%r8d
  rol    $0x5,%r8d
  ror    $0x2,%edx
  add    %r10d,%r8d
  mov    %ecx,%r10d
  and    %edx,%r11d
  or     %edx,%r10d
  and    %eax,%r10d
  ror    $0x2,%eax
  or     %r11d,%r10d
  mov    0xd0(%rsp),%r11d
  lea    -0x70e44324(%rdi,%r11,1),%edi
  mov    %edx,%r11d
  add    %edi,%r10d
  mov    %r8d,%edi
  and    %eax,%r11d
  rol    $0x5,%edi
  add    %r10d,%edi
  mov    %edx,%r10d
  or     %eax,%r10d
  and    %r8d,%r10d
  ror    $0x2,%r8d
  or     %r11d,%r10d
  mov    0xd4(%rsp),%r11d
  lea    -0x70e44324(%rcx,%r11,1),%ecx
  mov    %eax,%r11d
  add    %ecx,%r10d
  mov    %edi,%ecx
  and    %r8d,%r11d
  rol    $0x5,%ecx
  add    %r10d,%ecx
  mov    %eax,%r10d
  or     %r8d,%r10d
  and    %edi,%r10d
  ror    $0x2,%edi
  or     %r11d,%r10d
  mov    0xd8(%rsp),%r11d
  lea    -0x70e44324(%rdx,%r11,1),%edx
  mov    %r8d,%r11d
  add    %edx,%r10d
  mov    %ecx,%edx
  and    %edi,%r11d
  rol    $0x5,%edx
  add    %r10d,%edx
  mov    %r8d,%r10d
  or     %edi,%r10d
  and    %ecx,%r10d
  or     %r11d,%r10d
  mov    0xdc(%rsp),%r11d
  lea    -0x70e44324(%rax,%r11,1),%eax
  add    %eax,%r10d
  mov    %edx,%eax
  rol    $0x5,%eax
  ror    $0x2,%ecx
  add    %r10d,%eax
  mov    %ecx,%r10d
  mov    %ecx,%r11d
  or     %edi,%r10d
  and    %edi,%r11d
  and    %edx,%r10d
  ror    $0x2,%edx
  or     %r11d,%r10d
  mov    0xe0(%rsp),%r11d
  lea    -0x70e44324(%r8,%r11,1),%r8d
  mov    %ecx,%r11d
  add    %r8d,%r10d
  mov    %eax,%r8d
  and    %edx,%r11d
  rol    $0x5,%r8d
  add    %r10d,%r8d
  mov    %ecx,%r10d
  or     %edx,%r10d
  and    %eax,%r10d
  ror    $0x2,%eax
  or     %r11d,%r10d
  mov    0xe4(%rsp),%r11d
  lea    -0x70e44324(%rdi,%r11,1),%edi
  mov    %edx,%r11d
  add    %r10d,%edi
  mov    %r8d,%r10d
  and    %eax,%r11d
  rol    $0x5,%r10d
  add    %edi,%r10d
  mov    %edx,%edi
  or     %eax,%edi
  and    %r8d,%edi
  ror    $0x2,%r8d
  or     %r11d,%edi
  mov    0xe8(%rsp),%r11d
  lea    -0x70e44324(%rcx,%r11,1),%ecx
  mov    %r10d,%r11d
  add    %edi,%ecx
  rol    $0x5,%r11d
  mov    %eax,%edi
  add    %ecx,%r11d
  mov    %eax,%ecx
  and    %r8d,%edi
  or     %r8d,%ecx
  and    %r10d,%ecx
  or     %edi,%ecx
  mov    0xec(%rsp),%edi
  lea    -0x70e44324(%rdx,%rdi,1),%edx
  mov    %r11d,%edi
  add    %ecx,%edx
  rol    $0x5,%edi
  add    %edx,%edi
  mov    0xf0(%rsp),%edx
  ror    $0x2,%r10d
  lea    -0x359d3e2a(%rax,%rdx,1),%ecx
  mov    %r8d,%eax
  mov    0xf4(%rsp),%edx
  xor    %r10d,%eax
  xor    %r11d,%eax
  lea    -0x359d3e2a(%r8,%rdx,1),%edx
  mov    %r10d,%r8d
  add    %eax,%ecx
  mov    %edi,%eax
  rol    $0x5,%eax
  add    %eax,%ecx
  mov    %r11d,%eax
  mov    0xf8(%rsp),%r11d
  ror    $0x2,%eax
  xor    %eax,%r8d
  lea    -0x359d3e2a(%r10,%r11,1),%r10d
  xor    %edi,%r8d
  ror    $0x2,%edi
  add    %r8d,%edx
  mov    %ecx,%r8d
  mov    %edi,%r11d
  rol    $0x5,%r8d
  xor    %eax,%r11d
  add    %r8d,%edx
  xor    %ecx,%r11d
  ror    $0x2,%ecx
  mov    %edx,%r8d
  add    %r11d,%r10d
  rol    $0x5,%r8d
  add    %r10d,%r8d
  mov    0xfc(%rsp),%r10d
  mov    %r8d,%r11d
  lea    -0x359d3e2a(%rax,%r10,1),%eax
  mov    %edi,%r10d
  rol    $0x5,%r11d
  xor    %ecx,%r10d
  xor    %edx,%r10d
  ror    $0x2,%edx
  add    %r10d,%eax
  mov    %r8d,%r10d
  add    %r11d,%eax
  mov    0x100(%rsp),%r11d
  ror    $0x2,%r10d
  lea    -0x359d3e2a(%rdi,%r11,1),%edi
  mov    %ecx,%r11d
  xor    %edx,%r11d
  xor    %r11d,%r8d
  add    %edi,%r8d
  mov    %eax,%edi
  rol    $0x5,%edi
  add    %r8d,%edi
  mov    0x104(%rsp),%r8d
  lea    -0x359d3e2a(%rcx,%r8,1),%r8d
  mov    %r10d,%ecx
  xor    %edx,%ecx
  xor    %eax,%ecx
  ror    $0x2,%eax
  add    %ecx,%r8d
  mov    %edi,%ecx
  rol    $0x5,%ecx
  add    %r8d,%ecx
  mov    0x108(%rsp),%r8d
  lea    -0x359d3e2a(%rdx,%r8,1),%r8d
  mov    %eax,%edx
  xor    %r10d,%edx
  xor    %edi,%edx
  ror    $0x2,%edi
  add    %edx,%r8d
  mov    %ecx,%edx
  rol    $0x5,%edx
  add    %r8d,%edx
  mov    0x10c(%rsp),%r8d
  mov    %edx,%r11d
  lea    -0x359d3e2a(%r10,%r8,1),%r8d
  mov    %edi,%r10d
  rol    $0x5,%r11d
  xor    %eax,%r10d
  xor    %ecx,%r10d
  ror    $0x2,%ecx
  add    %r10d,%r8d
  mov    0x110(%rsp),%r10d
  add    %r11d,%r8d
  lea    -0x359d3e2a(%rax,%r10,1),%eax
  mov    %ecx,%r10d
  mov    %r8d,%r11d
  xor    %edi,%r10d
  rol    $0x5,%r11d
  xor    %edx,%r10d
  ror    $0x2,%edx
  add    %r10d,%eax
  mov    %r8d,%r10d
  add    %r11d,%eax
  mov    0x114(%rsp),%r11d
  ror    $0x2,%r10d
  lea    -0x359d3e2a(%rdi,%r11,1),%edi
  mov    %edx,%r11d
  xor    %ecx,%r11d
  xor    %r11d,%r8d
  add    %edi,%r8d
  mov    %eax,%edi
  rol    $0x5,%edi
  add    %r8d,%edi
  mov    0x118(%rsp),%r8d
  lea    -0x359d3e2a(%rcx,%r8,1),%r8d
  mov    %r10d,%ecx
  xor    %edx,%ecx
  xor    %eax,%ecx
  ror    $0x2,%eax
  add    %ecx,%r8d
  mov    %edi,%ecx
  rol    $0x5,%ecx
  add    %r8d,%ecx
  mov    0x11c(%rsp),%r8d
  lea    -0x359d3e2a(%rdx,%r8,1),%r8d
  mov    %eax,%edx
  xor    %r10d,%edx
  xor    %edi,%edx
  ror    $0x2,%edi
  add    %edx,%r8d
  mov    %ecx,%edx
  rol    $0x5,%edx
  add    %r8d,%edx
  mov    0x120(%rsp),%r8d
  mov    %edx,%r11d
  lea    -0x359d3e2a(%r10,%r8,1),%r8d
  mov    %edi,%r10d
  rol    $0x5,%r11d
  xor    %eax,%r10d
  xor    %ecx,%r10d
  ror    $0x2,%ecx
  add    %r10d,%r8d
  mov    0x124(%rsp),%r10d
  add    %r11d,%r8d
  lea    -0x359d3e2a(%rax,%r10,1),%eax
  mov    %ecx,%r10d
  mov    %r8d,%r11d
  xor    %edi,%r10d
  rol    $0x5,%r11d
  xor    %edx,%r10d
  ror    $0x2,%edx
  add    %r10d,%eax
  mov    %r8d,%r10d
  add    %r11d,%eax
  mov    0x128(%rsp),%r11d
  ror    $0x2,%r10d
  lea    -0x359d3e2a(%rdi,%r11,1),%edi
  mov    %edx,%r11d
  xor    %ecx,%r11d
  xor    %r11d,%r8d
  mov    0x134(%rsp),%r11d
  add    %r8d,%edi
  mov    %eax,%r8d
  rol    $0x5,%r8d
  add    %edi,%r8d
  mov    0x12c(%rsp),%edi
  lea    -0x359d3e2a(%rcx,%rdi,1),%edi
  mov    %r10d,%ecx
  xor    %edx,%ecx
  xor    %eax,%ecx
  add    %ecx,%edi
  mov    %r8d,%ecx
  rol    $0x5,%ecx
  ror    $0x2,%eax
  add    %edi,%ecx
  mov    0x130(%rsp),%edi
  lea    -0x359d3e2a(%rdx,%rdi,1),%edi
  mov    %r10d,%edx
  lea    -0x359d3e2a(%r10,%r11,1),%r10d
  mov    %eax,%r11d
  xor    %eax,%edx
  xor    %r8d,%edx
  ror    $0x2,%r8d
  add    %edx,%edi
  mov    %ecx,%edx
  xor    %r8d,%r11d
  rol    $0x5,%edx
  xor    %ecx,%r11d
  ror    $0x2,%ecx
  add    %edi,%edx
  add    %r11d,%r10d
  add    %ecx,%esi
  mov    %edx,%edi
  mov    %esi,0x10(%r9)
  rol    $0x5,%edi
  add    %r10d,%edi
  mov    0x138(%rsp),%r10d
  mov    %edi,%r11d
  lea    -0x359d3e2a(%rax,%r10,1),%r10d
  mov    %r8d,%eax
  rol    $0x5,%r11d
  xor    %ecx,%eax
  xor    %edx,%eax
  ror    $0x2,%edx
  add    %eax,%r10d
  mov    0x13c(%rsp),%eax
  movd   %edx,%xmm6
  add    %r11d,%r10d
  lea    -0x359d3e2a(%r8,%rax,1),%r8d
  mov    %ecx,%eax
  movd   %r10d,%xmm7
  xor    %edx,%eax
  xor    %edi,%eax
  ror    $0x2,%edi
  add    %eax,%r8d
  mov    %r10d,%eax
  movd   %edi,%xmm1
  rol    $0x5,%eax
  punpckldq %xmm6,%xmm1
  movdqu (%r9),%xmm6
  add    %r8d,%eax
  movd   %eax,%xmm0
  punpckldq %xmm7,%xmm0
  punpcklqdq %xmm1,%xmm0
  paddd  %xmm6,%xmm0
  movups %xmm0,(%r9)
  mov    0x148(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L18
  add    $0x158,%rsp
  ret
L18:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void wsha1_transform(int *data, int *state) {
  unsigned W[80];
  unsigned A, B, C, D, E, F, G, H, M, N;
  int i;
  for (i = 0; i < 16; i++) {
    data[i] = (((((unsigned)(data[i])) & 0x000000FF) << 24) | ((((unsigned)(data[i])) & 0x0000FF00) << 8) | ((((unsigned)(data[i])) & 0x00FF0000) >> 8) | ((((unsigned)(data[i])) & 0xFF000000) >> 24));
  }
  memcpy(W, data, 64);
  for (i = 0; i < 64; i++) {
    W[i + 16] = ((((unsigned)(W[i + 13] ^ W[i + 8] ^ W[i + 0] ^ W[i + 2])) << (1)) | (((unsigned)(W[i + 13] ^ W[i + 8] ^ W[i + 0] ^ W[i + 2])) >> (32 - (1))));
  }
  M = state[0];
  B = state[1];
  C = state[2];
  N = state[3];
  E = state[4];
  for (i = 0; i < 20; i += 5) {
    E = E + ((((unsigned)((M))) << (5)) | (((unsigned)((M))) >> (32 - (5)))) + ((~B & (N)) | (B & (C))) + W[i + 0] + 0x5A827999;
    W[i + 0] = 0;
    B = ((((unsigned)(B)) << (30)) | (((unsigned)(B)) >> (32 - (30))));
    N = N + ((((unsigned)((E))) << (5)) | (((unsigned)((E))) >> (32 - (5)))) + ((~M & (C)) | (M & (B))) + W[i + 1] + 0x5A827999;
    W[i + 1] = 0;
    M = ((((unsigned)(M)) << (30)) | (((unsigned)(M)) >> (32 - (30))));
    C = C + ((((unsigned)((N))) << (5)) | (((unsigned)((N))) >> (32 - (5)))) + ((~E & (B)) | (E & (M))) + W[i + 2] + 0x5A827999;
    W[i + 2] = 0;
    E = ((((unsigned)(E)) << (30)) | (((unsigned)(E)) >> (32 - (30))));
    B = B + ((((unsigned)((C))) << (5)) | (((unsigned)((C))) >> (32 - (5)))) + ((~N & (M)) | (N & (E))) + W[i + 3] + 0x5A827999;
    W[i + 3] = 0;
    N = ((((unsigned)(N)) << (30)) | (((unsigned)(N)) >> (32 - (30))));
    M = M + ((((unsigned)((B))) << (5)) | (((unsigned)((B))) >> (32 - (5)))) + ((~C & (E)) | (C & (N))) + W[i + 4] + 0x5A827999;
    W[i + 4] = 0;
    C = ((((unsigned)(C)) << (30)) | (((unsigned)(C)) >> (32 - (30))));
  }
  F = M;
  D = N;
  for (i = 20; i < 40; i += 5) {
    G = W[i] + ((((unsigned)(F)) << (5)) | (((unsigned)(F)) >> (32 - (5)))) + (D ^ C ^ B);
    D = D + ((((unsigned)(G + E + 0x6ED9EBA1)) << (5)) | (((unsigned)(G + E + 0x6ED9EBA1)) >> (32 - (5)))) + (C ^ ((((unsigned)(B)) << (30)) | (((unsigned)(B)) >> (32 - (30)))) ^ F) + W[i + 1] + 0x6ED9EBA1;
    C = C + ((((unsigned)(D)) << (5)) | (((unsigned)(D)) >> (32 - (5)))) + ((G + E + 0x6ED9EBA1) ^ ((((unsigned)(B)) << (30)) | (((unsigned)(B)) >> (32 - (30)))) ^ ((((unsigned)(F)) << (30)) | (((unsigned)(F)) >> (32 - (30))))) + W[i + 2] + 0x6ED9EBA1;
    E = ((((unsigned)(G + E + 0x6ED9EBA1)) << (30)) | (((unsigned)(G + E + 0x6ED9EBA1)) >> (32 - (30))));
    B = ((((unsigned)(B)) << (30)) | (((unsigned)(B)) >> (32 - (30)))) + ((((unsigned)(C)) << (5)) | (((unsigned)(C)) >> (32 - (5)))) + (E ^ D ^ ((((unsigned)(F)) << (30)) | (((unsigned)(F)) >> (32 - (30))))) + W[i + 3] + 0x6ED9EBA1;
    D = ((((unsigned)(D)) << (30)) | (((unsigned)(D)) >> (32 - (30))));
    F = ((((unsigned)(F)) << (30)) | (((unsigned)(F)) >> (32 - (30)))) + ((((unsigned)(B)) << (5)) | (((unsigned)(B)) >> (32 - (5)))) + (E ^ D ^ C) + W[i + 4] + 0x6ED9EBA1;
    C = ((((unsigned)(C)) << (30)) | (((unsigned)(C)) >> (32 - (30))));
  }
  M = F;
  N = D;
  for (i = 40; i < 60; i += 5) {
    E = E + ((((N) | (C)) & B) | ((C) & (N))) + ((((unsigned)((M))) << (5)) | (((unsigned)((M))) >> (32 - (5)))) + W[i + 0] - 0x70E44324;
    W[i + 0] = 0;
    B = ((((unsigned)(B)) << (30)) | (((unsigned)(B)) >> (32 - (30))));
    N = N + ((((C) | (B)) & M) | ((B) & (C))) + ((((unsigned)((E))) << (5)) | (((unsigned)((E))) >> (32 - (5)))) + W[i + 1] - 0x70E44324;
    W[i + 1] = 0;
    M = ((((unsigned)(M)) << (30)) | (((unsigned)(M)) >> (32 - (30))));
    C = C + ((((B) | (M)) & E) | ((M) & (B))) + ((((unsigned)((N))) << (5)) | (((unsigned)((N))) >> (32 - (5)))) + W[i + 2] - 0x70E44324;
    W[i + 2] = 0;
    E = ((((unsigned)(E)) << (30)) | (((unsigned)(E)) >> (32 - (30))));
    B = B + ((((M) | (E)) & N) | ((E) & (M))) + ((((unsigned)((C))) << (5)) | (((unsigned)((C))) >> (32 - (5)))) + W[i + 3] - 0x70E44324;
    W[i + 3] = 0;
    N = ((((unsigned)(N)) << (30)) | (((unsigned)(N)) >> (32 - (30))));
    M = M + ((((E) | (N)) & C) | ((N) & (E))) + ((((unsigned)((B))) << (5)) | (((unsigned)((B))) >> (32 - (5)))) + W[i + 4] - 0x70E44324;
    W[i + 4] = 0;
    C = ((((unsigned)(C)) << (30)) | (((unsigned)(C)) >> (32 - (30))));
  }
  F = M;
  A = M;
  D = N;
  for (i = 60; i < 80; i += 5) {
    G = ((((unsigned)(A)) << (5)) | (((unsigned)(A)) >> (32 - (5)))) + (D ^ C ^ B) + W[i + 0] + E - 0x359D3E2A;
    B = ((((unsigned)(B)) << (30)) | (((unsigned)(B)) >> (32 - (30))));
    E = G;
    D = (C ^ B ^ A) + W[i + 1] + D + ((((unsigned)(G)) << (5)) | (((unsigned)(G)) >> (32 - (5)))) - 0x359D3E2A;
    A = ((((unsigned)(A)) << (30)) | (((unsigned)(A)) >> (32 - (30))));
    G = ((((unsigned)(D)) << (5)) | (((unsigned)(D)) >> (32 - (5))));
    G = (E ^ B ^ A) + W[i + 2] + C + G - 0x359D3E2A;
    E = ((((unsigned)(E)) << (30)) | (((unsigned)(E)) >> (32 - (30))));
    C = G;
    G = ((((unsigned)(G)) << (5)) | (((unsigned)(G)) >> (32 - (5)))) + (E ^ D ^ A) + W[i + 3] + B - 0x359D3E2A;
    D = ((((unsigned)(D)) << (30)) | (((unsigned)(D)) >> (32 - (30))));
    H = (E ^ D ^ C) + W[i + 4];
    B = G;
    G = ((((unsigned)(G)) << (5)) | (((unsigned)(G)) >> (32 - (5))));
    C = ((((unsigned)(C)) << (30)) | (((unsigned)(C)) >> (32 - (30))));
    A = H + A + G - 0x359D3E2A;
  }
  state[0] += A;
  state[1] += B;
  state[2] += C;
  state[3] += D;
  state[4] += E;
}
```