// File: /workspace/github_c_makefile_star2_O0/sbp[P]tweetnacl-tools/tweetnacl.c
// Function: crypto_onetimeauth_poly1305_tweet
int crypto_onetimeauth(u8 *out,const u8 *m,u64 n,const u8 *k)
{
  u32 s,i,j,u,x[17],r[17],h[17],c[17],g[17];

  FOR(j,17) r[j]=h[j]=0;
  FOR(j,16) r[j]=k[j];
  r[3]&=15;
  r[4]&=252;
  r[7]&=15;
  r[8]&=252;
  r[11]&=15;
  r[12]&=252;
  r[15]&=15;

  while (n > 0) {
    FOR(j,17) c[j] = 0;
    for (j = 0;(j < 16) && (j < n);++j) c[j] = m[j];
    c[j] = 1;
    m += j; n -= j;
    add1305(h,c);
    FOR(i,17) {
      x[i] = 0;
      FOR(j,17) x[i] += h[j] * ((j <= i) ? r[i - j] : 320 * r[i + 17 - j]);
    }
    FOR(i,17) h[i] = x[i];
    u = 0;
    FOR(j,16) {
      u += h[j];
      h[j] = u & 255;
      u >>= 8;
    }
    u += h[16]; h[16] = u & 3;
    u = 5 * (u >> 2);
    FOR(j,16) {
      u += h[j];
      h[j] = u & 255;
      u >>= 8;
    }
    u += h[16]; h[16] = u;
  }

  FOR(j,17) g[j] = h[j];
  add1305(h,minusp);
  s = -(h[16] >> 7);
  FOR(j,17) h[j] ^= s & (g[j] ^ h[j]);

  FOR(j,16) c[j] = k[j + 16];
  c[16] = 0;
  add1305(h,c);
  FOR(j,16) out[j] = h[j];
  return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x330, %rsp            # imm = 0x330
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq $0x0, -0x38(%rbp)
cmpq $0x11, -0x38(%rbp)
jae 0x20a8
movq -0x38(%rbp), %rax
movq $0x0, -0x1f0(%rbp,%rax,8)
movq -0x38(%rbp), %rax
movq $0x0, -0x160(%rbp,%rax,8)
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
jmp 0x2073
movq $0x0, -0x38(%rbp)
cmpq $0x10, -0x38(%rbp)
jae 0x20df
movq -0x20(%rbp), %rax
movq -0x38(%rbp), %rcx
movzbl (%rax,%rcx), %eax
movl %eax, %ecx
movq -0x38(%rbp), %rax
movq %rcx, -0x160(%rbp,%rax,8)
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
jmp 0x20b0
movq -0x148(%rbp), %rax
andq $0xf, %rax
movq %rax, -0x148(%rbp)
movq -0x140(%rbp), %rax
andq $0xfc, %rax
movq %rax, -0x140(%rbp)
movq -0x128(%rbp), %rax
andq $0xf, %rax
movq %rax, -0x128(%rbp)
movq -0x120(%rbp), %rax
andq $0xfc, %rax
movq %rax, -0x120(%rbp)
movq -0x108(%rbp), %rax
andq $0xf, %rax
movq %rax, -0x108(%rbp)
movq -0x100(%rbp), %rax
andq $0xfc, %rax
movq %rax, -0x100(%rbp)
movq -0xe8(%rbp), %rax
andq $0xf, %rax
movq %rax, -0xe8(%rbp)
cmpq $0x0, -0x18(%rbp)
jbe 0x243c
movq $0x0, -0x38(%rbp)
cmpq $0x11, -0x38(%rbp)
jae 0x219b
movq -0x38(%rbp), %rax
movq $0x0, -0x280(%rbp,%rax,8)
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
jmp 0x2176
movq $0x0, -0x38(%rbp)
xorl %eax, %eax
cmpq $0x10, -0x38(%rbp)
movb %al, -0x311(%rbp)
jae 0x21c3
movq -0x38(%rbp), %rax
cmpq -0x18(%rbp), %rax
setb %al
movb %al, -0x311(%rbp)
movb -0x311(%rbp), %al
testb $0x1, %al
jne 0x21cf
jmp 0x21f7
movq -0x10(%rbp), %rax
movq -0x38(%rbp), %rcx
movzbl (%rax,%rcx), %eax
movl %eax, %ecx
movq -0x38(%rbp), %rax
movq %rcx, -0x280(%rbp,%rax,8)
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
jmp 0x21a3
movq -0x38(%rbp), %rax
movq $0x1, -0x280(%rbp,%rax,8)
movq -0x38(%rbp), %rax
addq -0x10(%rbp), %rax
movq %rax, -0x10(%rbp)
movq -0x38(%rbp), %rcx
movq -0x18(%rbp), %rax
subq %rcx, %rax
movq %rax, -0x18(%rbp)
leaq -0x1f0(%rbp), %rdi
leaq -0x280(%rbp), %rsi
callq 0x2580
movq $0x0, -0x30(%rbp)
cmpq $0x11, -0x30(%rbp)
jae 0x230a
movq -0x30(%rbp), %rax
movq $0x0, -0xd0(%rbp,%rax,8)
movq $0x0, -0x38(%rbp)
cmpq $0x11, -0x38(%rbp)
jae 0x22f7
movq -0x38(%rbp), %rax
movq -0x1f0(%rbp,%rax,8), %rax
movq %rax, -0x320(%rbp)
movq -0x38(%rbp), %rax
cmpq -0x30(%rbp), %rax
ja 0x22a1
movq -0x30(%rbp), %rax
subq -0x38(%rbp), %rax
movq -0x160(%rbp,%rax,8), %rax
movq %rax, -0x328(%rbp)
jmp 0x22c0
movq -0x30(%rbp), %rax
addq $0x11, %rax
subq -0x38(%rbp), %rax
imulq $0x140, -0x160(%rbp,%rax,8), %rax # imm = 0x140
movq %rax, -0x328(%rbp)
movq -0x320(%rbp), %rcx
movq -0x328(%rbp), %rax
imulq %rax, %rcx
movq -0x30(%rbp), %rax
addq -0xd0(%rbp,%rax,8), %rcx
movq %rcx, -0xd0(%rbp,%rax,8)
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
jmp 0x2260
jmp 0x22f9
movq -0x30(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x30(%rbp)
jmp 0x223d
movq $0x0, -0x30(%rbp)
cmpq $0x11, -0x30(%rbp)
jae 0x233f
movq -0x30(%rbp), %rax
movq -0xd0(%rbp,%rax,8), %rcx
movq -0x30(%rbp), %rax
movq %rcx, -0x1f0(%rbp,%rax,8)
movq -0x30(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x30(%rbp)
jmp 0x2312
movq $0x0, -0x40(%rbp)
movq $0x0, -0x38(%rbp)
cmpq $0x10, -0x38(%rbp)
jae 0x239b
movq -0x38(%rbp), %rax
movq -0x1f0(%rbp,%rax,8), %rax
addq -0x40(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rcx
andq $0xff, %rcx
movq -0x38(%rbp), %rax
movq %rcx, -0x1f0(%rbp,%rax,8)
movq -0x40(%rbp), %rax
shrq $0x8, %rax
movq %rax, -0x40(%rbp)
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
jmp 0x234f
movq -0x170(%rbp), %rax
addq -0x40(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
andq $0x3, %rax
movq %rax, -0x170(%rbp)
movq -0x40(%rbp), %rax
shrq $0x2, %rax
imulq $0x5, %rax, %rax
movq %rax, -0x40(%rbp)
movq $0x0, -0x38(%rbp)
cmpq $0x10, -0x38(%rbp)
jae 0x241d
movq -0x38(%rbp), %rax
movq -0x1f0(%rbp,%rax,8), %rax
addq -0x40(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rcx
andq $0xff, %rcx
movq -0x38(%rbp), %rax
movq %rcx, -0x1f0(%rbp,%rax,8)
movq -0x40(%rbp), %rax
shrq $0x8, %rax
movq %rax, -0x40(%rbp)
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
jmp 0x23d1
movq -0x170(%rbp), %rax
addq -0x40(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
movq %rax, -0x170(%rbp)
jmp 0x2163
movq $0x0, -0x38(%rbp)
cmpq $0x11, -0x38(%rbp)
jae 0x2471
movq -0x38(%rbp), %rax
movq -0x1f0(%rbp,%rax,8), %rcx
movq -0x38(%rbp), %rax
movq %rcx, -0x310(%rbp,%rax,8)
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
jmp 0x2444
leaq -0x1f0(%rbp), %rdi
leaq 0x3c11(%rip), %rsi      # 0x6090
callq 0x2580
movq -0x170(%rbp), %rcx
shrq $0x7, %rcx
xorl %eax, %eax
subq %rcx, %rax
movq %rax, -0x28(%rbp)
movq $0x0, -0x38(%rbp)
cmpq $0x11, -0x38(%rbp)
jae 0x24e8
movq -0x28(%rbp), %rcx
movq -0x38(%rbp), %rax
movq -0x310(%rbp,%rax,8), %rax
movq -0x38(%rbp), %rdx
xorq -0x1f0(%rbp,%rdx,8), %rax
andq %rax, %rcx
movq -0x38(%rbp), %rax
xorq -0x1f0(%rbp,%rax,8), %rcx
movq %rcx, -0x1f0(%rbp,%rax,8)
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
jmp 0x24a0
movq $0x0, -0x38(%rbp)
cmpq $0x10, -0x38(%rbp)
jae 0x2520
movq -0x20(%rbp), %rax
movq -0x38(%rbp), %rcx
movzbl 0x10(%rax,%rcx), %eax
movl %eax, %ecx
movq -0x38(%rbp), %rax
movq %rcx, -0x280(%rbp,%rax,8)
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
jmp 0x24f0
movq $0x0, -0x200(%rbp)
leaq -0x1f0(%rbp), %rdi
leaq -0x280(%rbp), %rsi
callq 0x2580
movq $0x0, -0x38(%rbp)
cmpq $0x10, -0x38(%rbp)
jae 0x2574
movq -0x38(%rbp), %rax
movq -0x1f0(%rbp,%rax,8), %rax
movb %al, %dl
movq -0x8(%rbp), %rax
movq -0x38(%rbp), %rcx
movb %dl, (%rax,%rcx)
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
jmp 0x2546
xorl %eax, %eax
addq $0x330, %rsp            # imm = 0x330
popq %rbp
retq
nop