// File: /workspace/github_c_makefile_star2_O0/Tarsnap[P]spiped/liball/../libcperciva/crypto/crypto_entropy.c
// Function: update
static void
update(const uint8_t * data, size_t datalen)
{
	HMAC_SHA256_CTX ctx;
	uint8_t K[32];
	uint8_t Vx[33];

	/* Load (Key, V) into (K, Vx). */
	memcpy(K, drbg.Key, 32);
	memcpy(Vx, drbg.V, 32);

	/* K <- HMAC(K, V || 0x00 || data). */
	Vx[32] = 0x00;
	HMAC_SHA256_Init(&ctx, K, 32);
	HMAC_SHA256_Update(&ctx, Vx, 33);
	HMAC_SHA256_Update(&ctx, data, datalen);
	HMAC_SHA256_Final(K, &ctx);

	/* V <- HMAC(K, V). */
	HMAC_SHA256_Buf(K, 32, Vx, 32, Vx);

	/* If the provided data is non-Null, perform another mixing stage. */
	if (datalen != 0) {
		/* K <- HMAC(K, V || 0x01 || data). */
		Vx[32] = 0x01;
		HMAC_SHA256_Init(&ctx, K, 32);
		HMAC_SHA256_Update(&ctx, Vx, 33);
		HMAC_SHA256_Update(&ctx, data, datalen);
		HMAC_SHA256_Final(K, &ctx);

		/* V <- HMAC(K, V). */
		HMAC_SHA256_Buf(K, 32, Vx, 32, Vx);
	}

	/* Copy (K, Vx) back to (Key, V). */
	memcpy(drbg.Key, K, 32);
	memcpy(drbg.V, Vx, 32);

	/* Clean the stack. */
	insecure_memzero(K, 32);
	insecure_memzero(Vx, 33);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x130, %rsp            # imm = 0x130
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq 0xe55e(%rip), %rax      # 0x1f678
movq %rax, -0x100(%rbp)
movq 0xe558(%rip), %rax      # 0x1f680
movq %rax, -0xf8(%rbp)
movq 0xe552(%rip), %rax      # 0x1f688
movq %rax, -0xf0(%rbp)
movq 0xe54c(%rip), %rax      # 0x1f690
movq %rax, -0xe8(%rbp)
movq 0xe546(%rip), %rax      # 0x1f698
movq %rax, -0x130(%rbp)
movq 0xe540(%rip), %rax      # 0x1f6a0
movq %rax, -0x128(%rbp)
movq 0xe53a(%rip), %rax      # 0x1f6a8
movq %rax, -0x120(%rbp)
movq 0xe534(%rip), %rax      # 0x1f6b0
movq %rax, -0x118(%rbp)
movb $0x0, -0x110(%rbp)
leaq -0x100(%rbp), %rsi
leaq -0xe0(%rbp), %rdi
movl $0x20, %edx
callq 0x5b30
leaq -0x130(%rbp), %rsi
leaq -0xe0(%rbp), %rdi
movl $0x21, %edx
callq 0x5d10
movq -0x8(%rbp), %rsi
movq -0x10(%rbp), %rdx
leaq -0xe0(%rbp), %rdi
callq 0x5d10
leaq -0x100(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0x5da0
leaq -0x100(%rbp), %rdi
leaq -0x130(%rbp), %rdx
leaq -0x130(%rbp), %r8
movl $0x20, %ecx
movq %rcx, %rsi
callq 0x5e70
cmpq $0x0, -0x10(%rbp)
je 0x1128e
movb $0x1, -0x110(%rbp)
leaq -0x100(%rbp), %rsi
leaq -0xe0(%rbp), %rdi
movl $0x20, %edx
callq 0x5b30
leaq -0x130(%rbp), %rsi
leaq -0xe0(%rbp), %rdi
movl $0x21, %edx
callq 0x5d10
movq -0x8(%rbp), %rsi
movq -0x10(%rbp), %rdx
leaq -0xe0(%rbp), %rdi
callq 0x5d10
leaq -0x100(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0x5da0
leaq -0x100(%rbp), %rdi
leaq -0x130(%rbp), %rdx
leaq -0x130(%rbp), %r8
movl $0x20, %ecx
movq %rcx, %rsi
callq 0x5e70
movq -0x100(%rbp), %rax
movq %rax, 0xe3dc(%rip)      # 0x1f678
movq -0xf8(%rbp), %rax
movq %rax, 0xe3d6(%rip)      # 0x1f680
movq -0xf0(%rbp), %rax
movq %rax, 0xe3d0(%rip)      # 0x1f688
movq -0xe8(%rbp), %rax
movq %rax, 0xe3ca(%rip)      # 0x1f690
movq -0x130(%rbp), %rax
movq %rax, 0xe3c4(%rip)      # 0x1f698
movq -0x128(%rbp), %rax
movq %rax, 0xe3be(%rip)      # 0x1f6a0
movq -0x120(%rbp), %rax
movq %rax, 0xe3b8(%rip)      # 0x1f6a8
movq -0x118(%rbp), %rax
movq %rax, 0xe3b2(%rip)      # 0x1f6b0
leaq -0x100(%rbp), %rdi
movl $0x20, %esi
callq 0x113e0
leaq -0x130(%rbp), %rdi
movl $0x21, %esi
callq 0x113e0
addq $0x130, %rsp            # imm = 0x130
popq %rbp
retq
nopl (%rax)