2
0
Эх сурвалжийг харах

cleanup

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7578 8c9fc860-2736-0410-a75d-ab315db34111
eth.guenter 7 жил өмнө
parent
commit
d4dcabc7ba
1 өөрчлөгдсөн 20 нэмэгдсэн , 26 устгасан
  1. 20 26
      source/CryptoARC4.Mod

+ 20 - 26
source/CryptoARC4.Mod

@@ -5,9 +5,9 @@ IMPORT
 
 TYPE
 	Cipher* = OBJECT (Ciphers.Cipher)
-		VAR
-			s: ARRAY 256 OF CHAR; (* state array *)
-			i, j: LONGINT;
+	VAR
+		s: ARRAY 256 OF LONGINT; (* state array *)
+		i, j: LONGINT;
 
 		PROCEDURE &Init*;
 		BEGIN
@@ -18,53 +18,47 @@ TYPE
 		(** initialize arc4 key. keybits = [8..2048], MUST be multiple of 8. *)
 		PROCEDURE InitKey*( CONST src: ARRAY OF CHAR; keybits: LONGINT);
 		VAR
-			keydata: ARRAY 256 OF CHAR;
+			keydata: ARRAY 256 OF LONGINT;
 			keybytes: LONGINT;
-			temp: CHAR;
+			temp: LONGINT;
 		BEGIN
-			ASSERT( keybits MOD 8 = 0 ); 	ASSERT( keybits >  7); 	ASSERT( keybits < 2049 );
+			ASSERT( keybits MOD 8 = 0 );  ASSERT( keybits >  7 );  ASSERT( keybits < 2049 );
 			InitKey^( src, keybits );
-			keybytes:= keybits DIV 8;
+			keybytes := keybits DIV 8;
 			i := 0;  j := 0;
-			FOR i := 0 TO 255 DO  s[ i ] := CHR( i )  END;
-			FOR i := 0 TO 255 DO  keydata[ i ] := src[i MOD keybytes]  END;
+			FOR i := 0 TO 255 DO  s[i] := i  END;
+			FOR i := 0 TO 255 DO  keydata[i] := ORD( src[i MOD keybytes] )  END;
 			FOR i := 0 TO 255 DO
-				j := ( j + ORD( s[i] ) + ORD( keydata[i] ) ) MOD 256;
-				temp := s[ i ];
-				s[ i ] := s[ j ];
-				s[ j ] := temp
+				j := (j + s[i] + keydata[i]) MOD 256;
+				temp := s[i];  s[i] := s[j];  s[j] := temp
 			END;
 			isKeyInitialized := TRUE;
-			FOR i := 0 TO 255 DO  keydata[ i ] := CHR( 0 )  END; (* sniffing protection *)
-			i := 0; j := 0;
+			FOR i := 0 TO 255 DO  keydata[i] := 0  END; (* sniffing protection *)
+			i := 0;  j := 0;
 		END InitKey;
 
 		(** encrypt len bytes starting at position ofs. *)
 		PROCEDURE Encrypt*( VAR buf: ARRAY OF CHAR; ofs, len: LONGINT );
 		VAR
-			k, t: LONGINT;
-			ch, temp: CHAR;
+			k, temp: LONGINT;
+			ch: CHAR;
 		BEGIN
 			ASSERT( isKeyInitialized );
 			FOR k := 0 TO len-1 DO
 				(* generation of random byte ch *)
-				i := ( i+1 ) MOD 256;
-				j := ( j + ORD( s[ i ] ) ) MOD 256;
-				temp := s[ i ];
-				s[ i ] := s[ j ];
-				s[ j ] := temp;
-				t := (ORD( s[i] ) + ORD( s[j] )) MOD 256;
-				ch := s[ t ];
+				i := (i + 1) MOD 256;
+				j := (j + s[i]) MOD 256;
+				temp := s[i];  s[i] := s[j];  s[j] := temp;
+				ch := CHR( s[(s[i] + s[j]) MOD 256] );
 
 				(* XOR random byte with next plaintext byte *)
-				buf[ ofs + k ] := BIT.CXOR( buf[ ofs + k ], ch );
+				buf[ofs + k] := BIT.CXOR( buf[ofs + k], ch );
 			END
 		END Encrypt;
 
 		(** decrypt len bytes starting at position ofs. *)
 		PROCEDURE Decrypt*( VAR buf: ARRAY OF CHAR; ofs, len: LONGINT );
 		BEGIN
-			ASSERT( isKeyInitialized );
 			Encrypt( buf, ofs, len )
 		END Decrypt;