### x86_64 Assembly: AVX2 Prologue Setup Source: https://github.com/aws/aws-lc-rs/blob/main/builder/prebuilt-nasm/aesni-sha256-x86_64-disasm.txt This section demonstrates the initial setup for an AVX2 routine, including zeroing registers and loading initial data. ```assembly L$prologue_avx2: 0000000000002488: C5 FC 77 vzeroall 000000000000248B: 49 89 FD mov r13,rdi 000000000000248E: C4 63 81 22 FE 01 vpinsrq xmm15,xmm15,rsi,1 0000000000002494: 48 8D B9 80 00 00 lea rdi,[rcx+80h] 00 000000000000249B: 4C 8D 25 20 02 00 lea r12,[.rdata+220h] 00 00000000000024A2: 44 8B 77 70 mov r14d,dword ptr [rdi+70h] 00000000000024A6: 4D 89 CF mov r15,r9 00000000000024A9: 4C 89 D6 mov rsi,r10 00000000000024AC: C4 41 7A 6F 00 vmovdqu xmm8,xmmword ptr [r8] 00000000000024B1: 4D 8D 76 F7 lea r14,[r14-9] 00000000000024B5: C4 01 79 6F 34 F4 vmovdqa xmm14,xmmword ptr [r12+r14*8] 00000000000024BB: C4 01 79 6F 6C F4 vmovdqa xmm13,xmmword ptr [r12+r14*8+10h] 10 00000000000024C2: C4 01 79 6F 64 F4 vmovdqa xmm12,xmmword ptr [r12+r14*8+20h] 20 00000000000024C9: 49 83 ED C0 sub r13,0FFFFFFFFFFFFFFC0h 00000000000024CD: 41 8B 07 mov eax,dword ptr [r15] 00000000000024D0: 4E 8D 24 2E lea r12,[rsi+r13] 00000000000024D4: 41 8B 5F 04 mov ebx,dword ptr [r15+4] 00000000000024D8: 49 39 D5 cmp r13,rdx 00000000000024DB: 41 8B 4F 08 mov ecx,dword ptr [r15+8] 00000000000024DF: 4C 0F 44 E4 cmove r12,rsp 00000000000024E3: 41 8B 57 0C mov edx,dword ptr [r15+0Ch] 00000000000024E7: 45 8B 47 10 mov r8d,dword ptr [r15+10h] 00000000000024EB: 45 8B 4F 14 mov r9d,dword ptr [r15+14h] 00000000000024EF: 45 8B 57 18 mov r10d,dword ptr [r15+18h] 00000000000024F3: 45 8B 5F 1C mov r11d,dword ptr [r15+1Ch] 00000000000024F7: C5 7A 6F 57 80 vmovdqu xmm10,xmmword ptr [rdi-80h] 00000000000024FC: E9 0F 00 00 00 jmp L$oop_avx2 0000000000002501: 90 nop 0000000000002502: 90 nop 0000000000002503: 90 nop 0000000000002504: 90 nop 0000000000002505: 90 nop 0000000000002506: 90 nop 0000000000002507: 90 nop 0000000000002508: 90 nop 0000000000002509: 90 nop 000000000000250A: 90 nop 000000000000250B: 90 nop 000000000000250C: 90 nop 000000000000250D: 90 nop 000000000000250E: 90 nop 000000000000250F: 90 nop ``` -------------------------------- ### P-256 Point Addition Entry and Setup Source: https://github.com/aws/aws-lc-rs/blob/main/builder/prebuilt-nasm/p256-x86_64-asm-disasm.txt This snippet shows the entry point and initial setup for the P-256 point addition operation. It saves registers and prepares the stack. ```assembly aws_lc_0_41_0_ecp_nistz256_point_add: 0000000000002220: 48 89 7C 24 08 mov qword ptr [rsp+8],rdi 0000000000002225: 48 89 74 24 10 mov qword ptr [rsp+10h],rsi 000000000000222A: 48 89 E0 mov rax,rsp L$SEH_begin_ecp_nistz256_point_add: 000000000000222D: 48 89 CF mov rdi,rcx 0000000000002230: 48 89 D6 mov rsi,rdx 0000000000002233: 4C 89 C2 mov rdx,r8 0000000000002236: 48 8D 0D 00 00 00 lea rcx,[aws_lc_0_41_0_OPENSSL_ia32cap_P] 00 000000000000223D: 48 8B 49 08 mov rcx,qword ptr [rcx+8] 0000000000002241: 81 E1 00 01 08 00 and ecx,80100h 0000000000002247: 81 F9 00 01 08 00 cmp ecx,80100h 000000000000224D: 0F 84 C3 11 00 00 je L$point_addx 0000000000002253: 55 push rbp 0000000000002254: 53 push rbx 0000000000002255: 41 54 push r12 0000000000002257: 41 55 push r13 0000000000002259: 41 56 push r14 000000000000225B: 41 57 push r15 000000000000225D: 48 81 EC 48 02 00 sub rsp,248h 00 L$point_addq_body: 0000000000002264: F3 0F 6F 06 movdqu xmm0,xmmword ptr [rsi] 0000000000002268: F3 0F 6F 4E 10 movdqu xmm1,xmmword ptr [rsi+10h] 000000000000226D: F3 0F 6F 56 20 movdqu xmm2,xmmword ptr [rsi+20h] 0000000000002272: F3 0F 6F 5E 30 movdqu xmm3,xmmword ptr [rsi+30h] 0000000000002277: F3 0F 6F 66 40 movdqu xmm4,xmmword ptr [rsi+40h] 000000000000227C: F3 0F 6F 6E 50 movdqu xmm5,xmmword ptr [rsi+50h] 0000000000002281: 48 89 F3 mov rbx,rsi 0000000000002284: 48 89 D6 mov rsi,rdx ``` -------------------------------- ### x86_64 Mont5 Disassembly - Initial Setup Source: https://github.com/aws/aws-lc-rs/blob/main/builder/prebuilt-nasm/x86_64-mont5-disasm.txt This snippet shows the initial setup instructions for the Mont5 algorithm, including loading values and preparing for the main loop. ```assembly 0000000000002D77: 4C 13 6F 28 adc r13,qword ptr [rdi+28h] 0000000000002D7B: 4C 13 77 30 adc r14,qword ptr [rdi+30h] 0000000000002D7F: 4C 13 7F 38 adc r15,qword ptr [rdi+38h] 0000000000002D83: 48 8D 7F 40 lea rdi,[rdi+40h] 0000000000002D87: 48 19 C0 sbb rax,rax 0000000000002D8A: 48 31 F6 xor rsi,rsi 0000000000002D8D: 48 89 44 24 18 mov qword ptr [rsp+18h],rax 0000000000002D92: E9 09 00 00 00 jmp L$sqrx8x_tail ``` -------------------------------- ### x86_64 __bn_sqr8x_reduction Setup Source: https://github.com/aws/aws-lc-rs/blob/main/builder/prebuilt-nasm/x86_64-mont5-disasm.txt Initial setup instructions for the '__bn_sqr8x_reduction' function. This part prepares registers and memory locations before entering the main reduction loop. ```assembly __bn_sqr8x_reduction: 00000000000016F9: 48 31 C0 xor rax,rax 00000000000016FC: 49 8D 0C 29 lea rcx,[r9+rbp] 0000000000001700: 4A 8D 54 4C 38 lea rdx,[rsp+r9*2+38h] 0000000000001705: 48 89 4C 24 08 mov qword ptr [rsp+8],rcx 000000000000170A: 4A 8D 7C 0C 38 lea rdi,[rsp+r9+38h] 000000000000170F: 48 89 54 24 10 mov qword ptr [rsp+10h],rdx 0000000000001714: 49 F7 D9 neg r9 0000000000001717: E9 04 00 00 00 jmp L$8x_reduction_loop 000000000000171C: 90 nop 000000000000171D: 90 nop 000000000000171E: 90 nop 000000000000171F: 90 nop ``` -------------------------------- ### VPAES x86-64 NASM Disassembly - Initial Setup Source: https://github.com/aws/aws-lc-rs/blob/main/builder/prebuilt-nasm/vpaes-x86_64-disasm.txt This snippet shows the initial setup and setup for the VPAES decryption loop. It involves loading data, performing bitwise operations, and setting up registers for the main loop. ```nasm 0000000000000425: 66 0F 6F 05 60 02 movdqa xmm0,xmmword ptr [.rdata+260h] 00 00 000000000000042D: 49 83 F3 30 xor r11,30h 0000000000000431: 4C 8D 15 90 02 00 lea r10,[.rdata+290h] 00 0000000000000438: 66 0F 38 00 C1 pshufb xmm0,xmm1 000000000000043D: 49 83 E3 30 and r11,30h 0000000000000441: 66 0F EF D5 pxor xmm2,xmm5 0000000000000445: 66 0F 6F 2D E0 00 movdqa xmm5,xmmword ptr [.rdata+0E0h] 00 00 000000000000044D: 66 0F EF C2 pxor xmm0,xmm2 0000000000000451: 49 83 C1 10 add r9,10h 0000000000000455: 4D 01 D3 add r11,r10 0000000000000458: E9 97 00 00 00 jmp L$dec_entry 000000000000045D: 90 nop 000000000000045E: 90 nop 000000000000045F: 90 nop ``` -------------------------------- ### AES Initialization and Setup Source: https://github.com/aws/aws-lc-rs/blob/main/builder/prebuilt-nasm/aesni-x86_64-disasm.txt This section details the setup for AES operations, including stack frame management and saving XMM registers. It prepares the environment before entering the main encryption/decryption loop. ```assembly 0000000000000DE0: 4C 8D 1C 24 lea r11,[rsp] 0000000000000DE4: 55 push rbp 0000000000000DE5: 48 81 EC 20 01 00 sub rsp,120h 00 0000000000000DEC: 48 83 E4 F0 and rsp,0FFFFFFFFFFFFFFF0h 0000000000000DF0: 41 0F 29 B3 58 FF movaps xmmword ptr [r11-0A8h],xmm6 FF FF 0000000000000DF8: 41 0F 29 BB 68 FF movaps xmmword ptr [r11-98h],xmm7 FF FF 0000000000000E00: 45 0F 29 83 78 FF movaps xmmword ptr [r11-88h],xmm8 FF FF 0000000000000E08: 45 0F 29 4B 88 movaps xmmword ptr [r11-78h],xmm9 0000000000000E0D: 45 0F 29 53 98 movaps xmmword ptr [r11-68h],xmm10 0000000000000E12: 45 0F 29 5B A8 movaps xmmword ptr [r11-58h],xmm11 0000000000000E17: 45 0F 29 63 B8 movaps xmmword ptr [r11-48h],xmm12 0000000000000E1C: 45 0F 29 6B C8 movaps xmmword ptr [r11-38h],xmm13 0000000000000E21: 45 0F 29 73 D8 movaps xmmword ptr [r11-28h],xmm14 0000000000000E26: 45 0F 29 7B E8 movaps xmmword ptr [r11-18h],xmm15 ``` -------------------------------- ### P-256 Montgomery Square Setup (x86_64 Assembly) Source: https://github.com/aws/aws-lc-rs/blob/main/builder/prebuilt-nasm/p256-x86_64-asm-disasm.txt This snippet shows the initial setup instructions for the P-256 Montgomery square operation on x86_64. It involves saving registers to the stack. ```assembly 0000000000001140: 48 89 7C 24 08 mov qword ptr [rsp+8],rdi 0000000000001145: 48 89 74 24 10 mov qword ptr [rsp+10h],rsi 000000000000114A: 48 89 E0 mov rax,rsp ``` -------------------------------- ### AES-NI XTS Encryption Loop Setup Source: https://github.com/aws/aws-lc-rs/blob/main/builder/prebuilt-nasm/aesni-x86_64-disasm.txt Initializes registers and performs setup for the XTS encryption loop, handling different block counts. ```assembly 0000000000001ABC: 0F 11 66 C0 movups xmmword ptr [rsi-40h],xmm4 0000000000001AC0: 0F 11 6E D0 movups xmmword ptr [rsi-30h],xmm5 0000000000001AC4: 0F 11 76 E0 movups xmmword ptr [rsi-20h],xmm6 0000000000001AC8: 0F 11 7E F0 movups xmmword ptr [rsi-10h],xmm7 0000000000001ACC: 48 83 EA 60 sub rdx,60h 0000000000001AD0: 0F 83 CA FC FF FF jae L$xts_enc_grandloop 0000000000001AD6: B8 70 00 00 00 mov eax,70h 0000000000001ADB: 44 29 D0 sub eax,r10d 0000000000001ADE: 48 89 E9 mov rcx,rbp 0000000000001AE1: C1 E8 04 shr eax,4 L$xts_enc_short: 0000000000001AE4: 41 89 C2 mov r10d,eax 0000000000001AE7: 66 44 0F EF D0 pxor xmm10,xmm0 0000000000001AEC: 48 83 C2 60 add rdx,60h 0000000000001AF0: 0F 84 FA 01 00 00 je L$xts_enc_done 0000000000001AF6: 66 44 0F EF D8 pxor xmm11,xmm0 0000000000001AFB: 48 83 FA 20 cmp rdx,20h 0000000000001AFF: 0F 82 AB 00 00 00 jb L$xts_enc_one 0000000000001B05: 66 44 0F EF E0 pxor xmm12,xmm0 0000000000001B0A: 0F 84 F0 00 00 00 je L$xts_enc_two 0000000000001B10: 66 44 0F EF E8 pxor xmm13,xmm0 0000000000001B15: 48 83 FA 40 cmp rdx,40h 0000000000001B19: 0F 82 21 01 00 00 jb L$xts_enc_three 0000000000001B1F: 66 44 0F EF F0 pxor xmm14,xmm0 0000000000001B24: 0F 84 66 01 00 00 je L$xts_enc_four 0000000000001B2A: F3 0F 6F 17 movdqu xmm2,xmmword ptr [rdi] 0000000000001B2E: F3 0F 6F 5F 10 movdqu xmm3,xmmword ptr [rdi+10h] 0000000000001B33: F3 0F 6F 67 20 movdqu xmm4,xmmword ptr [rdi+20h] 0000000000001B38: 66 41 0F EF D2 pxor xmm2,xmm10 0000000000001B3D: F3 0F 6F 6F 30 movdqu xmm5,xmmword ptr [rdi+30h] 0000000000001B42: 66 41 0F EF DB pxor xmm3,xmm11 0000000000001B47: F3 0F 6F 77 40 movdqu xmm6,xmmword ptr [rdi+40h] 0000000000001B4C: 48 8D 7F 50 lea rdi,[rdi+50h] 0000000000001B50: 66 41 0F EF E4 pxor xmm4,xmm12 0000000000001B55: 66 41 0F EF ED pxor xmm5,xmm13 0000000000001B5A: 66 41 0F EF F6 pxor xmm6,xmm14 0000000000001B5F: 66 0F EF FF pxor xmm7,xmm7 0000000000001B63: E8 18 E8 FF FF call _aesni_encrypt6 0000000000001B68: 41 0F 57 D2 xorps xmm2,xmm10 0000000000001B6C: 66 45 0F 6F D7 movdqa xmm10,xmm15 0000000000001B71: 41 0F 57 DB xorps xmm3,xmm11 0000000000001B75: 41 0F 57 E4 xorps xmm4,xmm12 0000000000001B79: F3 0F 7F 16 movdqu xmmword ptr [rsi],xmm2 0000000000001B7D: 41 0F 57 ED xorps xmm5,xmm13 0000000000001B81: F3 0F 7F 5E 10 movdqu xmmword ptr [rsi+10h],xmm3 0000000000001B86: 41 0F 57 F6 xorps xmm6,xmm14 0000000000001B8A: F3 0F 7F 66 20 movdqu xmmword ptr [rsi+20h],xmm4 0000000000001B8F: F3 0F 7F 6E 30 movdqu xmmword ptr [rsi+30h],xmm5 0000000000001B94: F3 0F 7F 76 40 movdqu xmmword ptr [rsi+40h],xmm6 0000000000001B99: 48 8D 76 50 lea rsi,[rsi+50h] 0000000000001B9D: E9 4E 01 00 00 jmp L$xts_enc_done 0000000000001BA2: 90 nop 0000000000001BA3: 90 nop 0000000000001BA4: 90 nop 0000000000001BA5: 90 nop 0000000000001BA6: 90 nop 0000000000001BA7: 90 nop 0000000000001BA8: 90 nop 0000000000001BA9: 90 nop 0000000000001BAA: 90 nop 0000000000001BAB: 90 nop 0000000000001BAC: 90 nop 0000000000001BAD: 90 nop ``` -------------------------------- ### Initial Data Movement and Loop Setup Source: https://github.com/aws/aws-lc-rs/blob/main/builder/prebuilt-nasm/chacha-x86_64-disasm.txt This snippet shows the initial setup, including moving data into XMM registers and preparing for the main loop. It also contains a jump to the main loop. ```nasm 000000000000042D: 66 0F 6F 3D 90 00 movdqa xmm7,xmmword ptr [.rdata+90h] 00 00 0000000000000435: 66 0F 7F 04 24 movdqa xmmword ptr [rsp],xmm0 000000000000043A: 66 0F 7F 4C 24 10 movdqa xmmword ptr [rsp+10h],xmm1 0000000000000440: 66 0F 7F 54 24 20 movdqa xmmword ptr [rsp+20h],xmm2 0000000000000446: 66 0F 7F 5C 24 30 movdqa xmmword ptr [rsp+30h],xmm3 000000000000044C: 41 B8 0A 00 00 00 mov r8d,0Ah 0000000000000452: E9 49 00 00 00 jmp L$oop_ssse3 0000000000000457: 90 nop 0000000000000458: 90 nop 0000000000000459: 90 nop 000000000000045A: 90 nop 000000000000045B: 90 nop 000000000000045C: 90 nop 000000000000045D: 90 nop 000000000000045E: 90 nop 000000000000045F: 90 nop ``` -------------------------------- ### x86-64 NASM: AVX GCM Initialization - Loop Setup Source: https://github.com/aws/aws-lc-rs/blob/main/builder/prebuilt-nasm/ghash-x86_64-disasm.txt This snippet sets up a loop for GCM initialization using AVX instructions. It involves a jump instruction to the loop start and some NOPs. ```nasm 41 BA 04 00 00 00 mov r10d,4 E9 90 00 00 00 jmp L$init_start_avx 90 nop 90 nop 90 nop 90 nop 90 nop 90 nop 90 nop 90 nop 90 nop 90 nop ``` -------------------------------- ### Setup Docker Buildx on Amazon Linux 2 Source: https://github.com/aws/aws-lc-rs/blob/main/docker/README.md These steps are required for Amazon Linux 2 to install and configure Docker Buildx for cross-platform builds. A symlink is necessary due to a packaging bug. ```bash $ sudo ln -s /usr/libexec/docker/cli-plugins/buildx /usr/libexec/docker/cli-plugins/docker-buildx ``` ```bash $ sudo systemctl restart docker ``` ```bash $ docker buildx install ``` ```bash $ sudo yum install -y qemu-system-aarch64 qemu-system-x86 qemu-user-binfmt ``` ```bash $ docker buildx create --name=container --driver=docker-container --use ``` ```bash $ docker run --privileged --rm tonistiigi/binfmt --install all ``` -------------------------------- ### AES-128-GCM-SIV Encryption Function - Main Loop Start Source: https://github.com/aws/aws-lc-rs/blob/main/builder/prebuilt-nasm/aes128gcmsiv-x86_64-disasm.txt This snippet details the beginning of the main encryption loop for AES-128-GCM-SIV. It includes register setup, initial data loading (`vmovdqa`, `vpor`), and preparation for the loop's XOR operations. ```assembly L$128_enc_msg_x4_start: 0000000000000AF3: 41 54 push r12 0000000000000AF5: 41 55 push r13 0000000000000AF7: 49 C1 E8 04 shr r8,4 0000000000000AFB: 4D 89 C2 mov r10,r8 0000000000000AFE: 49 C1 E2 3E shl r10,3Eh 0000000000000B02: 49 C1 EA 3E shr r10,3Eh 0000000000000B06: C5 79 6F 3A vmovdqa xmm15,xmmword ptr [rdx] 0000000000000B0A: C5 01 EB 3D 80 00 vpor xmm15,xmm15,xmmword ptr [.rdata+80h] 00 00 0000000000000B12: C5 FA 6F 25 30 00 vmovdqu xmm4,xmmword ptr [.rdata+30h] 00 00 0000000000000B1A: C4 C1 79 6F C7 vmovdqa xmm0,xmm15 0000000000000B1F: C5 81 FE 0D 00 00 vpaddd xmm1,xmm15,xmmword ptr [.rdata] 00 00 0000000000000B27: C5 81 FE 15 10 00 vpaddd xmm2,xmm15,xmmword ptr [.rdata+10h] 00 00 0000000000000B2F: C5 81 FE 1D 20 00 vpaddd xmm3,xmm15,xmmword ptr [.rdata+20h] 00 00 0000000000000B37: 49 C1 E8 02 shr r8,2 0000000000000B3B: 0F 84 7B 01 00 00 je L$128_enc_msg_x4_check_remainder 0000000000000B41: 48 83 EE 40 sub rsi,40h 0000000000000B45: 48 83 EF 40 sub rdi,40h ``` -------------------------------- ### Install CMake and Go Source: https://github.com/aws/aws-lc-rs/blob/main/book/src/requirements/linux.md Installs CMake and Go, which are required for FIPS builds. ```shell sudo dnf install -y cmake golang ``` ```shell sudo apt-get install -y cmake golang ``` -------------------------------- ### x86_64 Assembly: Initial Setup for Reduction Loop Source: https://github.com/aws/aws-lc-rs/blob/main/builder/prebuilt-nasm/x86_64-mont5-disasm.txt This snippet shows the initial setup instructions before entering the reduction loop. It involves moving data to the stack and preparing registers for subsequent operations. ```assembly 0000000000002C1E: 48 8B 54 24 38 mov rdx,qword ptr [rsp+38h] 0000000000002C23: 4A 8D 4C 0D C0 lea rcx,[rbp+r9-40h] 0000000000002C28: 48 89 4C 24 08 mov qword ptr [rsp+8],rcx 0000000000002C2D: 48 89 7C 24 10 mov qword ptr [rsp+10h],rdi 0000000000002C32: 48 8D 7C 24 38 lea rdi,[rsp+38h] 0000000000002C37: E9 04 00 00 00 jmp L$sqrx8x_reduction_loop 0000000000002C3C: 90 nop 0000000000002C3D: 90 nop 0000000000002C3E: 90 nop 0000000000002C3F: 90 nop ``` -------------------------------- ### bn_sqr8x Final Stack Alignment and Setup Source: https://github.com/aws/aws-lc-rs/blob/main/builder/prebuilt-nasm/x86_64-mont-disasm.txt Completes the stack frame setup by aligning the stack pointer and calculating the final stack size. This is the common exit point for stack setup logic. ```assembly L$sqr8x_sp_done: 000000000000091D: 48 83 E5 C0 and rbp,0FFFFFFFFFFFFFFC0h 0000000000000921: 49 89 E3 mov r11,rsp 0000000000000924: 49 29 EB sub r11,rbp 0000000000000927: 49 81 E3 00 F0 FF and r11,0FFFFFFFFFFFFF000h FF 000000000000092E: 49 8D 24 2B lea rsp,[r11+rbp] 0000000000000932: 4C 8B 14 24 mov r10,qword ptr [rsp] 0000000000000936: 48 39 EC cmp rsp,rbp 0000000000000939: 0F 87 11 00 00 00 ja L$sqr8x_page_walk ``` -------------------------------- ### Install Docker Buildx on macOS Source: https://github.com/aws/aws-lc-rs/blob/main/docker/README.md Run this command on macOS to install Docker Buildx. ```bash $ docker buildx install ``` -------------------------------- ### Initial Data Setup and XOR Operations Source: https://github.com/aws/aws-lc-rs/blob/main/builder/prebuilt-nasm/aesni-x86_64-disasm.txt This snippet shows the initial setup of registers and memory, including XOR operations with a base pointer and byte swapping. It prepares data for subsequent AES operations. ```assembly 0000000000000EA3: 31 E8 xor eax,ebp 0000000000000EA5: 41 0F CA bswap r10d 0000000000000EA8: 66 0F 3A 22 E8 03 pinsrd xmm5,eax,3 0000000000000EAE: 41 31 EA xor r10d,ebp 0000000000000EB1: 66 0F 7F 6C 24 30 movdqa xmmword ptr [rsp+30h],xmm5 0000000000000EB7: 4D 8D 48 05 lea r9,[r8+5] 0000000000000EBB: 44 89 54 24 4C mov dword ptr [rsp+4Ch],r10d 0000000000000EC0: 41 0F C9 bswap r9d 0000000000000EC3: 4D 8D 50 06 lea r10,[r8+6] 0000000000000EC7: 8B 81 F0 00 00 00 mov eax,dword ptr [rcx+0F0h] 0000000000000ECD: 41 31 E9 xor r9d,ebp 0000000000000ED0: 41 0F CA bswap r10d 0000000000000ED3: 44 89 4C 24 5C mov dword ptr [rsp+5Ch],r9d 0000000000000ED8: 41 31 EA xor r10d,ebp 0000000000000EDB: 4D 8D 48 07 lea r9,[r8+7] 0000000000000EDF: 44 89 54 24 6C mov dword ptr [rsp+6Ch],r10d 0000000000000EE4: 41 0F C9 bswap r9d 0000000000000EE7: 41 31 E9 xor r9d,ebp 0000000000000EEA: 44 89 4C 24 7C mov dword ptr [rsp+7Ch],r9d 0000000000000EEF: 0F 10 49 10 movups xmm1,xmmword ptr [rcx+10h] 0000000000000EF3: 66 0F 6F 74 24 40 movdqa xmm6,xmmword ptr [rsp+40h] 0000000000000EF9: 66 0F 6F 7C 24 50 movdqa xmm7,xmmword ptr [rsp+50h] ``` -------------------------------- ### Install libclang or LLVM Source: https://github.com/aws/aws-lc-rs/blob/main/book/src/requirements/linux.md Installs the necessary clang libraries for bindgen on supported platforms. ```shell sudo dnf install -y clang-libs ``` ```shell sudo apt-get install -y libclang1 ``` -------------------------------- ### P256 BEEU x86-64 Assembly - Initial Setup and Loop Entry Source: https://github.com/aws/aws-lc-rs/blob/main/builder/prebuilt-nasm/p256_beeu-x86_64-asm-disasm.txt This snippet shows the initial setup and the entry point into the main reduction loop of the P256 BEEU function. It involves loading initial values and preparing for the iterative subtraction and conditional moves. ```assembly 0000000000000266: 48 8B 5C 24 10 mov rbx,qword ptr [rsp+10h] 000000000000026B: 48 83 EB 01 sub rbx,1 000000000000026F: 48 0B 5C 24 18 or rbx,qword ptr [rsp+18h] 0000000000000274: 48 0B 5C 24 20 or rbx,qword ptr [rsp+20h] 0000000000000279: 48 0B 5C 24 28 or rbx,qword ptr [rsp+28h] 000000000000027E: 0F 85 82 00 00 00 jne L$beeu_err 0000000000000284: 4C 8B 02 mov r8,qword ptr [rdx] 0000000000000287: 4C 8B 4A 08 mov r9,qword ptr [rdx+8] 000000000000028B: 4C 8B 52 10 mov r10,qword ptr [rdx+10h] 000000000000028F: 4C 8B 5A 18 mov r11,qword ptr [rdx+18h] 0000000000000293: 48 31 FF xor rdi,rdi L$beeu_reduction_loop: 0000000000000296: 4C 89 64 24 10 mov qword ptr [rsp+10h],r12 000000000000029B: 4C 89 6C 24 18 mov qword ptr [rsp+18h],r13 00000000000002A0: 4C 89 74 24 20 mov qword ptr [rsp+20h],r14 00000000000002A5: 4C 89 7C 24 28 mov qword ptr [rsp+28h],r15 00000000000002AA: 48 89 6C 24 30 mov qword ptr [rsp+30h],rbp ``` -------------------------------- ### Install Development Tools on Amazon Linux Source: https://github.com/aws/aws-lc-rs/blob/main/book/src/requirements/linux.md Installs the standard development toolchain on AL2023. ```shell sudo dnf groupinstall -y "Development Tools" ``` -------------------------------- ### AVX2 Stack Frame Setup and Return Source: https://github.com/aws/aws-lc-rs/blob/main/builder/prebuilt-nasm/rsaz-avx2-disasm.txt Demonstrates setting up the stack frame and returning from a function using LEA and REP RET instructions. ```assembly 0000000000001E72: 49 8D 23 lea rsp,[r11] 0000000000001E75: F3 C3 rep ret ``` -------------------------------- ### Install Build Essentials on Ubuntu Source: https://github.com/aws/aws-lc-rs/blob/main/book/src/requirements/linux.md Installs the standard build-essential package on Ubuntu 22.04 LTS. ```shell sudo apt-get install -y build-essential ``` -------------------------------- ### RSAZ Loop Setup and Initial Operations Source: https://github.com/aws/aws-lc-rs/blob/main/builder/prebuilt-nasm/rsaz-4k-avx512-disasm.txt This snippet shows the setup for the main loop, including XORing registers, setting up loop counters and constants, and loading initial data. It prepares for the core RSAZ calculations. ```assembly 0000000000000D21: 45 31 C9 xor r9d,r9d 0000000000000D24: 45 31 FF xor r15d,r15d 0000000000000D27: 49 89 D3 mov r11,rdx 0000000000000D2A: 48 B8 FF FF FF FF mov rax,0FFFFFFFFFFFFFh FF FF 0F 00 0000000000000D34: BB 28 00 00 00 mov ebx,28h 0000000000000D39: 90 nop 0000000000000D3A: 90 nop 0000000000000D3B: 90 nop 0000000000000D3C: 90 nop 0000000000000D3D: 90 nop 0000000000000D3E: 90 nop 0000000000000D3F: 90 nop L$loop40: ``` -------------------------------- ### Install Go via Homebrew Source: https://github.com/aws/aws-lc-rs/blob/main/book/src/requirements/apple.md Installs the Go programming language using the Homebrew package manager. ```shell brew install go ``` -------------------------------- ### Install Go via MacPorts Source: https://github.com/aws/aws-lc-rs/blob/main/book/src/requirements/apple.md Installs the Go programming language using the MacPorts package manager. ```shell sudo port install go ``` -------------------------------- ### Initial Data Preparation and XOR Operations Source: https://github.com/aws/aws-lc-rs/blob/main/builder/prebuilt-nasm/aesni-xts-avx512-disasm.txt This snippet shows the initial setup and XOR operations on registers and memory locations, preparing data for subsequent AES operations. It includes conditional moves and memory stores. ```assembly 0000000000005F07: 48 31 F6 xor rsi,rsi 0000000000005F0A: 48 D1 E0 shl rax,1 0000000000005F0D: 48 11 DB adc rbx,rbx 0000000000005F10: 48 0F 42 F7 cmovb rsi,rdi 0000000000005F14: 48 31 F0 xor rax,rsi 0000000000005F17: 48 89 44 24 20 mov qword ptr [rsp+20h],rax 0000000000005F1C: 48 89 5C 24 28 mov qword ptr [rsp+28h],rbx 0000000000005F21: C5 79 6F 5C 24 20 vmovdqa xmm11,xmmword ptr [rsp+20h] 0000000000005F27: C5 FA 6F 59 20 vmovdqu xmm3,xmmword ptr [rcx+20h] ``` ```assembly 0000000000005F2C: 48 31 F6 xor rsi,rsi 0000000000005F2F: 48 D1 E0 shl rax,1 0000000000005F32: 48 11 DB adc rbx,rbx 0000000000005F35: 48 0F 42 F7 cmovb rsi,rdi 0000000000005F39: 48 31 F0 xor rax,rsi 0000000000005F3C: 48 89 44 24 30 mov qword ptr [rsp+30h],rax 0000000000005F41: 48 89 5C 24 38 mov qword ptr [rsp+38h],rbx 0000000000005F46: C5 79 6F 64 24 30 vmovdqa xmm12,xmmword ptr [rsp+30h] 0000000000005F4C: C5 FA 6F 61 30 vmovdqu xmm4,xmmword ptr [rcx+30h] ``` ```assembly 0000000000005F51: 48 83 C1 40 add rcx,40h 0000000000005F55: 49 83 E0 0F and r8,0Fh 0000000000005F59: 0F 84 55 02 00 00 je L$_done_4_amivrujEyduiFoi ```