Function at 0x2904fd9df
Capabilities:
Authenticate hmac
Encode data using xor

Disassembly:
push r12
push rbp
push rdi
push rsi
push rbx
sub rsp, 0x30
mov rsi, rcx
cmp r12b, 0x22
je 0x2904fdb2f
push r10
shl r10w, 0xe
push rdx
rcpps xmm12, xmm15
push r11
shr r10w, 0xf
push rbx
dec rdx
push rax
rol r10d, 8
push r8
emms
push r13
paddb mm1, mm5
pop r13
psrlq mm7, 0x1d
pop r8
psadbw mm6, mm0
pop rax
not r11w
pop rbx
xor dl, r10b
pop r11
nop
pop rdx
not r10w
pop r10
cmp eax, 0x5f
je 0x2904fdb76
push r15
emms
push rax
emms
push r9
nop
push rdx
paddusb mm1, mm5
push r13
not rax
pop r13
sub r15b, 0x15
pop rdx
sbb r15b, 7
pop r9
neg r15w
pop rax
shr r15w, 0x12
pop r15
cmp cl, r9b
je 0x2904fdba0
push rdx
dec edx
push r9
neg dl
emms
push r11
packsswb mm0, mm6
punpckhwd mm1, mm0
addps xmm13, xmm7
push r10
inc r10d
rcl r10b, 7
rol edx, 0x17
emms
push r12
nop
paddsb mm1, mm2
nop
shl r11b, 5
psllq mm2, 0x4f
pop r12
neg r11
minps xmm0, xmm15
paddsb mm5, mm0
psrlw mm5, 0x68
pop r10
rcl dl, 0xc
emms
neg r11d
pop r11
pslld mm2, 0x1d
emms
pop r9
nop
pop rdx
cmp r8, r10
je 0x2904fdbb5
push rbx
emms
nop
subps xmm9, xmm13
emms
emms
push rcx
addps xmm10, xmm13
minps xmm6, xmm7
rcr cx, 0x14
cmp rcx, rbx
sbb cl, bl
pop rcx
nop
nop
movaps xmm8, xmm12
shr ebx, 0xd
por mm4, mm0
dec rbx
pop rbx
cmp r10d, eax
je 0x2904fdbe2
push r14
inc r14
push rdx
pmullw mm0, mm3
emms
pop rdx
punpckldq mm3, mm1
pop r14
cmp r11b, al
je 0x2904fdc10
jne 0x2904fdc47
push rdx
psllq mm3, 3
push r8
not rdx
push rcx
andps xmm12, xmm6
push r13
or rdx, r13
push r12
dec r8d
push rax
test dx, r12w
push r11
neg al
pop r11
subss xmm4, xmm6
pop rax
emms
pop r12
sbb r13d, 9
pop r13
mov dx, 0x12
pop rcx
rol edx, 2
pop r8
psrlq mm4, 0x58
pop rdx
jmp 0x2904fdc47
push r9
paddusb mm2, mm3
push r12
nop
xadd r12d, r9d
push rax
mulps xmm2, xmm13
packuswb mm3, mm5
xchg r9w, r12w
pop rax
xor r12d, r9d
nop
pop r12
pslld mm5, 0x36
pop r9
jmp 0x2904fdc47
push rbx
punpckhbw mm2, mm5
push r12
not r12d
pop r12
movlhps xmm2, xmm14
pop rbx
jmp 0x2904fdc47
push r15
dec r15d
emms
ucomiss xmm13, xmm0
nop
mulss xmm10, xmm11
psrlw mm0, 0x50
nop
movss xmm3, xmm15
psrld mm1, 0x3a
maxps xmm10, xmm12
not r15
pcmpgtd mm3, mm6
pop r15
jmp 0x2904fdc47
push r8
pxor mm1, mm5
nop
movaps xmm7, xmm0
push rbx
psllq mm1, 0x59
shr r8b, 7
push r12
nop
pop r12
sub bx, r8w
sub ebx, 6
pop rbx
maxss xmm1, xmm14
inc r8d
inc r8d
pop r8
jmp 0x2904fdc47
push rcx
not cl
push rbx
packssdw mm3, mm4
emms
push r14
neg bx
inc ebx
xorps xmm0, xmm4
push rdx
rcr r14w, 2
minps xmm14, xmm6
emms
rcpss xmm2, xmm4
pop rdx
xadd rbx, r14
pcmpgtb mm4, mm6
emms
pop r14
nop
add ebx, ecx
pop rbx
packuswb mm3, mm7
pop rcx
push r8
emms
nop
inc r8d
emms
pslld mm2, 0x36
nop
nop
emms
nop
neg r8
nop
inc r8d
pop r8
movsxd rbx, edx
lea rdi, [rsp + 0x28]
lea rbp, [rsp + 0x2e]
movabs r12, 0x4800740040
test ebx, ebx
jle 0x2904fde4c
push rbx
paddusw mm6, mm5
push r11
cmp r11d, ebx
push rax
emms
push r9
emms
push r13
nop
push r15
psllq mm0, 0x26
push r14
inc r14d
pop r14
shl r11w, 5
pop r15
psraw mm6, 0x2c
pop r13
andnps xmm5, xmm15
pop r9
psraw mm4, 0x3e
pop rax
mov r11b, bl
pop r11
nop
pop rbx
cmp word [rsi + rbx*2], 0x5c
jne 0x2904fdd0d
push r10
movaps xmm4, xmm10
pcmpeqw mm3, mm2
pmaxsw mm4, mm6
push r13
mulps xmm7, xmm10
nop
emms
push r8
dec r10d
mulss xmm2, xmm11
psrlw mm3, 0x4e
pop r8
andnps xmm0, xmm9
addss xmm10, xmm0
neg r13d
pop r13
pxor mm2, mm1
nop
emms
pop r10
lea rax, [rsi + rbx*2 + 2]
jmp 0x2904fdf3f
mov qword [rsp + 0x28], r12
push r12
psllq mm4, 0x5b
inc r12d
inc r12
nop
emms
shl r12, 0xa
dec r12d
pop r12
mov rcx, rdi
call sub.msvcrt.dll_wcslen
mov rdx, rax
mov rax, rdi
cmp rdx, 2
jne 0x2904fddb1
push r13
shl r13b, 0xe
push r15
neg r13d
push r11
inc r11
push rax
mov r11b, r15b
pop rax
rol r15d, 0x12
pop r11
adc r15, r13
pop r15
neg r13d
pop r13
xor word [rax], 0x52
push r10
nop
push r15
comiss xmm10, xmm8
movss xmm1, xmm6
push r12
dec r12
sbb r10d, 0x15
adc r10, r12
push rcx
xchg r15, r10
paddusb mm1, mm7
neg ecx
rcpss xmm12, xmm5
pop rcx
pand mm2, mm7
packuswb mm4, mm1
shr r12, 0x11
pop r12
adc r15d, r10d
dec r15d
pop r15
nop
pop r10
add rax, 2
cmp rax, rbp
jne 0x2904fdd3e
jmp 0x2904fde0e
push rax
nop
push r13
paddd mm7, mm3
push rbx
ucomiss xmm11, xmm9
push r9
pxor mm0, mm1
push r11
minps xmm0, xmm10
push r10
emms
pop r10
emms
pop r11
psubw mm7, mm3
pop r9
orps xmm2, xmm13
pop rbx
dec r13
pop r13
pandn mm0, mm3
pop rax
xor word [rax], 0x64
push r8
paddsb mm4, mm0
push r9
adc r9, r8
push r13
or r9, r8
pop r13
adc r9, r8
pop r9
psrad mm5, 0x30
pop r8
add rax, 2
cmp rax, rbp
jne 0x2904fddb1
push rdx
addps xmm12, xmm5
push r14
psllq mm4, 0xa
push r10
xor r14d, r10d
push r9
sub r10d, 0xf
push rax
emms
push rbx
psubsb mm7, mm2
pop rbx
ror rax, 6
pop rax
nop
pop r9
emms
pop r10
rcpss xmm5, xmm12
pop r14
pslld mm4, 0x48
pop rdx
dec rbx
jmp 0x2904fdc7a
cmp r12w, 0x39
jne 0x2904fde7f
push r8
psrad mm0, 0x36
push r15
not r15
psraw mm1, 0x48
pop r15
punpckhbw mm2, mm1
pop r8
jmp 0x2904fde8f
push rdx
emms
push rax
not rdx
inc rax
pop rax
psrad mm0, 0x2a
pop rdx
push rbx
pand mm4, mm5
push r13
mov r13w, 0xb
test rbx, r13
pop r13
pmaddwd mm3, mm0
pop rbx
mov ecx, 2
mov edx, 4
call sub.msvcrt.dll_calloc
mov rcx, rax
xor eax, eax
push rax
psraw mm2, 0x24
push r11
sub ax, 0x13
push r9
psrld mm4, 0x67
push r14
nop
push r15
rcr r9b, 0xf
push rdx
rol rax, 5
pop rdx
paddb mm6, mm4
pop r15
emms
pop r14
shr r11d, 0xf
pop r9
inc rax
pop r11
emms
pop rax
xor dword [rcx + rax*4], 0x53
push r8
emms
push r15
rcl r8d, 3
pop r15
rol r8d, 0xc
pop r8
test rax, rax
jne 0x2904fdf10
mov eax, 1
jmp 0x2904fdeb7
call sub.msvcrt.dll_free
push r13
ucomiss xmm11, xmm0
push r9
dec r13d
add r13d, r9d
push rcx
psllq mm5, 0x58
not r9d
sub r13d, ecx
pop rcx
psraw mm7, 0x1a
emms
pop r9
sbb r13b, 0x16
pop r13
xor eax, eax
add rsp, 0x30
pop rbx
pop rsi
pop rdi
pop rbp
pop r12
ret