Function at 0x46e640
Capabilities:
Encode data using xor

Disassembly:
push ebp
push edi
push esi
push ebx
sub esp, 0xfc
mov esi, dword [esp + 0x114]
mov ebx, dword [esp + 0x110]
mov edi, dword [esp + 0x11c]
cmp esi, 0x7ff
jbe 0x46e990
call sym.adb.exe_EVP_sha256
mov dword [esp], eax
mov dword [esp + 0x30], eax
call sym.adb.exe_EVP_MD_size
mov ebp, eax
add esi, 0x3f
and esi, 0xffffffc0
mov ecx, dword [esp + 0x118]
test ecx, ecx
je 0x46e6b9
xor eax, eax
cmp edi, ebp
jb 0x46e985
cmp ebp, edi
cmovbe edi, ebp
mov dword [esp + 8], edi
mov edi, dword [esp + 0x118]
lea eax, [esp + 0x70]
mov dword [esp], eax
mov dword [esp + 4], edi
call sub.msvcrt.dll_memcpy
call sym.adb.exe_BN_CTX_new
test eax, eax
mov edi, eax
mov dword [esp + 0x40], eax
je 0x46e965
mov dword [esp], eax
call sym.adb.exe_BN_CTX_start
call sym.adb.exe_BN_MONT_CTX_new
test eax, eax
mov dword [esp + 0x48], eax
je 0x46e965
mov dword [esp], edi
call sym.adb.exe_BN_CTX_get
mov dword [esp], edi
mov dword [esp + 0x2c], eax
call sym.adb.exe_BN_CTX_get
mov dword [esp], edi
mov dword [esp + 0x28], eax
call sym.adb.exe_BN_CTX_get
mov dword [esp], edi
mov dword [esp + 0x4c], eax
call sym.adb.exe_BN_CTX_get
mov dword [esp], edi
mov dword [esp + 0x20], eax
call sym.adb.exe_BN_CTX_get
mov dword [esp], edi
mov dword [esp + 0x60], eax
call sym.adb.exe_BN_CTX_get
mov dword [esp], edi
mov dword [esp + 0x68], eax
call sym.adb.exe_BN_CTX_get
mov dword [esp], edi
mov dword [esp + 0x24], eax
call sym.adb.exe_BN_CTX_get
test eax, eax
mov edi, eax
mov dword [esp + 0x5c], eax
je 0x46e96d
lea eax, [esi - 1]
mov esi, eax
mov dword [esp + 0x6c], eax
call sym.adb.exe_BN_value_one
mov dword [esp + 8], esi
mov dword [esp], edi
mov dword [esp + 4], eax
call sym.adb.exe_BN_lshift
test eax, eax
je 0x46e96d
mov eax, dword [esp + 0x6c]
mov edx, 0xcccccccd
mov dword [esp + 0x64], 0
lea esi, [esp + 0xb0]
lea edi, [esp + 0xd0]
mov dword [esp + 0x110], ebx
mul edx
lea eax, [ebp*8]
mov dword [esp + 0x54], eax
mov dword [esp + 0x50], edx
shr dword [esp + 0x50], 7
mov eax, dword [esp + 0x64]
mov dword [esp + 4], 0
mov dword [esp + 8], eax
mov eax, dword [esp + 0x128]
mov dword [esp], eax
call sym.adb.exe_BN_GENCB_call
test eax, eax
je 0x46e96d
mov edx, dword [esp + 0x118]
xor eax, eax
test edx, edx
sete al
mov dword [esp + 0x38], eax
jne 0x46e9d8
lea eax, [esp + 0x70]
mov dword [esp + 4], ebp
mov dword [esp], eax
mov dword [esp + 0x34], eax
call sym.adb.exe_RAND_bytes
test eax, eax
je 0x46e96d
mov ebx, dword [esp + 0x34]
mov dword [esp + 8], ebp
mov dword [esp], esi
mov dword [esp + 4], ebx
call sub.msvcrt.dll_memcpy
mov dword [esp + 8], ebp
mov dword [esp + 4], ebx
mov dword [esp], edi
call sub.msvcrt.dll_memcpy
lea eax, [ebp - 1]
cmp eax, ebp
mov dword [esp + 0x44], eax
jae 0x46e875
mov ecx, dword [esp + 0x44]
movzx eax, byte [esp + ecx + 0xb0]
mov byte [esp + 0x3f], al
add eax, 1
test al, al
mov byte [esp + ecx + 0xb0], al
jne 0x46e875
mov eax, ecx
jmp 0x46e86e
movzx ecx, byte [esi + eax]
lea edx, [ecx + 1]
test dl, dl
mov byte [esi + eax], dl
jne 0x46e875
sub eax, 1
cmp eax, ebp
jb 0x46e860
mov eax, dword [esp + 0x30]
lea ebx, [esp + 0x90]
mov dword [esp + 0x14], 0
mov dword [esp + 0xc], 0
mov dword [esp + 8], ebx
mov dword [esp + 0x10], eax
mov eax, dword [esp + 0x34]
mov dword [esp + 4], ebp
mov dword [esp], eax
call sym.adb.exe_EVP_Digest
test eax, eax
je 0x46e96d
mov eax, dword [esp + 0x30]
mov dword [esp + 0x14], 0
mov dword [esp + 0xc], 0
mov dword [esp + 8], edi
mov dword [esp + 0x10], eax
mov dword [esp + 4], ebp
mov dword [esp], esi
call sym.adb.exe_EVP_Digest
test eax, eax
je 0x46e96d
xor eax, eax
test ebp, ebp
je 0x46e8f4
movzx edx, byte [edi + eax]
xor byte [ebx + eax], dl
add eax, 1
cmp eax, ebp
jne 0x46e8e6
mov eax, dword [esp + 0x44]
or byte [esp + 0x90], 0x80
or byte [esp + eax + 0x90], 1
mov eax, dword [esp + 0x20]
mov dword [esp + 4], ebp
mov dword [esp], ebx
mov dword [esp + 8], eax
call sym.adb.exe_BN_bin2bn
test eax, eax
je 0x46e96d
mov eax, dword [esp + 0x128]
mov dword [esp + 4], 0x32
mov dword [esp + 0x10], eax
mov eax, dword [esp + 0x38]
mov dword [esp + 0xc], eax
mov eax, dword [esp + 0x40]
mov dword [esp + 8], eax
mov eax, dword [esp + 0x20]
mov dword [esp], eax
call sym.adb.exe_BN_is_prime_fasttest_ex
cmp eax, 0
jg 0x46e9f0
jne 0x46e96d
add dword [esp + 0x64], 1
nop
jmp 0x46e7b1
mov dword [esp + 0x48], 0
mov eax, dword [esp + 0x40]
test eax, eax
jne 0x46e9c0
xor ebx, ebx
mov eax, dword [esp + 0x48]
mov dword [esp], eax
call sym.adb.exe_BN_MONT_CTX_free
mov eax, ebx
add esp, 0xfc
pop ebx
pop esi
pop edi
pop ebp
ret
call sym.adb.exe_EVP_sha1
mov dword [esp], eax
mov dword [esp + 0x30], eax
call sym.adb.exe_EVP_MD_size
cmp esi, 0x1ff
mov ebp, eax
ja 0x46e67e
mov esi, 0x200
jmp 0x46e684
xor ebx, ebx
mov edi, dword [esp + 0x40]
mov dword [esp], edi
call sym.adb.exe_BN_CTX_end
mov dword [esp], edi
call sym.adb.exe_BN_CTX_free
jmp 0x46e977
lea eax, [esp + 0x70]
mov dword [esp + 0x118], 0
mov dword [esp + 0x34], eax
jmp 0x46e80c
mov eax, dword [esp + 0x128]
mov dword [esp + 8], 0
mov dword [esp + 4], 2
mov dword [esp], eax
call sym.adb.exe_BN_GENCB_call
test eax, eax
je 0x46e96d
mov eax, dword [esp + 0x128]
mov dword [esp + 8], 0
mov dword [esp + 4], 3
mov dword [esp], eax
call sym.adb.exe_BN_GENCB_call
test eax, eax
je 0x46e96d
mov dword [esp + 0x58], 0
mov eax, dword [esp + 0x4c]
mov dword [esp], eax
call sym.adb.exe_BN_zero
mov dword [esp + 0x34], 0
mov dword [esp + 0x38], 0
mov ecx, dword [esp + 0x44]
cmp ecx, ebp
jae 0x46ea9d
movzx eax, byte [esp + ecx + 0xb0]
mov byte [esp + 0x3f], al
add eax, 1
test al, al
mov byte [esp + ecx + 0xb0], al
jne 0x46ea9d
mov eax, ecx
jmp 0x46ea96
movzx ecx, byte [esi + eax]
lea edx, [ecx + 1]
test dl, dl
mov byte [esi + eax], dl
jne 0x46ea9d
sub eax, 1
cmp eax, ebp
jb 0x46ea88
mov eax, dword [esp + 0x30]
mov dword [esp + 0x14], 0
mov dword [esp + 0xc], 0
mov dword [esp + 8], ebx
mov dword [esp + 0x10], eax
mov dword [esp + 4], ebp
mov dword [esp], esi
call sym.adb.exe_EVP_Digest
test eax, eax
je 0x46e96d
mov eax, dword [esp + 0x2c]
mov dword [esp + 4], ebp
mov dword [esp], ebx
mov dword [esp + 8], eax
call sym.adb.exe_BN_bin2bn
test eax, eax
je 0x46e96d
mov eax, dword [esp + 0x2c]
mov ecx, dword [esp + 0x34]
mov dword [esp + 4], eax
mov dword [esp + 8], ecx
mov dword [esp], eax
call sym.adb.exe_BN_lshift
test eax, eax
je 0x46e96d
mov eax, dword [esp + 0x2c]
mov dword [esp + 8], eax
mov eax, dword [esp + 0x4c]
mov dword [esp + 4], eax
mov dword [esp], eax
call sym.adb.exe_BN_add
test eax, eax
je 0x46e96d
add dword [esp + 0x38], 1
mov eax, dword [esp + 0x54]
add dword [esp + 0x34], eax
mov eax, dword [esp + 0x38]
cmp dword [esp + 0x50], eax
jge 0x46ea62
mov eax, dword [esp + 0x6c]
mov dword [esp + 4], eax
mov eax, dword [esp + 0x4c]
mov dword [esp], eax
call sym.adb.exe_BN_mask_bits
test eax, eax
je 0x46e96d
mov eax, dword [esp + 0x4c]
mov dword [esp + 4], eax
mov eax, dword [esp + 0x60]
mov dword [esp], eax
call sym.adb.exe_BN_copy
test eax, eax
je 0x46e96d
mov eax, dword [esp + 0x60]
mov ecx, dword [esp + 0x5c]
mov dword [esp + 4], eax
mov dword [esp + 8], ecx
mov dword [esp], eax
call sym.adb.exe_BN_add
test eax, eax
je 0x46e96d
mov edx, dword [esp + 0x20]
mov ecx, dword [esp + 0x2c]
mov dword [esp + 4], edx
mov dword [esp], ecx
call sym.adb.exe_BN_lshift1
test eax, eax
je 0x46e96d
mov edx, dword [esp + 0x40]
mov ecx, dword [esp + 0x2c]
mov eax, dword [esp + 0x60]
mov dword [esp], 0
mov dword [esp + 0x10], edx
mov edx, dword [esp + 0x68]
mov dword [esp + 0xc], ecx
mov dword [esp + 8], eax
mov dword [esp + 4], edx
call sym.adb.exe_BN_div
test eax, eax
je 0x46e96d
call sym.adb.exe_BN_value_one
mov edx, dword [esp + 0x68]
mov ecx, dword [esp + 0x2c]
mov dword [esp + 4], edx
mov dword [esp], ecx
mov dword [esp + 8], eax
call sym.adb.exe_BN_sub
test eax, eax
je 0x46e96d
mov eax, dword [esp + 0x60]
mov ecx, dword [esp + 0x2c]
mov dword [esp + 4], eax
mov eax, dword [esp + 0x24]
mov dword [esp + 8], ecx
mov dword [esp], eax
call sym.adb.exe_BN_sub
test eax, eax
je 0x46e96d
mov ecx, dword [esp + 0x5c]
mov eax, dword [esp + 0x24]
mov dword [esp + 4], ecx
mov dword [esp], eax
call sym.adb.exe_BN_cmp
test eax, eax
js 0x46ec87
mov eax, dword [esp + 0x128]
mov dword [esp + 0xc], 1
mov dword [esp + 4], 0x32
mov dword [esp + 0x10], eax
mov eax, dword [esp + 0x40]
mov dword [esp + 8], eax
mov eax, dword [esp + 0x24]
mov dword [esp], eax
call sym.adb.exe_BN_is_prime_fasttest_ex
cmp eax, 0
jg 0x46ecc6
jne 0x46e96d
add dword [esp + 0x58], 1
cmp dword [esp + 0x58], 0x1000
je 0x46e95a
mov eax, dword [esp + 0x58]
mov dword [esp + 4], 0
mov dword [esp + 8], eax
mov eax, dword [esp + 0x128]
mov dword [esp], eax
call sym.adb.exe_BN_GENCB_call
test eax, eax
jne 0x46ea46
jmp 0x46e96d
mov eax, dword [esp + 0x128]
mov dword [esp + 8], 1
mov ebx, dword [esp + 0x110]
mov dword [esp + 4], 2
mov dword [esp], eax
call sym.adb.exe_BN_GENCB_call
test eax, eax
je 0x46e96d
call sym.adb.exe_BN_value_one
mov dword [esp + 8], eax
mov eax, dword [esp + 0x24]
mov dword [esp + 4], eax
mov eax, dword [esp + 0x5c]
mov dword [esp], eax
call sym.adb.exe_BN_sub
test eax, eax
je 0x46e96d
mov eax, dword [esp + 0x40]
mov dword [esp + 4], 0
mov dword [esp + 0x10], eax
mov eax, dword [esp + 0x20]
mov dword [esp + 0xc], eax
mov eax, dword [esp + 0x5c]
mov dword [esp + 8], eax
mov eax, dword [esp + 0x2c]
mov dword [esp], eax
call sym.adb.exe_BN_div
test eax, eax
je 0x46e96d
mov eax, dword [esp + 0x5c]
mov dword [esp + 4], 2
mov dword [esp], eax
call sym.adb.exe_BN_set_word
test eax, eax
je 0x46e96d
mov eax, dword [esp + 0x40]
mov dword [esp + 8], eax
mov eax, dword [esp + 0x24]
mov dword [esp + 4], eax
mov eax, dword [esp + 0x48]
mov dword [esp], eax
call sym.adb.exe_BN_MONT_CTX_set
test eax, eax
je 0x46e96d
mov ebp, dword [esp + 0x28]
mov esi, 2
mov edi, dword [esp + 0x5c]
mov eax, dword [esp + 0x48]
mov dword [esp + 4], edi
mov dword [esp], ebp
mov dword [esp + 0x14], eax
mov eax, dword [esp + 0x40]
mov dword [esp + 0x10], eax
mov eax, dword [esp + 0x24]
mov dword [esp + 0xc], eax
mov eax, dword [esp + 0x2c]
mov dword [esp + 8], eax
call sym.adb.exe_BN_mod_exp_mont
test eax, eax
je 0x46e96d
mov dword [esp], ebp
call sym.adb.exe_BN_is_one
test eax, eax
je 0x46edfc
call sym.adb.exe_BN_value_one
mov dword [esp + 4], edi
mov dword [esp], edi
mov dword [esp + 8], eax
call sym.adb.exe_BN_add
test eax, eax
je 0x46e96d
add esi, 1
jmp 0x46ed9a
mov eax, dword [esp + 0x128]
mov dword [esp + 8], 1
mov dword [esp + 4], 3
mov dword [esp], eax
call sym.adb.exe_BN_GENCB_call
test eax, eax
je 0x46e9c0
mov eax, dword [ebx + 8]
mov dword [esp], eax
call sym.adb.exe_BN_free
mov eax, dword [ebx + 0xc]
mov dword [esp], eax
call sym.adb.exe_BN_free
mov eax, dword [ebx + 0x10]
mov dword [esp], eax
call sym.adb.exe_BN_free
mov eax, dword [esp + 0x24]
mov dword [esp], eax
call sym.adb.exe_BN_dup
mov dword [ebx + 8], eax
mov eax, dword [esp + 0x20]
mov dword [esp], eax
call sym.adb.exe_BN_dup
mov dword [ebx + 0xc], eax
mov eax, dword [esp + 0x28]
mov dword [esp], eax
call sym.adb.exe_BN_dup
mov edi, dword [ebx + 8]
test edi, edi
mov dword [ebx + 0x10], eax
je 0x46e9c0
mov ebx, dword [ebx + 0xc]
test ebx, ebx
mov ebx, 0
je 0x46e9c2
test eax, eax
je 0x46e9c2
mov ecx, dword [esp + 0x120]
test ecx, ecx
je 0x46eeac
mov eax, dword [esp + 0x120]
mov edi, dword [esp + 0x58]
mov dword [eax], edi
mov edx, dword [esp + 0x124]
test edx, edx
je 0x46eeca
mov eax, dword [esp + 0x124]
mov ebx, 1
mov dword [eax], esi
jmp 0x46e9c2
mov ebx, 1
jmp 0x46e9c2