1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| var buffer : array[1..MAXBUFFERLENGTH] of byte;
X : array[0..3] of byte ;
i,n,C0,C1,C2,C3 : integer ;
begin
n:=bs.ByteCount ;
C0:=0 ; C1:=0 ; C2:=0 ; C3:=0 ;
for i:=0 to n-1 do begin
C0:=AddBytes(C0,buffer[i]) ; C1:=AddBytes(C1,C0) ;
C2:=AddBytes(C2,C1 ) ; C3:=AddBytes(C3,C2) ;
end ;
X[0]:=invertbyte( AddBytes(C0,AddBytes(C1,AddBytes(C2,C3 ))) ) ; // X0=-(C0+C1+C2+C3)
X[1]:= AddBytes(C1,AddBytes(C2,AddBytes(C2,AddBytes(C3,AddBytes(C3,C3))))) ; // X1=C1+2*C2+3*C3
X[2]:=invertbyte( AddBytes(C2,AddBytes(C3,AddBytes(C3,C3))) ) ; // X2=-(C2+3*C3) ;
X[3]:=C3 ; // X3=C3
// return checksum of Buffer (in X)
...
end ;
// code des fonctions InvertByte et Addbyte
(**)function invertbyte(ii:integer): byte ;
begin if ii=0 then result:=0 else result:=255-ii ; end ;
(**)function Addbytes(i1,i2:integer): byte ;
begin result:=(i1+i2) mod 255 ; end ; |
Partager