home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 October / Chip_2001-10_cd1.bin / zkuste / delphi / nastroje / WP.ZIP / Tools.pas < prev    next >
Pascal/Delphi Source File  |  1998-10-12  |  1KB  |  67 lines

  1. unit Tools;
  2.  
  3. interface
  4. uses
  5.   Sysutils;
  6.  
  7. type
  8. {$IFDEF VER120}
  9.   dword= longword;
  10. {$ELSE}
  11.   dword= longint;
  12. {$ENDIF}
  13.  
  14. function LRot16(X: word; c: integer): word; assembler;
  15. function RRot16(X: word; c: integer): word; assembler;
  16. function LRot32(X: dword; c: integer): dword; assembler;
  17. function RRot32(X: dword; c: integer): dword; assembler;
  18. procedure XorBlock(I1, I2, O1: PByteArray; Len: integer);
  19. procedure IncBlock(P: PByteArray; Len: integer);
  20.  
  21. implementation
  22.  
  23. function LRot16(X: word; c: integer): word; assembler;
  24. asm
  25.   mov ecx,&c
  26.   mov ax,&X
  27.   rol ax,cl
  28.   mov &Result,ax
  29. end;
  30.  
  31. function RRot16(X: word; c: integer): word; assembler;
  32. asm
  33.   mov ecx,&c
  34.   mov ax,&X
  35.   ror ax,cl
  36.   mov &Result,ax
  37. end;
  38.  
  39. function LRot32(X: dword; c: integer): dword; register; assembler;
  40. asm
  41.   mov ecx, edx
  42.   rol eax, cl
  43. end;
  44.  
  45. function RRot32(X: dword; c: integer): dword; register; assembler;
  46. asm
  47.   mov ecx, edx
  48.   ror eax, cl
  49. end;
  50.  
  51. procedure XorBlock(I1, I2, O1: PByteArray; Len: integer);
  52. var
  53.   i: integer;
  54. begin
  55.   for i:= 0 to Len-1 do
  56.     O1[i]:= I1[i] xor I2[i];
  57. end;
  58.  
  59. procedure IncBlock(P: PByteArray; Len: integer);
  60. begin
  61.   Inc(P[Len-1]);
  62.   if (P[Len-1]= 0) and (Len> 1) then
  63.     IncBlock(P,Len-1);
  64. end;
  65.  
  66. end.
  67.