// File: /workspace/github_c_makefile_star2_O0/sbp[P]tweetnacl-tools/tweetnacl.c
// Function: crypto_stream_salsa20_tweet_xor
int crypto_stream_salsa20_xor(u8 *c,const u8 *m,u64 b,const u8 *n,const u8 *k)
{
  u8 z[16],x[64];
  u32 u,i;
  if (!b) return 0;
  FOR(i,16) z[i] = 0;
  FOR(i,8) z[i] = n[i];
  while (b >= 64) {
    crypto_core_salsa20(x,z,k,sigma);
    FOR(i,64) c[i] = (m?m[i]:0) ^ x[i];
    u = 1;
    for (i = 8;i < 16;++i) {
      u += (u32) z[i];
      z[i] = u;
      u >>= 8;
    }
    b -= 64;
    c += 64;
    if (m) m += 64;
  }
  if (b) {
    crypto_core_salsa20(x,z,k,sigma);
    FOR(i,b) c[i] = (m?m[i]:0) ^ x[i];
  }
  return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xa0, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
cmpq $0x0, -0x20(%rbp)
jne 0x1cf2
movl $0x0, -0x4(%rbp)
jmp 0x1f4b
movq $0x0, -0x90(%rbp)
cmpq $0x10, -0x90(%rbp)
jae 0x1d27
movq -0x90(%rbp), %rax
movb $0x0, -0x40(%rbp,%rax)
movq -0x90(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x90(%rbp)
jmp 0x1cfd
movq $0x0, -0x90(%rbp)
cmpq $0x8, -0x90(%rbp)
jae 0x1d69
movq -0x28(%rbp), %rax
movq -0x90(%rbp), %rcx
movb (%rax,%rcx), %cl
movq -0x90(%rbp), %rax
movb %cl, -0x40(%rbp,%rax)
movq -0x90(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x90(%rbp)
jmp 0x1d32
jmp 0x1d6b
cmpq $0x40, -0x20(%rbp)
jb 0x1ea7
leaq -0x80(%rbp), %rdi
leaq -0x40(%rbp), %rsi
movq -0x30(%rbp), %rdx
leaq 0x42f7(%rip), %rcx      # 0x6080
callq 0x1730
movq $0x0, -0x90(%rbp)
cmpq $0x40, -0x90(%rbp)
jae 0x1e03
cmpq $0x0, -0x18(%rbp)
je 0x1dc1
movq -0x18(%rbp), %rax
movq -0x90(%rbp), %rcx
movzbl (%rax,%rcx), %eax
movl %eax, -0x94(%rbp)
jmp 0x1dcb
xorl %eax, %eax
movl %eax, -0x94(%rbp)
jmp 0x1dcb
movl -0x94(%rbp), %eax
movq -0x90(%rbp), %rcx
movzbl -0x80(%rbp,%rcx), %ecx
xorl %ecx, %eax
movb %al, %dl
movq -0x10(%rbp), %rax
movq -0x90(%rbp), %rcx
movb %dl, (%rax,%rcx)
movq -0x90(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x90(%rbp)
jmp 0x1d99
movq $0x1, -0x88(%rbp)
movq $0x8, -0x90(%rbp)
cmpq $0x10, -0x90(%rbp)
jae 0x1e77
movq -0x90(%rbp), %rax
movzbl -0x40(%rbp,%rax), %eax
addq -0x88(%rbp), %rax
movq %rax, -0x88(%rbp)
movq -0x88(%rbp), %rax
movb %al, %cl
movq -0x90(%rbp), %rax
movb %cl, -0x40(%rbp,%rax)
movq -0x88(%rbp), %rax
shrq $0x8, %rax
movq %rax, -0x88(%rbp)
movq -0x90(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x90(%rbp)
jmp 0x1e19
movq -0x20(%rbp), %rax
subq $0x40, %rax
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rax
addq $0x40, %rax
movq %rax, -0x10(%rbp)
cmpq $0x0, -0x18(%rbp)
je 0x1ea2
movq -0x18(%rbp), %rax
addq $0x40, %rax
movq %rax, -0x18(%rbp)
jmp 0x1d6b
cmpq $0x0, -0x20(%rbp)
je 0x1f44
leaq -0x80(%rbp), %rdi
leaq -0x40(%rbp), %rsi
movq -0x30(%rbp), %rdx
leaq 0x41bb(%rip), %rcx      # 0x6080
callq 0x1730
movq $0x0, -0x90(%rbp)
movq -0x90(%rbp), %rax
cmpq -0x20(%rbp), %rax
jae 0x1f42
cmpq $0x0, -0x18(%rbp)
je 0x1f00
movq -0x18(%rbp), %rax
movq -0x90(%rbp), %rcx
movzbl (%rax,%rcx), %eax
movl %eax, -0x98(%rbp)
jmp 0x1f0a
xorl %eax, %eax
movl %eax, -0x98(%rbp)
jmp 0x1f0a
movl -0x98(%rbp), %eax
movq -0x90(%rbp), %rcx
movzbl -0x80(%rbp,%rcx), %ecx
xorl %ecx, %eax
movb %al, %dl
movq -0x10(%rbp), %rax
movq -0x90(%rbp), %rcx
movb %dl, (%rax,%rcx)
movq -0x90(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x90(%rbp)
jmp 0x1ed5
jmp 0x1f44
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0xa0, %rsp
popq %rbp
retq
nopw (%rax,%rax)