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

#if !defined(AES_ROM_TABLES)
    if( aes_init_done == 0 )
    {
        aes_gen_tables();
        aes_init_done = 1;
    }
#endif

    switch( keysize )
    {
        case 128: ctx->nr = 10; break;
        case 192: ctx->nr = 12; break;
        case 256: ctx->nr = 14; break;
        default : return( 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 0xa3a6
jmp 0xa38e
movl -0x2c(%rbp), %eax
subl $0xc0, %eax
je 0xa3b2
jmp 0xa39a
movl -0x2c(%rbp), %eax
subl $0x100, %eax            # imm = 0x100
je 0xa3be
jmp 0xa3ca
movq -0x10(%rbp), %rax
movl $0xa, (%rax)
jmp 0xa3d6
movq -0x10(%rbp), %rax
movl $0xc, (%rax)
jmp 0xa3d6
movq -0x10(%rbp), %rax
movl $0xe, (%rax)
jmp 0xa3d6
movl $0xfffff800, -0x4(%rbp) # imm = 0xFFFFF800
jmp 0xa92b
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
sarl $0x5, %ecx
cmpl %ecx, %eax
jge 0xa47c
movq -0x18(%rbp), %rax
movl -0x20(%rbp), %ecx
shll $0x2, %ecx
movslq %ecx, %rcx
movzbl (%rax,%rcx), %eax
movl %eax, %edx
movq -0x18(%rbp), %rax
movl -0x20(%rbp), %ecx
shll $0x2, %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movzbl (%rax,%rcx), %eax
shlq $0x8, %rax
orq %rax, %rdx
movq -0x18(%rbp), %rax
movl -0x20(%rbp), %ecx
shll $0x2, %ecx
addl $0x2, %ecx
movslq %ecx, %rcx
movzbl (%rax,%rcx), %eax
shlq $0x10, %rax
orq %rax, %rdx
movq -0x18(%rbp), %rax
movl -0x20(%rbp), %ecx
shll $0x2, %ecx
addl $0x3, %ecx
movslq %ecx, %rcx
movzbl (%rax,%rcx), %eax
shlq $0x18, %rax
orq %rax, %rdx
movq -0x28(%rbp), %rax
movslq -0x20(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movl -0x20(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x20(%rbp)
jmp 0xa3f1
movq -0x10(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x30(%rbp)
subl $0xa, %eax
je 0xa4ab
jmp 0xa48c
movl -0x30(%rbp), %eax
subl $0xc, %eax
je 0xa5cd
jmp 0xa49a
movl -0x30(%rbp), %eax
subl $0xe, %eax
je 0xa71f
jmp 0xa922
movl $0x0, -0x20(%rbp)
cmpl $0xa, -0x20(%rbp)
jge 0xa5c8
movq -0x28(%rbp), %rax
movq (%rax), %rcx
movslq -0x20(%rbp), %rdx
leaq 0x3172(%rip), %rax      # 0xd640
xorq (%rax,%rdx,8), %rcx
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rdx
shrq $0x8, %rdx
andq $0xff, %rdx
leaq 0x31a4(%rip), %rax      # 0xd690
movzbl (%rax,%rdx), %eax
xorq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rdx
shrq $0x10, %rdx
andq $0xff, %rdx
leaq 0x3183(%rip), %rax      # 0xd690
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 0x315e(%rip), %rax      # 0xd690
movzbl (%rax,%rdx), %eax
shlq $0x10, %rax
xorq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rdx
andq $0xff, %rdx
leaq 0x313d(%rip), %rax      # 0xd690
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 0xa4b2
jmp 0xa924
movl $0x0, -0x20(%rbp)
cmpl $0x8, -0x20(%rbp)
jge 0xa71a
movq -0x28(%rbp), %rax
movq (%rax), %rcx
movslq -0x20(%rbp), %rdx
leaq 0x3050(%rip), %rax      # 0xd640
xorq (%rax,%rdx,8), %rcx
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rdx
shrq $0x8, %rdx
andq $0xff, %rdx
leaq 0x3082(%rip), %rax      # 0xd690
movzbl (%rax,%rdx), %eax
xorq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rdx
shrq $0x10, %rdx
andq $0xff, %rdx
leaq 0x3061(%rip), %rax      # 0xd690
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 0x303c(%rip), %rax      # 0xd690
movzbl (%rax,%rdx), %eax
shlq $0x10, %rax
xorq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rdx
andq $0xff, %rdx
leaq 0x301b(%rip), %rax      # 0xd690
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 0xa5d4
jmp 0xa924
movl $0x0, -0x20(%rbp)
cmpl $0x7, -0x20(%rbp)
jge 0xa920
movq -0x28(%rbp), %rax
movq (%rax), %rcx
movslq -0x20(%rbp), %rdx
leaq 0x2efe(%rip), %rax      # 0xd640
xorq (%rax,%rdx,8), %rcx
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rdx
shrq $0x8, %rdx
andq $0xff, %rdx
leaq 0x2f30(%rip), %rax      # 0xd690
movzbl (%rax,%rdx), %eax
xorq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rdx
shrq $0x10, %rdx
andq $0xff, %rdx
leaq 0x2f0f(%rip), %rax      # 0xd690
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 0x2eea(%rip), %rax      # 0xd690
movzbl (%rax,%rdx), %eax
shlq $0x10, %rax
xorq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rdx
andq $0xff, %rdx
leaq 0x2ec9(%rip), %rax      # 0xd690
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 0x2e50(%rip), %rax      # 0xd690
movzbl (%rax,%rdx), %eax
xorq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0x58(%rax), %rdx
shrq $0x8, %rdx
andq $0xff, %rdx
leaq 0x2e2f(%rip), %rax      # 0xd690
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 0x2e0a(%rip), %rax      # 0xd690
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 0x2de5(%rip), %rax      # 0xd690
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 0xa726
jmp 0xa924
jmp 0xa924
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
popq %rbp
retq