Function at 0x476980
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x3c
mov ebx, dword [esp + 0x50]
cmp dword [ebx + 4], 0
je 0x476a75
cmp dword [ebx + 0xc], 0
je 0x476a75
push 0x2c
call sym.adb.exe_OPENSSL_malloc
add esp, 4
mov edi, eax
test eax, eax
je 0x476a9c
mov dword [edi + 4], 0
mov dword [edi], 0
mov dword [edi + 0xc], 0
mov dword [edi + 8], 0
mov dword [edi + 0x14], 0
mov dword [edi + 0x10], 0
mov dword [edi + 0x1c], 0
mov dword [edi + 0x18], 0
mov dword [edi + 0x24], 0
mov dword [edi + 0x20], 0
mov dword [edi + 0x28], 0
push edi
call sym.adb.exe_BN_CTX_start
add esp, 4
push edi
call sym.adb.exe_BN_CTX_get
add esp, 4
mov ebp, eax
push edi
call sym.adb.exe_BN_CTX_get
add esp, 4
mov esi, eax
test ebp, ebp
je 0x476ab3
test esi, esi
je 0x476ab3
push ebp
push dword [esp + 0x60]
push dword [esp + 0x60]
call sym.adb.exe_BN_bin2bn
add esp, 0xc
test eax, eax
je 0x476acb
push dword [ebx + 4]
push ebp
call sym.adb.exe_BN_ucmp
add esp, 8
test eax, eax
js 0x476ba4
push 0x2ae
push str.external_boringssl_src_crypto_fipsmodule_rsa_rsa_impl.c
push 0x73
push 0
push 4
call sym.adb.exe_ERR_put_error
add esp, 0x14
jmp 0x476acb
push 0x291
push str.external_boringssl_src_crypto_fipsmodule_rsa_rsa_impl.c
push 0x90
push 0
push 4
call sym.adb.exe_ERR_put_error
add esp, 0x14
xor ebp, ebp
mov eax, ebp
add esp, 0x3c
pop esi
pop edi
pop ebx
pop ebp
ret
push 0x7f
push str.external_boringssl_src_crypto_fipsmodule_bn_ctx.c
push 0x41
push 0
push 3
call sym.adb.exe_ERR_put_error
add esp, 0x14
jmp 0x476a90
push 0x2a4
push str.external_boringssl_src_crypto_fipsmodule_rsa_rsa_impl.c
push 0x41
push 0
push 4
call sym.adb.exe_ERR_put_error
add esp, 0x14
xor ebp, ebp
mov dword [esp + 0x20], 0
xor esi, esi
mov eax, dword [edi + 0x24]
test eax, eax
je 0x476ae4
dec eax
mov dword [edi + 0x24], eax
jmp 0x476b56
mov ecx, dword [edi + 0x18]
mov eax, dword [edi + 0x14]
mov dword [esp + 0x1c], esi
lea edx, [ecx - 1]
mov dword [edi + 0x18], edx
mov ebx, dword [edi + 0x20]
mov eax, dword [eax + ecx*4 - 4]
mov edx, ebx
sub edx, eax
jbe 0x476b44
mov esi, dword [edi + 0xc]
mov ecx, esi
sub ecx, edx
test edx, edx
mov dword [edi + 0xc], ecx
je 0x476b44
dec esi
mov edx, eax
and esi, 0xf
sub edx, ebx
nop word [eax + eax]
test esi, esi
je 0x476b30
dec esi
inc edx
jne 0x476b20
jmp 0x476b44
mov ecx, dword [edi + 4]
mov esi, 0xf
mov ecx, dword [ecx + 0x140]
mov dword [edi + 4], ecx
inc edx
jne 0x476b20
mov ebx, dword [esp + 0x50]
mov esi, dword [esp + 0x1c]
mov dword [edi + 0x20], eax
mov dword [edi + 0x28], 0
push edi
call sym.adb.exe_BN_CTX_free
add esp, 4
mov eax, dword [esp + 0x20]
test eax, eax
je 0x476a92
cmp esi, 0x400
jne 0x476b81
push eax
call fcn.004724f0
add esp, 4
jmp 0x476a92
mov edi, esi
lea esi, [ebx + 0x30]
push esi
call sym.adb.exe_CRYPTO_MUTEX_lock_write
add esp, 4
mov eax, dword [ebx + 0x58]
mov byte [eax + edi], 0
push esi
call sym.adb.exe_CRYPTO_MUTEX_unlock_write
add esp, 4
jmp 0x476a92
mov ecx, ebx
mov edx, edi
call fcn.00477b60
test eax, eax
je 0x476be1
mov ecx, dword [ebx + 0x2c]
cmp dword [ebx + 8], 0
jne 0x476bfe
mov eax, ecx
and eax, 8
jne 0x476bfe
push 0x2be
push str.external_boringssl_src_crypto_fipsmodule_rsa_rsa_impl.c
push 0x82
push 0
push 4
call sym.adb.exe_ERR_put_error
add esp, 0x14
jmp 0x476acb
push 0x2b3
push str.external_boringssl_src_crypto_fipsmodule_rsa_rsa_impl.c
push 0x44
push 0
push 4
call sym.adb.exe_ERR_put_error
add esp, 0x14
jmp 0x476acb
xor eax, eax
test cl, 8
mov dword [esp + 0x34], ecx
mov dword [esp + 0x20], 0
mov dword [esp + 8], esi
jne 0x476de5
lea eax, [ebx + 0x30]
mov dword [esp], eax
push eax
call sym.adb.exe_CRYPTO_MUTEX_lock_write
add esp, 4
mov eax, ebx
mov ebx, dword [ebx + 0x50]
test ebx, ebx
je 0x476c4d
mov esi, eax
mov eax, dword [eax + 0x58]
xor ecx, ecx
cmp byte [eax + ecx], 0
je 0x476c5b
inc ecx
cmp ecx, ebx
jb 0x476c38
mov dword [esp + 0x1c], 0
jmp 0x476c86
mov esi, eax
mov dword [esp + 0x1c], 0
xor ebx, ebx
jmp 0x476c86
mov byte [eax + ecx], 1
mov ebx, esi
mov dword [esp + 0x1c], ecx
mov eax, dword [esi + 0x54]
mov eax, dword [eax + ecx*4]
test eax, eax
je 0x476c83
push dword [esp]
mov esi, eax
call sym.adb.exe_CRYPTO_MUTEX_unlock_write
mov eax, esi
add esp, 4
jmp 0x476dc4
mov ebx, dword [ebx + 0x50]
push dword [esp]
call sym.adb.exe_CRYPTO_MUTEX_unlock_write
add esp, 4
call fcn.004723f0
test eax, eax
je 0x476d58
cmp ebx, 0x3ff
jbe 0x476cb5
mov dword [esp + 0x1c], 0x400
mov ebx, esi
jmp 0x476dc4
mov dword [esp + 0x20], eax
push dword [esp]
call sym.adb.exe_CRYPTO_MUTEX_lock_write
add esp, 4
mov eax, dword [esi + 0x50]
mov ebx, esi
lea eax, [eax*4 + 4]
push eax
call sym.adb.exe_OPENSSL_malloc
add esp, 4
mov esi, eax
test eax, eax
je 0x476d3f
mov eax, dword [ebx + 0x50]
lea ecx, [eax*4]
test ecx, ecx
je 0x476cfd
push ecx
push dword [ebx + 0x54]
push esi
call sub.msvcrt.dll_memcpy
add esp, 0xc
mov eax, dword [ebx + 0x50]
mov ecx, dword [esp + 0x20]
mov dword [esi + eax*4], ecx
mov eax, dword [ebx + 0x50]
inc eax
push eax
call sym.adb.exe_OPENSSL_malloc
add esp, 4
test eax, eax
je 0x476d36
mov ecx, dword [ebx + 0x50]
mov dword [esp + 4], eax
test ecx, ecx
je 0x476d85
push ecx
push dword [ebx + 0x58]
push eax
call sub.msvcrt.dll_memcpy
mov eax, dword [esp + 0x10]
add esp, 0xc
mov ecx, dword [ebx + 0x50]
jmp 0x476d87
push esi
call sym.adb.exe_OPENSSL_free
add esp, 4
mov esi, ebx
push dword [esp]
call sym.adb.exe_CRYPTO_MUTEX_unlock_write
add esp, 4
push dword [esp + 0x20]
call fcn.004724f0
add esp, 4
push 0x2c5
push str.external_boringssl_src_crypto_fipsmodule_rsa_rsa_impl.c
push 0x44
push 0
push 4
call sym.adb.exe_ERR_put_error
add esp, 0x14
mov ebx, esi
mov esi, dword [esp + 0x1c]
xor ebp, ebp
mov dword [esp + 0x20], 0
jmp 0x476ad7
xor ecx, ecx
mov byte [eax + ecx], 1
mov eax, dword [ebx + 0x50]
mov dword [esp + 0x1c], eax
push dword [ebx + 0x54]
call sym.adb.exe_OPENSSL_free
add esp, 4
mov dword [ebx + 0x54], esi
push dword [ebx + 0x58]
call sym.adb.exe_OPENSSL_free
add esp, 4
mov eax, dword [esp + 4]
mov dword [ebx + 0x58], eax
inc dword [ebx + 0x50]
push dword [esp]
call sym.adb.exe_CRYPTO_MUTEX_unlock_write
add esp, 4
mov eax, dword [esp + 0x20]
push edi
push dword [ebx + 0x34]
push dword [ebx + 8]
mov dword [esp + 0x2c], eax
push eax
push ebp
call fcn.00472570
add esp, 0x14
test eax, eax
je 0x47757f
mov eax, dword [esp + 0x1c]
mov ecx, dword [ebx + 0x10]
mov esi, ebx
mov dword [esp + 0x1c], eax
test ecx, ecx
mov dword [esp], ecx
je 0x476eea
mov ebx, dword [esi + 0x14]
test ebx, ebx
je 0x476eea
cmp dword [esi + 8], 0
je 0x476eea
cmp dword [esi + 0x18], 0
je 0x476eea
cmp dword [esi + 0x1c], 0
je 0x476eea
cmp dword [esi + 0x20], 0
je 0x476eea
cmp dword [ebx + 0xc], 0
jne 0x476eea
mov ecx, dword [esi + 0x38]
mov eax, dword [ebx + 4]
mov edx, dword [ecx + 0x18]
mov ecx, eax
sub ecx, edx
jbe 0x476edd
mov esi, dword [ebx]
xor ebx, ebx
cmp ecx, 8
mov dword [esp + 4], edx
mov dword [esp + 0xc], ecx
mov dword [esp + 0x10], esi
jb 0x476ec0
mov esi, dword [esp + 0xc]
mov edx, dword [esp + 4]
mov ebx, dword [esp + 0x10]
pxor xmm0, xmm0
pxor xmm1, xmm1
and esi, 0xfffffff8
lea ebx, [ebx + edx*4 + 0x10]
add edx, esi
mov dword [esp + 0x14], esi
mov dword [esp + 4], edx
movdqu xmm2, xmmword [ebx - 0x10]
movdqu xmm3, xmmword [ebx]
add ebx, 0x20
add esi, 0xfffffff8
por xmm0, xmm2
por xmm1, xmm3
jne 0x476e83
mov edx, dword [esp + 0x14]
por xmm1, xmm0
pshufd xmm0, xmm1, 0x4e
por xmm0, xmm1
pshufd xmm1, xmm0, 0xe5
cmp dword [esp + 0xc], edx
por xmm1, xmm0
movd ebx, xmm1
je 0x476ed5
mov esi, dword [esp + 4]
mov edx, dword [esp + 0x10]
sub eax, esi
lea edx, [edx + esi*4]
or ebx, dword [edx]
add edx, 4
dec eax
jne 0x476ecd
mov esi, dword [esp + 0x50]
test ebx, ebx
jne 0x476eea
mov eax, dword [esp]
cmp dword [eax + 0xc], 0
je 0x477370
push dword [esi + 0x34]
push edi
push dword [esi + 4]
push dword [esi + 0x40]
push ebp
push dword [esp + 0x1c]
call sym.adb.exe_BN_mod_exp_mont_consttime
add esp, 0x18
test eax, eax
mov ebx, esi
je 0x47757f
cmp dword [ebx + 8], 0
mov esi, dword [esp + 0x1c]
je 0x477129
push edi
call sym.adb.exe_BN_CTX_get
add esp, 4
test eax, eax
je 0x47710a
push dword [ebx + 0x34]
push edi
push dword [ebx + 4]
push dword [ebx + 8]
push dword [esp + 0x18]
push eax
mov dword [esp + 0x1c], eax
call sym.adb.exe_BN_mod_exp_mont
add esp, 0x18
test eax, eax
mov eax, dword [esp + 4]
je 0x47710a
mov ecx, dword [eax + 4]
mov eax, dword [ebp + 4]
xor edx, edx
mov ebx, ecx
mov dword [esp], eax
sub ebx, eax
mov dword [esp + 0x10], ebx
jge 0x476fec
mov eax, dword [esp]
mov ebx, dword [ebp]
xor edx, edx
mov esi, ecx
sub eax, ecx
cmp eax, 7
jbe 0x476fdc
mov esi, eax
and eax, 0xfffffff8
pxor xmm0, xmm0
pxor xmm1, xmm1
mov dword [esp + 0xc], ebx
lea edx, [ecx + eax]
mov dword [esp + 0x14], eax
mov dword [esp + 0x18], edx
lea edx, [ebx + ecx*4 + 0x10]
movdqu xmm2, xmmword [edx - 0x10]
movdqu xmm3, xmmword [edx]
add edx, 0x20
add eax, 0xfffffff8
por xmm0, xmm2
por xmm1, xmm3
jne 0x476f9b
por xmm1, xmm0
cmp esi, dword [esp + 0x14]
mov ebx, dword [esp + 0xc]
mov esi, dword [esp + 0x18]
pshufd xmm0, xmm1, 0x4e
por xmm0, xmm1
pshufd xmm1, xmm0, 0xe5
por xmm1, xmm0
movd edx, xmm1
je 0x476fec
mov eax, dword [esp]
lea ebx, [ebx + esi*4]
sub eax, esi
or edx, dword [ebx]
add ebx, 4
dec eax
jne 0x476fe4
cmp dword [esp], ecx
jge 0x477084
mov eax, dword [esp + 4]
mov ebx, dword [eax]
mov eax, dword [esp + 0x10]
cmp eax, 7
ja 0x477009
mov esi, dword [esp]
jmp 0x477075
mov esi, ebx
mov ebx, dword [esp]
mov dword [esp + 0x18], ecx
mov ecx, eax
movd xmm1, edx
pxor xmm0, xmm0
and ecx, 0xfffffff8
mov dword [esp + 0xc], esi
lea eax, [ebx + ecx]
lea edx, [esi + ebx*4 + 0x10]
mov ebx, ecx
mov dword [esp + 0x14], eax
movdqu xmm2, xmmword [edx - 0x10]
movdqu xmm3, xmmword [edx]
add edx, 0x20
add ebx, 0xfffffff8
por xmm1, xmm2
por xmm0, xmm3
jne 0x477030
por xmm0, xmm1
cmp dword [esp + 0x10], ecx
mov ebx, dword [esp + 0xc]
mov esi, dword [esp + 0x14]
mov ecx, dword [esp + 0x18]
pshufd xmm1, xmm0, 0x4e
por xmm1, xmm0
pshufd xmm0, xmm1, 0xe5
por xmm0, xmm1
movd edx, xmm0
je 0x477084
mov eax, ecx
lea ebx, [ebx + esi*4]
sub eax, esi
or edx, dword [ebx]
add ebx, 4
dec eax
jne 0x47707c
mov esi, dword [esp]
cmp ecx, esi
cmovle esi, ecx
test esi, esi
jle 0x4770f4
mov eax, dword [esp + 4]
mov ebx, esi
mov esi, dword [ebp]
xor ecx, ecx
cmp ebx, 3
mov dword [esp], ebx
mov eax, dword [eax]
jbe 0x4770e6
mov ecx, dword [esp]
movd xmm0, edx
xor edx, edx
mov ebx, ecx
and ecx, 0xfffffffc
movdqu xmm1, xmmword [eax + edx*4]
movdqu xmm2, xmmword [esi + edx*4]
add edx, 4
cmp ecx, edx
pxor xmm2, xmm1
por xmm0, xmm2
jne 0x4770b3
pshufd xmm1, xmm0, 0x4e
cmp ebx, ecx
por xmm1, xmm0
pshufd xmm0, xmm1, 0xe5
por xmm0, xmm1
movd edx, xmm0
je 0x4770f4
mov ebx, dword [esi + ecx*4]
xor ebx, dword [eax + ecx*4]
inc ecx
or edx, ebx
cmp ecx, dword [esp]
jl 0x4770e6
mov eax, dword [ebp + 0xc]
mov ecx, dword [esp + 4]
mov ebx, dword [esp + 0x50]
mov esi, dword [esp + 0x1c]
xor eax, dword [ecx + 0xc]
or eax, edx
je 0x477129
push 0x2eb
push str.external_boringssl_src_crypto_fipsmodule_rsa_rsa_impl.c
push 0x44
push 0
push 4
call sym.adb.exe_ERR_put_error
add esp, 0x14
xor ebp, ebp
jmp 0x476ad7
test byte [esp + 0x34], 8
jne 0x47714d
push edi
push dword [ebx + 0x34]
mov eax, dword [esp + 0x28]
push dword [eax + 4]
mov eax, dword [esp + 0x14]
push eax
push eax
call sym.adb.exe_BN_mod_mul_montgomery
add esp, 0x14
test eax, eax
je 0x477122
mov eax, dword [esp + 8]
mov ebp, dword [esp + 0x5c]
mov ecx, dword [eax]
mov eax, dword [eax + 4]
lea edx, [eax*4]
cmp edx, ebp
jbe 0x477239
lea edx, [eax*4]
mov dword [esp], ecx
mov dword [esp + 8], eax
mov esi, ebx
xor eax, eax
mov ecx, edx
sub ecx, ebp
cmp ecx, 8
jb 0x4771f6
mov eax, dword [esp + 0x5c]
mov ebx, dword [esp]
mov dword [esp + 4], ecx
and ecx, 0xfffffff8
pxor xmm1, xmm1
pxor xmm2, xmm2
pxor xmm0, xmm0
mov dword [esp + 0x34], ecx
lea ebp, [ecx + eax]
lea eax, [ebx + eax + 4]
movd xmm3, dword [eax - 4]
movd xmm4, dword [eax]
add eax, 8
add ecx, 0xfffffff8
punpcklbw xmm3, xmm1
punpcklbw xmm4, xmm1
punpcklwd xmm3, xmm1
punpcklwd xmm4, xmm1
por xmm2, xmm3
por xmm0, xmm4
jne 0x4771a9
mov ecx, dword [esp + 4]
por xmm0, xmm2
pshufd xmm1, xmm0, 0x4e
por xmm1, xmm0
pshufd xmm0, xmm1, 0xe5
cmp ecx, dword [esp + 0x34]
por xmm0, xmm1
movd eax, xmm0
je 0x477205
sub edx, ebp
add ebp, dword [esp]
movzx ebx, byte [ebp]
inc ebp
or eax, ebx
dec edx
jne 0x4771fb
test eax, eax
mov eax, dword [esp + 0x5c]
mov ebx, esi
mov esi, dword [esp + 0x1c]
mov ecx, dword [esp]
mov edx, eax
mov eax, dword [esp + 8]
je 0x477239
push 0x2fd
push str.external_boringssl_src_crypto_fipsmodule_rsa_rsa_impl.c
push 0x44
push 0
push 4
call sym.adb.exe_ERR_put_error
add esp, 0x14
jmp 0x477122
test edx, edx
mov dword [esp + 8], edx
je 0x477349
xor ebp, ebp
cmp dword [esp + 8], 0x1f
ja 0x477255
mov edx, ecx
jmp 0x477330
shl eax, 2
mov edx, eax
mov eax, dword [esp + 0x5c]
cmp edx, eax
cmova edx, eax
not edx
add edx, eax
mov eax, dword [esp + 0x54]
lea eax, [eax + edx + 1]
mov edx, ecx
mov ecx, dword [esp + 8]
lea ecx, [edx + ecx]
cmp eax, ecx
jae 0x47728f
mov eax, dword [esp + 0x5c]
mov ecx, dword [esp + 0x54]
lea eax, [ecx + eax]
cmp edx, eax
jb 0x477330
mov ebp, dword [esp + 8]
mov dword [esp], edx
lea ecx, [edx + 0x10]
mov eax, dword [esp + 0x5c]
mov edx, dword [esp + 0x54]
pxor xmm0, xmm0
and ebp, 0xffffffe0
lea eax, [edx + eax - 0x10]
mov edx, ebp
movdqu xmm1, xmmword [ecx - 0x10]
movdqu xmm2, xmmword [ecx]
add ecx, 0x20
movdqa xmm3, xmm1
punpckhbw xmm1, xmm0
punpcklbw xmm3, xmm0
pshufd xmm1, xmm1, 0x4e
pshufd xmm3, xmm3, 0x4e
pshuflw xmm1, xmm1, 0x1b
pshuflw xmm3, xmm3, 0x1b
pshufhw xmm1, xmm1, 0x1b
pshufhw xmm3, xmm3, 0x1b
packuswb xmm1, xmm3
movdqu xmmword [eax], xmm1
movdqa xmm1, xmm2
punpckhbw xmm2, xmm0
punpcklbw xmm1, xmm0
pshufd xmm2, xmm2, 0x4e
pshufd xmm1, xmm1, 0x4e
pshuflw xmm2, xmm2, 0x1b
pshuflw xmm1, xmm1, 0x1b
pshufhw xmm2, xmm2, 0x1b
pshufhw xmm1, xmm1, 0x1b
packuswb xmm2, xmm1
movdqu xmmword [eax - 0x10], xmm2
add eax, 0xffffffe0
add edx, 0xffffffe0
jne 0x4772ae
cmp dword [esp + 8], ebp
mov edx, dword [esp]
je 0x477349
mov eax, dword [esp + 0x5c]
dec eax
sub eax, ebp
add eax, dword [esp + 0x54]
movzx ecx, byte [edx + ebp]
inc ebp
mov byte [eax], cl
dec eax
cmp ebp, dword [esp + 8]
jb 0x47733b
mov eax, dword [esp + 0x5c]
mov ebp, 1
sub eax, dword [esp + 8]
je 0x476ad7
push eax
push 0
push dword [esp + 0x5c]
call sub.msvcrt.dll_memset
add esp, 0xc
jmp 0x476ad7
mov ecx, dword [esi + 0x3c]
mov eax, dword [esp]
mov ebx, dword [ecx + 0x18]
mov ecx, dword [eax + 4]
mov edx, ecx
mov dword [esp + 4], ebx
sub edx, ebx
jbe 0x477414
mov eax, dword [esp]
mov eax, dword [eax]
mov dword [esp], eax
xor eax, eax
cmp edx, 8
jb 0x4773f4
mov ebx, dword [esp + 4]
mov eax, dword [esp]
mov esi, edx
pxor xmm0, xmm0
pxor xmm1, xmm1
and esi, 0xfffffff8
mov dword [esp + 0x10], esi
lea eax, [eax + ebx*4 + 0x10]
add ebx, esi
mov dword [esp + 4], ebx
movdqu xmm2, xmmword [eax - 0x10]
movdqu xmm3, xmmword [eax]
add eax, 0x20
add esi, 0xfffffff8
por xmm0, xmm2
por xmm1, xmm3
jne 0x4773bb
por xmm1, xmm0
cmp edx, dword [esp + 0x10]
pshufd xmm0, xmm1, 0x4e
por xmm0, xmm1
pshufd xmm1, xmm0, 0xe5
por xmm1, xmm0
movd eax, xmm1
je 0x477408
mov edx, dword [esp + 4]
mov ebx, dword [esp]
sub ecx, edx
lea edx, [ebx + edx*4]
or eax, dword [edx]
add edx, 4
dec ecx
jne 0x477400
mov esi, dword [esp + 0x50]
test eax, eax
jne 0x476eea
push edi
call sym.adb.exe_BN_CTX_start
add esp, 4
push edi
call sym.adb.exe_BN_CTX_get
add esp, 4
mov ebx, eax
push edi
call sym.adb.exe_BN_CTX_get
add esp, 4
test ebx, ebx
mov dword [esp + 4], eax
mov dword [esp], 0
mov dword [esp + 0x10], ebx
je 0x47750b
cmp dword [esp + 4], 0
je 0x47750b
mov ecx, dword [esp + 0x50]
mov edx, edi
call fcn.00477b60
test eax, eax
je 0x47750b
mov eax, dword [esp + 0x50]
mov esi, dword [eax + 0x48]
mov ecx, dword [eax + 0x44]
mov edx, dword [eax + 0x38]
mov dword [esp + 0x28], esi
mov esi, dword [eax + 0x3c]
mov eax, dword [eax + 0x10]
mov dword [esp + 0x18], ecx
mov dword [esp + 0xc], edx
test eax, eax
je 0x4774d5
mov ecx, dword [esp + 0x50]
mov ecx, dword [ecx + 0x14]
test ecx, ecx
je 0x4774d5
mov ebx, dword [eax + 0xc]
cmp ebx, dword [ecx + 0xc]
jne 0x4776c6
push ecx
push eax
call sym.adb.exe_BN_ucmp
add esp, 8
mov ecx, eax
neg ecx
test ebx, ebx
cmove ecx, eax
test ecx, ecx
js 0x4774d9
mov eax, dword [esp + 0xc]
mov edx, dword [esp + 0x28]
mov ecx, dword [esp + 0x18]
mov dword [esp + 0xc], esi
mov dword [esp + 0x14], eax
mov dword [esp + 0x24], edx
mov dword [esp + 0x28], ecx
jmp 0x4774e5
test eax, eax
je 0x4774b7
mov eax, dword [esp + 0x18]
mov dword [esp + 0x14], esi
mov dword [esp + 0x24], eax
mov eax, dword [esp + 0x14]
cmp dword [eax + 0x20], 0
je 0x47758a
push 0x318
push str.external_boringssl_src_crypto_fipsmodule_rsa_rsa_impl.c
push 0x44
push 0
push 4
call sym.adb.exe_ERR_put_error
add esp, 0x14
mov eax, dword [edi + 0x24]
test eax, eax
je 0x477518
dec eax
mov dword [edi + 0x24], eax
jmp 0x477571
mov ecx, dword [edi + 0x18]
mov eax, dword [edi + 0x14]
lea edx, [ecx - 1]
mov dword [edi + 0x18], edx
mov ebx, dword [edi + 0x20]
mov eax, dword [eax + ecx*4 - 4]
mov edx, ebx
mov esi, eax
sub edx, eax
jbe 0x477567
mov eax, dword [edi + 0xc]
mov ecx, eax
sub ecx, edx
test edx, edx
mov dword [edi + 0xc], ecx
je 0x477567
dec eax
mov edx, esi
and eax, 0xf
sub edx, ebx
test eax, eax
je 0x477553
dec eax
inc edx
jne 0x477549
jmp 0x477567
mov eax, dword [edi + 4]
mov eax, dword [eax + 0x140]
mov dword [edi + 4], eax
mov eax, 0xf
inc edx
jne 0x477549
mov dword [edi + 0x20], esi
mov dword [edi + 0x28], 0
cmp dword [esp], 0
mov ebx, dword [esp + 0x50]
jne 0x476f0b
mov esi, dword [esp + 0x1c]
xor ebp, ebp
jmp 0x476ad7
mov eax, dword [esp + 0x50]
mov ecx, dword [esp + 0x14]
mov eax, dword [eax + 0x34]
mov dword [esp + 0x38], eax
lea eax, [ecx + 0x14]
mov dword [esp + 0x30], eax
mov eax, dword [esp + 0xc]
mov ebx, dword [eax + 0x18]
mov eax, dword [ecx + 0x18]
mov edx, eax
mov dword [esp + 0x18], ebx
sub edx, ebx
jbe 0x47763e
mov ecx, dword [esp + 0x30]
xor ebx, ebx
cmp edx, 8
mov ecx, dword [ecx]
mov dword [esp + 0x2c], ecx
jb 0x477621
mov ecx, dword [esp + 0x18]
mov ebx, dword [esp + 0x2c]
mov esi, edx
pxor xmm0, xmm0
pxor xmm1, xmm1
and esi, 0xfffffff8
lea ebx, [ebx + ecx*4 + 0x10]
add ecx, esi
mov dword [esp + 0x18], ecx
mov ecx, esi
movdqu xmm2, xmmword [ebx - 0x10]
movdqu xmm3, xmmword [ebx]
add ebx, 0x20
add ecx, 0xfffffff8
por xmm0, xmm2
por xmm1, xmm3
jne 0x4775ea
por xmm1, xmm0
cmp edx, esi
pshufd xmm0, xmm1, 0x4e
por xmm0, xmm1
pshufd xmm1, xmm0, 0xe5
por xmm1, xmm0
movd ebx, xmm1
je 0x477636
mov ecx, dword [esp + 0x18]
mov edx, dword [esp + 0x2c]
sub eax, ecx
lea ecx, [edx + ecx*4]
or ebx, dword [ecx]
add ecx, 4
dec eax
jne 0x47762e
test ebx, ebx
jne 0x4774f3
push edi
push dword [esp + 0x10]
push ebp
push dword [esp + 0x1c]
call sym.adb.exe_BN_from_montgomery
add esp, 0x10
test eax, eax
je 0x47750b
push edi
mov eax, dword [esp + 0x10]
push eax
push eax
mov eax, dword [esp + 0x1c]
push eax
push eax
call sym.adb.exe_BN_mod_mul_montgomery
add esp, 0x14
test eax, eax
je 0x47750b
mov eax, dword [esp + 0xc]
lea ecx, [eax + 0x14]
push eax
push edi
mov dword [esp + 0x20], ecx
push ecx
push dword [esp + 0x30]
push dword [esp + 0x20]
push dword [esp + 0x18]
call sym.adb.exe_BN_mod_exp_mont_consttime
add esp, 0x18
test eax, eax
je 0x47750b
mov eax, dword [esp + 0xc]
cmp dword [eax + 0x20], 0
je 0x4776d3
push 0x318
push str.external_boringssl_src_crypto_fipsmodule_rsa_rsa_impl.c
push 0x44
push 0
push 4
call sym.adb.exe_ERR_put_error
add esp, 0x14
jmp 0x47750b
test ebx, ebx
jne 0x4774d9
jmp 0x4774b7
mov eax, dword [esp + 0x14]
mov ecx, dword [eax + 0x18]
mov eax, dword [esp + 0xc]
mov eax, dword [eax + 0x18]
mov dword [esp + 0x24], ecx
mov edx, eax
sub edx, ecx
jbe 0x477775
mov ecx, dword [esp + 0x18]
xor ebx, ebx
cmp edx, 8
mov ecx, dword [ecx]
mov dword [esp + 0x2c], ecx
jb 0x477758
mov ecx, dword [esp + 0x24]
mov ebx, dword [esp + 0x2c]
mov esi, edx
pxor xmm0, xmm0
pxor xmm1, xmm1
and esi, 0xfffffff8
lea ebx, [ebx + ecx*4 + 0x10]
add ecx, esi
mov dword [esp + 0x24], ecx
mov ecx, esi
movdqu xmm2, xmmword [ebx - 0x10]
movdqu xmm3, xmmword [ebx]
add ebx, 0x20
add ecx, 0xfffffff8
por xmm0, xmm2
por xmm1, xmm3
jne 0x477721
por xmm1, xmm0
cmp edx, esi
pshufd xmm0, xmm1, 0x4e
por xmm0, xmm1
pshufd xmm1, xmm0, 0xe5
por xmm1, xmm0
movd ebx, xmm1
je 0x47776d
mov ecx, dword [esp + 0x24]
mov edx, dword [esp + 0x2c]
sub eax, ecx
lea ecx, [edx + ecx*4]
or ebx, dword [ecx]
add ecx, 4
dec eax
jne 0x477765
test ebx, ebx
jne 0x4776a9
push edi
push dword [esp + 0x18]
push ebp
push dword [esp + 0x1c]
call sym.adb.exe_BN_from_montgomery
add esp, 0x10
test eax, eax
je 0x47750b
push edi
mov eax, dword [esp + 0x18]
push eax
push eax
mov eax, dword [esp + 0x1c]
push eax
push eax
call sym.adb.exe_BN_mod_mul_montgomery
add esp, 0x14
test eax, eax
je 0x47750b
push dword [esp + 0x14]
push edi
push dword [esp + 0x38]
push dword [esp + 0x34]
push dword [esp + 0x20]
push dword [esp + 0x1c]
call sym.adb.exe_BN_mod_exp_mont_consttime
add esp, 0x18
test eax, eax
je 0x47750b
push edi
push dword [esp + 0x34]
push dword [esp + 0xc]
mov eax, dword [esp + 0x14]
push eax
push eax
call fcn.0044bdc0
add esp, 0x14
test eax, eax
je 0x47750b
push edi
push dword [esp + 0x18]
mov eax, dword [esp + 0x58]
push dword [eax + 0x4c]
mov eax, dword [esp + 0x14]
push eax
push eax
call sym.adb.exe_BN_mod_mul_montgomery
add esp, 0x14
test eax, eax
je 0x47750b
mov eax, dword [esp + 8]
cmp dword [eax + 0xc], 0
jne 0x477826
mov eax, dword [esp + 0xc]
cmp dword [eax + 0x20], 0
je 0x477843
push 0x28d
push str.external_boringssl_src_crypto_fipsmodule_bn_mul.c
push 0x6d
push 0
push 3
call sym.adb.exe_ERR_put_error
add esp, 0x14
jmp 0x47750b
mov ecx, dword [esp + 8]
mov edx, ecx
push edi
push dword [esp + 0x1c]
call fcn.00456450
add esp, 8
test eax, eax
je 0x47750b
push dword [esp + 4]
mov eax, dword [esp + 0xc]
push eax
push eax
call fcn.00447680
add esp, 0xc
test eax, eax
je 0x47750b
mov eax, dword [esp + 0x38]
mov ecx, dword [eax + 0x18]
mov eax, dword [esp + 8]
mov eax, dword [eax + 4]
mov dword [esp + 4], ecx
mov edx, eax
sub edx, ecx
jbe 0x477940
mov ecx, dword [esp + 8]
mov ebx, dword [esp + 4]
mov ecx, dword [ecx]
mov dword [esp + 0x10], ebx
mov dword [esp], ecx
xor ecx, ecx
cmp edx, 8
jb 0x477904
mov ecx, dword [esp + 4]
mov esi, edx
pxor xmm0, xmm0
pxor xmm1, xmm1
and esi, 0xfffffff8
lea ebx, [ecx + esi]
mov dword [esp + 0x10], ebx
mov ebx, dword [esp]
lea ecx, [ebx + ecx*4 + 0x10]
mov ebx, esi
movdqu xmm2, xmmword [ecx - 0x10]
movdqu xmm3, xmmword [ecx]
add ecx, 0x20
add ebx, 0xfffffff8
por xmm0, xmm2
por xmm1, xmm3
jne 0x4778cd
por xmm1, xmm0
cmp edx, esi
pshufd xmm0, xmm1, 0x4e
por xmm0, xmm1
pshufd xmm1, xmm0, 0xe5
por xmm1, xmm0
movd ecx, xmm1
je 0x477918
mov ebx, dword [esp + 0x10]
mov edx, dword [esp]
sub eax, ebx
lea edx, [edx + ebx*4]
or ecx, dword [edx]
add edx, 4
dec eax
jne 0x477910
test ecx, ecx
je 0x477981
push 0x18f
push str.external_boringssl_src_crypto_fipsmodule_bn_bn.c
push 0x66
push 0
push 3
call sym.adb.exe_ERR_put_error
add esp, 0x14
mov dword [esp], 0
jmp 0x47750b
push dword [esp + 4]
push dword [esp + 0xc]
call fcn.00447880
add esp, 8
test eax, eax
je 0x47750b
mov eax, dword [esp + 8]
mov ecx, dword [esp + 4]
mov eax, dword [eax + 4]
sub ecx, eax
shl ecx, 2
test ecx, ecx
je 0x477981
mov edx, dword [esp + 8]
shl eax, 2
add eax, dword [edx]
push ecx
push 0
push eax
call sub.msvcrt.dll_memset
add esp, 0xc
mov eax, dword [esp + 8]
mov ecx, dword [esp + 4]
mov dword [eax + 4], ecx
mov dword [esp], 1
jmp 0x47750b