// File: /workspace/github_c_makefile_star2_O0/zecoxao[P]ps3_decrypt_tools/lib/aes.c
// Function: aes_setkey_enc
int aes_setkey_enc(aes_context *ctx, const unsigned char *key, unsigned int keysize) {
    unsigned int i;
    unsigned long *RK;

    switch (keysize) {
        case 128: ctx->nr = 10;
            break;
        case 192: ctx->nr = 12;
            break;
        case 256: ctx->nr = 14;
            break;
        default: return ( POLARSSL_ERR_AES_INVALID_KEY_LENGTH);
    }

    ctx->rk = RK = ctx->buf;

    for (i = 0; i < (keysize >> 5); i++) {
        GET_ULONG_LE(RK[i], key, i << 2);
    }

    switch (ctx->nr) {
        case 10:

            for (i = 0; i < 10; i++, RK += 4) {
                RK[4] = RK[0] ^ RCON[i] ^
                        ((unsigned long) FSb[ (RK[3] >> 8) & 0xFF ]) ^
                        ((unsigned long) FSb[ (RK[3] >> 16) & 0xFF ] << 8) ^
                        ((unsigned long) FSb[ (RK[3] >> 24) & 0xFF ] << 16) ^
                        ((unsigned long) FSb[ (RK[3]) & 0xFF ] << 24);

                RK[5] = RK[1] ^ RK[4];
                RK[6] = RK[2] ^ RK[5];
                RK[7] = RK[3] ^ RK[6];
            }
            break;

        case 12:

            for (i = 0; i < 8; i++, RK += 6) {
                RK[6] = RK[0] ^ RCON[i] ^
                        ((unsigned long) FSb[ (RK[5] >> 8) & 0xFF ]) ^
                        ((unsigned long) FSb[ (RK[5] >> 16) & 0xFF ] << 8) ^
                        ((unsigned long) FSb[ (RK[5] >> 24) & 0xFF ] << 16) ^
                        ((unsigned long) FSb[ (RK[5]) & 0xFF ] << 24);

                RK[7] = RK[1] ^ RK[6];
                RK[8] = RK[2] ^ RK[7];
                RK[9] = RK[3] ^ RK[8];
                RK[10] = RK[4] ^ RK[9];
                RK[11] = RK[5] ^ RK[10];
            }
            break;

        case 14:

            for (i = 0; i < 7; i++, RK += 8) {
                RK[8] = RK[0] ^ RCON[i] ^
                        ((unsigned long) FSb[ (RK[7] >> 8) & 0xFF ]) ^
                        ((unsigned long) FSb[ (RK[7] >> 16) & 0xFF ] << 8) ^
                        ((unsigned long) FSb[ (RK[7] >> 24) & 0xFF ] << 16) ^
                        ((unsigned long) FSb[ (RK[7]) & 0xFF ] << 24);

                RK[9] = RK[1] ^ RK[8];
                RK[10] = RK[2] ^ RK[9];
                RK[11] = RK[3] ^ RK[10];

                RK[12] = RK[4] ^
                        ((unsigned long) FSb[ (RK[11]) & 0xFF ]) ^
                        ((unsigned long) FSb[ (RK[11] >> 8) & 0xFF ] << 8) ^
                        ((unsigned long) FSb[ (RK[11] >> 16) & 0xFF ] << 16) ^
                        ((unsigned long) FSb[ (RK[11] >> 24) & 0xFF ] << 24);

                RK[13] = RK[5] ^ RK[12];
                RK[14] = RK[6] ^ RK[13];
                RK[15] = RK[7] ^ RK[14];
            }
            break;

        default:

            break;
    }

    return ( 0);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movl %edx, -0x1c(%rbp)
movl -0x1c(%rbp), %eax
movl %eax, -0x2c(%rbp)
subl $0x80, %eax
je 0x1286
jmp 0x126e
movl -0x2c(%rbp), %eax
subl $0xc0, %eax
je 0x1292
jmp 0x127a
movl -0x2c(%rbp), %eax
subl $0x100, %eax            # imm = 0x100
je 0x129e
jmp 0x12aa
movq -0x10(%rbp), %rax
movl $0xa, (%rax)
jmp 0x12b6
movq -0x10(%rbp), %rax
movl $0xc, (%rax)
jmp 0x12b6
movq -0x10(%rbp), %rax
movl $0xe, (%rax)
jmp 0x12b6
movl $0xffffffe0, -0x4(%rbp) # imm = 0xFFFFFFE0
jmp 0x1809
movq -0x10(%rbp), %rcx
addq $0x10, %rcx
movq %rcx, -0x28(%rbp)
movq -0x10(%rbp), %rax
movq %rcx, 0x8(%rax)
movl $0x0, -0x20(%rbp)
movl -0x20(%rbp), %eax
movl -0x1c(%rbp), %ecx
shrl $0x5, %ecx
cmpl %ecx, %eax
jae 0x1357
movq -0x18(%rbp), %rax
movl -0x20(%rbp), %ecx
shll $0x2, %ecx
movl %ecx, %ecx
movzbl (%rax,%rcx), %eax
movl %eax, %edx
movq -0x18(%rbp), %rax
movl -0x20(%rbp), %ecx
shll $0x2, %ecx
addl $0x1, %ecx
movl %ecx, %ecx
movzbl (%rax,%rcx), %eax
shlq $0x8, %rax
orq %rax, %rdx
movq -0x18(%rbp), %rax
movl -0x20(%rbp), %ecx
shll $0x2, %ecx
addl $0x2, %ecx
movl %ecx, %ecx
movzbl (%rax,%rcx), %eax
shlq $0x10, %rax
orq %rax, %rdx
movq -0x18(%rbp), %rax
movl -0x20(%rbp), %ecx
shll $0x2, %ecx
addl $0x3, %ecx
movl %ecx, %ecx
movzbl (%rax,%rcx), %eax
shlq $0x18, %rax
orq %rax, %rdx
movq -0x28(%rbp), %rax
movl -0x20(%rbp), %ecx
movq %rdx, (%rax,%rcx,8)
movl -0x20(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x20(%rbp)
jmp 0x12d1
movq -0x10(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x30(%rbp)
subl $0xa, %eax
je 0x1386
jmp 0x1367
movl -0x30(%rbp), %eax
subl $0xc, %eax
je 0x14a9
jmp 0x1375
movl -0x30(%rbp), %eax
subl $0xe, %eax
je 0x15fc
jmp 0x1800
movl $0x0, -0x20(%rbp)
cmpl $0xa, -0x20(%rbp)
jae 0x14a4
movq -0x28(%rbp), %rax
movq (%rax), %rcx
movl -0x20(%rbp), %eax
movl %eax, %edx
leaq 0xac66(%rip), %rax      # 0xc010
xorq (%rax,%rdx,8), %rcx
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rdx
shrq $0x8, %rdx
andq $0xff, %rdx
leaq 0xac98(%rip), %rax      # 0xc060
movzbl (%rax,%rdx), %eax
xorq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rdx
shrq $0x10, %rdx
andq $0xff, %rdx
leaq 0xac77(%rip), %rax      # 0xc060
movzbl (%rax,%rdx), %eax
shlq $0x8, %rax
xorq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rdx
shrq $0x18, %rdx
andq $0xff, %rdx
leaq 0xac52(%rip), %rax      # 0xc060
movzbl (%rax,%rdx), %eax
shlq $0x10, %rax
xorq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rdx
andq $0xff, %rdx
leaq 0xac31(%rip), %rax      # 0xc060
movzbl (%rax,%rdx), %eax
shlq $0x18, %rax
xorq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rcx
movq -0x28(%rbp), %rax
xorq 0x20(%rax), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rcx
movq -0x28(%rbp), %rax
xorq 0x28(%rax), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rcx
movq -0x28(%rbp), %rax
xorq 0x30(%rax), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x38(%rax)
movl -0x20(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x20(%rbp)
movq -0x28(%rbp), %rax
addq $0x20, %rax
movq %rax, -0x28(%rbp)
jmp 0x138d
jmp 0x1802
movl $0x0, -0x20(%rbp)
cmpl $0x8, -0x20(%rbp)
jae 0x15f7
movq -0x28(%rbp), %rax
movq (%rax), %rcx
movl -0x20(%rbp), %eax
movl %eax, %edx
leaq 0xab43(%rip), %rax      # 0xc010
xorq (%rax,%rdx,8), %rcx
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rdx
shrq $0x8, %rdx
andq $0xff, %rdx
leaq 0xab75(%rip), %rax      # 0xc060
movzbl (%rax,%rdx), %eax
xorq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rdx
shrq $0x10, %rdx
andq $0xff, %rdx
leaq 0xab54(%rip), %rax      # 0xc060
movzbl (%rax,%rdx), %eax
shlq $0x8, %rax
xorq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rdx
shrq $0x18, %rdx
andq $0xff, %rdx
leaq 0xab2f(%rip), %rax      # 0xc060
movzbl (%rax,%rdx), %eax
shlq $0x10, %rax
xorq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rdx
andq $0xff, %rdx
leaq 0xab0e(%rip), %rax      # 0xc060
movzbl (%rax,%rdx), %eax
shlq $0x18, %rax
xorq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rcx
movq -0x28(%rbp), %rax
xorq 0x30(%rax), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x38(%rax)
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rcx
movq -0x28(%rbp), %rax
xorq 0x38(%rax), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x40(%rax)
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rcx
movq -0x28(%rbp), %rax
xorq 0x40(%rax), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x48(%rax)
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rcx
movq -0x28(%rbp), %rax
xorq 0x48(%rax), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x50(%rax)
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rcx
movq -0x28(%rbp), %rax
xorq 0x50(%rax), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x58(%rax)
movl -0x20(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x20(%rbp)
movq -0x28(%rbp), %rax
addq $0x30, %rax
movq %rax, -0x28(%rbp)
jmp 0x14b0
jmp 0x1802
movl $0x0, -0x20(%rbp)
cmpl $0x7, -0x20(%rbp)
jae 0x17fe
movq -0x28(%rbp), %rax
movq (%rax), %rcx
movl -0x20(%rbp), %eax
movl %eax, %edx
leaq 0xa9f0(%rip), %rax      # 0xc010
xorq (%rax,%rdx,8), %rcx
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rdx
shrq $0x8, %rdx
andq $0xff, %rdx
leaq 0xaa22(%rip), %rax      # 0xc060
movzbl (%rax,%rdx), %eax
xorq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rdx
shrq $0x10, %rdx
andq $0xff, %rdx
leaq 0xaa01(%rip), %rax      # 0xc060
movzbl (%rax,%rdx), %eax
shlq $0x8, %rax
xorq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rdx
shrq $0x18, %rdx
andq $0xff, %rdx
leaq 0xa9dc(%rip), %rax      # 0xc060
movzbl (%rax,%rdx), %eax
shlq $0x10, %rax
xorq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rdx
andq $0xff, %rdx
leaq 0xa9bb(%rip), %rax      # 0xc060
movzbl (%rax,%rdx), %eax
shlq $0x18, %rax
xorq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x40(%rax)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rcx
movq -0x28(%rbp), %rax
xorq 0x40(%rax), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x48(%rax)
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rcx
movq -0x28(%rbp), %rax
xorq 0x48(%rax), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x50(%rax)
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rcx
movq -0x28(%rbp), %rax
xorq 0x50(%rax), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x58(%rax)
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rcx
movq -0x28(%rbp), %rax
movq 0x58(%rax), %rdx
andq $0xff, %rdx
leaq 0xa942(%rip), %rax      # 0xc060
movzbl (%rax,%rdx), %eax
xorq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0x58(%rax), %rdx
shrq $0x8, %rdx
andq $0xff, %rdx
leaq 0xa921(%rip), %rax      # 0xc060
movzbl (%rax,%rdx), %eax
shlq $0x8, %rax
xorq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0x58(%rax), %rdx
shrq $0x10, %rdx
andq $0xff, %rdx
leaq 0xa8fc(%rip), %rax      # 0xc060
movzbl (%rax,%rdx), %eax
shlq $0x10, %rax
xorq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0x58(%rax), %rdx
shrq $0x18, %rdx
andq $0xff, %rdx
leaq 0xa8d7(%rip), %rax      # 0xc060
movzbl (%rax,%rdx), %eax
shlq $0x18, %rax
xorq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x60(%rax)
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rcx
movq -0x28(%rbp), %rax
xorq 0x60(%rax), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x68(%rax)
movq -0x28(%rbp), %rax
movq 0x30(%rax), %rcx
movq -0x28(%rbp), %rax
xorq 0x68(%rax), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x70(%rax)
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rcx
movq -0x28(%rbp), %rax
xorq 0x70(%rax), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x78(%rax)
movl -0x20(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x20(%rbp)
movq -0x28(%rbp), %rax
addq $0x40, %rax
movq %rax, -0x28(%rbp)
jmp 0x1603
jmp 0x1802
jmp 0x1802
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
popq %rbp
retq
nop