Function at 0x5a78f0
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0xa4
mov edx, dword [esp + 0xc4]
mov eax, dword [edx + 4]
test eax, eax
jle 0x5a7911
mov ecx, dword [edx]
mov ebx, dword [ecx]
test bl, 1
jne 0x5a7922
push 0x24d
push str.external_boringssl_src_crypto_fipsmodule_bn_exponentiation.c
push 0x68
jmp 0x5a7c18
cmp dword [edx + 0xc], 0
je 0x5a7939
push 0x251
push str.external_boringssl_src_crypto_fipsmodule_bn_exponentiation.c
push 0x6d
jmp 0x5a7c18
mov edx, dword [esp + 0xbc]
cmp dword [edx + 0xc], 0
jne 0x5a7c0c
mov dword [esp + 0x14], ebx
mov edi, dword [edx]
mov edx, dword [edx + 4]
cmp edx, eax
mov dword [esp + 0x10], eax
mov dword [esp + 0x18], edx
cmovb eax, edx
test eax, eax
mov dword [esp + 4], ecx
je 0x5a79a6
xor esi, esi
xor edx, edx
nop dword [eax]
mov ebx, edi
mov edi, dword [edi + edx*4]
mov ecx, dword [esp + 4]
mov ecx, dword [ecx + edx*4]
mov ebp, edi
sub ebp, ecx
xor ecx, edi
xor ebp, edi
or ebp, ecx
xor ebp, edi
mov edi, ebp
sar edi, 0x1f
not ebp
shr ebp, 0x1f
or ebp, edi
mov edi, ebx
test ecx, ecx
mov ecx, dword [esp + 4]
cmovne esi, ebp
inc edx
cmp eax, edx
jne 0x5a7970
jmp 0x5a79a8
xor esi, esi
mov ebx, dword [esp + 0x18]
mov eax, ebx
mov ebp, dword [esp + 0x10]
sub eax, ebp
jae 0x5a79ee
mov edx, ebp
sub edx, ebx
xor eax, eax
cmp edx, 8
jb 0x5a7b00
mov dword [esp + 8], edx
lea eax, [edx - 8]
mov edx, eax
shr edx, 3
inc edx
mov edi, edx
and edi, 3
mov dword [esp], edi
cmp eax, 0x18
jae 0x5a7a30
pxor xmm0, xmm0
xor eax, eax
pxor xmm1, xmm1
jmp 0x5a7a9a
jbe 0x5a7c08
xor edx, edx
mov ecx, eax
mov eax, ebp
cmp ecx, 8
jb 0x5a7bf0
mov dword [esp + 8], ecx
add ecx, 0xfffffff8
mov eax, ecx
shr eax, 3
inc eax
mov edx, eax
and edx, 3
mov dword [esp], edx
cmp ecx, 0x18
jae 0x5a7b1b
pxor xmm0, xmm0
xor edx, edx
pxor xmm1, xmm1
jmp 0x5a7b86
and edx, 0xfffffffc
lea edi, [ecx + ebx*4]
add edi, 0x70
pxor xmm0, xmm0
xor eax, eax
pxor xmm1, xmm1
movdqu xmm2, xmmword [edi + eax*4 - 0x70]
por xmm2, xmm0
movdqu xmm0, xmmword [edi + eax*4 - 0x60]
por xmm0, xmm1
movdqu xmm1, xmmword [edi + eax*4 - 0x50]
movdqu xmm3, xmmword [edi + eax*4 - 0x40]
movdqu xmm4, xmmword [edi + eax*4 - 0x30]
por xmm4, xmm1
por xmm4, xmm2
movdqu xmm2, xmmword [edi + eax*4 - 0x20]
por xmm2, xmm3
por xmm2, xmm0
movdqu xmm0, xmmword [edi + eax*4 - 0x10]
por xmm0, xmm4
movdqu xmm1, xmmword [edi + eax*4]
por xmm1, xmm2
add eax, 0x20
add edx, 0xfffffffc
jne 0x5a7a43
mov edx, dword [esp + 8]
and edx, 0xfffffff8
mov dword [esp + 0xc], edx
mov edx, dword [esp]
test edx, edx
je 0x5a7ada
add eax, ebx
lea eax, [ecx + eax*4]
add eax, 0x10
shl edx, 5
xor edi, edi
nop dword [eax]
movdqu xmm2, xmmword [eax + edi - 0x10]
por xmm0, xmm2
movdqu xmm2, xmmword [eax + edi]
por xmm1, xmm2
add edi, 0x20
cmp edx, edi
jne 0x5a7ac0
por xmm0, xmm1
pshufd xmm1, xmm0, 0xee
por xmm1, xmm0
pshufd xmm0, xmm1, 0x55
por xmm0, xmm1
movd eax, xmm0
mov edx, dword [esp + 0xc]
cmp dword [esp + 8], edx
je 0x5a7b08
add ebx, edx
or eax, dword [ecx + ebx*4]
inc ebx
cmp ebp, ebx
jne 0x5a7b00
mov ecx, eax
not ecx
dec eax
and eax, ecx
sar eax, 0x1f
not eax
or esi, eax
jmp 0x5a7c08
and eax, 0xfffffffc
lea ebp, [edi + ebp*4]
add ebp, 0x70
pxor xmm0, xmm0
xor edx, edx
pxor xmm1, xmm1
movdqu xmm2, xmmword [ebp + edx*4 - 0x70]
por xmm2, xmm0
movdqu xmm0, xmmword [ebp + edx*4 - 0x60]
por xmm0, xmm1
movdqu xmm1, xmmword [ebp + edx*4 - 0x50]
movdqu xmm3, xmmword [ebp + edx*4 - 0x40]
movdqu xmm4, xmmword [ebp + edx*4 - 0x30]
por xmm4, xmm1
por xmm4, xmm2
movdqu xmm2, xmmword [ebp + edx*4 - 0x20]
por xmm2, xmm3
por xmm2, xmm0
movdqu xmm0, xmmword [ebp + edx*4 - 0x10]
por xmm0, xmm4
movdqu xmm1, xmmword [ebp + edx*4]
por xmm1, xmm2
add edx, 0x20
add eax, 0xfffffffc
jne 0x5a7b2e
mov eax, dword [esp + 8]
and eax, 0xfffffff8
mov ecx, dword [esp]
test ecx, ecx
je 0x5a7bbd
add edx, dword [esp + 0x10]
lea edx, [edi + edx*4]
add edx, 0x10
shl ecx, 5
xor ebp, ebp
movdqu xmm2, xmmword [edx + ebp - 0x10]
por xmm0, xmm2
movdqu xmm2, xmmword [edx + ebp]
por xmm1, xmm2
add ebp, 0x20
cmp ecx, ebp
jne 0x5a7ba3
por xmm0, xmm1
pshufd xmm1, xmm0, 0xee
por xmm1, xmm0
pshufd xmm0, xmm1, 0x55
por xmm0, xmm1
movd edx, xmm0
cmp dword [esp + 8], eax
je 0x5a7bf8
add eax, dword [esp + 0x10]
nop word cs:[eax + eax]
or edx, dword [edi + eax*4]
inc eax
cmp ebx, eax
jne 0x5a7bf0
xor ecx, ecx
xor eax, eax
test edx, edx
cmove ecx, esi
setne al
or eax, ecx
mov esi, eax
test esi, esi
js 0x5a7c33
push 0x255
push str.external_boringssl_src_crypto_fipsmodule_bn_exponentiation.c
push 0x6b
push 0
push 3
call sym.adb.exe_ERR_put_error
add esp, 0x14
xor ebx, ebx
mov eax, ebx
add esp, 0xa4
pop esi
pop edi
pop ebx
pop ebp
ret
mov eax, dword [esp + 0xcc]
mov dword [esp + 0x18], eax
mov esi, dword [esp + 0xc0]
mov ebx, dword [esi + 4]
mov edx, ebx
sar edx, 0x1f
and edx, ebx
mov eax, ebx
nop word cs:[eax + eax]
test eax, eax
jle 0x5a7c71
mov ecx, dword [esi]
mov edi, dword [ecx + eax*4 - 4]
dec eax
test edi, edi
je 0x5a7c60
jmp 0x5a7c82
test ebx, ebx
jns 0x5a7db4
mov eax, dword [esi]
mov edi, dword [eax + edx*4 - 4]
dec edx
mov eax, edx
shl eax, 5
xor edx, edx
test edi, edi
setne dl
mov ecx, edi
shr ecx, 0x10
xor ebx, ebx
cmp edi, 0x10000
cmovb ecx, edi
setae bl
shl ebx, 4
mov esi, ebx
mov edi, ecx
shr edi, 8
xor ebx, ebx
cmp ecx, 0x100
cmovb edi, ecx
setae bl
mov dword [esp + 8], ebx
mov ebp, edi
shr ebp, 4
xor ecx, ecx
cmp edi, 0x10
setae cl
mov dword [esp], ecx
cmovb ebp, edi
mov edi, ebp
shr edi, 2
xor ebx, ebx
cmp ebp, 4
cmovb edi, ebp
mov ebp, dword [esp + 0xc8]
setae bl
xor ecx, ecx
cmp edi, 2
setae cl
or edx, eax
or edx, esi
mov esi, dword [esp + 0xc0]
mov eax, dword [esp + 8]
lea eax, [edx + eax*8]
mov edx, dword [esp]
lea eax, [eax + edx*4]
lea edi, [eax + ebx*2]
add edi, ecx
je 0x5a7db4
pxor xmm0, xmm0
movdqu xmmword [esp + 0x94], xmm0
movdqu xmmword [esp + 0x88], xmm0
movdqu xmmword [esp + 0x78], xmm0
movdqu xmmword [esp + 0x68], xmm0
movdqu xmmword [esp + 0x58], xmm0
movdqu xmmword [esp + 0x48], xmm0
movdqu xmmword [esp + 0x38], xmm0
movdqu xmmword [esp + 0x28], xmm0
cmp byte [ebp + 0x14], 0
jne 0x5a7f35
mov ecx, dword [ebp + 8]
mov edx, dword [ebp + 0x10]
cmp ecx, dword [ebp + 0xc]
jne 0x5a7e08
lea eax, [ecx + ecx*2]
shr eax, 1
test ecx, ecx
mov ebx, 0x20
cmovne ebx, eax
cmp ebx, ecx
jbe 0x5a7f2f
cmp ebx, 0x3fffffff
ja 0x5a7f2f
lea eax, [ebx*4]
push eax
push dword [ebp + 4]
mov dword [esp + 0xc], edx
call sym.adb.exe_OPENSSL_realloc
mov edx, dword [esp + 0xc]
add esp, 8
test eax, eax
je 0x5a7f2f
mov dword [ebp + 4], eax
mov dword [ebp + 0xc], ebx
mov ecx, dword [ebp + 8]
jmp 0x5a7e0b
mov eax, dword [esp + 0x14]
xor eax, 1
mov ebp, dword [esp + 0x10]
cmp ebp, 2
jl 0x5a7ec5
mov ebx, 1
cmp ebp, 9
jae 0x5a7de2
mov esi, dword [esp + 0xb8]
mov ecx, dword [esp + 4]
jmp 0x5a7ed8
lea esi, [ebp - 1]
movd xmm0, eax
lea ecx, [ebp - 9]
mov eax, ecx
shr eax, 3
inc eax
mov edx, eax
and edx, 3
cmp ecx, 0x18
jae 0x5a7e16
pxor xmm1, xmm1
xor edi, edi
mov ecx, dword [esp + 4]
jmp 0x5a7e7b
mov eax, dword [ebp + 4]
mov dword [eax + ecx*4], edx
inc dword [ebp + 8]
jmp 0x5a7f35
and eax, 0xfffffffc
pxor xmm1, xmm1
xor edi, edi
mov ecx, dword [esp + 4]
movdqu xmm2, xmmword [ecx + edi*4 + 4]
por xmm2, xmm0
movdqu xmm0, xmmword [ecx + edi*4 + 0x14]
por xmm0, xmm1
movdqu xmm1, xmmword [ecx + edi*4 + 0x24]
movdqu xmm3, xmmword [ecx + edi*4 + 0x34]
movdqu xmm4, xmmword [ecx + edi*4 + 0x44]
por xmm4, xmm1
por xmm4, xmm2
movdqu xmm2, xmmword [ecx + edi*4 + 0x54]
por xmm2, xmm3
por xmm2, xmm0
movdqu xmm0, xmmword [ecx + edi*4 + 0x64]
por xmm0, xmm4
movdqu xmm1, xmmword [ecx + edi*4 + 0x74]
por xmm1, xmm2
add edi, 0x20
add eax, 0xfffffffc
jne 0x5a7e23
mov ebx, esi
and ebx, 0xfffffff8
test edx, edx
je 0x5a7ea7
lea eax, [edi*4]
or eax, 4
movdqu xmm2, xmmword [ecx + eax]
por xmm0, xmm2
movdqu xmm2, xmmword [ecx + eax + 0x10]
por xmm1, xmm2
add edi, 8
dec edx
jne 0x5a7e84
por xmm0, xmm1
pshufd xmm1, xmm0, 0xee
por xmm1, xmm0
pshufd xmm0, xmm1, 0x55
por xmm0, xmm1
movd eax, xmm0
cmp esi, ebx
jne 0x5a7ece
mov esi, dword [esp + 0xb8]
jmp 0x5a7ee0
or ebx, 1
mov esi, dword [esp + 0xb8]
or eax, dword [ecx + ebx*4]
inc ebx
cmp ebp, ebx
jne 0x5a7ed8
test eax, eax
je 0x5a7f17
push 1
push esi
call fcn.0059f5c0
add esp, 8
test eax, eax
je 0x5a7c24
mov dword [esi + 0xc], 0
mov eax, dword [esi]
mov dword [eax], 1
mov dword [esi + 4], 1
mov ebx, 1
jmp 0x5a7c26
mov dword [esi + 0xc], 0
mov dword [esi + 4], 0
mov ebx, 1
jmp 0x5a7c26
mov word [ebp + 0x14], 0x101
push ebp
call sym.adb.exe_BN_CTX_get
add esp, 4
mov ecx, ebp
mov ebp, eax
push ecx
call sym.adb.exe_BN_CTX_get
add esp, 4
mov dword [esp + 0x24], eax
xor ebx, ebx
mov dword [esp + 0x10], ebp
test ebp, ebp
je 0x5a83c2
mov edx, eax
mov eax, 0
test edx, edx
mov ebp, dword [esp + 0xc8]
je 0x5a8405
xor ecx, ecx
cmp dword [esp + 0xcc], 0
jne 0x5a7fa1
push ebp
push dword [esp + 0xc8]
mov ebx, edx
call sym.adb.exe_BN_MONT_CTX_new_consttime
mov edx, ebx
add esp, 8
mov ecx, eax
mov dword [esp + 0x18], eax
test eax, eax
je 0x5a83ee
mov dword [esp + 8], ecx
mov dword [esp + 0x14], 6
cmp edi, 0x29f
jg 0x5a7fe1
mov dword [esp + 0x14], 5
cmp edi, 0xef
jg 0x5a7fe1
mov dword [esp + 0x14], 4
cmp edi, 0x4f
jg 0x5a7fe1
xor eax, eax
cmp edi, 0x18
setge al
add eax, eax
inc eax
mov dword [esp + 0x14], eax
push ebp
mov eax, dword [esp + 0x1c]
push eax
push eax
push dword [esp + 0xc8]
mov dword [esp + 0x10], edx
push edx
call sym.adb.exe_BN_mod_mul_montgomery
add esp, 0x14
xor ebx, ebx
test eax, eax
je 0x5a8401
mov dword [esp + 4], edi
cmp dword [esp + 0x14], 2
jb 0x5a80a7
mov ebp, dword [esp + 0xc8]
push ebp
call sym.adb.exe_BN_CTX_get
add esp, 4
test eax, eax
je 0x5a8401
mov edi, eax
push ebp
push dword [esp + 0x1c]
mov eax, dword [esp + 8]
push eax
push eax
push edi
call sym.adb.exe_BN_mod_mul_montgomery
add esp, 0x14
test eax, eax
je 0x5a8401
mov dword [esp], edi
mov eax, dword [esp + 0x14]
mov ecx, eax
dec cl
mov edi, 1
mov eax, 1
shl eax, cl
mov dword [esp + 0xc], eax
mov ebp, dword [esp + 0xc8]
push ebp
call sym.adb.exe_BN_CTX_get
add esp, 4
mov dword [esp + edi*4 + 0x24], eax
test eax, eax
je 0x5a8401
push ebp
push dword [esp + 0x1c]
push dword [esp + 8]
push dword [esp + edi*4 + 0x2c]
push eax
call sym.adb.exe_BN_mod_mul_montgomery
add esp, 0x14
test eax, eax
je 0x5a83fa
inc edi
cmp dword [esp + 0xc], edi
jne 0x5a8066
mov edx, dword [esp + 4]
dec edx
xor ebx, ebx
mov ebp, dword [esp + 0xc8]
add edx, 0xfffffffb
mov dword [esp + 4], edx
add edx, 5
js 0x5a80d7
mov eax, dword [esi + 4]
mov ecx, edx
shr ecx, 5
cmp ecx, eax
jae 0x5a80d7
mov edi, dword [esi]
mov ecx, dword [edi + ecx*4]
bt ecx, edx
jb 0x5a8108
test bl, 1
je 0x5a80f8
push ebp
push dword [esp + 0x1c]
mov eax, dword [esp + 0x18]
push eax
push eax
push eax
call sym.adb.exe_BN_mod_mul_montgomery
add esp, 0x14
test eax, eax
je 0x5a83f4
mov edx, dword [esp + 4]
cmp edx, 0xfffffffb
je 0x5a83cd
dec edx
jmp 0x5a80b8
cmp dword [esp + 0x14], 2
jb 0x5a8346
cmp dword [esp + 4], 0xfffffffb
je 0x5a8346
mov dword [esp + 0x20], ebx
mov dword [esp], 0
test edx, edx
jle 0x5a814b
mov ecx, dword [esp + 4]
lea esi, [ecx + 4]
mov ebp, esi
shr ebp, 5
cmp ebp, eax
jae 0x5a814b
mov ebp, dword [edi + ebp*4]
xor ecx, ecx
bt ebp, esi
setb cl
mov dword [esp], ecx
mov ecx, dword [esp]
add ecx, ecx
inc ecx
mov dword [esp + 0xc], ecx
cmp dword [esp + 0x14], 3
jb 0x5a82d1
cmp edx, 2
jl 0x5a82d1
mov ecx, dword [esp + 4]
lea ebp, [ecx + 3]
mov ecx, ebp
shr ecx, 5
xor esi, esi
cmp ecx, eax
jae 0x5a8188
mov esi, dword [edi + ecx*4]
xor ecx, ecx
bt esi, ebp
setb cl
mov esi, ecx
cmp dword [esp], 1
mov ecx, 0
adc cl, 1
mov ebx, dword [esp + 0xc]
mov ebp, ebx
shl ebp, cl
or ebp, 1
test esi, esi
cmovne ebx, ebp
mov dword [esp + 0xc], ebx
mov ecx, 2
mov esi, dword [esp]
cmovne esi, ecx
mov dword [esp], esi
cmp dword [esp + 0x14], 4
jb 0x5a82d1
cmp edx, 3
jl 0x5a82d1
mov ecx, dword [esp + 4]
lea esi, [ecx + 2]
mov ebp, esi
shr ebp, 5
mov dword [esp + 0x1c], 0
cmp ebp, eax
jae 0x5a81f1
mov ebp, dword [edi + ebp*4]
xor ecx, ecx
bt ebp, esi
setb cl
mov dword [esp + 0x1c], ecx
mov esi, dword [esp]
mov ecx, esi
xor cl, 3
mov ebx, dword [esp + 0xc]
mov ebp, ebx
shl ebp, cl
or ebp, 1
cmp dword [esp + 0x1c], 0
cmovne ebx, ebp
mov dword [esp + 0xc], ebx
mov ecx, 3
cmovne esi, ecx
mov dword [esp], esi
cmp dword [esp + 0x14], 5
jb 0x5a82d1
cmp edx, 4
jl 0x5a82d1
mov ecx, dword [esp + 4]
lea esi, [ecx + 1]
mov ebp, esi
shr ebp, 5
mov dword [esp + 0x1c], 0
cmp ebp, eax
jae 0x5a8256
mov ebp, dword [edi + ebp*4]
xor ecx, ecx
bt ebp, esi
setb cl
mov dword [esp + 0x1c], ecx
mov cl, 4
mov esi, dword [esp]
mov ebx, esi
sub cl, bl
mov ebx, dword [esp + 0xc]
mov ebp, ebx
shl ebp, cl
or ebp, 1
cmp dword [esp + 0x1c], 0
cmovne ebx, ebp
mov dword [esp + 0xc], ebx
mov ecx, 4
cmovne esi, ecx
mov dword [esp], esi
cmp dword [esp + 0x14], 6
jb 0x5a82d1
cmp edx, 5
jl 0x5a82d1
mov ecx, dword [esp + 4]
shr ecx, 5
xor esi, esi
cmp ecx, eax
jae 0x5a82ab
mov eax, dword [edi + ecx*4]
xor edx, edx
mov ecx, dword [esp + 4]
bt eax, ecx
setb dl
mov esi, edx
mov cl, 5
mov edx, dword [esp]
sub cl, dl
mov edi, dword [esp + 0xc]
mov eax, edi
shl eax, cl
or eax, 1
test esi, esi
cmovne edi, eax
mov dword [esp + 0xc], edi
mov eax, 5
cmovne edx, eax
mov dword [esp], edx
test byte [esp + 0x20], 1
mov ebp, dword [esp + 0xc8]
jne 0x5a835a
mov eax, dword [esp + 0xc]
and eax, 0xfffffffe
mov edi, dword [esp + eax*2 + 0x24]
cmp edi, dword [esp + 0x10]
je 0x5a833d
push dword [edi + 4]
push dword [esp + 0x14]
call fcn.0059f5c0
add esp, 8
test eax, eax
je 0x5a83f8
mov eax, dword [edi + 4]
lea ecx, [eax*4]
test ecx, ecx
je 0x5a8329
push ecx
push dword [edi]
mov eax, dword [esp + 0x18]
push dword [eax]
call sub.api_ms_win_crt_private_l1_1_0.dll_memcpy
add esp, 0xc
mov eax, dword [edi + 4]
mov ecx, dword [esp + 0x10]
mov dword [ecx + 4], eax
mov eax, dword [edi + 0xc]
mov dword [ecx + 0xc], eax
mov ebp, dword [esp + 0xc8]
mov esi, dword [esp + 0xc0]
jmp 0x5a83ac
mov dword [esp], 0
mov dword [esp + 0xc], 1
test bl, 1
je 0x5a82df
mov edi, 0xffffffff
push ebp
push dword [esp + 0x1c]
mov eax, dword [esp + 0x18]
push eax
push eax
push eax
call sym.adb.exe_BN_mod_mul_montgomery
add esp, 0x14
xor ebx, ebx
test eax, eax
je 0x5a8401
inc edi
cmp dword [esp], edi
jne 0x5a835f
mov eax, dword [esp + 0xc]
and eax, 0xfffffffe
push ebp
push dword [esp + 0x1c]
push dword [esp + eax*2 + 0x2c]
mov eax, dword [esp + 0x1c]
push eax
push eax
call sym.adb.exe_BN_mod_mul_montgomery
add esp, 0x14
test eax, eax
mov esi, dword [esp + 0xc0]
je 0x5a8401
mov edx, dword [esp + 4]
sub edx, dword [esp]
cmp edx, 0xfffffffb
je 0x5a83cd
add edx, 4
mov bl, 1
jmp 0x5a80b5
xor eax, eax
mov ebp, dword [esp + 0xc8]
jmp 0x5a8405
push ebp
push dword [esp + 0x1c]
push dword [esp + 0x18]
push dword [esp + 0xc4]
call sym.adb.exe_BN_from_montgomery
add esp, 0x10
xor ebx, ebx
test eax, eax
setne bl
jmp 0x5a8401
xor ebx, ebx
xor eax, eax
jmp 0x5a8405
xor ebx, ebx
jmp 0x5a8401
xor ebx, ebx
mov ebp, dword [esp + 0xc8]
mov eax, dword [esp + 8]
push eax
call sym.adb.exe_BN_MONT_CTX_free
add esp, 4
cmp byte [ebp + 0x14], 0
jne 0x5a7c26
mov eax, dword [ebp + 4]
mov ecx, dword [ebp + 8]
lea edx, [ecx - 1]
mov dword [ebp + 8], edx
mov eax, dword [eax + ecx*4 - 4]
mov dword [ebp + 0x10], eax
jmp 0x5a7c26