Advertisement
Breeze

LFSR 128-bit algorithm v2.0 (MMX required)

Mar 17th, 2012
1,130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; =========================================================================
  2. ; LFSR 128-bit algorithm (MMX required)
  3. ; by Andrey Breeze
  4. ; Implemented in x86 assembly using MASM32
  5. ; Bus taps: 128,126,101,99
  6. ; =========================================================================
  7. ; A linear feedback shift register (LFSR) is a shift register
  8. ; whose input bit is a linear function of its previous state.
  9. ; =========================================================================
  10.   .586
  11.   .MMX
  12.   .MODEL flat,stdcall
  13.    option casemap :none
  14. ; =========================================================================
  15.  
  16. ; includes
  17. ; -------------------------------------------------------------------------
  18.   include \masm32\macros\macros.asm
  19.   include \masm32\include\masm32.inc
  20.   include \masm32\include\kernel32.inc
  21.  
  22. ; libraries
  23. ; -------------------------------------------------------------------------
  24.   includelib \masm32\lib\masm32.lib
  25.   includelib \masm32\lib\kernel32.lib
  26.   includelib \masm32\lib\msvcrt.lib
  27.  
  28. ; =========================================================================
  29.  
  30.   inRSH   = 0
  31.   inRSL   = 1
  32.   inRMH   = 2
  33.   inRML   = 3
  34.   inRTmpH = 4
  35.   inRTmpL = 5
  36.   inRTmp  = 6
  37.  
  38.   .data
  39.     SH_ dq 0FFFFFFFFFFFFFFFFh ; Sequence[127-64]
  40.     SL_ dq 0FFFFFFFFFFFFFFFFh ;         [63-0]
  41.     MH_ dq 00000000000000000h ; Mask[127-64] taps: 128,126,101,99
  42.     ML_ dq 00000000028000005h ;     [63-0]
  43.     RR_ dd 0001FFFE0h         ; Amount of rounds
  44.  
  45.   .code
  46.   start:
  47.  
  48. ; =========================================================================
  49.  
  50.   call main
  51.   inkey
  52.   exit
  53.  
  54. ; =========================================================================
  55.  
  56.   main proc
  57.     cls
  58.  
  59.     ; Initialize MMX registers
  60.     movq mm(inRSH),SH_
  61.     movq mm(inRSL),SL_
  62.     movq mm(inRMH),MH_
  63.     movq mm(inRML),ML_
  64.  
  65.     mov ecx, RR_
  66.   l1:
  67.     ; Apply LFSR mask
  68.     movq mm(inRTmpH),mm(inRSH)
  69.     pand mm(inRTmpH),mm(inRMH)
  70.     movq mm(inRTmpL),mm(inRSL)
  71.     pand mm(inRTmpL),mm(inRML)
  72.  
  73.     ; Calculate new bit
  74.     pxor mm(inRTmpH),mm(inRTmpL)
  75.     movd ebx, mm(inRTmpH)
  76.     psrlq mm(inRTmpH),020h
  77.     movd eax, mm(inRTmpH)
  78.     xor ebx,eax
  79.     mov ax,bx
  80.     sar ebx,16
  81.     xor ax,bx
  82.     xor al,ah
  83.     lahf
  84.     not eax
  85.     sar eax,0Ah
  86.     and eax,01h
  87.  
  88.     ; Append new bit
  89.     psrlq mm(inRSL),01h
  90.     movq mm(inRTmp),mm(inRSH)
  91.     psllq mm(inRTmp),03Fh
  92.     por mm(inRSL),mm(inRTmp)
  93.     psrlq mm(inRSH),01h
  94.     movd mm(inRTmp), eax
  95.     psllq mm(inRTmp),03Fh
  96.     por mm(inRSH),mm(inRTmp)
  97.  
  98.   loop l1
  99.  
  100.     ; Show binary
  101.     print "LFSR Register state:",0Dh,0Ah
  102.  
  103.     movq mm(inRTmp),mm(inRSH);
  104.     psrlq mm(inRTmp),020h
  105.     movd edx,mm(inRTmp)
  106.     call ShowBinary
  107.     movq mm(inRTmp),mm(inRSH);
  108.     movd edx,mm(inRTmp)
  109.     call ShowBinary
  110.  
  111.     movq mm(inRTmp),mm(inRSL);
  112.     psrlq mm(inRTmp),020h
  113.     movd edx,mm(inRTmp)
  114.     call ShowBinary
  115.     movq mm(inRTmp),mm(inRSL);
  116.     movd edx,mm(inRTmp)
  117.     call ShowBinary
  118.  
  119.     ret
  120.   main endp
  121.  
  122. ; -------------------------------------------------------------------------
  123. ; inс: edx
  124.   ShowBinary proc
  125.     mov ecx,020h
  126.     mov ebx,edx
  127.     mov esi,04h
  128.     xor eax,eax
  129.     push eax
  130.   l1:
  131.     xor edx,edx
  132.     inc edx
  133.     and edx,ebx
  134.     ror ebx,01h
  135.     add edx,030h
  136.     or al,dl
  137.     dec esi
  138.     test esi,esi
  139.     jz l3
  140.     sal eax,08h
  141.     loop l1
  142.   l3:
  143.     push eax
  144.     xor eax,eax
  145.     mov esi,04h
  146.     loop l1
  147.   l4:
  148.     mov eax,esp
  149.     print eax,0Dh,0Ah
  150.     mov ecx,09h
  151.   l2:
  152.     pop edx
  153.     loop l2
  154.     ret
  155.   ShowBinary endp  
  156.  
  157. ; =========================================================================
  158.  
  159. end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement