choice of parameters) when they are needed.
+++ /dev/null
- ; Don't even think of reading this code
- ; It was automatically generated by bf-586.pl
- ; Which is a perl program used to generate the x86 assember for
- ; any of elf, a.out, BSDI,Win32, or Solaris
- ; eric <eay@cryptsoft.com>
- ;
- TITLE bf-586.asm
- .486
-.model FLAT
-_TEXT SEGMENT
-PUBLIC _BF_encrypt
-
-_BF_encrypt PROC NEAR
- ;
- push ebp
- push ebx
- mov ebx, DWORD PTR 12[esp]
- mov ebp, DWORD PTR 16[esp]
- push esi
- push edi
- ; Load the 2 words
- mov edi, DWORD PTR [ebx]
- mov esi, DWORD PTR 4[ebx]
- xor eax, eax
- mov ebx, DWORD PTR [ebp]
- xor ecx, ecx
- xor edi, ebx
- ;
- ; Round 0
- mov edx, DWORD PTR 4[ebp]
- mov ebx, edi
- xor esi, edx
- shr ebx, 16
- mov edx, edi
- mov al, bh
- and ebx, 255
- mov cl, dh
- and edx, 255
- mov eax, DWORD PTR 72[eax*4+ebp]
- mov ebx, DWORD PTR 1096[ebx*4+ebp]
- add ebx, eax
- mov eax, DWORD PTR 2120[ecx*4+ebp]
- xor ebx, eax
- mov edx, DWORD PTR 3144[edx*4+ebp]
- add ebx, edx
- xor eax, eax
- xor esi, ebx
- ;
- ; Round 1
- mov edx, DWORD PTR 8[ebp]
- mov ebx, esi
- xor edi, edx
- shr ebx, 16
- mov edx, esi
- mov al, bh
- and ebx, 255
- mov cl, dh
- and edx, 255
- mov eax, DWORD PTR 72[eax*4+ebp]
- mov ebx, DWORD PTR 1096[ebx*4+ebp]
- add ebx, eax
- mov eax, DWORD PTR 2120[ecx*4+ebp]
- xor ebx, eax
- mov edx, DWORD PTR 3144[edx*4+ebp]
- add ebx, edx
- xor eax, eax
- xor edi, ebx
- ;
- ; Round 2
- mov edx, DWORD PTR 12[ebp]
- mov ebx, edi
- xor esi, edx
- shr ebx, 16
- mov edx, edi
- mov al, bh
- and ebx, 255
- mov cl, dh
- and edx, 255
- mov eax, DWORD PTR 72[eax*4+ebp]
- mov ebx, DWORD PTR 1096[ebx*4+ebp]
- add ebx, eax
- mov eax, DWORD PTR 2120[ecx*4+ebp]
- xor ebx, eax
- mov edx, DWORD PTR 3144[edx*4+ebp]
- add ebx, edx
- xor eax, eax
- xor esi, ebx
- ;
- ; Round 3
- mov edx, DWORD PTR 16[ebp]
- mov ebx, esi
- xor edi, edx
- shr ebx, 16
- mov edx, esi
- mov al, bh
- and ebx, 255
- mov cl, dh
- and edx, 255
- mov eax, DWORD PTR 72[eax*4+ebp]
- mov ebx, DWORD PTR 1096[ebx*4+ebp]
- add ebx, eax
- mov eax, DWORD PTR 2120[ecx*4+ebp]
- xor ebx, eax
- mov edx, DWORD PTR 3144[edx*4+ebp]
- add ebx, edx
- xor eax, eax
- xor edi, ebx
- ;
- ; Round 4
- mov edx, DWORD PTR 20[ebp]
- mov ebx, edi
- xor esi, edx
- shr ebx, 16
- mov edx, edi
- mov al, bh
- and ebx, 255
- mov cl, dh
- and edx, 255
- mov eax, DWORD PTR 72[eax*4+ebp]
- mov ebx, DWORD PTR 1096[ebx*4+ebp]
- add ebx, eax
- mov eax, DWORD PTR 2120[ecx*4+ebp]
- xor ebx, eax
- mov edx, DWORD PTR 3144[edx*4+ebp]
- add ebx, edx
- xor eax, eax
- xor esi, ebx
- ;
- ; Round 5
- mov edx, DWORD PTR 24[ebp]
- mov ebx, esi
- xor edi, edx
- shr ebx, 16
- mov edx, esi
- mov al, bh
- and ebx, 255
- mov cl, dh
- and edx, 255
- mov eax, DWORD PTR 72[eax*4+ebp]
- mov ebx, DWORD PTR 1096[ebx*4+ebp]
- add ebx, eax
- mov eax, DWORD PTR 2120[ecx*4+ebp]
- xor ebx, eax
- mov edx, DWORD PTR 3144[edx*4+ebp]
- add ebx, edx
- xor eax, eax
- xor edi, ebx
- ;
- ; Round 6
- mov edx, DWORD PTR 28[ebp]
- mov ebx, edi
- xor esi, edx
- shr ebx, 16
- mov edx, edi
- mov al, bh
- and ebx, 255
- mov cl, dh
- and edx, 255
- mov eax, DWORD PTR 72[eax*4+ebp]
- mov ebx, DWORD PTR 1096[ebx*4+ebp]
- add ebx, eax
- mov eax, DWORD PTR 2120[ecx*4+ebp]
- xor ebx, eax
- mov edx, DWORD PTR 3144[edx*4+ebp]
- add ebx, edx
- xor eax, eax
- xor esi, ebx
- ;
- ; Round 7
- mov edx, DWORD PTR 32[ebp]
- mov ebx, esi
- xor edi, edx
- shr ebx, 16
- mov edx, esi
- mov al, bh
- and ebx, 255
- mov cl, dh
- and edx, 255
- mov eax, DWORD PTR 72[eax*4+ebp]
- mov ebx, DWORD PTR 1096[ebx*4+ebp]
- add ebx, eax
- mov eax, DWORD PTR 2120[ecx*4+ebp]
- xor ebx, eax
- mov edx, DWORD PTR 3144[edx*4+ebp]
- add ebx, edx
- xor eax, eax
- xor edi, ebx
- ;
- ; Round 8
- mov edx, DWORD PTR 36[ebp]
- mov ebx, edi
- xor esi, edx
- shr ebx, 16
- mov edx, edi
- mov al, bh
- and ebx, 255
- mov cl, dh
- and edx, 255
- mov eax, DWORD PTR 72[eax*4+ebp]
- mov ebx, DWORD PTR 1096[ebx*4+ebp]
- add ebx, eax
- mov eax, DWORD PTR 2120[ecx*4+ebp]
- xor ebx, eax
- mov edx, DWORD PTR 3144[edx*4+ebp]
- add ebx, edx
- xor eax, eax
- xor esi, ebx
- ;
- ; Round 9
- mov edx, DWORD PTR 40[ebp]
- mov ebx, esi
- xor edi, edx
- shr ebx, 16
- mov edx, esi
- mov al, bh
- and ebx, 255
- mov cl, dh
- and edx, 255
- mov eax, DWORD PTR 72[eax*4+ebp]
- mov ebx, DWORD PTR 1096[ebx*4+ebp]
- add ebx, eax
- mov eax, DWORD PTR 2120[ecx*4+ebp]
- xor ebx, eax
- mov edx, DWORD PTR 3144[edx*4+ebp]
- add ebx, edx
- xor eax, eax
- xor edi, ebx
- ;
- ; Round 10
- mov edx, DWORD PTR 44[ebp]
- mov ebx, edi
- xor esi, edx
- shr ebx, 16
- mov edx, edi
- mov al, bh
- and ebx, 255
- mov cl, dh
- and edx, 255
- mov eax, DWORD PTR 72[eax*4+ebp]
- mov ebx, DWORD PTR 1096[ebx*4+ebp]
- add ebx, eax
- mov eax, DWORD PTR 2120[ecx*4+ebp]
- xor ebx, eax
- mov edx, DWORD PTR 3144[edx*4+ebp]
- add ebx, edx
- xor eax, eax
- xor esi, ebx
- ;
- ; Round 11
- mov edx, DWORD PTR 48[ebp]
- mov ebx, esi
- xor edi, edx
- shr ebx, 16
- mov edx, esi
- mov al, bh
- and ebx, 255
- mov cl, dh
- and edx, 255
- mov eax, DWORD PTR 72[eax*4+ebp]
- mov ebx, DWORD PTR 1096[ebx*4+ebp]
- add ebx, eax
- mov eax, DWORD PTR 2120[ecx*4+ebp]
- xor ebx, eax
- mov edx, DWORD PTR 3144[edx*4+ebp]
- add ebx, edx
- xor eax, eax
- xor edi, ebx
- ;
- ; Round 12
- mov edx, DWORD PTR 52[ebp]
- mov ebx, edi
- xor esi, edx
- shr ebx, 16
- mov edx, edi
- mov al, bh
- and ebx, 255
- mov cl, dh
- and edx, 255
- mov eax, DWORD PTR 72[eax*4+ebp]
- mov ebx, DWORD PTR 1096[ebx*4+ebp]
- add ebx, eax
- mov eax, DWORD PTR 2120[ecx*4+ebp]
- xor ebx, eax
- mov edx, DWORD PTR 3144[edx*4+ebp]
- add ebx, edx
- xor eax, eax
- xor esi, ebx
- ;
- ; Round 13
- mov edx, DWORD PTR 56[ebp]
- mov ebx, esi
- xor edi, edx
- shr ebx, 16
- mov edx, esi
- mov al, bh
- and ebx, 255
- mov cl, dh
- and edx, 255
- mov eax, DWORD PTR 72[eax*4+ebp]
- mov ebx, DWORD PTR 1096[ebx*4+ebp]
- add ebx, eax
- mov eax, DWORD PTR 2120[ecx*4+ebp]
- xor ebx, eax
- mov edx, DWORD PTR 3144[edx*4+ebp]
- add ebx, edx
- xor eax, eax
- xor edi, ebx
- ;
- ; Round 14
- mov edx, DWORD PTR 60[ebp]
- mov ebx, edi
- xor esi, edx
- shr ebx, 16
- mov edx, edi
- mov al, bh
- and ebx, 255
- mov cl, dh
- and edx, 255
- mov eax, DWORD PTR 72[eax*4+ebp]
- mov ebx, DWORD PTR 1096[ebx*4+ebp]
- add ebx, eax
- mov eax, DWORD PTR 2120[ecx*4+ebp]
- xor ebx, eax
- mov edx, DWORD PTR 3144[edx*4+ebp]
- add ebx, edx
- xor eax, eax
- xor esi, ebx
- ;
- ; Round 15
- mov edx, DWORD PTR 64[ebp]
- mov ebx, esi
- xor edi, edx
- shr ebx, 16
- mov edx, esi
- mov al, bh
- and ebx, 255
- mov cl, dh
- and edx, 255
- mov eax, DWORD PTR 72[eax*4+ebp]
- mov ebx, DWORD PTR 1096[ebx*4+ebp]
- add ebx, eax
- mov eax, DWORD PTR 2120[ecx*4+ebp]
- xor ebx, eax
- mov edx, DWORD PTR 3144[edx*4+ebp]
- add ebx, edx
- ; Load parameter 0 (16) enc=1
- mov eax, DWORD PTR 20[esp]
- xor edi, ebx
- mov edx, DWORD PTR 68[ebp]
- xor esi, edx
- mov DWORD PTR 4[eax],edi
- mov DWORD PTR [eax],esi
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_BF_encrypt ENDP
-_TEXT ENDS
-_TEXT SEGMENT
-PUBLIC _BF_decrypt
-
-_BF_decrypt PROC NEAR
- ;
- push ebp
- push ebx
- mov ebx, DWORD PTR 12[esp]
- mov ebp, DWORD PTR 16[esp]
- push esi
- push edi
- ; Load the 2 words
- mov edi, DWORD PTR [ebx]
- mov esi, DWORD PTR 4[ebx]
- xor eax, eax
- mov ebx, DWORD PTR 68[ebp]
- xor ecx, ecx
- xor edi, ebx
- ;
- ; Round 16
- mov edx, DWORD PTR 64[ebp]
- mov ebx, edi
- xor esi, edx
- shr ebx, 16
- mov edx, edi
- mov al, bh
- and ebx, 255
- mov cl, dh
- and edx, 255
- mov eax, DWORD PTR 72[eax*4+ebp]
- mov ebx, DWORD PTR 1096[ebx*4+ebp]
- add ebx, eax
- mov eax, DWORD PTR 2120[ecx*4+ebp]
- xor ebx, eax
- mov edx, DWORD PTR 3144[edx*4+ebp]
- add ebx, edx
- xor eax, eax
- xor esi, ebx
- ;
- ; Round 15
- mov edx, DWORD PTR 60[ebp]
- mov ebx, esi
- xor edi, edx
- shr ebx, 16
- mov edx, esi
- mov al, bh
- and ebx, 255
- mov cl, dh
- and edx, 255
- mov eax, DWORD PTR 72[eax*4+ebp]
- mov ebx, DWORD PTR 1096[ebx*4+ebp]
- add ebx, eax
- mov eax, DWORD PTR 2120[ecx*4+ebp]
- xor ebx, eax
- mov edx, DWORD PTR 3144[edx*4+ebp]
- add ebx, edx
- xor eax, eax
- xor edi, ebx
- ;
- ; Round 14
- mov edx, DWORD PTR 56[ebp]
- mov ebx, edi
- xor esi, edx
- shr ebx, 16
- mov edx, edi
- mov al, bh
- and ebx, 255
- mov cl, dh
- and edx, 255
- mov eax, DWORD PTR 72[eax*4+ebp]
- mov ebx, DWORD PTR 1096[ebx*4+ebp]
- add ebx, eax
- mov eax, DWORD PTR 2120[ecx*4+ebp]
- xor ebx, eax
- mov edx, DWORD PTR 3144[edx*4+ebp]
- add ebx, edx
- xor eax, eax
- xor esi, ebx
- ;
- ; Round 13
- mov edx, DWORD PTR 52[ebp]
- mov ebx, esi
- xor edi, edx
- shr ebx, 16
- mov edx, esi
- mov al, bh
- and ebx, 255
- mov cl, dh
- and edx, 255
- mov eax, DWORD PTR 72[eax*4+ebp]
- mov ebx, DWORD PTR 1096[ebx*4+ebp]
- add ebx, eax
- mov eax, DWORD PTR 2120[ecx*4+ebp]
- xor ebx, eax
- mov edx, DWORD PTR 3144[edx*4+ebp]
- add ebx, edx
- xor eax, eax
- xor edi, ebx
- ;
- ; Round 12
- mov edx, DWORD PTR 48[ebp]
- mov ebx, edi
- xor esi, edx
- shr ebx, 16
- mov edx, edi
- mov al, bh
- and ebx, 255
- mov cl, dh
- and edx, 255
- mov eax, DWORD PTR 72[eax*4+ebp]
- mov ebx, DWORD PTR 1096[ebx*4+ebp]
- add ebx, eax
- mov eax, DWORD PTR 2120[ecx*4+ebp]
- xor ebx, eax
- mov edx, DWORD PTR 3144[edx*4+ebp]
- add ebx, edx
- xor eax, eax
- xor esi, ebx
- ;
- ; Round 11
- mov edx, DWORD PTR 44[ebp]
- mov ebx, esi
- xor edi, edx
- shr ebx, 16
- mov edx, esi
- mov al, bh
- and ebx, 255
- mov cl, dh
- and edx, 255
- mov eax, DWORD PTR 72[eax*4+ebp]
- mov ebx, DWORD PTR 1096[ebx*4+ebp]
- add ebx, eax
- mov eax, DWORD PTR 2120[ecx*4+ebp]
- xor ebx, eax
- mov edx, DWORD PTR 3144[edx*4+ebp]
- add ebx, edx
- xor eax, eax
- xor edi, ebx
- ;
- ; Round 10
- mov edx, DWORD PTR 40[ebp]
- mov ebx, edi
- xor esi, edx
- shr ebx, 16
- mov edx, edi
- mov al, bh
- and ebx, 255
- mov cl, dh
- and edx, 255
- mov eax, DWORD PTR 72[eax*4+ebp]
- mov ebx, DWORD PTR 1096[ebx*4+ebp]
- add ebx, eax
- mov eax, DWORD PTR 2120[ecx*4+ebp]
- xor ebx, eax
- mov edx, DWORD PTR 3144[edx*4+ebp]
- add ebx, edx
- xor eax, eax
- xor esi, ebx
- ;
- ; Round 9
- mov edx, DWORD PTR 36[ebp]
- mov ebx, esi
- xor edi, edx
- shr ebx, 16
- mov edx, esi
- mov al, bh
- and ebx, 255
- mov cl, dh
- and edx, 255
- mov eax, DWORD PTR 72[eax*4+ebp]
- mov ebx, DWORD PTR 1096[ebx*4+ebp]
- add ebx, eax
- mov eax, DWORD PTR 2120[ecx*4+ebp]
- xor ebx, eax
- mov edx, DWORD PTR 3144[edx*4+ebp]
- add ebx, edx
- xor eax, eax
- xor edi, ebx
- ;
- ; Round 8
- mov edx, DWORD PTR 32[ebp]
- mov ebx, edi
- xor esi, edx
- shr ebx, 16
- mov edx, edi
- mov al, bh
- and ebx, 255
- mov cl, dh
- and edx, 255
- mov eax, DWORD PTR 72[eax*4+ebp]
- mov ebx, DWORD PTR 1096[ebx*4+ebp]
- add ebx, eax
- mov eax, DWORD PTR 2120[ecx*4+ebp]
- xor ebx, eax
- mov edx, DWORD PTR 3144[edx*4+ebp]
- add ebx, edx
- xor eax, eax
- xor esi, ebx
- ;
- ; Round 7
- mov edx, DWORD PTR 28[ebp]
- mov ebx, esi
- xor edi, edx
- shr ebx, 16
- mov edx, esi
- mov al, bh
- and ebx, 255
- mov cl, dh
- and edx, 255
- mov eax, DWORD PTR 72[eax*4+ebp]
- mov ebx, DWORD PTR 1096[ebx*4+ebp]
- add ebx, eax
- mov eax, DWORD PTR 2120[ecx*4+ebp]
- xor ebx, eax
- mov edx, DWORD PTR 3144[edx*4+ebp]
- add ebx, edx
- xor eax, eax
- xor edi, ebx
- ;
- ; Round 6
- mov edx, DWORD PTR 24[ebp]
- mov ebx, edi
- xor esi, edx
- shr ebx, 16
- mov edx, edi
- mov al, bh
- and ebx, 255
- mov cl, dh
- and edx, 255
- mov eax, DWORD PTR 72[eax*4+ebp]
- mov ebx, DWORD PTR 1096[ebx*4+ebp]
- add ebx, eax
- mov eax, DWORD PTR 2120[ecx*4+ebp]
- xor ebx, eax
- mov edx, DWORD PTR 3144[edx*4+ebp]
- add ebx, edx
- xor eax, eax
- xor esi, ebx
- ;
- ; Round 5
- mov edx, DWORD PTR 20[ebp]
- mov ebx, esi
- xor edi, edx
- shr ebx, 16
- mov edx, esi
- mov al, bh
- and ebx, 255
- mov cl, dh
- and edx, 255
- mov eax, DWORD PTR 72[eax*4+ebp]
- mov ebx, DWORD PTR 1096[ebx*4+ebp]
- add ebx, eax
- mov eax, DWORD PTR 2120[ecx*4+ebp]
- xor ebx, eax
- mov edx, DWORD PTR 3144[edx*4+ebp]
- add ebx, edx
- xor eax, eax
- xor edi, ebx
- ;
- ; Round 4
- mov edx, DWORD PTR 16[ebp]
- mov ebx, edi
- xor esi, edx
- shr ebx, 16
- mov edx, edi
- mov al, bh
- and ebx, 255
- mov cl, dh
- and edx, 255
- mov eax, DWORD PTR 72[eax*4+ebp]
- mov ebx, DWORD PTR 1096[ebx*4+ebp]
- add ebx, eax
- mov eax, DWORD PTR 2120[ecx*4+ebp]
- xor ebx, eax
- mov edx, DWORD PTR 3144[edx*4+ebp]
- add ebx, edx
- xor eax, eax
- xor esi, ebx
- ;
- ; Round 3
- mov edx, DWORD PTR 12[ebp]
- mov ebx, esi
- xor edi, edx
- shr ebx, 16
- mov edx, esi
- mov al, bh
- and ebx, 255
- mov cl, dh
- and edx, 255
- mov eax, DWORD PTR 72[eax*4+ebp]
- mov ebx, DWORD PTR 1096[ebx*4+ebp]
- add ebx, eax
- mov eax, DWORD PTR 2120[ecx*4+ebp]
- xor ebx, eax
- mov edx, DWORD PTR 3144[edx*4+ebp]
- add ebx, edx
- xor eax, eax
- xor edi, ebx
- ;
- ; Round 2
- mov edx, DWORD PTR 8[ebp]
- mov ebx, edi
- xor esi, edx
- shr ebx, 16
- mov edx, edi
- mov al, bh
- and ebx, 255
- mov cl, dh
- and edx, 255
- mov eax, DWORD PTR 72[eax*4+ebp]
- mov ebx, DWORD PTR 1096[ebx*4+ebp]
- add ebx, eax
- mov eax, DWORD PTR 2120[ecx*4+ebp]
- xor ebx, eax
- mov edx, DWORD PTR 3144[edx*4+ebp]
- add ebx, edx
- xor eax, eax
- xor esi, ebx
- ;
- ; Round 1
- mov edx, DWORD PTR 4[ebp]
- mov ebx, esi
- xor edi, edx
- shr ebx, 16
- mov edx, esi
- mov al, bh
- and ebx, 255
- mov cl, dh
- and edx, 255
- mov eax, DWORD PTR 72[eax*4+ebp]
- mov ebx, DWORD PTR 1096[ebx*4+ebp]
- add ebx, eax
- mov eax, DWORD PTR 2120[ecx*4+ebp]
- xor ebx, eax
- mov edx, DWORD PTR 3144[edx*4+ebp]
- add ebx, edx
- ; Load parameter 0 (1) enc=0
- mov eax, DWORD PTR 20[esp]
- xor edi, ebx
- mov edx, DWORD PTR [ebp]
- xor esi, edx
- mov DWORD PTR 4[eax],edi
- mov DWORD PTR [eax],esi
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_BF_decrypt ENDP
-_TEXT ENDS
-_TEXT SEGMENT
-PUBLIC _BF_cbc_encrypt
-
-_BF_cbc_encrypt PROC NEAR
- ;
- push ebp
- push ebx
- push esi
- push edi
- mov ebp, DWORD PTR 28[esp]
- ; getting iv ptr from parameter 4
- mov ebx, DWORD PTR 36[esp]
- mov esi, DWORD PTR [ebx]
- mov edi, DWORD PTR 4[ebx]
- push edi
- push esi
- push edi
- push esi
- mov ebx, esp
- mov esi, DWORD PTR 36[esp]
- mov edi, DWORD PTR 40[esp]
- ; getting encrypt flag from parameter 5
- mov ecx, DWORD PTR 56[esp]
- ; get and push parameter 3
- mov eax, DWORD PTR 48[esp]
- push eax
- push ebx
- cmp ecx, 0
- jz $L000decrypt
- and ebp, 4294967288
- mov eax, DWORD PTR 8[esp]
- mov ebx, DWORD PTR 12[esp]
- jz $L001encrypt_finish
-L002encrypt_loop:
- mov ecx, DWORD PTR [esi]
- mov edx, DWORD PTR 4[esi]
- xor eax, ecx
- xor ebx, edx
- bswap eax
- bswap ebx
- mov DWORD PTR 8[esp],eax
- mov DWORD PTR 12[esp],ebx
- call _BF_encrypt
- mov eax, DWORD PTR 8[esp]
- mov ebx, DWORD PTR 12[esp]
- bswap eax
- bswap ebx
- mov DWORD PTR [edi],eax
- mov DWORD PTR 4[edi],ebx
- add esi, 8
- add edi, 8
- sub ebp, 8
- jnz L002encrypt_loop
-$L001encrypt_finish:
- mov ebp, DWORD PTR 52[esp]
- and ebp, 7
- jz $L003finish
- xor ecx, ecx
- xor edx, edx
- mov ebp, DWORD PTR $L004cbc_enc_jmp_table[ebp*4]
- jmp ebp
-L005ej7:
- mov dh, BYTE PTR 6[esi]
- shl edx, 8
-L006ej6:
- mov dh, BYTE PTR 5[esi]
-L007ej5:
- mov dl, BYTE PTR 4[esi]
-L008ej4:
- mov ecx, DWORD PTR [esi]
- jmp $L009ejend
-L010ej3:
- mov ch, BYTE PTR 2[esi]
- shl ecx, 8
-L011ej2:
- mov ch, BYTE PTR 1[esi]
-L012ej1:
- mov cl, BYTE PTR [esi]
-$L009ejend:
- xor eax, ecx
- xor ebx, edx
- bswap eax
- bswap ebx
- mov DWORD PTR 8[esp],eax
- mov DWORD PTR 12[esp],ebx
- call _BF_encrypt
- mov eax, DWORD PTR 8[esp]
- mov ebx, DWORD PTR 12[esp]
- bswap eax
- bswap ebx
- mov DWORD PTR [edi],eax
- mov DWORD PTR 4[edi],ebx
- jmp $L003finish
-$L000decrypt:
- and ebp, 4294967288
- mov eax, DWORD PTR 16[esp]
- mov ebx, DWORD PTR 20[esp]
- jz $L013decrypt_finish
-L014decrypt_loop:
- mov eax, DWORD PTR [esi]
- mov ebx, DWORD PTR 4[esi]
- bswap eax
- bswap ebx
- mov DWORD PTR 8[esp],eax
- mov DWORD PTR 12[esp],ebx
- call _BF_decrypt
- mov eax, DWORD PTR 8[esp]
- mov ebx, DWORD PTR 12[esp]
- bswap eax
- bswap ebx
- mov ecx, DWORD PTR 16[esp]
- mov edx, DWORD PTR 20[esp]
- xor ecx, eax
- xor edx, ebx
- mov eax, DWORD PTR [esi]
- mov ebx, DWORD PTR 4[esi]
- mov DWORD PTR [edi],ecx
- mov DWORD PTR 4[edi],edx
- mov DWORD PTR 16[esp],eax
- mov DWORD PTR 20[esp],ebx
- add esi, 8
- add edi, 8
- sub ebp, 8
- jnz L014decrypt_loop
-$L013decrypt_finish:
- mov ebp, DWORD PTR 52[esp]
- and ebp, 7
- jz $L003finish
- mov eax, DWORD PTR [esi]
- mov ebx, DWORD PTR 4[esi]
- bswap eax
- bswap ebx
- mov DWORD PTR 8[esp],eax
- mov DWORD PTR 12[esp],ebx
- call _BF_decrypt
- mov eax, DWORD PTR 8[esp]
- mov ebx, DWORD PTR 12[esp]
- bswap eax
- bswap ebx
- mov ecx, DWORD PTR 16[esp]
- mov edx, DWORD PTR 20[esp]
- xor ecx, eax
- xor edx, ebx
- mov eax, DWORD PTR [esi]
- mov ebx, DWORD PTR 4[esi]
-L015dj7:
- ror edx, 16
- mov BYTE PTR 6[edi],dl
- shr edx, 16
-L016dj6:
- mov BYTE PTR 5[edi],dh
-L017dj5:
- mov BYTE PTR 4[edi],dl
-L018dj4:
- mov DWORD PTR [edi],ecx
- jmp $L019djend
-L020dj3:
- ror ecx, 16
- mov BYTE PTR 2[edi],cl
- shl ecx, 16
-L021dj2:
- mov BYTE PTR 1[esi],ch
-L022dj1:
- mov BYTE PTR [esi], cl
-$L019djend:
- jmp $L003finish
-$L003finish:
- mov ecx, DWORD PTR 60[esp]
- add esp, 24
- mov DWORD PTR [ecx],eax
- mov DWORD PTR 4[ecx],ebx
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-$L004cbc_enc_jmp_table:
- DD 0
- DD L012ej1
- DD L011ej2
- DD L010ej3
- DD L008ej4
- DD L007ej5
- DD L006ej6
- DD L005ej7
-L023cbc_dec_jmp_table:
- DD 0
- DD L022dj1
- DD L021dj2
- DD L020dj3
- DD L018dj4
- DD L017dj5
- DD L016dj6
- DD L015dj7
-_BF_cbc_encrypt ENDP
-_TEXT ENDS
-END
+++ /dev/null
- ; Don't even think of reading this code
- ; It was automatically generated by bn-586.pl
- ; Which is a perl program used to generate the x86 assember for
- ; any of elf, a.out, BSDI,Win32, or Solaris
- ; eric <eay@cryptsoft.com>
- ;
- TITLE bn-586.asm
- .386
-.model FLAT
-_TEXT SEGMENT
-PUBLIC _bn_mul_add_words
-
-_bn_mul_add_words PROC NEAR
- push ebp
- push ebx
- push esi
- push edi
- ;
- xor esi, esi
- mov edi, DWORD PTR 20[esp]
- mov ecx, DWORD PTR 28[esp]
- mov ebx, DWORD PTR 24[esp]
- and ecx, 4294967288
- mov ebp, DWORD PTR 32[esp]
- push ecx
- jz $L000maw_finish
-L001maw_loop:
- mov DWORD PTR [esp],ecx
- ; Round 0
- mov eax, DWORD PTR [ebx]
- mul ebp
- add eax, esi
- mov esi, DWORD PTR [edi]
- adc edx, 0
- add eax, esi
- adc edx, 0
- mov DWORD PTR [edi],eax
- mov esi, edx
- ; Round 4
- mov eax, DWORD PTR 4[ebx]
- mul ebp
- add eax, esi
- mov esi, DWORD PTR 4[edi]
- adc edx, 0
- add eax, esi
- adc edx, 0
- mov DWORD PTR 4[edi],eax
- mov esi, edx
- ; Round 8
- mov eax, DWORD PTR 8[ebx]
- mul ebp
- add eax, esi
- mov esi, DWORD PTR 8[edi]
- adc edx, 0
- add eax, esi
- adc edx, 0
- mov DWORD PTR 8[edi],eax
- mov esi, edx
- ; Round 12
- mov eax, DWORD PTR 12[ebx]
- mul ebp
- add eax, esi
- mov esi, DWORD PTR 12[edi]
- adc edx, 0
- add eax, esi
- adc edx, 0
- mov DWORD PTR 12[edi],eax
- mov esi, edx
- ; Round 16
- mov eax, DWORD PTR 16[ebx]
- mul ebp
- add eax, esi
- mov esi, DWORD PTR 16[edi]
- adc edx, 0
- add eax, esi
- adc edx, 0
- mov DWORD PTR 16[edi],eax
- mov esi, edx
- ; Round 20
- mov eax, DWORD PTR 20[ebx]
- mul ebp
- add eax, esi
- mov esi, DWORD PTR 20[edi]
- adc edx, 0
- add eax, esi
- adc edx, 0
- mov DWORD PTR 20[edi],eax
- mov esi, edx
- ; Round 24
- mov eax, DWORD PTR 24[ebx]
- mul ebp
- add eax, esi
- mov esi, DWORD PTR 24[edi]
- adc edx, 0
- add eax, esi
- adc edx, 0
- mov DWORD PTR 24[edi],eax
- mov esi, edx
- ; Round 28
- mov eax, DWORD PTR 28[ebx]
- mul ebp
- add eax, esi
- mov esi, DWORD PTR 28[edi]
- adc edx, 0
- add eax, esi
- adc edx, 0
- mov DWORD PTR 28[edi],eax
- mov esi, edx
- ;
- mov ecx, DWORD PTR [esp]
- add ebx, 32
- add edi, 32
- sub ecx, 8
- jnz L001maw_loop
-$L000maw_finish:
- mov ecx, DWORD PTR 32[esp]
- and ecx, 7
- jnz $L002maw_finish2
- jmp $L003maw_end
-$L002maw_finish2:
- ; Tail Round 0
- mov eax, DWORD PTR [ebx]
- mul ebp
- add eax, esi
- mov esi, DWORD PTR [edi]
- adc edx, 0
- add eax, esi
- adc edx, 0
- dec ecx
- mov DWORD PTR [edi],eax
- mov esi, edx
- jz $L003maw_end
- ; Tail Round 1
- mov eax, DWORD PTR 4[ebx]
- mul ebp
- add eax, esi
- mov esi, DWORD PTR 4[edi]
- adc edx, 0
- add eax, esi
- adc edx, 0
- dec ecx
- mov DWORD PTR 4[edi],eax
- mov esi, edx
- jz $L003maw_end
- ; Tail Round 2
- mov eax, DWORD PTR 8[ebx]
- mul ebp
- add eax, esi
- mov esi, DWORD PTR 8[edi]
- adc edx, 0
- add eax, esi
- adc edx, 0
- dec ecx
- mov DWORD PTR 8[edi],eax
- mov esi, edx
- jz $L003maw_end
- ; Tail Round 3
- mov eax, DWORD PTR 12[ebx]
- mul ebp
- add eax, esi
- mov esi, DWORD PTR 12[edi]
- adc edx, 0
- add eax, esi
- adc edx, 0
- dec ecx
- mov DWORD PTR 12[edi],eax
- mov esi, edx
- jz $L003maw_end
- ; Tail Round 4
- mov eax, DWORD PTR 16[ebx]
- mul ebp
- add eax, esi
- mov esi, DWORD PTR 16[edi]
- adc edx, 0
- add eax, esi
- adc edx, 0
- dec ecx
- mov DWORD PTR 16[edi],eax
- mov esi, edx
- jz $L003maw_end
- ; Tail Round 5
- mov eax, DWORD PTR 20[ebx]
- mul ebp
- add eax, esi
- mov esi, DWORD PTR 20[edi]
- adc edx, 0
- add eax, esi
- adc edx, 0
- dec ecx
- mov DWORD PTR 20[edi],eax
- mov esi, edx
- jz $L003maw_end
- ; Tail Round 6
- mov eax, DWORD PTR 24[ebx]
- mul ebp
- add eax, esi
- mov esi, DWORD PTR 24[edi]
- adc edx, 0
- add eax, esi
- adc edx, 0
- mov DWORD PTR 24[edi],eax
- mov esi, edx
-$L003maw_end:
- mov eax, esi
- pop ecx
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_bn_mul_add_words ENDP
-_TEXT ENDS
-_TEXT SEGMENT
-PUBLIC _bn_mul_words
-
-_bn_mul_words PROC NEAR
- push ebp
- push ebx
- push esi
- push edi
- ;
- xor esi, esi
- mov edi, DWORD PTR 20[esp]
- mov ebx, DWORD PTR 24[esp]
- mov ebp, DWORD PTR 28[esp]
- mov ecx, DWORD PTR 32[esp]
- and ebp, 4294967288
- jz $L004mw_finish
-L005mw_loop:
- ; Round 0
- mov eax, DWORD PTR [ebx]
- mul ecx
- add eax, esi
- adc edx, 0
- mov DWORD PTR [edi],eax
- mov esi, edx
- ; Round 4
- mov eax, DWORD PTR 4[ebx]
- mul ecx
- add eax, esi
- adc edx, 0
- mov DWORD PTR 4[edi],eax
- mov esi, edx
- ; Round 8
- mov eax, DWORD PTR 8[ebx]
- mul ecx
- add eax, esi
- adc edx, 0
- mov DWORD PTR 8[edi],eax
- mov esi, edx
- ; Round 12
- mov eax, DWORD PTR 12[ebx]
- mul ecx
- add eax, esi
- adc edx, 0
- mov DWORD PTR 12[edi],eax
- mov esi, edx
- ; Round 16
- mov eax, DWORD PTR 16[ebx]
- mul ecx
- add eax, esi
- adc edx, 0
- mov DWORD PTR 16[edi],eax
- mov esi, edx
- ; Round 20
- mov eax, DWORD PTR 20[ebx]
- mul ecx
- add eax, esi
- adc edx, 0
- mov DWORD PTR 20[edi],eax
- mov esi, edx
- ; Round 24
- mov eax, DWORD PTR 24[ebx]
- mul ecx
- add eax, esi
- adc edx, 0
- mov DWORD PTR 24[edi],eax
- mov esi, edx
- ; Round 28
- mov eax, DWORD PTR 28[ebx]
- mul ecx
- add eax, esi
- adc edx, 0
- mov DWORD PTR 28[edi],eax
- mov esi, edx
- ;
- add ebx, 32
- add edi, 32
- sub ebp, 8
- jz $L004mw_finish
- jmp L005mw_loop
-$L004mw_finish:
- mov ebp, DWORD PTR 28[esp]
- and ebp, 7
- jnz $L006mw_finish2
- jmp $L007mw_end
-$L006mw_finish2:
- ; Tail Round 0
- mov eax, DWORD PTR [ebx]
- mul ecx
- add eax, esi
- adc edx, 0
- mov DWORD PTR [edi],eax
- mov esi, edx
- dec ebp
- jz $L007mw_end
- ; Tail Round 1
- mov eax, DWORD PTR 4[ebx]
- mul ecx
- add eax, esi
- adc edx, 0
- mov DWORD PTR 4[edi],eax
- mov esi, edx
- dec ebp
- jz $L007mw_end
- ; Tail Round 2
- mov eax, DWORD PTR 8[ebx]
- mul ecx
- add eax, esi
- adc edx, 0
- mov DWORD PTR 8[edi],eax
- mov esi, edx
- dec ebp
- jz $L007mw_end
- ; Tail Round 3
- mov eax, DWORD PTR 12[ebx]
- mul ecx
- add eax, esi
- adc edx, 0
- mov DWORD PTR 12[edi],eax
- mov esi, edx
- dec ebp
- jz $L007mw_end
- ; Tail Round 4
- mov eax, DWORD PTR 16[ebx]
- mul ecx
- add eax, esi
- adc edx, 0
- mov DWORD PTR 16[edi],eax
- mov esi, edx
- dec ebp
- jz $L007mw_end
- ; Tail Round 5
- mov eax, DWORD PTR 20[ebx]
- mul ecx
- add eax, esi
- adc edx, 0
- mov DWORD PTR 20[edi],eax
- mov esi, edx
- dec ebp
- jz $L007mw_end
- ; Tail Round 6
- mov eax, DWORD PTR 24[ebx]
- mul ecx
- add eax, esi
- adc edx, 0
- mov DWORD PTR 24[edi],eax
- mov esi, edx
-$L007mw_end:
- mov eax, esi
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_bn_mul_words ENDP
-_TEXT ENDS
-_TEXT SEGMENT
-PUBLIC _bn_sqr_words
-
-_bn_sqr_words PROC NEAR
- push ebp
- push ebx
- push esi
- push edi
- ;
- mov esi, DWORD PTR 20[esp]
- mov edi, DWORD PTR 24[esp]
- mov ebx, DWORD PTR 28[esp]
- and ebx, 4294967288
- jz $L008sw_finish
-L009sw_loop:
- ; Round 0
- mov eax, DWORD PTR [edi]
- mul eax
- mov DWORD PTR [esi],eax
- mov DWORD PTR 4[esi],edx
- ; Round 4
- mov eax, DWORD PTR 4[edi]
- mul eax
- mov DWORD PTR 8[esi],eax
- mov DWORD PTR 12[esi],edx
- ; Round 8
- mov eax, DWORD PTR 8[edi]
- mul eax
- mov DWORD PTR 16[esi],eax
- mov DWORD PTR 20[esi],edx
- ; Round 12
- mov eax, DWORD PTR 12[edi]
- mul eax
- mov DWORD PTR 24[esi],eax
- mov DWORD PTR 28[esi],edx
- ; Round 16
- mov eax, DWORD PTR 16[edi]
- mul eax
- mov DWORD PTR 32[esi],eax
- mov DWORD PTR 36[esi],edx
- ; Round 20
- mov eax, DWORD PTR 20[edi]
- mul eax
- mov DWORD PTR 40[esi],eax
- mov DWORD PTR 44[esi],edx
- ; Round 24
- mov eax, DWORD PTR 24[edi]
- mul eax
- mov DWORD PTR 48[esi],eax
- mov DWORD PTR 52[esi],edx
- ; Round 28
- mov eax, DWORD PTR 28[edi]
- mul eax
- mov DWORD PTR 56[esi],eax
- mov DWORD PTR 60[esi],edx
- ;
- add edi, 32
- add esi, 64
- sub ebx, 8
- jnz L009sw_loop
-$L008sw_finish:
- mov ebx, DWORD PTR 28[esp]
- and ebx, 7
- jz $L010sw_end
- ; Tail Round 0
- mov eax, DWORD PTR [edi]
- mul eax
- mov DWORD PTR [esi],eax
- dec ebx
- mov DWORD PTR 4[esi],edx
- jz $L010sw_end
- ; Tail Round 1
- mov eax, DWORD PTR 4[edi]
- mul eax
- mov DWORD PTR 8[esi],eax
- dec ebx
- mov DWORD PTR 12[esi],edx
- jz $L010sw_end
- ; Tail Round 2
- mov eax, DWORD PTR 8[edi]
- mul eax
- mov DWORD PTR 16[esi],eax
- dec ebx
- mov DWORD PTR 20[esi],edx
- jz $L010sw_end
- ; Tail Round 3
- mov eax, DWORD PTR 12[edi]
- mul eax
- mov DWORD PTR 24[esi],eax
- dec ebx
- mov DWORD PTR 28[esi],edx
- jz $L010sw_end
- ; Tail Round 4
- mov eax, DWORD PTR 16[edi]
- mul eax
- mov DWORD PTR 32[esi],eax
- dec ebx
- mov DWORD PTR 36[esi],edx
- jz $L010sw_end
- ; Tail Round 5
- mov eax, DWORD PTR 20[edi]
- mul eax
- mov DWORD PTR 40[esi],eax
- dec ebx
- mov DWORD PTR 44[esi],edx
- jz $L010sw_end
- ; Tail Round 6
- mov eax, DWORD PTR 24[edi]
- mul eax
- mov DWORD PTR 48[esi],eax
- mov DWORD PTR 52[esi],edx
-$L010sw_end:
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_bn_sqr_words ENDP
-_TEXT ENDS
-_TEXT SEGMENT
-PUBLIC _bn_div_words
-
-_bn_div_words PROC NEAR
- push ebp
- push ebx
- push esi
- push edi
- mov edx, DWORD PTR 20[esp]
- mov eax, DWORD PTR 24[esp]
- mov ebx, DWORD PTR 28[esp]
- div ebx
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_bn_div_words ENDP
-_TEXT ENDS
-_TEXT SEGMENT
-PUBLIC _bn_add_words
-
-_bn_add_words PROC NEAR
- push ebp
- push ebx
- push esi
- push edi
- ;
- mov ebx, DWORD PTR 20[esp]
- mov esi, DWORD PTR 24[esp]
- mov edi, DWORD PTR 28[esp]
- mov ebp, DWORD PTR 32[esp]
- xor eax, eax
- and ebp, 4294967288
- jz $L011aw_finish
-L012aw_loop:
- ; Round 0
- mov ecx, DWORD PTR [esi]
- mov edx, DWORD PTR [edi]
- add ecx, eax
- mov eax, 0
- adc eax, eax
- add ecx, edx
- adc eax, 0
- mov DWORD PTR [ebx],ecx
- ; Round 1
- mov ecx, DWORD PTR 4[esi]
- mov edx, DWORD PTR 4[edi]
- add ecx, eax
- mov eax, 0
- adc eax, eax
- add ecx, edx
- adc eax, 0
- mov DWORD PTR 4[ebx],ecx
- ; Round 2
- mov ecx, DWORD PTR 8[esi]
- mov edx, DWORD PTR 8[edi]
- add ecx, eax
- mov eax, 0
- adc eax, eax
- add ecx, edx
- adc eax, 0
- mov DWORD PTR 8[ebx],ecx
- ; Round 3
- mov ecx, DWORD PTR 12[esi]
- mov edx, DWORD PTR 12[edi]
- add ecx, eax
- mov eax, 0
- adc eax, eax
- add ecx, edx
- adc eax, 0
- mov DWORD PTR 12[ebx],ecx
- ; Round 4
- mov ecx, DWORD PTR 16[esi]
- mov edx, DWORD PTR 16[edi]
- add ecx, eax
- mov eax, 0
- adc eax, eax
- add ecx, edx
- adc eax, 0
- mov DWORD PTR 16[ebx],ecx
- ; Round 5
- mov ecx, DWORD PTR 20[esi]
- mov edx, DWORD PTR 20[edi]
- add ecx, eax
- mov eax, 0
- adc eax, eax
- add ecx, edx
- adc eax, 0
- mov DWORD PTR 20[ebx],ecx
- ; Round 6
- mov ecx, DWORD PTR 24[esi]
- mov edx, DWORD PTR 24[edi]
- add ecx, eax
- mov eax, 0
- adc eax, eax
- add ecx, edx
- adc eax, 0
- mov DWORD PTR 24[ebx],ecx
- ; Round 7
- mov ecx, DWORD PTR 28[esi]
- mov edx, DWORD PTR 28[edi]
- add ecx, eax
- mov eax, 0
- adc eax, eax
- add ecx, edx
- adc eax, 0
- mov DWORD PTR 28[ebx],ecx
- ;
- add esi, 32
- add edi, 32
- add ebx, 32
- sub ebp, 8
- jnz L012aw_loop
-$L011aw_finish:
- mov ebp, DWORD PTR 32[esp]
- and ebp, 7
- jz $L013aw_end
- ; Tail Round 0
- mov ecx, DWORD PTR [esi]
- mov edx, DWORD PTR [edi]
- add ecx, eax
- mov eax, 0
- adc eax, eax
- add ecx, edx
- adc eax, 0
- dec ebp
- mov DWORD PTR [ebx],ecx
- jz $L013aw_end
- ; Tail Round 1
- mov ecx, DWORD PTR 4[esi]
- mov edx, DWORD PTR 4[edi]
- add ecx, eax
- mov eax, 0
- adc eax, eax
- add ecx, edx
- adc eax, 0
- dec ebp
- mov DWORD PTR 4[ebx],ecx
- jz $L013aw_end
- ; Tail Round 2
- mov ecx, DWORD PTR 8[esi]
- mov edx, DWORD PTR 8[edi]
- add ecx, eax
- mov eax, 0
- adc eax, eax
- add ecx, edx
- adc eax, 0
- dec ebp
- mov DWORD PTR 8[ebx],ecx
- jz $L013aw_end
- ; Tail Round 3
- mov ecx, DWORD PTR 12[esi]
- mov edx, DWORD PTR 12[edi]
- add ecx, eax
- mov eax, 0
- adc eax, eax
- add ecx, edx
- adc eax, 0
- dec ebp
- mov DWORD PTR 12[ebx],ecx
- jz $L013aw_end
- ; Tail Round 4
- mov ecx, DWORD PTR 16[esi]
- mov edx, DWORD PTR 16[edi]
- add ecx, eax
- mov eax, 0
- adc eax, eax
- add ecx, edx
- adc eax, 0
- dec ebp
- mov DWORD PTR 16[ebx],ecx
- jz $L013aw_end
- ; Tail Round 5
- mov ecx, DWORD PTR 20[esi]
- mov edx, DWORD PTR 20[edi]
- add ecx, eax
- mov eax, 0
- adc eax, eax
- add ecx, edx
- adc eax, 0
- dec ebp
- mov DWORD PTR 20[ebx],ecx
- jz $L013aw_end
- ; Tail Round 6
- mov ecx, DWORD PTR 24[esi]
- mov edx, DWORD PTR 24[edi]
- add ecx, eax
- mov eax, 0
- adc eax, eax
- add ecx, edx
- adc eax, 0
- mov DWORD PTR 24[ebx],ecx
-$L013aw_end:
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_bn_add_words ENDP
-_TEXT ENDS
-_TEXT SEGMENT
-PUBLIC _bn_sub_words
-
-_bn_sub_words PROC NEAR
- push ebp
- push ebx
- push esi
- push edi
- ;
- mov ebx, DWORD PTR 20[esp]
- mov esi, DWORD PTR 24[esp]
- mov edi, DWORD PTR 28[esp]
- mov ebp, DWORD PTR 32[esp]
- xor eax, eax
- and ebp, 4294967288
- jz $L014aw_finish
-L015aw_loop:
- ; Round 0
- mov ecx, DWORD PTR [esi]
- mov edx, DWORD PTR [edi]
- sub ecx, eax
- mov eax, 0
- adc eax, eax
- sub ecx, edx
- adc eax, 0
- mov DWORD PTR [ebx],ecx
- ; Round 1
- mov ecx, DWORD PTR 4[esi]
- mov edx, DWORD PTR 4[edi]
- sub ecx, eax
- mov eax, 0
- adc eax, eax
- sub ecx, edx
- adc eax, 0
- mov DWORD PTR 4[ebx],ecx
- ; Round 2
- mov ecx, DWORD PTR 8[esi]
- mov edx, DWORD PTR 8[edi]
- sub ecx, eax
- mov eax, 0
- adc eax, eax
- sub ecx, edx
- adc eax, 0
- mov DWORD PTR 8[ebx],ecx
- ; Round 3
- mov ecx, DWORD PTR 12[esi]
- mov edx, DWORD PTR 12[edi]
- sub ecx, eax
- mov eax, 0
- adc eax, eax
- sub ecx, edx
- adc eax, 0
- mov DWORD PTR 12[ebx],ecx
- ; Round 4
- mov ecx, DWORD PTR 16[esi]
- mov edx, DWORD PTR 16[edi]
- sub ecx, eax
- mov eax, 0
- adc eax, eax
- sub ecx, edx
- adc eax, 0
- mov DWORD PTR 16[ebx],ecx
- ; Round 5
- mov ecx, DWORD PTR 20[esi]
- mov edx, DWORD PTR 20[edi]
- sub ecx, eax
- mov eax, 0
- adc eax, eax
- sub ecx, edx
- adc eax, 0
- mov DWORD PTR 20[ebx],ecx
- ; Round 6
- mov ecx, DWORD PTR 24[esi]
- mov edx, DWORD PTR 24[edi]
- sub ecx, eax
- mov eax, 0
- adc eax, eax
- sub ecx, edx
- adc eax, 0
- mov DWORD PTR 24[ebx],ecx
- ; Round 7
- mov ecx, DWORD PTR 28[esi]
- mov edx, DWORD PTR 28[edi]
- sub ecx, eax
- mov eax, 0
- adc eax, eax
- sub ecx, edx
- adc eax, 0
- mov DWORD PTR 28[ebx],ecx
- ;
- add esi, 32
- add edi, 32
- add ebx, 32
- sub ebp, 8
- jnz L015aw_loop
-$L014aw_finish:
- mov ebp, DWORD PTR 32[esp]
- and ebp, 7
- jz $L016aw_end
- ; Tail Round 0
- mov ecx, DWORD PTR [esi]
- mov edx, DWORD PTR [edi]
- sub ecx, eax
- mov eax, 0
- adc eax, eax
- sub ecx, edx
- adc eax, 0
- dec ebp
- mov DWORD PTR [ebx],ecx
- jz $L016aw_end
- ; Tail Round 1
- mov ecx, DWORD PTR 4[esi]
- mov edx, DWORD PTR 4[edi]
- sub ecx, eax
- mov eax, 0
- adc eax, eax
- sub ecx, edx
- adc eax, 0
- dec ebp
- mov DWORD PTR 4[ebx],ecx
- jz $L016aw_end
- ; Tail Round 2
- mov ecx, DWORD PTR 8[esi]
- mov edx, DWORD PTR 8[edi]
- sub ecx, eax
- mov eax, 0
- adc eax, eax
- sub ecx, edx
- adc eax, 0
- dec ebp
- mov DWORD PTR 8[ebx],ecx
- jz $L016aw_end
- ; Tail Round 3
- mov ecx, DWORD PTR 12[esi]
- mov edx, DWORD PTR 12[edi]
- sub ecx, eax
- mov eax, 0
- adc eax, eax
- sub ecx, edx
- adc eax, 0
- dec ebp
- mov DWORD PTR 12[ebx],ecx
- jz $L016aw_end
- ; Tail Round 4
- mov ecx, DWORD PTR 16[esi]
- mov edx, DWORD PTR 16[edi]
- sub ecx, eax
- mov eax, 0
- adc eax, eax
- sub ecx, edx
- adc eax, 0
- dec ebp
- mov DWORD PTR 16[ebx],ecx
- jz $L016aw_end
- ; Tail Round 5
- mov ecx, DWORD PTR 20[esi]
- mov edx, DWORD PTR 20[edi]
- sub ecx, eax
- mov eax, 0
- adc eax, eax
- sub ecx, edx
- adc eax, 0
- dec ebp
- mov DWORD PTR 20[ebx],ecx
- jz $L016aw_end
- ; Tail Round 6
- mov ecx, DWORD PTR 24[esi]
- mov edx, DWORD PTR 24[edi]
- sub ecx, eax
- mov eax, 0
- adc eax, eax
- sub ecx, edx
- adc eax, 0
- mov DWORD PTR 24[ebx],ecx
-$L016aw_end:
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_bn_sub_words ENDP
-_TEXT ENDS
-_TEXT SEGMENT
-PUBLIC _bn_mul_comba8
-
-_bn_mul_comba8 PROC NEAR
- push esi
- mov esi, DWORD PTR 12[esp]
- push edi
- mov edi, DWORD PTR 20[esp]
- push ebp
- push ebx
- xor ebx, ebx
- mov eax, DWORD PTR [esi]
- xor ecx, ecx
- mov edx, DWORD PTR [edi]
- ; ################## Calculate word 0
- xor ebp, ebp
- ; mul a[0]*b[0]
- mul edx
- add ebx, eax
- mov eax, DWORD PTR 20[esp]
- adc ecx, edx
- mov edx, DWORD PTR [edi]
- adc ebp, 0
- mov DWORD PTR [eax],ebx
- mov eax, DWORD PTR 4[esi]
- ; saved r[0]
- ; ################## Calculate word 1
- xor ebx, ebx
- ; mul a[1]*b[0]
- mul edx
- add ecx, eax
- mov eax, DWORD PTR [esi]
- adc ebp, edx
- mov edx, DWORD PTR 4[edi]
- adc ebx, 0
- ; mul a[0]*b[1]
- mul edx
- add ecx, eax
- mov eax, DWORD PTR 20[esp]
- adc ebp, edx
- mov edx, DWORD PTR [edi]
- adc ebx, 0
- mov DWORD PTR 4[eax],ecx
- mov eax, DWORD PTR 8[esi]
- ; saved r[1]
- ; ################## Calculate word 2
- xor ecx, ecx
- ; mul a[2]*b[0]
- mul edx
- add ebp, eax
- mov eax, DWORD PTR 4[esi]
- adc ebx, edx
- mov edx, DWORD PTR 4[edi]
- adc ecx, 0
- ; mul a[1]*b[1]
- mul edx
- add ebp, eax
- mov eax, DWORD PTR [esi]
- adc ebx, edx
- mov edx, DWORD PTR 8[edi]
- adc ecx, 0
- ; mul a[0]*b[2]
- mul edx
- add ebp, eax
- mov eax, DWORD PTR 20[esp]
- adc ebx, edx
- mov edx, DWORD PTR [edi]
- adc ecx, 0
- mov DWORD PTR 8[eax],ebp
- mov eax, DWORD PTR 12[esi]
- ; saved r[2]
- ; ################## Calculate word 3
- xor ebp, ebp
- ; mul a[3]*b[0]
- mul edx
- add ebx, eax
- mov eax, DWORD PTR 8[esi]
- adc ecx, edx
- mov edx, DWORD PTR 4[edi]
- adc ebp, 0
- ; mul a[2]*b[1]
- mul edx
- add ebx, eax
- mov eax, DWORD PTR 4[esi]
- adc ecx, edx
- mov edx, DWORD PTR 8[edi]
- adc ebp, 0
- ; mul a[1]*b[2]
- mul edx
- add ebx, eax
- mov eax, DWORD PTR [esi]
- adc ecx, edx
- mov edx, DWORD PTR 12[edi]
- adc ebp, 0
- ; mul a[0]*b[3]
- mul edx
- add ebx, eax
- mov eax, DWORD PTR 20[esp]
- adc ecx, edx
- mov edx, DWORD PTR [edi]
- adc ebp, 0
- mov DWORD PTR 12[eax],ebx
- mov eax, DWORD PTR 16[esi]
- ; saved r[3]
- ; ################## Calculate word 4
- xor ebx, ebx
- ; mul a[4]*b[0]
- mul edx
- add ecx, eax
- mov eax, DWORD PTR 12[esi]
- adc ebp, edx
- mov edx, DWORD PTR 4[edi]
- adc ebx, 0
- ; mul a[3]*b[1]
- mul edx
- add ecx, eax
- mov eax, DWORD PTR 8[esi]
- adc ebp, edx
- mov edx, DWORD PTR 8[edi]
- adc ebx, 0
- ; mul a[2]*b[2]
- mul edx
- add ecx, eax
- mov eax, DWORD PTR 4[esi]
- adc ebp, edx
- mov edx, DWORD PTR 12[edi]
- adc ebx, 0
- ; mul a[1]*b[3]
- mul edx
- add ecx, eax
- mov eax, DWORD PTR [esi]
- adc ebp, edx
- mov edx, DWORD PTR 16[edi]
- adc ebx, 0
- ; mul a[0]*b[4]
- mul edx
- add ecx, eax
- mov eax, DWORD PTR 20[esp]
- adc ebp, edx
- mov edx, DWORD PTR [edi]
- adc ebx, 0
- mov DWORD PTR 16[eax],ecx
- mov eax, DWORD PTR 20[esi]
- ; saved r[4]
- ; ################## Calculate word 5
- xor ecx, ecx
- ; mul a[5]*b[0]
- mul edx
- add ebp, eax
- mov eax, DWORD PTR 16[esi]
- adc ebx, edx
- mov edx, DWORD PTR 4[edi]
- adc ecx, 0
- ; mul a[4]*b[1]
- mul edx
- add ebp, eax
- mov eax, DWORD PTR 12[esi]
- adc ebx, edx
- mov edx, DWORD PTR 8[edi]
- adc ecx, 0
- ; mul a[3]*b[2]
- mul edx
- add ebp, eax
- mov eax, DWORD PTR 8[esi]
- adc ebx, edx
- mov edx, DWORD PTR 12[edi]
- adc ecx, 0
- ; mul a[2]*b[3]
- mul edx
- add ebp, eax
- mov eax, DWORD PTR 4[esi]
- adc ebx, edx
- mov edx, DWORD PTR 16[edi]
- adc ecx, 0
- ; mul a[1]*b[4]
- mul edx
- add ebp, eax
- mov eax, DWORD PTR [esi]
- adc ebx, edx
- mov edx, DWORD PTR 20[edi]
- adc ecx, 0
- ; mul a[0]*b[5]
- mul edx
- add ebp, eax
- mov eax, DWORD PTR 20[esp]
- adc ebx, edx
- mov edx, DWORD PTR [edi]
- adc ecx, 0
- mov DWORD PTR 20[eax],ebp
- mov eax, DWORD PTR 24[esi]
- ; saved r[5]
- ; ################## Calculate word 6
- xor ebp, ebp
- ; mul a[6]*b[0]
- mul edx
- add ebx, eax
- mov eax, DWORD PTR 20[esi]
- adc ecx, edx
- mov edx, DWORD PTR 4[edi]
- adc ebp, 0
- ; mul a[5]*b[1]
- mul edx
- add ebx, eax
- mov eax, DWORD PTR 16[esi]
- adc ecx, edx
- mov edx, DWORD PTR 8[edi]
- adc ebp, 0
- ; mul a[4]*b[2]
- mul edx
- add ebx, eax
- mov eax, DWORD PTR 12[esi]
- adc ecx, edx
- mov edx, DWORD PTR 12[edi]
- adc ebp, 0
- ; mul a[3]*b[3]
- mul edx
- add ebx, eax
- mov eax, DWORD PTR 8[esi]
- adc ecx, edx
- mov edx, DWORD PTR 16[edi]
- adc ebp, 0
- ; mul a[2]*b[4]
- mul edx
- add ebx, eax
- mov eax, DWORD PTR 4[esi]
- adc ecx, edx
- mov edx, DWORD PTR 20[edi]
- adc ebp, 0
- ; mul a[1]*b[5]
- mul edx
- add ebx, eax
- mov eax, DWORD PTR [esi]
- adc ecx, edx
- mov edx, DWORD PTR 24[edi]
- adc ebp, 0
- ; mul a[0]*b[6]
- mul edx
- add ebx, eax
- mov eax, DWORD PTR 20[esp]
- adc ecx, edx
- mov edx, DWORD PTR [edi]
- adc ebp, 0
- mov DWORD PTR 24[eax],ebx
- mov eax, DWORD PTR 28[esi]
- ; saved r[6]
- ; ################## Calculate word 7
- xor ebx, ebx
- ; mul a[7]*b[0]
- mul edx
- add ecx, eax
- mov eax, DWORD PTR 24[esi]
- adc ebp, edx
- mov edx, DWORD PTR 4[edi]
- adc ebx, 0
- ; mul a[6]*b[1]
- mul edx
- add ecx, eax
- mov eax, DWORD PTR 20[esi]
- adc ebp, edx
- mov edx, DWORD PTR 8[edi]
- adc ebx, 0
- ; mul a[5]*b[2]
- mul edx
- add ecx, eax
- mov eax, DWORD PTR 16[esi]
- adc ebp, edx
- mov edx, DWORD PTR 12[edi]
- adc ebx, 0
- ; mul a[4]*b[3]
- mul edx
- add ecx, eax
- mov eax, DWORD PTR 12[esi]
- adc ebp, edx
- mov edx, DWORD PTR 16[edi]
- adc ebx, 0
- ; mul a[3]*b[4]
- mul edx
- add ecx, eax
- mov eax, DWORD PTR 8[esi]
- adc ebp, edx
- mov edx, DWORD PTR 20[edi]
- adc ebx, 0
- ; mul a[2]*b[5]
- mul edx
- add ecx, eax
- mov eax, DWORD PTR 4[esi]
- adc ebp, edx
- mov edx, DWORD PTR 24[edi]
- adc ebx, 0
- ; mul a[1]*b[6]
- mul edx
- add ecx, eax
- mov eax, DWORD PTR [esi]
- adc ebp, edx
- mov edx, DWORD PTR 28[edi]
- adc ebx, 0
- ; mul a[0]*b[7]
- mul edx
- add ecx, eax
- mov eax, DWORD PTR 20[esp]
- adc ebp, edx
- mov edx, DWORD PTR 4[edi]
- adc ebx, 0
- mov DWORD PTR 28[eax],ecx
- mov eax, DWORD PTR 28[esi]
- ; saved r[7]
- ; ################## Calculate word 8
- xor ecx, ecx
- ; mul a[7]*b[1]
- mul edx
- add ebp, eax
- mov eax, DWORD PTR 24[esi]
- adc ebx, edx
- mov edx, DWORD PTR 8[edi]
- adc ecx, 0
- ; mul a[6]*b[2]
- mul edx
- add ebp, eax
- mov eax, DWORD PTR 20[esi]
- adc ebx, edx
- mov edx, DWORD PTR 12[edi]
- adc ecx, 0
- ; mul a[5]*b[3]
- mul edx
- add ebp, eax
- mov eax, DWORD PTR 16[esi]
- adc ebx, edx
- mov edx, DWORD PTR 16[edi]
- adc ecx, 0
- ; mul a[4]*b[4]
- mul edx
- add ebp, eax
- mov eax, DWORD PTR 12[esi]
- adc ebx, edx
- mov edx, DWORD PTR 20[edi]
- adc ecx, 0
- ; mul a[3]*b[5]
- mul edx
- add ebp, eax
- mov eax, DWORD PTR 8[esi]
- adc ebx, edx
- mov edx, DWORD PTR 24[edi]
- adc ecx, 0
- ; mul a[2]*b[6]
- mul edx
- add ebp, eax
- mov eax, DWORD PTR 4[esi]
- adc ebx, edx
- mov edx, DWORD PTR 28[edi]
- adc ecx, 0
- ; mul a[1]*b[7]
- mul edx
- add ebp, eax
- mov eax, DWORD PTR 20[esp]
- adc ebx, edx
- mov edx, DWORD PTR 8[edi]
- adc ecx, 0
- mov DWORD PTR 32[eax],ebp
- mov eax, DWORD PTR 28[esi]
- ; saved r[8]
- ; ################## Calculate word 9
- xor ebp, ebp
- ; mul a[7]*b[2]
- mul edx
- add ebx, eax
- mov eax, DWORD PTR 24[esi]
- adc ecx, edx
- mov edx, DWORD PTR 12[edi]
- adc ebp, 0
- ; mul a[6]*b[3]
- mul edx
- add ebx, eax
- mov eax, DWORD PTR 20[esi]
- adc ecx, edx
- mov edx, DWORD PTR 16[edi]
- adc ebp, 0
- ; mul a[5]*b[4]
- mul edx
- add ebx, eax
- mov eax, DWORD PTR 16[esi]
- adc ecx, edx
- mov edx, DWORD PTR 20[edi]
- adc ebp, 0
- ; mul a[4]*b[5]
- mul edx
- add ebx, eax
- mov eax, DWORD PTR 12[esi]
- adc ecx, edx
- mov edx, DWORD PTR 24[edi]
- adc ebp, 0
- ; mul a[3]*b[6]
- mul edx
- add ebx, eax
- mov eax, DWORD PTR 8[esi]
- adc ecx, edx
- mov edx, DWORD PTR 28[edi]
- adc ebp, 0
- ; mul a[2]*b[7]
- mul edx
- add ebx, eax
- mov eax, DWORD PTR 20[esp]
- adc ecx, edx
- mov edx, DWORD PTR 12[edi]
- adc ebp, 0
- mov DWORD PTR 36[eax],ebx
- mov eax, DWORD PTR 28[esi]
- ; saved r[9]
- ; ################## Calculate word 10
- xor ebx, ebx
- ; mul a[7]*b[3]
- mul edx
- add ecx, eax
- mov eax, DWORD PTR 24[esi]
- adc ebp, edx
- mov edx, DWORD PTR 16[edi]
- adc ebx, 0
- ; mul a[6]*b[4]
- mul edx
- add ecx, eax
- mov eax, DWORD PTR 20[esi]
- adc ebp, edx
- mov edx, DWORD PTR 20[edi]
- adc ebx, 0
- ; mul a[5]*b[5]
- mul edx
- add ecx, eax
- mov eax, DWORD PTR 16[esi]
- adc ebp, edx
- mov edx, DWORD PTR 24[edi]
- adc ebx, 0
- ; mul a[4]*b[6]
- mul edx
- add ecx, eax
- mov eax, DWORD PTR 12[esi]
- adc ebp, edx
- mov edx, DWORD PTR 28[edi]
- adc ebx, 0
- ; mul a[3]*b[7]
- mul edx
- add ecx, eax
- mov eax, DWORD PTR 20[esp]
- adc ebp, edx
- mov edx, DWORD PTR 16[edi]
- adc ebx, 0
- mov DWORD PTR 40[eax],ecx
- mov eax, DWORD PTR 28[esi]
- ; saved r[10]
- ; ################## Calculate word 11
- xor ecx, ecx
- ; mul a[7]*b[4]
- mul edx
- add ebp, eax
- mov eax, DWORD PTR 24[esi]
- adc ebx, edx
- mov edx, DWORD PTR 20[edi]
- adc ecx, 0
- ; mul a[6]*b[5]
- mul edx
- add ebp, eax
- mov eax, DWORD PTR 20[esi]
- adc ebx, edx
- mov edx, DWORD PTR 24[edi]
- adc ecx, 0
- ; mul a[5]*b[6]
- mul edx
- add ebp, eax
- mov eax, DWORD PTR 16[esi]
- adc ebx, edx
- mov edx, DWORD PTR 28[edi]
- adc ecx, 0
- ; mul a[4]*b[7]
- mul edx
- add ebp, eax
- mov eax, DWORD PTR 20[esp]
- adc ebx, edx
- mov edx, DWORD PTR 20[edi]
- adc ecx, 0
- mov DWORD PTR 44[eax],ebp
- mov eax, DWORD PTR 28[esi]
- ; saved r[11]
- ; ################## Calculate word 12
- xor ebp, ebp
- ; mul a[7]*b[5]
- mul edx
- add ebx, eax
- mov eax, DWORD PTR 24[esi]
- adc ecx, edx
- mov edx, DWORD PTR 24[edi]
- adc ebp, 0
- ; mul a[6]*b[6]
- mul edx
- add ebx, eax
- mov eax, DWORD PTR 20[esi]
- adc ecx, edx
- mov edx, DWORD PTR 28[edi]
- adc ebp, 0
- ; mul a[5]*b[7]
- mul edx
- add ebx, eax
- mov eax, DWORD PTR 20[esp]
- adc ecx, edx
- mov edx, DWORD PTR 24[edi]
- adc ebp, 0
- mov DWORD PTR 48[eax],ebx
- mov eax, DWORD PTR 28[esi]
- ; saved r[12]
- ; ################## Calculate word 13
- xor ebx, ebx
- ; mul a[7]*b[6]
- mul edx
- add ecx, eax
- mov eax, DWORD PTR 24[esi]
- adc ebp, edx
- mov edx, DWORD PTR 28[edi]
- adc ebx, 0
- ; mul a[6]*b[7]
- mul edx
- add ecx, eax
- mov eax, DWORD PTR 20[esp]
- adc ebp, edx
- mov edx, DWORD PTR 28[edi]
- adc ebx, 0
- mov DWORD PTR 52[eax],ecx
- mov eax, DWORD PTR 28[esi]
- ; saved r[13]
- ; ################## Calculate word 14
- xor ecx, ecx
- ; mul a[7]*b[7]
- mul edx
- add ebp, eax
- mov eax, DWORD PTR 20[esp]
- adc ebx, edx
- adc ecx, 0
- mov DWORD PTR 56[eax],ebp
- ; saved r[14]
- ; save r[15]
- mov DWORD PTR 60[eax],ebx
- pop ebx
- pop ebp
- pop edi
- pop esi
- ret
-_bn_mul_comba8 ENDP
-_TEXT ENDS
-_TEXT SEGMENT
-PUBLIC _bn_mul_comba4
-
-_bn_mul_comba4 PROC NEAR
- push esi
- mov esi, DWORD PTR 12[esp]
- push edi
- mov edi, DWORD PTR 20[esp]
- push ebp
- push ebx
- xor ebx, ebx
- mov eax, DWORD PTR [esi]
- xor ecx, ecx
- mov edx, DWORD PTR [edi]
- ; ################## Calculate word 0
- xor ebp, ebp
- ; mul a[0]*b[0]
- mul edx
- add ebx, eax
- mov eax, DWORD PTR 20[esp]
- adc ecx, edx
- mov edx, DWORD PTR [edi]
- adc ebp, 0
- mov DWORD PTR [eax],ebx
- mov eax, DWORD PTR 4[esi]
- ; saved r[0]
- ; ################## Calculate word 1
- xor ebx, ebx
- ; mul a[1]*b[0]
- mul edx
- add ecx, eax
- mov eax, DWORD PTR [esi]
- adc ebp, edx
- mov edx, DWORD PTR 4[edi]
- adc ebx, 0
- ; mul a[0]*b[1]
- mul edx
- add ecx, eax
- mov eax, DWORD PTR 20[esp]
- adc ebp, edx
- mov edx, DWORD PTR [edi]
- adc ebx, 0
- mov DWORD PTR 4[eax],ecx
- mov eax, DWORD PTR 8[esi]
- ; saved r[1]
- ; ################## Calculate word 2
- xor ecx, ecx
- ; mul a[2]*b[0]
- mul edx
- add ebp, eax
- mov eax, DWORD PTR 4[esi]
- adc ebx, edx
- mov edx, DWORD PTR 4[edi]
- adc ecx, 0
- ; mul a[1]*b[1]
- mul edx
- add ebp, eax
- mov eax, DWORD PTR [esi]
- adc ebx, edx
- mov edx, DWORD PTR 8[edi]
- adc ecx, 0
- ; mul a[0]*b[2]
- mul edx
- add ebp, eax
- mov eax, DWORD PTR 20[esp]
- adc ebx, edx
- mov edx, DWORD PTR [edi]
- adc ecx, 0
- mov DWORD PTR 8[eax],ebp
- mov eax, DWORD PTR 12[esi]
- ; saved r[2]
- ; ################## Calculate word 3
- xor ebp, ebp
- ; mul a[3]*b[0]
- mul edx
- add ebx, eax
- mov eax, DWORD PTR 8[esi]
- adc ecx, edx
- mov edx, DWORD PTR 4[edi]
- adc ebp, 0
- ; mul a[2]*b[1]
- mul edx
- add ebx, eax
- mov eax, DWORD PTR 4[esi]
- adc ecx, edx
- mov edx, DWORD PTR 8[edi]
- adc ebp, 0
- ; mul a[1]*b[2]
- mul edx
- add ebx, eax
- mov eax, DWORD PTR [esi]
- adc ecx, edx
- mov edx, DWORD PTR 12[edi]
- adc ebp, 0
- ; mul a[0]*b[3]
- mul edx
- add ebx, eax
- mov eax, DWORD PTR 20[esp]
- adc ecx, edx
- mov edx, DWORD PTR 4[edi]
- adc ebp, 0
- mov DWORD PTR 12[eax],ebx
- mov eax, DWORD PTR 12[esi]
- ; saved r[3]
- ; ################## Calculate word 4
- xor ebx, ebx
- ; mul a[3]*b[1]
- mul edx
- add ecx, eax
- mov eax, DWORD PTR 8[esi]
- adc ebp, edx
- mov edx, DWORD PTR 8[edi]
- adc ebx, 0
- ; mul a[2]*b[2]
- mul edx
- add ecx, eax
- mov eax, DWORD PTR 4[esi]
- adc ebp, edx
- mov edx, DWORD PTR 12[edi]
- adc ebx, 0
- ; mul a[1]*b[3]
- mul edx
- add ecx, eax
- mov eax, DWORD PTR 20[esp]
- adc ebp, edx
- mov edx, DWORD PTR 8[edi]
- adc ebx, 0
- mov DWORD PTR 16[eax],ecx
- mov eax, DWORD PTR 12[esi]
- ; saved r[4]
- ; ################## Calculate word 5
- xor ecx, ecx
- ; mul a[3]*b[2]
- mul edx
- add ebp, eax
- mov eax, DWORD PTR 8[esi]
- adc ebx, edx
- mov edx, DWORD PTR 12[edi]
- adc ecx, 0
- ; mul a[2]*b[3]
- mul edx
- add ebp, eax
- mov eax, DWORD PTR 20[esp]
- adc ebx, edx
- mov edx, DWORD PTR 12[edi]
- adc ecx, 0
- mov DWORD PTR 20[eax],ebp
- mov eax, DWORD PTR 12[esi]
- ; saved r[5]
- ; ################## Calculate word 6
- xor ebp, ebp
- ; mul a[3]*b[3]
- mul edx
- add ebx, eax
- mov eax, DWORD PTR 20[esp]
- adc ecx, edx
- adc ebp, 0
- mov DWORD PTR 24[eax],ebx
- ; saved r[6]
- ; save r[7]
- mov DWORD PTR 28[eax],ecx
- pop ebx
- pop ebp
- pop edi
- pop esi
- ret
-_bn_mul_comba4 ENDP
-_TEXT ENDS
-_TEXT SEGMENT
-PUBLIC _bn_sqr_comba8
-
-_bn_sqr_comba8 PROC NEAR
- push esi
- push edi
- push ebp
- push ebx
- mov edi, DWORD PTR 20[esp]
- mov esi, DWORD PTR 24[esp]
- xor ebx, ebx
- xor ecx, ecx
- mov eax, DWORD PTR [esi]
- ; ############### Calculate word 0
- xor ebp, ebp
- ; sqr a[0]*a[0]
- mul eax
- add ebx, eax
- adc ecx, edx
- mov edx, DWORD PTR [esi]
- adc ebp, 0
- mov DWORD PTR [edi],ebx
- mov eax, DWORD PTR 4[esi]
- ; saved r[0]
- ; ############### Calculate word 1
- xor ebx, ebx
- ; sqr a[1]*a[0]
- mul edx
- add eax, eax
- adc edx, edx
- adc ebx, 0
- add ecx, eax
- adc ebp, edx
- mov eax, DWORD PTR 8[esi]
- adc ebx, 0
- mov DWORD PTR 4[edi],ecx
- mov edx, DWORD PTR [esi]
- ; saved r[1]
- ; ############### Calculate word 2
- xor ecx, ecx
- ; sqr a[2]*a[0]
- mul edx
- add eax, eax
- adc edx, edx
- adc ecx, 0
- add ebp, eax
- adc ebx, edx
- mov eax, DWORD PTR 4[esi]
- adc ecx, 0
- ; sqr a[1]*a[1]
- mul eax
- add ebp, eax
- adc ebx, edx
- mov edx, DWORD PTR [esi]
- adc ecx, 0
- mov DWORD PTR 8[edi],ebp
- mov eax, DWORD PTR 12[esi]
- ; saved r[2]
- ; ############### Calculate word 3
- xor ebp, ebp
- ; sqr a[3]*a[0]
- mul edx
- add eax, eax
- adc edx, edx
- adc ebp, 0
- add ebx, eax
- adc ecx, edx
- mov eax, DWORD PTR 8[esi]
- adc ebp, 0
- mov edx, DWORD PTR 4[esi]
- ; sqr a[2]*a[1]
- mul edx
- add eax, eax
- adc edx, edx
- adc ebp, 0
- add ebx, eax
- adc ecx, edx
- mov eax, DWORD PTR 16[esi]
- adc ebp, 0
- mov DWORD PTR 12[edi],ebx
- mov edx, DWORD PTR [esi]
- ; saved r[3]
- ; ############### Calculate word 4
- xor ebx, ebx
- ; sqr a[4]*a[0]
- mul edx
- add eax, eax
- adc edx, edx
- adc ebx, 0
- add ecx, eax
- adc ebp, edx
- mov eax, DWORD PTR 12[esi]
- adc ebx, 0
- mov edx, DWORD PTR 4[esi]
- ; sqr a[3]*a[1]
- mul edx
- add eax, eax
- adc edx, edx
- adc ebx, 0
- add ecx, eax
- adc ebp, edx
- mov eax, DWORD PTR 8[esi]
- adc ebx, 0
- ; sqr a[2]*a[2]
- mul eax
- add ecx, eax
- adc ebp, edx
- mov edx, DWORD PTR [esi]
- adc ebx, 0
- mov DWORD PTR 16[edi],ecx
- mov eax, DWORD PTR 20[esi]
- ; saved r[4]
- ; ############### Calculate word 5
- xor ecx, ecx
- ; sqr a[5]*a[0]
- mul edx
- add eax, eax
- adc edx, edx
- adc ecx, 0
- add ebp, eax
- adc ebx, edx
- mov eax, DWORD PTR 16[esi]
- adc ecx, 0
- mov edx, DWORD PTR 4[esi]
- ; sqr a[4]*a[1]
- mul edx
- add eax, eax
- adc edx, edx
- adc ecx, 0
- add ebp, eax
- adc ebx, edx
- mov eax, DWORD PTR 12[esi]
- adc ecx, 0
- mov edx, DWORD PTR 8[esi]
- ; sqr a[3]*a[2]
- mul edx
- add eax, eax
- adc edx, edx
- adc ecx, 0
- add ebp, eax
- adc ebx, edx
- mov eax, DWORD PTR 24[esi]
- adc ecx, 0
- mov DWORD PTR 20[edi],ebp
- mov edx, DWORD PTR [esi]
- ; saved r[5]
- ; ############### Calculate word 6
- xor ebp, ebp
- ; sqr a[6]*a[0]
- mul edx
- add eax, eax
- adc edx, edx
- adc ebp, 0
- add ebx, eax
- adc ecx, edx
- mov eax, DWORD PTR 20[esi]
- adc ebp, 0
- mov edx, DWORD PTR 4[esi]
- ; sqr a[5]*a[1]
- mul edx
- add eax, eax
- adc edx, edx
- adc ebp, 0
- add ebx, eax
- adc ecx, edx
- mov eax, DWORD PTR 16[esi]
- adc ebp, 0
- mov edx, DWORD PTR 8[esi]
- ; sqr a[4]*a[2]
- mul edx
- add eax, eax
- adc edx, edx
- adc ebp, 0
- add ebx, eax
- adc ecx, edx
- mov eax, DWORD PTR 12[esi]
- adc ebp, 0
- ; sqr a[3]*a[3]
- mul eax
- add ebx, eax
- adc ecx, edx
- mov edx, DWORD PTR [esi]
- adc ebp, 0
- mov DWORD PTR 24[edi],ebx
- mov eax, DWORD PTR 28[esi]
- ; saved r[6]
- ; ############### Calculate word 7
- xor ebx, ebx
- ; sqr a[7]*a[0]
- mul edx
- add eax, eax
- adc edx, edx
- adc ebx, 0
- add ecx, eax
- adc ebp, edx
- mov eax, DWORD PTR 24[esi]
- adc ebx, 0
- mov edx, DWORD PTR 4[esi]
- ; sqr a[6]*a[1]
- mul edx
- add eax, eax
- adc edx, edx
- adc ebx, 0
- add ecx, eax
- adc ebp, edx
- mov eax, DWORD PTR 20[esi]
- adc ebx, 0
- mov edx, DWORD PTR 8[esi]
- ; sqr a[5]*a[2]
- mul edx
- add eax, eax
- adc edx, edx
- adc ebx, 0
- add ecx, eax
- adc ebp, edx
- mov eax, DWORD PTR 16[esi]
- adc ebx, 0
- mov edx, DWORD PTR 12[esi]
- ; sqr a[4]*a[3]
- mul edx
- add eax, eax
- adc edx, edx
- adc ebx, 0
- add ecx, eax
- adc ebp, edx
- mov eax, DWORD PTR 28[esi]
- adc ebx, 0
- mov DWORD PTR 28[edi],ecx
- mov edx, DWORD PTR 4[esi]
- ; saved r[7]
- ; ############### Calculate word 8
- xor ecx, ecx
- ; sqr a[7]*a[1]
- mul edx
- add eax, eax
- adc edx, edx
- adc ecx, 0
- add ebp, eax
- adc ebx, edx
- mov eax, DWORD PTR 24[esi]
- adc ecx, 0
- mov edx, DWORD PTR 8[esi]
- ; sqr a[6]*a[2]
- mul edx
- add eax, eax
- adc edx, edx
- adc ecx, 0
- add ebp, eax
- adc ebx, edx
- mov eax, DWORD PTR 20[esi]
- adc ecx, 0
- mov edx, DWORD PTR 12[esi]
- ; sqr a[5]*a[3]
- mul edx
- add eax, eax
- adc edx, edx
- adc ecx, 0
- add ebp, eax
- adc ebx, edx
- mov eax, DWORD PTR 16[esi]
- adc ecx, 0
- ; sqr a[4]*a[4]
- mul eax
- add ebp, eax
- adc ebx, edx
- mov edx, DWORD PTR 8[esi]
- adc ecx, 0
- mov DWORD PTR 32[edi],ebp
- mov eax, DWORD PTR 28[esi]
- ; saved r[8]
- ; ############### Calculate word 9
- xor ebp, ebp
- ; sqr a[7]*a[2]
- mul edx
- add eax, eax
- adc edx, edx
- adc ebp, 0
- add ebx, eax
- adc ecx, edx
- mov eax, DWORD PTR 24[esi]
- adc ebp, 0
- mov edx, DWORD PTR 12[esi]
- ; sqr a[6]*a[3]
- mul edx
- add eax, eax
- adc edx, edx
- adc ebp, 0
- add ebx, eax
- adc ecx, edx
- mov eax, DWORD PTR 20[esi]
- adc ebp, 0
- mov edx, DWORD PTR 16[esi]
- ; sqr a[5]*a[4]
- mul edx
- add eax, eax
- adc edx, edx
- adc ebp, 0
- add ebx, eax
- adc ecx, edx
- mov eax, DWORD PTR 28[esi]
- adc ebp, 0
- mov DWORD PTR 36[edi],ebx
- mov edx, DWORD PTR 12[esi]
- ; saved r[9]
- ; ############### Calculate word 10
- xor ebx, ebx
- ; sqr a[7]*a[3]
- mul edx
- add eax, eax
- adc edx, edx
- adc ebx, 0
- add ecx, eax
- adc ebp, edx
- mov eax, DWORD PTR 24[esi]
- adc ebx, 0
- mov edx, DWORD PTR 16[esi]
- ; sqr a[6]*a[4]
- mul edx
- add eax, eax
- adc edx, edx
- adc ebx, 0
- add ecx, eax
- adc ebp, edx
- mov eax, DWORD PTR 20[esi]
- adc ebx, 0
- ; sqr a[5]*a[5]
- mul eax
- add ecx, eax
- adc ebp, edx
- mov edx, DWORD PTR 16[esi]
- adc ebx, 0
- mov DWORD PTR 40[edi],ecx
- mov eax, DWORD PTR 28[esi]
- ; saved r[10]
- ; ############### Calculate word 11
- xor ecx, ecx
- ; sqr a[7]*a[4]
- mul edx
- add eax, eax
- adc edx, edx
- adc ecx, 0
- add ebp, eax
- adc ebx, edx
- mov eax, DWORD PTR 24[esi]
- adc ecx, 0
- mov edx, DWORD PTR 20[esi]
- ; sqr a[6]*a[5]
- mul edx
- add eax, eax
- adc edx, edx
- adc ecx, 0
- add ebp, eax
- adc ebx, edx
- mov eax, DWORD PTR 28[esi]
- adc ecx, 0
- mov DWORD PTR 44[edi],ebp
- mov edx, DWORD PTR 20[esi]
- ; saved r[11]
- ; ############### Calculate word 12
- xor ebp, ebp
- ; sqr a[7]*a[5]
- mul edx
- add eax, eax
- adc edx, edx
- adc ebp, 0
- add ebx, eax
- adc ecx, edx
- mov eax, DWORD PTR 24[esi]
- adc ebp, 0
- ; sqr a[6]*a[6]
- mul eax
- add ebx, eax
- adc ecx, edx
- mov edx, DWORD PTR 24[esi]
- adc ebp, 0
- mov DWORD PTR 48[edi],ebx
- mov eax, DWORD PTR 28[esi]
- ; saved r[12]
- ; ############### Calculate word 13
- xor ebx, ebx
- ; sqr a[7]*a[6]
- mul edx
- add eax, eax
- adc edx, edx
- adc ebx, 0
- add ecx, eax
- adc ebp, edx
- mov eax, DWORD PTR 28[esi]
- adc ebx, 0
- mov DWORD PTR 52[edi],ecx
- ; saved r[13]
- ; ############### Calculate word 14
- xor ecx, ecx
- ; sqr a[7]*a[7]
- mul eax
- add ebp, eax
- adc ebx, edx
- adc ecx, 0
- mov DWORD PTR 56[edi],ebp
- ; saved r[14]
- mov DWORD PTR 60[edi],ebx
- pop ebx
- pop ebp
- pop edi
- pop esi
- ret
-_bn_sqr_comba8 ENDP
-_TEXT ENDS
-_TEXT SEGMENT
-PUBLIC _bn_sqr_comba4
-
-_bn_sqr_comba4 PROC NEAR
- push esi
- push edi
- push ebp
- push ebx
- mov edi, DWORD PTR 20[esp]
- mov esi, DWORD PTR 24[esp]
- xor ebx, ebx
- xor ecx, ecx
- mov eax, DWORD PTR [esi]
- ; ############### Calculate word 0
- xor ebp, ebp
- ; sqr a[0]*a[0]
- mul eax
- add ebx, eax
- adc ecx, edx
- mov edx, DWORD PTR [esi]
- adc ebp, 0
- mov DWORD PTR [edi],ebx
- mov eax, DWORD PTR 4[esi]
- ; saved r[0]
- ; ############### Calculate word 1
- xor ebx, ebx
- ; sqr a[1]*a[0]
- mul edx
- add eax, eax
- adc edx, edx
- adc ebx, 0
- add ecx, eax
- adc ebp, edx
- mov eax, DWORD PTR 8[esi]
- adc ebx, 0
- mov DWORD PTR 4[edi],ecx
- mov edx, DWORD PTR [esi]
- ; saved r[1]
- ; ############### Calculate word 2
- xor ecx, ecx
- ; sqr a[2]*a[0]
- mul edx
- add eax, eax
- adc edx, edx
- adc ecx, 0
- add ebp, eax
- adc ebx, edx
- mov eax, DWORD PTR 4[esi]
- adc ecx, 0
- ; sqr a[1]*a[1]
- mul eax
- add ebp, eax
- adc ebx, edx
- mov edx, DWORD PTR [esi]
- adc ecx, 0
- mov DWORD PTR 8[edi],ebp
- mov eax, DWORD PTR 12[esi]
- ; saved r[2]
- ; ############### Calculate word 3
- xor ebp, ebp
- ; sqr a[3]*a[0]
- mul edx
- add eax, eax
- adc edx, edx
- adc ebp, 0
- add ebx, eax
- adc ecx, edx
- mov eax, DWORD PTR 8[esi]
- adc ebp, 0
- mov edx, DWORD PTR 4[esi]
- ; sqr a[2]*a[1]
- mul edx
- add eax, eax
- adc edx, edx
- adc ebp, 0
- add ebx, eax
- adc ecx, edx
- mov eax, DWORD PTR 12[esi]
- adc ebp, 0
- mov DWORD PTR 12[edi],ebx
- mov edx, DWORD PTR 4[esi]
- ; saved r[3]
- ; ############### Calculate word 4
- xor ebx, ebx
- ; sqr a[3]*a[1]
- mul edx
- add eax, eax
- adc edx, edx
- adc ebx, 0
- add ecx, eax
- adc ebp, edx
- mov eax, DWORD PTR 8[esi]
- adc ebx, 0
- ; sqr a[2]*a[2]
- mul eax
- add ecx, eax
- adc ebp, edx
- mov edx, DWORD PTR 8[esi]
- adc ebx, 0
- mov DWORD PTR 16[edi],ecx
- mov eax, DWORD PTR 12[esi]
- ; saved r[4]
- ; ############### Calculate word 5
- xor ecx, ecx
- ; sqr a[3]*a[2]
- mul edx
- add eax, eax
- adc edx, edx
- adc ecx, 0
- add ebp, eax
- adc ebx, edx
- mov eax, DWORD PTR 12[esi]
- adc ecx, 0
- mov DWORD PTR 20[edi],ebp
- ; saved r[5]
- ; ############### Calculate word 6
- xor ebp, ebp
- ; sqr a[3]*a[3]
- mul eax
- add ebx, eax
- adc ecx, edx
- adc ebp, 0
- mov DWORD PTR 24[edi],ebx
- ; saved r[6]
- mov DWORD PTR 28[edi],ecx
- pop ebx
- pop ebp
- pop edi
- pop esi
- ret
-_bn_sqr_comba4 ENDP
-_TEXT ENDS
-END
+++ /dev/null
-; Static Name Aliases
-;
- TITLE bn_mulw.c
- .8087
-F_TEXT SEGMENT WORD PUBLIC 'CODE'
-F_TEXT ENDS
-_DATA SEGMENT WORD PUBLIC 'DATA'
-_DATA ENDS
-_CONST SEGMENT WORD PUBLIC 'CONST'
-_CONST ENDS
-_BSS SEGMENT WORD PUBLIC 'BSS'
-_BSS ENDS
-DGROUP GROUP _CONST, _BSS, _DATA
- ASSUME DS: DGROUP, SS: DGROUP
-F_TEXT SEGMENT
- ASSUME CS: F_TEXT
- PUBLIC _bn_mul_add_words
-_bn_mul_add_words PROC FAR
-; Line 58
- push bp
- push bx
- push si
- push di
- push ds
- push es
- mov bp,sp
-; w = 26
-; num = 24
-; ap = 20
-; rp = 16
- xor si,si ;c=0;
- mov di,WORD PTR [bp+16] ; load r
- mov ds,WORD PTR [bp+18] ; load r
- mov bx,WORD PTR [bp+20] ; load a
- mov es,WORD PTR [bp+22] ; load a
- mov cx,WORD PTR [bp+26] ; load w
- mov bp,WORD PTR [bp+24] ; load num
-
- shr bp,1 ; div count by 4 and do groups of 4
- shr bp,1
- je $L555
-
-$L546:
- mov ax,cx
- mul WORD PTR es:[bx] ; w* *a
- add ax,WORD PTR ds:[di] ; + *r
- adc dx,0
- adc ax,si
- adc dx,0
- mov WORD PTR ds:[di],ax
- mov si,dx
- ;
- mov ax,cx
- mul WORD PTR es:[bx+2] ; w* *a
- add ax,WORD PTR ds:[di+2] ; + *r
- adc dx,0
- adc ax,si
- adc dx,0
- mov WORD PTR ds:[di+2],ax
- mov si,dx
- ;
- mov ax,cx
- mul WORD PTR es:[bx+4] ; w* *a
- add ax,WORD PTR ds:[di+4] ; + *r
- adc dx,0
- adc ax,si
- adc dx,0
- mov WORD PTR ds:[di+4],ax
- mov si,dx
- ;
- mov ax,cx
- mul WORD PTR es:[bx+6] ; w* *a
- add ax,WORD PTR ds:[di+6] ; + *r
- adc dx,0
- adc ax,si
- adc dx,0
- mov WORD PTR ds:[di+6],ax
- mov si,dx
- ;
- add bx,8
- add di,8
- ;
- dec bp
- je $L555
- jmp $L546
-;
-;
-$L555:
- mov bp,sp
- mov bp,WORD PTR [bp+24] ; load num
- and bp,3
- dec bp
- js $L547
-
- mov ax,cx
- mul WORD PTR es:[bx] ; w* *a
- add ax,WORD PTR ds:[di] ; + *r
- adc dx,0
- adc ax,si
- adc dx,0
- mov WORD PTR ds:[di],ax
- mov si,dx
- dec bp
- js $L547 ; Note that we are now testing for -1
- ;
- mov ax,cx
- mul WORD PTR es:[bx+2] ; w* *a
- add ax,WORD PTR ds:[di+2] ; + *r
- adc dx,0
- adc ax,si
- adc dx,0
- mov WORD PTR ds:[di+2],ax
- mov si,dx
- dec bp
- js $L547
- ;
- mov ax,cx
- mul WORD PTR es:[bx+4] ; w* *a
- add ax,WORD PTR ds:[di+4] ; + *r
- adc dx,0
- adc ax,si
- adc dx,0
- mov WORD PTR ds:[di+4],ax
- mov si,dx
-$L547:
- mov ax,si
- pop es
- pop ds
- pop di
- pop si
- pop bx
- pop bp
- ret
- nop
-
-_bn_mul_add_words ENDP
- PUBLIC _bn_mul_words
-_bn_mul_words PROC FAR
-; Line 76
- push bp
- push bx
- push si
- push di
- push ds
- push es
- xor si,si
- mov bp,sp
- mov di,WORD PTR [bp+16] ; r
- mov ds,WORD PTR [bp+18]
- mov bx,WORD PTR [bp+20] ; a
- mov es,WORD PTR [bp+22]
- mov cx,WORD PTR [bp+26] ; w
- mov bp,WORD PTR [bp+24] ; num
-$FC743:
- mov ax,cx
- mul WORD PTR es:[bx]
- add ax,si
- adc dx,0
- mov WORD PTR ds:[di],ax
- mov si,dx
- dec bp
- je $L764
- ;
- mov ax,cx
- mul WORD PTR es:[bx+2]
- add ax,si
- adc dx,0
- mov WORD PTR ds:[di+2],ax
- mov si,dx
- dec bp
- je $L764
- ;
- mov ax,cx
- mul WORD PTR es:[bx+4]
- add ax,si
- adc dx,0
- mov WORD PTR ds:[di+4],ax
- mov si,dx
- dec bp
- je $L764
- ;
- mov ax,cx
- mul WORD PTR es:[bx+6]
- add ax,si
- adc dx,0
- mov WORD PTR ds:[di+6],ax
- mov si,dx
- dec bp
- je $L764
- ;
- add bx,8
- add di,8
- jmp $FC743
- nop
-$L764:
- mov ax,si
- pop es
- pop ds
- pop di
- pop si
- pop bx
- pop bp
- ret
- nop
-_bn_mul_words ENDP
- PUBLIC _bn_sqr_words
-_bn_sqr_words PROC FAR
-; Line 92
- push bp
- push bx
- push si
- push di
- push ds
- push es
- mov bp,sp
- mov si,WORD PTR [bp+16]
- mov ds,WORD PTR [bp+18]
- mov di,WORD PTR [bp+20]
- mov es,WORD PTR [bp+22]
- mov bx,WORD PTR [bp+24]
-
- mov bp,bx ; save a memory lookup later
- shr bx,1 ; div count by 4 and do groups of 4
- shr bx,1
- je $L666
-
-$L765:
- mov ax,WORD PTR es:[di]
- mul ax
- mov WORD PTR ds:[si],ax
- mov WORD PTR ds:[si+2],dx
- ;
- mov ax,WORD PTR es:[di+2]
- mul ax
- mov WORD PTR ds:[si+4],ax
- mov WORD PTR ds:[si+6],dx
- ;
- mov ax,WORD PTR es:[di+4]
- mul ax
- mov WORD PTR ds:[si+8],ax
- mov WORD PTR ds:[si+10],dx
- ;
- mov ax,WORD PTR es:[di+6]
- mul ax
- mov WORD PTR ds:[si+12],ax
- mov WORD PTR ds:[si+14],dx
- ;
- add di,8
- add si,16
- dec bx
- je $L666
- jmp $L765
-$L666:
- and bp,3
- dec bp ; The copied value of bx (num)
- js $L645
- ;
- mov ax,WORD PTR es:[di]
- mul ax
- mov WORD PTR ds:[si],ax
- mov WORD PTR ds:[si+2],dx
- dec bp
- js $L645
- ;
- mov ax,WORD PTR es:[di+2]
- mul ax
- mov WORD PTR ds:[si+4],ax
- mov WORD PTR ds:[si+6],dx
- dec bp
- js $L645
- ;
- mov ax,WORD PTR es:[di+4]
- mul ax
- mov WORD PTR ds:[si+8],ax
- mov WORD PTR ds:[si+10],dx
-$L645:
- pop es
- pop ds
- pop di
- pop si
- pop bx
- pop bp
- ret
-
-_bn_sqr_words ENDP
- PUBLIC _bn_div64
-_bn_div64 PROC FAR
- push bp
- mov bp,sp
- mov dx, WORD PTR [bp+6]
- mov ax, WORD PTR [bp+8]
- div WORD PTR [bp+10]
- pop bp
- ret
-_bn_div64 ENDP
-F_TEXT ENDS
-END
+++ /dev/null
-; Static Name Aliases
-;
- TITLE bn_mulw.c
- .386
-F_TEXT SEGMENT WORD USE16 PUBLIC 'CODE'
-F_TEXT ENDS
-_DATA SEGMENT WORD USE16 PUBLIC 'DATA'
-_DATA ENDS
-_CONST SEGMENT WORD USE16 PUBLIC 'CONST'
-_CONST ENDS
-_BSS SEGMENT WORD USE16 PUBLIC 'BSS'
-_BSS ENDS
-DGROUP GROUP _CONST, _BSS, _DATA
- ASSUME DS: DGROUP, SS: DGROUP
-F_TEXT SEGMENT
- ASSUME CS: F_TEXT
- PUBLIC _bn_mul_add_words
-_bn_mul_add_words PROC FAR
-; Line 58
- push bp
- push bx
- push esi
- push di
- push ds
- push es
- mov bp,sp
-; w = 28
-; num = 26
-; ap = 22
-; rp = 18
- xor esi,esi ;c=0;
- mov di,WORD PTR [bp+18] ; load r
- mov ds,WORD PTR [bp+20] ; load r
- mov bx,WORD PTR [bp+22] ; load a
- mov es,WORD PTR [bp+24] ; load a
- mov ecx,DWORD PTR [bp+28] ; load w
- mov bp,WORD PTR [bp+26] ; load num
- shr bp,1 ; div count by 4 and do groups of 4
- shr bp,1
- je $L555
-
-$L546:
- mov eax,ecx
- mul DWORD PTR es:[bx] ; w* *a
- add eax,DWORD PTR ds:[di] ; + *r
- adc edx,0
- adc eax,esi
- adc edx,0
- mov DWORD PTR ds:[di],eax
- mov esi,edx
- ;
- mov eax,ecx
- mul DWORD PTR es:[bx+4] ; w* *a
- add eax,DWORD PTR ds:[di+4] ; + *r
- adc edx,0
- adc eax,esi
- adc edx,0
- mov DWORD PTR ds:[di+4],eax
- mov esi,edx
- ;
- mov eax,ecx
- mul DWORD PTR es:[bx+8] ; w* *a
- add eax,DWORD PTR ds:[di+8] ; + *r
- adc edx,0
- adc eax,esi
- adc edx,0
- mov DWORD PTR ds:[di+8],eax
- mov esi,edx
- ;
- mov eax,ecx
- mul DWORD PTR es:[bx+12] ; w* *a
- add eax,DWORD PTR ds:[di+12] ; + *r
- adc edx,0
- adc eax,esi
- adc edx,0
- mov DWORD PTR ds:[di+12],eax
- mov esi,edx
- ;
- add bx,16
- add di,16
- ;
- dec bp
- je $L555
- jmp $L546
-;
-;
-$L555:
- mov bp,sp
- mov bp,WORD PTR [bp+26] ; load num
- and bp,3
- dec bp
- js $L547m
-
- mov eax,ecx
- mul DWORD PTR es:[bx] ; w* *a
- add eax,DWORD PTR ds:[di] ; + *r
- adc edx,0
- adc eax,esi
- adc edx,0
- mov DWORD PTR ds:[di],eax
- mov esi,edx
- dec bp
- js $L547m ; Note that we are now testing for -1
- ;
- mov eax,ecx
- mul DWORD PTR es:[bx+4] ; w* *a
- add eax,DWORD PTR ds:[di+4] ; + *r
- adc edx,0
- adc eax,esi
- adc edx,0
- mov DWORD PTR ds:[di+4],eax
- mov esi,edx
- dec bp
- js $L547m
- ;
- mov eax,ecx
- mul DWORD PTR es:[bx+8] ; w* *a
- add eax,DWORD PTR ds:[di+8] ; + *r
- adc edx,0
- adc eax,esi
- adc edx,0
- mov DWORD PTR ds:[di+8],eax
- mov esi,edx
-$L547m:
- mov eax,esi
- mov edx,esi
- shr edx,16
- pop es
- pop ds
- pop di
- pop esi
- pop bx
- pop bp
- ret
- nop
-_bn_mul_add_words ENDP
-
- PUBLIC _bn_mul_words
-_bn_mul_words PROC FAR
-; Line 76
- push bp
- push bx
- push esi
- push di
- push ds
- push es
- xor esi,esi
- mov bp,sp
- mov di,WORD PTR [bp+18] ; r
- mov ds,WORD PTR [bp+20]
- mov bx,WORD PTR [bp+22] ; a
- mov es,WORD PTR [bp+24]
- mov ecx,DWORD PTR [bp+28] ; w
- mov bp,WORD PTR [bp+26] ; num
-
-$FC743:
- mov eax,ecx
- mul DWORD PTR es:[bx]
- add eax,esi
- adc edx,0
- mov DWORD PTR ds:[di],eax
- mov esi,edx
- dec bp
- je $L764
- ;
- mov eax,ecx
- mul DWORD PTR es:[bx+4]
- add eax,esi
- adc edx,0
- mov DWORD PTR ds:[di+4],eax
- mov esi,edx
- dec bp
- je $L764
- ;
- mov eax,ecx
- mul DWORD PTR es:[bx+8]
- add eax,esi
- adc edx,0
- mov DWORD PTR ds:[di+8],eax
- mov esi,edx
- dec bp
- je $L764
- ;
- mov eax,ecx
- mul DWORD PTR es:[bx+12]
- add eax,esi
- adc edx,0
- mov DWORD PTR ds:[di+12],eax
- mov esi,edx
- dec bp
- je $L764
- ;
- add bx,16
- add di,16
- jmp $FC743
- nop
-$L764:
- mov eax,esi
- mov edx,esi
- shr edx,16
- pop es
- pop ds
- pop di
- pop esi
- pop bx
- pop bp
- ret
- nop
-_bn_mul_words ENDP
- PUBLIC _bn_sqr_words
-_bn_sqr_words PROC FAR
-; Line 92
- push bp
- push bx
- push si
- push di
- push ds
- push es
- mov bp,sp
- mov si,WORD PTR [bp+16]
- mov ds,WORD PTR [bp+18]
- mov di,WORD PTR [bp+20]
- mov es,WORD PTR [bp+22]
- mov bx,WORD PTR [bp+24]
-
- mov bp,bx ; save a memory lookup later
- shr bx,1 ; div count by 4 and do groups of 4
- shr bx,1
- je $L666
-
-$L765:
- mov eax,DWORD PTR es:[di]
- mul eax
- mov DWORD PTR ds:[si],eax
- mov DWORD PTR ds:[si+4],edx
- ;
- mov eax,DWORD PTR es:[di+4]
- mul eax
- mov DWORD PTR ds:[si+8],eax
- mov DWORD PTR ds:[si+12],edx
- ;
- mov eax,DWORD PTR es:[di+8]
- mul eax
- mov DWORD PTR ds:[si+16],eax
- mov DWORD PTR ds:[si+20],edx
- ;
- mov eax,DWORD PTR es:[di+12]
- mul eax
- mov DWORD PTR ds:[si+24],eax
- mov DWORD PTR ds:[si+28],edx
- ;
- add di,16
- add si,32
- dec bx
- je $L666
- jmp $L765
-$L666:
- and bp,3
- dec bp ; The copied value of bx (num)
- js $L645
- ;
- mov eax,DWORD PTR es:[di]
- mul eax
- mov DWORD PTR ds:[si],eax
- mov DWORD PTR ds:[si+4],edx
- dec bp
- js $L645
- ;
- mov eax,DWORD PTR es:[di+4]
- mul eax
- mov DWORD PTR ds:[si+8],eax
- mov DWORD PTR ds:[si+12],edx
- dec bp
- js $L645
- ;
- mov eax,DWORD PTR es:[di+8]
- mul eax
- mov DWORD PTR ds:[si+16],eax
- mov DWORD PTR ds:[si+20],edx
-$L645:
- pop es
- pop ds
- pop di
- pop si
- pop bx
- pop bp
- ret
-_bn_sqr_words ENDP
-
- PUBLIC _bn_div64
-_bn_div64 PROC FAR
- push bp
- mov bp,sp
- mov edx, DWORD PTR [bp+6]
- mov eax, DWORD PTR [bp+10]
- div DWORD PTR [bp+14]
- mov edx,eax
- shr edx,16
- pop bp
- ret
-_bn_div64 ENDP
-
- PUBLIC _bn_add_words
-_bn_add_words PROC FAR
-; Line 58
- push bp
- push bx
- push esi
- push di
- push ds
- push es
- mov bp,sp
-; w = 28
-; num = 26
-; ap = 22
-; rp = 18
- xor esi,esi ;c=0;
- mov bx,WORD PTR [bp+18] ; load low r
- mov si,WORD PTR [bp+22] ; load a
- mov es,WORD PTR [bp+24] ; load a
- mov di,WORD PTR [bp+26] ; load b
- mov ds,WORD PTR [bp+28] ; load b
-
- mov dx,WORD PTR [bp+30] ; load num
- xor ecx,ecx
- dec dx
- js $L547a
-
-$L5477:
- mov eax,DWORD PTR es:[si] ; *a
- add eax,ecx
- mov ecx,0
- adc ecx,0
- add si,4 ; a++
- add eax,DWORD PTR ds:[di] ; + *b
- adc ecx,0
- mov ds,WORD PTR [bp+20]
- add di,4
- mov DWORD PTR ds:[bx],eax
- mov ds,WORD PTR [bp+28]
- add bx,4
- dec dx
- js $L547a ; Note that we are now testing for -1
- jmp $L5477
- ;
-$L547a:
- mov eax,ecx
- mov edx,ecx
- shr edx,16
- pop es
- pop ds
- pop di
- pop esi
- pop bx
- pop bp
- ret
- nop
-_bn_add_words ENDP
-F_TEXT ENDS
-END
+++ /dev/null
- ; Don't even think of reading this code
- ; It was automatically generated by cast-586.pl
- ; Which is a perl program used to generate the x86 assember for
- ; any of elf, a.out, BSDI,Win32, or Solaris
- ; eric <eay@cryptsoft.com>
- ;
- TITLE cast-586.asm
- .486
-.model FLAT
-_TEXT SEGMENT
-PUBLIC _CAST_encrypt
-EXTERN _CAST_S_table0:DWORD
-EXTERN _CAST_S_table1:DWORD
-EXTERN _CAST_S_table2:DWORD
-EXTERN _CAST_S_table3:DWORD
-
-_CAST_encrypt PROC NEAR
- ;
- push ebp
- push ebx
- mov ebx, DWORD PTR 12[esp]
- mov ebp, DWORD PTR 16[esp]
- push esi
- push edi
- ; Load the 2 words
- mov edi, DWORD PTR [ebx]
- mov esi, DWORD PTR 4[ebx]
- ; Get short key flag
- mov eax, DWORD PTR 128[ebp]
- push eax
- xor eax, eax
- ; round 0
- mov edx, DWORD PTR [ebp]
- mov ecx, DWORD PTR 4[ebp]
- add edx, esi
- rol edx, cl
- mov ebx, edx
- xor ecx, ecx
- mov cl, dh
- and ebx, 255
- shr edx, 16
- xor eax, eax
- mov al, dh
- and edx, 255
- mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
- mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
- xor ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table2[eax*4]
- sub ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table3[edx*4]
- add ecx, ebx
- xor edi, ecx
- ; round 1
- mov edx, DWORD PTR 8[ebp]
- mov ecx, DWORD PTR 12[ebp]
- xor edx, edi
- rol edx, cl
- mov ebx, edx
- xor ecx, ecx
- mov cl, dh
- and ebx, 255
- shr edx, 16
- xor eax, eax
- mov al, dh
- and edx, 255
- mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
- mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
- sub ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table2[eax*4]
- add ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table3[edx*4]
- xor ecx, ebx
- xor esi, ecx
- ; round 2
- mov edx, DWORD PTR 16[ebp]
- mov ecx, DWORD PTR 20[ebp]
- sub edx, esi
- rol edx, cl
- mov ebx, edx
- xor ecx, ecx
- mov cl, dh
- and ebx, 255
- shr edx, 16
- xor eax, eax
- mov al, dh
- and edx, 255
- mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
- mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
- add ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table2[eax*4]
- xor ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table3[edx*4]
- sub ecx, ebx
- xor edi, ecx
- ; round 3
- mov edx, DWORD PTR 24[ebp]
- mov ecx, DWORD PTR 28[ebp]
- add edx, edi
- rol edx, cl
- mov ebx, edx
- xor ecx, ecx
- mov cl, dh
- and ebx, 255
- shr edx, 16
- xor eax, eax
- mov al, dh
- and edx, 255
- mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
- mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
- xor ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table2[eax*4]
- sub ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table3[edx*4]
- add ecx, ebx
- xor esi, ecx
- ; round 4
- mov edx, DWORD PTR 32[ebp]
- mov ecx, DWORD PTR 36[ebp]
- xor edx, esi
- rol edx, cl
- mov ebx, edx
- xor ecx, ecx
- mov cl, dh
- and ebx, 255
- shr edx, 16
- xor eax, eax
- mov al, dh
- and edx, 255
- mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
- mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
- sub ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table2[eax*4]
- add ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table3[edx*4]
- xor ecx, ebx
- xor edi, ecx
- ; round 5
- mov edx, DWORD PTR 40[ebp]
- mov ecx, DWORD PTR 44[ebp]
- sub edx, edi
- rol edx, cl
- mov ebx, edx
- xor ecx, ecx
- mov cl, dh
- and ebx, 255
- shr edx, 16
- xor eax, eax
- mov al, dh
- and edx, 255
- mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
- mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
- add ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table2[eax*4]
- xor ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table3[edx*4]
- sub ecx, ebx
- xor esi, ecx
- ; round 6
- mov edx, DWORD PTR 48[ebp]
- mov ecx, DWORD PTR 52[ebp]
- add edx, esi
- rol edx, cl
- mov ebx, edx
- xor ecx, ecx
- mov cl, dh
- and ebx, 255
- shr edx, 16
- xor eax, eax
- mov al, dh
- and edx, 255
- mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
- mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
- xor ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table2[eax*4]
- sub ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table3[edx*4]
- add ecx, ebx
- xor edi, ecx
- ; round 7
- mov edx, DWORD PTR 56[ebp]
- mov ecx, DWORD PTR 60[ebp]
- xor edx, edi
- rol edx, cl
- mov ebx, edx
- xor ecx, ecx
- mov cl, dh
- and ebx, 255
- shr edx, 16
- xor eax, eax
- mov al, dh
- and edx, 255
- mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
- mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
- sub ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table2[eax*4]
- add ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table3[edx*4]
- xor ecx, ebx
- xor esi, ecx
- ; round 8
- mov edx, DWORD PTR 64[ebp]
- mov ecx, DWORD PTR 68[ebp]
- sub edx, esi
- rol edx, cl
- mov ebx, edx
- xor ecx, ecx
- mov cl, dh
- and ebx, 255
- shr edx, 16
- xor eax, eax
- mov al, dh
- and edx, 255
- mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
- mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
- add ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table2[eax*4]
- xor ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table3[edx*4]
- sub ecx, ebx
- xor edi, ecx
- ; round 9
- mov edx, DWORD PTR 72[ebp]
- mov ecx, DWORD PTR 76[ebp]
- add edx, edi
- rol edx, cl
- mov ebx, edx
- xor ecx, ecx
- mov cl, dh
- and ebx, 255
- shr edx, 16
- xor eax, eax
- mov al, dh
- and edx, 255
- mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
- mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
- xor ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table2[eax*4]
- sub ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table3[edx*4]
- add ecx, ebx
- xor esi, ecx
- ; round 10
- mov edx, DWORD PTR 80[ebp]
- mov ecx, DWORD PTR 84[ebp]
- xor edx, esi
- rol edx, cl
- mov ebx, edx
- xor ecx, ecx
- mov cl, dh
- and ebx, 255
- shr edx, 16
- xor eax, eax
- mov al, dh
- and edx, 255
- mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
- mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
- sub ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table2[eax*4]
- add ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table3[edx*4]
- xor ecx, ebx
- xor edi, ecx
- ; round 11
- mov edx, DWORD PTR 88[ebp]
- mov ecx, DWORD PTR 92[ebp]
- sub edx, edi
- rol edx, cl
- mov ebx, edx
- xor ecx, ecx
- mov cl, dh
- and ebx, 255
- shr edx, 16
- xor eax, eax
- mov al, dh
- and edx, 255
- mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
- mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
- add ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table2[eax*4]
- xor ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table3[edx*4]
- sub ecx, ebx
- xor esi, ecx
- ; test short key flag
- pop edx
- or edx, edx
- jnz $L000cast_enc_done
- ; round 12
- mov edx, DWORD PTR 96[ebp]
- mov ecx, DWORD PTR 100[ebp]
- add edx, esi
- rol edx, cl
- mov ebx, edx
- xor ecx, ecx
- mov cl, dh
- and ebx, 255
- shr edx, 16
- xor eax, eax
- mov al, dh
- and edx, 255
- mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
- mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
- xor ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table2[eax*4]
- sub ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table3[edx*4]
- add ecx, ebx
- xor edi, ecx
- ; round 13
- mov edx, DWORD PTR 104[ebp]
- mov ecx, DWORD PTR 108[ebp]
- xor edx, edi
- rol edx, cl
- mov ebx, edx
- xor ecx, ecx
- mov cl, dh
- and ebx, 255
- shr edx, 16
- xor eax, eax
- mov al, dh
- and edx, 255
- mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
- mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
- sub ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table2[eax*4]
- add ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table3[edx*4]
- xor ecx, ebx
- xor esi, ecx
- ; round 14
- mov edx, DWORD PTR 112[ebp]
- mov ecx, DWORD PTR 116[ebp]
- sub edx, esi
- rol edx, cl
- mov ebx, edx
- xor ecx, ecx
- mov cl, dh
- and ebx, 255
- shr edx, 16
- xor eax, eax
- mov al, dh
- and edx, 255
- mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
- mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
- add ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table2[eax*4]
- xor ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table3[edx*4]
- sub ecx, ebx
- xor edi, ecx
- ; round 15
- mov edx, DWORD PTR 120[ebp]
- mov ecx, DWORD PTR 124[ebp]
- add edx, edi
- rol edx, cl
- mov ebx, edx
- xor ecx, ecx
- mov cl, dh
- and ebx, 255
- shr edx, 16
- xor eax, eax
- mov al, dh
- and edx, 255
- mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
- mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
- xor ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table2[eax*4]
- sub ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table3[edx*4]
- add ecx, ebx
- xor esi, ecx
-$L000cast_enc_done:
- nop
- mov eax, DWORD PTR 20[esp]
- mov DWORD PTR 4[eax],edi
- mov DWORD PTR [eax],esi
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_CAST_encrypt ENDP
-_TEXT ENDS
-_TEXT SEGMENT
-PUBLIC _CAST_decrypt
-EXTERN _CAST_S_table0:DWORD
-EXTERN _CAST_S_table1:DWORD
-EXTERN _CAST_S_table2:DWORD
-EXTERN _CAST_S_table3:DWORD
-
-_CAST_decrypt PROC NEAR
- ;
- push ebp
- push ebx
- mov ebx, DWORD PTR 12[esp]
- mov ebp, DWORD PTR 16[esp]
- push esi
- push edi
- ; Load the 2 words
- mov edi, DWORD PTR [ebx]
- mov esi, DWORD PTR 4[ebx]
- ; Get short key flag
- mov eax, DWORD PTR 128[ebp]
- or eax, eax
- jnz $L001cast_dec_skip
- xor eax, eax
- ; round 15
- mov edx, DWORD PTR 120[ebp]
- mov ecx, DWORD PTR 124[ebp]
- add edx, esi
- rol edx, cl
- mov ebx, edx
- xor ecx, ecx
- mov cl, dh
- and ebx, 255
- shr edx, 16
- xor eax, eax
- mov al, dh
- and edx, 255
- mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
- mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
- xor ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table2[eax*4]
- sub ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table3[edx*4]
- add ecx, ebx
- xor edi, ecx
- ; round 14
- mov edx, DWORD PTR 112[ebp]
- mov ecx, DWORD PTR 116[ebp]
- sub edx, edi
- rol edx, cl
- mov ebx, edx
- xor ecx, ecx
- mov cl, dh
- and ebx, 255
- shr edx, 16
- xor eax, eax
- mov al, dh
- and edx, 255
- mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
- mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
- add ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table2[eax*4]
- xor ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table3[edx*4]
- sub ecx, ebx
- xor esi, ecx
- ; round 13
- mov edx, DWORD PTR 104[ebp]
- mov ecx, DWORD PTR 108[ebp]
- xor edx, esi
- rol edx, cl
- mov ebx, edx
- xor ecx, ecx
- mov cl, dh
- and ebx, 255
- shr edx, 16
- xor eax, eax
- mov al, dh
- and edx, 255
- mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
- mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
- sub ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table2[eax*4]
- add ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table3[edx*4]
- xor ecx, ebx
- xor edi, ecx
- ; round 12
- mov edx, DWORD PTR 96[ebp]
- mov ecx, DWORD PTR 100[ebp]
- add edx, edi
- rol edx, cl
- mov ebx, edx
- xor ecx, ecx
- mov cl, dh
- and ebx, 255
- shr edx, 16
- xor eax, eax
- mov al, dh
- and edx, 255
- mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
- mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
- xor ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table2[eax*4]
- sub ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table3[edx*4]
- add ecx, ebx
- xor esi, ecx
-$L001cast_dec_skip:
- ; round 11
- mov edx, DWORD PTR 88[ebp]
- mov ecx, DWORD PTR 92[ebp]
- sub edx, esi
- rol edx, cl
- mov ebx, edx
- xor ecx, ecx
- mov cl, dh
- and ebx, 255
- shr edx, 16
- xor eax, eax
- mov al, dh
- and edx, 255
- mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
- mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
- add ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table2[eax*4]
- xor ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table3[edx*4]
- sub ecx, ebx
- xor edi, ecx
- ; round 10
- mov edx, DWORD PTR 80[ebp]
- mov ecx, DWORD PTR 84[ebp]
- xor edx, edi
- rol edx, cl
- mov ebx, edx
- xor ecx, ecx
- mov cl, dh
- and ebx, 255
- shr edx, 16
- xor eax, eax
- mov al, dh
- and edx, 255
- mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
- mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
- sub ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table2[eax*4]
- add ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table3[edx*4]
- xor ecx, ebx
- xor esi, ecx
- ; round 9
- mov edx, DWORD PTR 72[ebp]
- mov ecx, DWORD PTR 76[ebp]
- add edx, esi
- rol edx, cl
- mov ebx, edx
- xor ecx, ecx
- mov cl, dh
- and ebx, 255
- shr edx, 16
- xor eax, eax
- mov al, dh
- and edx, 255
- mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
- mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
- xor ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table2[eax*4]
- sub ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table3[edx*4]
- add ecx, ebx
- xor edi, ecx
- ; round 8
- mov edx, DWORD PTR 64[ebp]
- mov ecx, DWORD PTR 68[ebp]
- sub edx, edi
- rol edx, cl
- mov ebx, edx
- xor ecx, ecx
- mov cl, dh
- and ebx, 255
- shr edx, 16
- xor eax, eax
- mov al, dh
- and edx, 255
- mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
- mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
- add ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table2[eax*4]
- xor ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table3[edx*4]
- sub ecx, ebx
- xor esi, ecx
- ; round 7
- mov edx, DWORD PTR 56[ebp]
- mov ecx, DWORD PTR 60[ebp]
- xor edx, esi
- rol edx, cl
- mov ebx, edx
- xor ecx, ecx
- mov cl, dh
- and ebx, 255
- shr edx, 16
- xor eax, eax
- mov al, dh
- and edx, 255
- mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
- mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
- sub ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table2[eax*4]
- add ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table3[edx*4]
- xor ecx, ebx
- xor edi, ecx
- ; round 6
- mov edx, DWORD PTR 48[ebp]
- mov ecx, DWORD PTR 52[ebp]
- add edx, edi
- rol edx, cl
- mov ebx, edx
- xor ecx, ecx
- mov cl, dh
- and ebx, 255
- shr edx, 16
- xor eax, eax
- mov al, dh
- and edx, 255
- mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
- mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
- xor ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table2[eax*4]
- sub ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table3[edx*4]
- add ecx, ebx
- xor esi, ecx
- ; round 5
- mov edx, DWORD PTR 40[ebp]
- mov ecx, DWORD PTR 44[ebp]
- sub edx, esi
- rol edx, cl
- mov ebx, edx
- xor ecx, ecx
- mov cl, dh
- and ebx, 255
- shr edx, 16
- xor eax, eax
- mov al, dh
- and edx, 255
- mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
- mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
- add ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table2[eax*4]
- xor ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table3[edx*4]
- sub ecx, ebx
- xor edi, ecx
- ; round 4
- mov edx, DWORD PTR 32[ebp]
- mov ecx, DWORD PTR 36[ebp]
- xor edx, edi
- rol edx, cl
- mov ebx, edx
- xor ecx, ecx
- mov cl, dh
- and ebx, 255
- shr edx, 16
- xor eax, eax
- mov al, dh
- and edx, 255
- mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
- mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
- sub ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table2[eax*4]
- add ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table3[edx*4]
- xor ecx, ebx
- xor esi, ecx
- ; round 3
- mov edx, DWORD PTR 24[ebp]
- mov ecx, DWORD PTR 28[ebp]
- add edx, esi
- rol edx, cl
- mov ebx, edx
- xor ecx, ecx
- mov cl, dh
- and ebx, 255
- shr edx, 16
- xor eax, eax
- mov al, dh
- and edx, 255
- mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
- mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
- xor ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table2[eax*4]
- sub ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table3[edx*4]
- add ecx, ebx
- xor edi, ecx
- ; round 2
- mov edx, DWORD PTR 16[ebp]
- mov ecx, DWORD PTR 20[ebp]
- sub edx, edi
- rol edx, cl
- mov ebx, edx
- xor ecx, ecx
- mov cl, dh
- and ebx, 255
- shr edx, 16
- xor eax, eax
- mov al, dh
- and edx, 255
- mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
- mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
- add ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table2[eax*4]
- xor ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table3[edx*4]
- sub ecx, ebx
- xor esi, ecx
- ; round 1
- mov edx, DWORD PTR 8[ebp]
- mov ecx, DWORD PTR 12[ebp]
- xor edx, esi
- rol edx, cl
- mov ebx, edx
- xor ecx, ecx
- mov cl, dh
- and ebx, 255
- shr edx, 16
- xor eax, eax
- mov al, dh
- and edx, 255
- mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
- mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
- sub ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table2[eax*4]
- add ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table3[edx*4]
- xor ecx, ebx
- xor edi, ecx
- ; round 0
- mov edx, DWORD PTR [ebp]
- mov ecx, DWORD PTR 4[ebp]
- add edx, edi
- rol edx, cl
- mov ebx, edx
- xor ecx, ecx
- mov cl, dh
- and ebx, 255
- shr edx, 16
- xor eax, eax
- mov al, dh
- and edx, 255
- mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
- mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
- xor ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table2[eax*4]
- sub ecx, ebx
- mov ebx, DWORD PTR _CAST_S_table3[edx*4]
- add ecx, ebx
- xor esi, ecx
- nop
- mov eax, DWORD PTR 20[esp]
- mov DWORD PTR 4[eax],edi
- mov DWORD PTR [eax],esi
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_CAST_decrypt ENDP
-_TEXT ENDS
-_TEXT SEGMENT
-PUBLIC _CAST_cbc_encrypt
-
-_CAST_cbc_encrypt PROC NEAR
- ;
- push ebp
- push ebx
- push esi
- push edi
- mov ebp, DWORD PTR 28[esp]
- ; getting iv ptr from parameter 4
- mov ebx, DWORD PTR 36[esp]
- mov esi, DWORD PTR [ebx]
- mov edi, DWORD PTR 4[ebx]
- push edi
- push esi
- push edi
- push esi
- mov ebx, esp
- mov esi, DWORD PTR 36[esp]
- mov edi, DWORD PTR 40[esp]
- ; getting encrypt flag from parameter 5
- mov ecx, DWORD PTR 56[esp]
- ; get and push parameter 3
- mov eax, DWORD PTR 48[esp]
- push eax
- push ebx
- cmp ecx, 0
- jz $L002decrypt
- and ebp, 4294967288
- mov eax, DWORD PTR 8[esp]
- mov ebx, DWORD PTR 12[esp]
- jz $L003encrypt_finish
-L004encrypt_loop:
- mov ecx, DWORD PTR [esi]
- mov edx, DWORD PTR 4[esi]
- xor eax, ecx
- xor ebx, edx
- bswap eax
- bswap ebx
- mov DWORD PTR 8[esp],eax
- mov DWORD PTR 12[esp],ebx
- call _CAST_encrypt
- mov eax, DWORD PTR 8[esp]
- mov ebx, DWORD PTR 12[esp]
- bswap eax
- bswap ebx
- mov DWORD PTR [edi],eax
- mov DWORD PTR 4[edi],ebx
- add esi, 8
- add edi, 8
- sub ebp, 8
- jnz L004encrypt_loop
-$L003encrypt_finish:
- mov ebp, DWORD PTR 52[esp]
- and ebp, 7
- jz $L005finish
- xor ecx, ecx
- xor edx, edx
- mov ebp, DWORD PTR $L006cbc_enc_jmp_table[ebp*4]
- jmp ebp
-L007ej7:
- xor edx, edx
- mov dh, BYTE PTR 6[esi]
- shl edx, 8
-L008ej6:
- mov dh, BYTE PTR 5[esi]
-L009ej5:
- mov dl, BYTE PTR 4[esi]
-L010ej4:
- mov ecx, DWORD PTR [esi]
- jmp $L011ejend
-L012ej3:
- mov ch, BYTE PTR 2[esi]
- xor ecx, ecx
- shl ecx, 8
-L013ej2:
- mov ch, BYTE PTR 1[esi]
-L014ej1:
- mov cl, BYTE PTR [esi]
-$L011ejend:
- xor eax, ecx
- xor ebx, edx
- bswap eax
- bswap ebx
- mov DWORD PTR 8[esp],eax
- mov DWORD PTR 12[esp],ebx
- call _CAST_encrypt
- mov eax, DWORD PTR 8[esp]
- mov ebx, DWORD PTR 12[esp]
- bswap eax
- bswap ebx
- mov DWORD PTR [edi],eax
- mov DWORD PTR 4[edi],ebx
- jmp $L005finish
-$L002decrypt:
- and ebp, 4294967288
- mov eax, DWORD PTR 16[esp]
- mov ebx, DWORD PTR 20[esp]
- jz $L015decrypt_finish
-L016decrypt_loop:
- mov eax, DWORD PTR [esi]
- mov ebx, DWORD PTR 4[esi]
- bswap eax
- bswap ebx
- mov DWORD PTR 8[esp],eax
- mov DWORD PTR 12[esp],ebx
- call _CAST_decrypt
- mov eax, DWORD PTR 8[esp]
- mov ebx, DWORD PTR 12[esp]
- bswap eax
- bswap ebx
- mov ecx, DWORD PTR 16[esp]
- mov edx, DWORD PTR 20[esp]
- xor ecx, eax
- xor edx, ebx
- mov eax, DWORD PTR [esi]
- mov ebx, DWORD PTR 4[esi]
- mov DWORD PTR [edi],ecx
- mov DWORD PTR 4[edi],edx
- mov DWORD PTR 16[esp],eax
- mov DWORD PTR 20[esp],ebx
- add esi, 8
- add edi, 8
- sub ebp, 8
- jnz L016decrypt_loop
-$L015decrypt_finish:
- mov ebp, DWORD PTR 52[esp]
- and ebp, 7
- jz $L005finish
- mov eax, DWORD PTR [esi]
- mov ebx, DWORD PTR 4[esi]
- bswap eax
- bswap ebx
- mov DWORD PTR 8[esp],eax
- mov DWORD PTR 12[esp],ebx
- call _CAST_decrypt
- mov eax, DWORD PTR 8[esp]
- mov ebx, DWORD PTR 12[esp]
- bswap eax
- bswap ebx
- mov ecx, DWORD PTR 16[esp]
- mov edx, DWORD PTR 20[esp]
- xor ecx, eax
- xor edx, ebx
- mov eax, DWORD PTR [esi]
- mov ebx, DWORD PTR 4[esi]
-L017dj7:
- ror edx, 16
- mov BYTE PTR 6[edi],dl
- shr edx, 16
-L018dj6:
- mov BYTE PTR 5[edi],dh
-L019dj5:
- mov BYTE PTR 4[edi],dl
-L020dj4:
- mov DWORD PTR [edi],ecx
- jmp $L021djend
-L022dj3:
- ror ecx, 16
- mov BYTE PTR 2[edi],cl
- shl ecx, 16
-L023dj2:
- mov BYTE PTR 1[esi],ch
-L024dj1:
- mov BYTE PTR [esi], cl
-$L021djend:
- jmp $L005finish
-$L005finish:
- mov ecx, DWORD PTR 60[esp]
- add esp, 24
- mov DWORD PTR [ecx],eax
- mov DWORD PTR 4[ecx],ebx
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-$L006cbc_enc_jmp_table:
- DD 0
- DD L014ej1
- DD L013ej2
- DD L012ej3
- DD L010ej4
- DD L009ej5
- DD L008ej6
- DD L007ej7
-L025cbc_dec_jmp_table:
- DD 0
- DD L024dj1
- DD L023dj2
- DD L022dj3
- DD L020dj4
- DD L019dj5
- DD L018dj6
- DD L017dj7
-_CAST_cbc_encrypt ENDP
-_TEXT ENDS
-END
+++ /dev/null
- ; Don't even think of reading this code
- ; It was automatically generated by des-586.pl
- ; Which is a perl program used to generate the x86 assember for
- ; any of elf, a.out, BSDI,Win32, or Solaris
- ; eric <eay@cryptsoft.com>
- ;
- TITLE des-586.asm
- .386
-.model FLAT
-_TEXT SEGMENT
-PUBLIC _des_encrypt
-EXTRN _des_SPtrans:DWORD
-_des_encrypt PROC NEAR
- push esi
- push edi
- ;
- ; Load the 2 words
- mov esi, DWORD PTR 12[esp]
- xor ecx, ecx
- push ebx
- push ebp
- mov eax, DWORD PTR [esi]
- mov ebx, DWORD PTR 28[esp]
- mov edi, DWORD PTR 4[esi]
- ;
- ; IP
- rol eax, 4
- mov esi, eax
- xor eax, edi
- and eax, 0f0f0f0f0h
- xor esi, eax
- xor edi, eax
- ;
- rol edi, 20
- mov eax, edi
- xor edi, esi
- and edi, 0fff0000fh
- xor eax, edi
- xor esi, edi
- ;
- rol eax, 14
- mov edi, eax
- xor eax, esi
- and eax, 033333333h
- xor edi, eax
- xor esi, eax
- ;
- rol esi, 22
- mov eax, esi
- xor esi, edi
- and esi, 003fc03fch
- xor eax, esi
- xor edi, esi
- ;
- rol eax, 9
- mov esi, eax
- xor eax, edi
- and eax, 0aaaaaaaah
- xor esi, eax
- xor edi, eax
- ;
- rol edi, 1
- mov ebp, DWORD PTR 24[esp]
- cmp ebx, 0
- je $L000start_decrypt
- ;
- ; Round 0
- mov eax, DWORD PTR [ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 4[ebp]
- xor eax, esi
- xor edx, esi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor edi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor edi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor edi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor edi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor edi, ebx
- ;
- ; Round 1
- mov eax, DWORD PTR 8[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 12[ebp]
- xor eax, edi
- xor edx, edi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor esi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor esi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor esi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor esi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor esi, ebx
- ;
- ; Round 2
- mov eax, DWORD PTR 16[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 20[ebp]
- xor eax, esi
- xor edx, esi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor edi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor edi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor edi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor edi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor edi, ebx
- ;
- ; Round 3
- mov eax, DWORD PTR 24[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 28[ebp]
- xor eax, edi
- xor edx, edi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor esi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor esi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor esi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor esi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor esi, ebx
- ;
- ; Round 4
- mov eax, DWORD PTR 32[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 36[ebp]
- xor eax, esi
- xor edx, esi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor edi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor edi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor edi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor edi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor edi, ebx
- ;
- ; Round 5
- mov eax, DWORD PTR 40[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 44[ebp]
- xor eax, edi
- xor edx, edi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor esi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor esi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor esi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor esi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor esi, ebx
- ;
- ; Round 6
- mov eax, DWORD PTR 48[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 52[ebp]
- xor eax, esi
- xor edx, esi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor edi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor edi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor edi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor edi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor edi, ebx
- ;
- ; Round 7
- mov eax, DWORD PTR 56[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 60[ebp]
- xor eax, edi
- xor edx, edi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor esi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor esi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor esi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor esi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor esi, ebx
- ;
- ; Round 8
- mov eax, DWORD PTR 64[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 68[ebp]
- xor eax, esi
- xor edx, esi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor edi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor edi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor edi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor edi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor edi, ebx
- ;
- ; Round 9
- mov eax, DWORD PTR 72[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 76[ebp]
- xor eax, edi
- xor edx, edi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor esi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor esi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor esi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor esi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor esi, ebx
- ;
- ; Round 10
- mov eax, DWORD PTR 80[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 84[ebp]
- xor eax, esi
- xor edx, esi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor edi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor edi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor edi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor edi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor edi, ebx
- ;
- ; Round 11
- mov eax, DWORD PTR 88[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 92[ebp]
- xor eax, edi
- xor edx, edi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor esi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor esi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor esi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor esi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor esi, ebx
- ;
- ; Round 12
- mov eax, DWORD PTR 96[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 100[ebp]
- xor eax, esi
- xor edx, esi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor edi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor edi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor edi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor edi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor edi, ebx
- ;
- ; Round 13
- mov eax, DWORD PTR 104[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 108[ebp]
- xor eax, edi
- xor edx, edi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor esi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor esi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor esi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor esi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor esi, ebx
- ;
- ; Round 14
- mov eax, DWORD PTR 112[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 116[ebp]
- xor eax, esi
- xor edx, esi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor edi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor edi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor edi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor edi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor edi, ebx
- ;
- ; Round 15
- mov eax, DWORD PTR 120[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 124[ebp]
- xor eax, edi
- xor edx, edi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor esi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor esi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor esi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor esi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor esi, ebx
- jmp $L001end
-$L000start_decrypt:
- ;
- ; Round 15
- mov eax, DWORD PTR 120[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 124[ebp]
- xor eax, esi
- xor edx, esi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor edi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor edi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor edi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor edi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor edi, ebx
- ;
- ; Round 14
- mov eax, DWORD PTR 112[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 116[ebp]
- xor eax, edi
- xor edx, edi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor esi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor esi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor esi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor esi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor esi, ebx
- ;
- ; Round 13
- mov eax, DWORD PTR 104[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 108[ebp]
- xor eax, esi
- xor edx, esi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor edi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor edi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor edi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor edi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor edi, ebx
- ;
- ; Round 12
- mov eax, DWORD PTR 96[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 100[ebp]
- xor eax, edi
- xor edx, edi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor esi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor esi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor esi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor esi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor esi, ebx
- ;
- ; Round 11
- mov eax, DWORD PTR 88[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 92[ebp]
- xor eax, esi
- xor edx, esi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor edi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor edi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor edi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor edi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor edi, ebx
- ;
- ; Round 10
- mov eax, DWORD PTR 80[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 84[ebp]
- xor eax, edi
- xor edx, edi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor esi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor esi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor esi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor esi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor esi, ebx
- ;
- ; Round 9
- mov eax, DWORD PTR 72[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 76[ebp]
- xor eax, esi
- xor edx, esi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor edi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor edi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor edi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor edi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor edi, ebx
- ;
- ; Round 8
- mov eax, DWORD PTR 64[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 68[ebp]
- xor eax, edi
- xor edx, edi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor esi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor esi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor esi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor esi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor esi, ebx
- ;
- ; Round 7
- mov eax, DWORD PTR 56[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 60[ebp]
- xor eax, esi
- xor edx, esi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor edi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor edi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor edi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor edi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor edi, ebx
- ;
- ; Round 6
- mov eax, DWORD PTR 48[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 52[ebp]
- xor eax, edi
- xor edx, edi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor esi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor esi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor esi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor esi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor esi, ebx
- ;
- ; Round 5
- mov eax, DWORD PTR 40[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 44[ebp]
- xor eax, esi
- xor edx, esi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor edi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor edi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor edi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor edi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor edi, ebx
- ;
- ; Round 4
- mov eax, DWORD PTR 32[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 36[ebp]
- xor eax, edi
- xor edx, edi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor esi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor esi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor esi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor esi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor esi, ebx
- ;
- ; Round 3
- mov eax, DWORD PTR 24[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 28[ebp]
- xor eax, esi
- xor edx, esi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor edi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor edi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor edi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor edi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor edi, ebx
- ;
- ; Round 2
- mov eax, DWORD PTR 16[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 20[ebp]
- xor eax, edi
- xor edx, edi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor esi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor esi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor esi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor esi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor esi, ebx
- ;
- ; Round 1
- mov eax, DWORD PTR 8[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 12[ebp]
- xor eax, esi
- xor edx, esi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor edi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor edi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor edi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor edi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor edi, ebx
- ;
- ; Round 0
- mov eax, DWORD PTR [ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 4[ebp]
- xor eax, edi
- xor edx, edi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor esi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor esi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor esi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor esi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor esi, ebx
-$L001end:
- ;
- ; FP
- mov edx, DWORD PTR 20[esp]
- ror esi, 1
- mov eax, edi
- xor edi, esi
- and edi, 0aaaaaaaah
- xor eax, edi
- xor esi, edi
- ;
- rol eax, 23
- mov edi, eax
- xor eax, esi
- and eax, 003fc03fch
- xor edi, eax
- xor esi, eax
- ;
- rol edi, 10
- mov eax, edi
- xor edi, esi
- and edi, 033333333h
- xor eax, edi
- xor esi, edi
- ;
- rol esi, 18
- mov edi, esi
- xor esi, eax
- and esi, 0fff0000fh
- xor edi, esi
- xor eax, esi
- ;
- rol edi, 12
- mov esi, edi
- xor edi, eax
- and edi, 0f0f0f0f0h
- xor esi, edi
- xor eax, edi
- ;
- ror eax, 4
- mov DWORD PTR [edx],eax
- mov DWORD PTR 4[edx],esi
- pop ebp
- pop ebx
- pop edi
- pop esi
- ret
-_des_encrypt ENDP
-_TEXT ENDS
-_TEXT SEGMENT
-PUBLIC _des_encrypt2
-EXTRN _des_SPtrans:DWORD
-_des_encrypt2 PROC NEAR
- push esi
- push edi
- ;
- ; Load the 2 words
- mov eax, DWORD PTR 12[esp]
- xor ecx, ecx
- push ebx
- push ebp
- mov esi, DWORD PTR [eax]
- mov ebx, DWORD PTR 28[esp]
- rol esi, 3
- mov edi, DWORD PTR 4[eax]
- rol edi, 3
- mov ebp, DWORD PTR 24[esp]
- cmp ebx, 0
- je $L002start_decrypt
- ;
- ; Round 0
- mov eax, DWORD PTR [ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 4[ebp]
- xor eax, esi
- xor edx, esi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor edi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor edi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor edi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor edi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor edi, ebx
- ;
- ; Round 1
- mov eax, DWORD PTR 8[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 12[ebp]
- xor eax, edi
- xor edx, edi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor esi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor esi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor esi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor esi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor esi, ebx
- ;
- ; Round 2
- mov eax, DWORD PTR 16[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 20[ebp]
- xor eax, esi
- xor edx, esi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor edi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor edi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor edi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor edi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor edi, ebx
- ;
- ; Round 3
- mov eax, DWORD PTR 24[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 28[ebp]
- xor eax, edi
- xor edx, edi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor esi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor esi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor esi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor esi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor esi, ebx
- ;
- ; Round 4
- mov eax, DWORD PTR 32[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 36[ebp]
- xor eax, esi
- xor edx, esi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor edi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor edi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor edi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor edi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor edi, ebx
- ;
- ; Round 5
- mov eax, DWORD PTR 40[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 44[ebp]
- xor eax, edi
- xor edx, edi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor esi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor esi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor esi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor esi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor esi, ebx
- ;
- ; Round 6
- mov eax, DWORD PTR 48[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 52[ebp]
- xor eax, esi
- xor edx, esi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor edi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor edi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor edi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor edi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor edi, ebx
- ;
- ; Round 7
- mov eax, DWORD PTR 56[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 60[ebp]
- xor eax, edi
- xor edx, edi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor esi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor esi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor esi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor esi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor esi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor esi, ebx
- ;
- ; Round 8
- mov eax, DWORD PTR 64[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 68[ebp]
- xor eax, esi
- xor edx, esi
- and eax, 0fcfcfcfch
- and edx, 0cfcfcfcfh
- mov bl, al
- mov cl, ah
- ror edx, 4
- mov ebp, DWORD PTR _des_SPtrans[ebx]
- mov bl, dl
- xor edi, ebp
- mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
- xor edi, ebp
- mov cl, dh
- shr eax, 16
- mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
- xor edi, ebp
- mov bl, ah
- shr edx, 16
- mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
- xor edi, ebp
- mov ebp, DWORD PTR 24[esp]
- mov cl, dh
- and eax, 0ffh
- and edx, 0ffh
- mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
- xor edi, ebx
- mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
- xor edi, ebx
- ;
- ; Round 9
- mov eax, DWORD PTR 72[ebp]
- xor ebx, ebx
- mov edx, DWORD PTR 76[ebp]
- xor eax, edi
- xor edx, &n