// File: /workspace/github_cpp_makefile_star2_O2/lmclaramunt[P]AES-Crypto/Cipher.cpp
// Function: Cipher::Cipher(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool, bool)
Cipher::Cipher(string* _textPath, string* _aesKeyPath, string* _macKeyPath, 
    bool padding, bool encrypt): 
    textPath(_textPath), aesKeyPath(*_aesKeyPath), macKeyPath(*_macKeyPath){
    try {
        if(!fileExists(textPath)) throw "File given in path '-p' wasn't found\n";
        if(!fileExists(_aesKeyPath)) throw "Key given in '-aes' wasn't found\n";
        if(!fileExists(_macKeyPath)) throw "Key given in '-mac' wasn't found\n";
        int keyLength = getKeySize(&aesKeyPath, &macKeyPath);
        cryptoDir();
        setBlockRoundCombinations(&keyLength, false);
        getKey(encrypt, &aesKeyPath, &aesKeyExp);
        getKey(encrypt, &macKeyPath, &macKeyExp);
        vector<unsigned char> inpVct;
        readText(&inpVct);
        inputBlock = new Block(&inpVct, padding);
    } catch(const char* str) {
        throw str;
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movl %r9d, %r12d
movl %r8d, 0x8(%rsp)
movq %rdi, %rbx
movq %rsi, 0x28(%rdi)
leaq 0x40(%rdi), %rax
movq %rax, 0x30(%rdi)
andq $0x0, 0x38(%rdi)
movq %rcx, %r13
movq %rdx, %rbp
movb $0x0, 0x40(%rdi)
leaq 0x50(%rdi), %r14
movq %r14, %rdi
movq %rdx, %rsi
callq 0x22b0
leaq 0x70(%rbx), %r15
movq %r15, %rdi
movq %r13, %rsi
callq 0x22b0
movq 0x28(%rbx), %rsi
callq 0x3a04
testb %al, %al
je 0x3fa0
movq %rbp, %rsi
callq 0x3a04
testb %al, %al
je 0x3fa9
movq %r13, %rsi
callq 0x3a04
testb %al, %al
je 0x3fb2
movq %r14, %rsi
movq %r15, %rdx
callq 0x4066
movl %eax, 0xc(%rsp)
movq %rbx, %rdi
callq 0x3a26
leaq 0xc(%rsp), %rsi
movq %rbx, %rdi
xorl %edx, %edx
callq 0x3a94
movzbl %r12b, %ebp
movq %rbx, %rdi
movl %ebp, %esi
movq %r14, %rdx
movq %rbx, %rcx
callq 0x3c34
leaq 0x8(%rbx), %rcx
movq %rbx, %rdi
movl %ebp, %esi
movq %r15, %rdx
callq 0x3c34
xorps %xmm0, %xmm0
leaq 0x10(%rsp), %rsi
movaps %xmm0, (%rsi)
andq $0x0, 0x10(%rsi)
movq %rbx, %rdi
callq 0x3ddc
pushq $0x18
popq %rdi
callq 0x2200
movq %rax, %rbp
movzbl 0x8(%rsp), %edx
leaq 0x10(%rsp), %rsi
movq %rax, %rdi
callq 0x3018
movq %rbp, 0x10(%rbx)
leaq 0x10(%rsp), %rdi
callq 0x59f4
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x36f3(%rip), %r12      # 0x769a
jmp 0x3fb9
leaq 0x3710(%rip), %r12      # 0x76c0
jmp 0x3fb9
leaq 0x3729(%rip), %r12      # 0x76e2
pushq $0x8
popq %rdi
callq 0x2100
movq %r12, (%rax)
movq 0x6ffd(%rip), %rsi      # 0xafc8
movq %rax, %rdi
xorl %edx, %edx
callq 0x23a0
movq %rdx, %r13
movq %rax, %r12
pushq $0x18
popq %rsi
movq %rbp, %rdi
callq 0x2210
jmp 0x3ff8
movq %rax, %r12
jmp 0x4049
movq %rax, %r12
jmp 0x4051
movq %rdx, %r13
movq %rax, %r12
leaq 0x10(%rsp), %rdi
callq 0x59f4
jmp 0x400c
jmp 0x4006
movq %rdx, %r13
movq %rax, %r12
cmpl $0x1, %r13d
jne 0x4041
movq %r12, %rdi
callq 0x20a0
movq %rax, %r12
pushq $0x8
popq %rdi
callq 0x2100
movq %r12, (%rax)
movq 0x6f99(%rip), %rsi      # 0xafc8
movq %rax, %rdi
xorl %edx, %edx
callq 0x23a0
movq %rax, %r12
callq 0x2370
movq %r15, %rdi
callq 0x20c0
movq %r14, %rdi
callq 0x20c0
addq $0x30, %rbx
movq %rbx, %rdi
callq 0x20c0
movq %r12, %rdi
callq 0x23d0
nop