浏览代码

improved perfomance by using inline procedures

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@8627 8c9fc860-2736-0410-a75d-ab315db34111
eth.guenter 6 年之前
父节点
当前提交
971234eaa5
共有 1 个文件被更改,包括 23 次插入18 次删除
  1. 23 18
      source/CryptoSHA256.Mod

+ 23 - 18
source/CryptoSHA256.Mod

@@ -29,7 +29,7 @@ TYPE
 			hash[0] := 6A09E667H;	hash[1] := LONGINT( 0BB67AE85H );
 			hash[0] := 6A09E667H;	hash[1] := LONGINT( 0BB67AE85H );
 			hash[2] := 3C6EF372H;	hash[3] := LONGINT( 0A54FF53AH );
 			hash[2] := 3C6EF372H;	hash[3] := LONGINT( 0A54FF53AH );
 			hash[4] := 510E527FH;	hash[5] := LONGINT( 09B05688CH );
 			hash[4] := 510E527FH;	hash[5] := LONGINT( 09B05688CH );
-			hash[6] := 1F83D9ABH;	hash[7] := 5BE0CD19H;
+			hash[6] := 1F83D9ABH;	hash[7] := LONGINT( 05BE0CD19H );
 			Nl := 0;
 			Nl := 0;
 			Nh := 0;
 			Nh := 0;
 			cn := 0;
 			cn := 0;
@@ -47,13 +47,13 @@ TYPE
 				IF i < 16 THEN
 				IF i < 16 THEN
 					X[i] := U.IntFromBufferBE( buf, pos );  INC( pos, 4 )
 					X[i] := U.IntFromBufferBE( buf, pos );  INC( pos, 4 )
 				ELSE
 				ELSE
-					s0 := sigma0( S.VAL( SET32, X[(i + 1) MOD 16] ) );
-					s1 := sigma1( S.VAL( SET32, X[(i + 14) MOD 16] ) );
+					s0 := sigma0( X[(i + 1) MOD 16] );
+					s1 := sigma1( X[(i + 14) MOD 16] );
 					s := s0 + s1 + X[(i + 9) MOD 16];
 					s := s0 + s1 + X[(i + 9) MOD 16];
 					INC( X[i MOD 16], s );  
 					INC( X[i MOD 16], s );  
 				END;
 				END;
-				T1 := X[i MOD 16] + h + Sigma1Ch( S.VAL(SET32, e), f, g) + K256[i];
-				T2 := Sigma0Maj( S.VAL(SET32, a), b, c );
+				T1 := X[i MOD 16] + h + Sigma1Ch( e, f, g ) + K256[i];
+				T2 := Sigma0Maj( a, b, c );
 				h := g;  g := f;  f := e;  e := d + T1;
 				h := g;  g := f;  f := e;  e := d + T1;
 				d := c;  c := b;  b := a;  a := T1 + T2;
 				d := c;  c := b;  b := a;  a := T1 + T2;
 			END;
 			END;
@@ -129,30 +129,35 @@ TYPE
 
 
 
 
 
 
-	PROCEDURE Sigma0Maj( x: SET32; y, z: LONGINT ): LONGINT;
-	VAR a, b: LONGINT; 
+	PROCEDURE -Sigma0Maj( px, py, pz: LONGINT ): LONGINT;
+	VAR x, y, z, a, b: SET32; 
 	BEGIN 
 	BEGIN 
-		a := S.VAL( LONGINT, ROT( x , 30 ) / ROT( x, 19 ) / ROT( x, 10 ) );
-		b := S.VAL( LONGINT, (x * S.VAL( SET32, y )) / 
-							  (x * S.VAL( SET32, z )) / (S.VAL( SET32, y ) * S.VAL( SET32, z )) );
-		RETURN a + b
+		x := S.VAL( SET32, px );  y := S.VAL( SET32, py );  z := S.VAL( SET32, pz );
+		a := ROT( x, 30 ) / ROT( x, 19 ) / ROT( x, 10 );
+		b := (x*y) / (x*z) / (y*z);
+		RETURN S.VAL( LONGINT, a ) + S.VAL( LONGINT, b )
 	END Sigma0Maj;
 	END Sigma0Maj;
 	
 	
-	PROCEDURE Sigma1Ch( x: SET32;  y, z: LONGINT ): LONGINT;
-	VAR a, b: LONGINT; 
+	PROCEDURE -Sigma1Ch( px, py, pz: LONGINT ): LONGINT;
+	VAR x, y, z, a, b: SET32;
 	BEGIN 
 	BEGIN 
-		a := S.VAL( LONGINT, ROT( x , 26 ) / ROT( x, 21 ) / ROT( x, 7 ) );
-		b := S.VAL( LONGINT, (x * S.VAL( SET32, y )) / ((-x ) * S.VAL( SET32, z )) );
-		RETURN a + b
+		x := S.VAL( SET32, px );  y := S.VAL( SET32, py );  z := S.VAL( SET32, pz );
+		a := ROT( x, 26 ) / ROT( x, 21 ) / ROT( x, 7 );
+		b := (x*y) / ((-x)*z);
+		RETURN S.VAL( LONGINT, a ) + S.VAL( LONGINT, b )
 	END Sigma1Ch;
 	END Sigma1Ch;
 
 
-	PROCEDURE sigma0( x: SET32 ): LONGINT;
+	PROCEDURE -sigma0( px: LONGINT ): LONGINT;
+	VAR x: SET32;
 	BEGIN 
 	BEGIN 
+		x :=S.VAL( SET32, px );
 		RETURN S.VAL( LONGINT, ROT( x , 25 ) / ROT( x, 14 ) / LSH( x, -3 ) )
 		RETURN S.VAL( LONGINT, ROT( x , 25 ) / ROT( x, 14 ) / LSH( x, -3 ) )
 	END sigma0;
 	END sigma0;
 	
 	
-	PROCEDURE sigma1( x: SET32 ): LONGINT;
+	PROCEDURE -sigma1( px: LONGINT ): LONGINT;
+	VAR x: SET32;
 	BEGIN 
 	BEGIN 
+		x := S.VAL( SET32, px );
 		RETURN S.VAL( LONGINT, ROT( x , 15 ) / ROT( x, 13 ) / LSH( x, -10 ) )
 		RETURN S.VAL( LONGINT, ROT( x , 15 ) / ROT( x, 13 ) / LSH( x, -10 ) )
 	END sigma1;
 	END sigma1;