Sfoglia il codice sorgente

fixed RSA.LoadPublicKey()

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@8573 8c9fc860-2736-0410-a75d-ab315db34111
eth.guenter 6 anni fa
parent
commit
ab4ebd5b35
4 ha cambiato i file con 17 aggiunte e 14 eliminazioni
  1. 12 5
      source/CryptoRSA.Mod
  2. 3 5
      source/CryptoTestRSA.Mod
  3. 1 3
      source/SSHAuthorize.Mod
  4. 1 1
      source/SSHKeys.Mod

+ 12 - 5
source/CryptoRSA.Mod

@@ -4,7 +4,7 @@ MODULE CryptoRSA;	(** AUTHOR "G.F."; PURPOSE "RSA"; *)
 
 IMPORT
 	B := CryptoBigNumbers, U := CryptoUtils, MD5 := CryptoMD5, Ciphers := CryptoCiphers,
-	Base64 := CryptoBase64, Streams, Clock;
+	Base64 := CryptoBase64, Streams, Clock, Log := KernelLog;
 
 CONST
 	chinese = TRUE;
@@ -309,21 +309,28 @@ VAR
 
 
 	PROCEDURE LoadPublicKey*( r: Streams.Reader ): Key;
+	VAR str: ARRAY 64 OF CHAR;
+	BEGIN
+		r.SkipWhitespace; r.String( str );
+		ASSERT( str = "ssh-rsa" );	
+		RETURN ExtractPublicKey( r )
+	END LoadPublicKey;
+	
+	PROCEDURE ExtractPublicKey*( r: Streams.Reader ): Key;
 	VAR buf: ARRAY 4096 OF CHAR; len, pos: LONGINT;
 		str: ARRAY 64 OF CHAR;
 		k: Key;
 	BEGIN
 		NEW( k ); k.private := FALSE;
-		r.String(str);
-		ASSERT( str = "ssh-rsa" );
 		len := Base64.DecodeStream( r, buf );
+		Log.String( buf ); Log.Ln;
 		pos := 0;
 		U.GetString( buf, pos, str );
-		ASSERT( str = "ssh-rsa" );
+		ASSERT( str = "ssh-rsa" );	
 		U.GetBigNumber( buf, pos, k.exponent );
 		U.GetBigNumber( buf, pos, k.modulus );
 		RETURN k
-	END LoadPublicKey;
+	END ExtractPublicKey;
 
 BEGIN
 	B.AssignInt( one, 1 );

+ 3 - 5
source/CryptoTestRSA.Mod

@@ -44,7 +44,7 @@ CONST
 	VAR
 		pub, priv: RSA.Key;
 		signature: B.BigNumber;
-		pw, digest, str: ARRAY 64 OF CHAR;
+		pw, digest: ARRAY 64 OF CHAR;
 		f: Files.File; r: Files.Reader;
 		i, ignore: LONGINT;
 	BEGIN
@@ -61,10 +61,7 @@ CONST
 		END;
 
 		f := Files.Old( PublicKeyFile ); Files.OpenReader( r, f, 0 );
-		r.SkipWhitespace; r.String( str );
-		IF str = "ssh-rsa" THEN
-			pub := RSA.LoadPublicKey( r )
-		END;
+		pub := RSA.LoadPublicKey( r );
 
 		digest := "Everyone gets Friday off her panties.";
 		signature :=  priv.Sign( digest, 32 );
@@ -78,6 +75,7 @@ CONST
 
 END CryptoTestRSA.
 
+Compiler.Compile CryptoRSA.Mod CryptoTestRSA.Mod ~
 
 System.Free CryptoTestRSA CryptoRSA CryptoPrimes CryptoBigNumbers~
 

+ 1 - 3
source/SSHAuthorize.Mod

@@ -267,9 +267,7 @@ VAR
 			RETURN FALSE
 		END;
 		Files.OpenReader( r, f, 0 );
-		IF r.GetString( str ) & (str = "ssh-rsa") THEN
-			pubKey := RSA.LoadPublicKey( r )
-		END;
+		pubKey := RSA.LoadPublicKey( r );
 
 		IF CheckAuthorizeKey( ssh, user ) THEN
 			RETURN RequestAuthorizeKey( ssh, user )

+ 1 - 1
source/SSHKeys.Mod

@@ -144,7 +144,7 @@ TYPE
 				RETURN TRUE
 			END
 		END;
-		knownKey := RSA.LoadPublicKey( r );
+		knownKey := RSA.ExtractPublicKey( r );
 		IF B.Cmp( key.modulus, knownKey.modulus ) # 0 THEN
 			Out.String( "### error: hostkey of remote host has changed" ); Out.Ln;
 			RETURN FALSE