svn commit: samba r9324 - in trunk/source: include rpc_server

jra at samba.org jra at samba.org
Tue Aug 16 19:39:27 GMT 2005


Author: jra
Date: 2005-08-16 19:39:27 +0000 (Tue, 16 Aug 2005)
New Revision: 9324

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=9324

Log:
Final function moved to standard arc4 implementation.
Jeremy.

Modified:
   trunk/source/include/ntdomain.h
   trunk/source/rpc_server/srv_pipe.c


Changeset:
Modified: trunk/source/include/ntdomain.h
===================================================================
--- trunk/source/include/ntdomain.h	2005-08-16 17:31:51 UTC (rev 9323)
+++ trunk/source/include/ntdomain.h	2005-08-16 19:39:27 UTC (rev 9324)
@@ -181,7 +181,7 @@
 	BOOL ntlmssp_auth_requested; /* If the client wanted authenticated rpc. */
 	BOOL ntlmssp_auth_validated; /* If the client *got* authenticated rpc. */
 	unsigned char challenge[8];
-	unsigned char ntlmssp_hash[258];
+	unsigned char ntlmssp_arc4_state[258];
 	uint32 ntlmssp_seq_num;
 };
 

Modified: trunk/source/rpc_server/srv_pipe.c
===================================================================
--- trunk/source/rpc_server/srv_pipe.c	2005-08-16 17:31:51 UTC (rev 9323)
+++ trunk/source/rpc_server/srv_pipe.c	2005-08-16 19:39:27 UTC (rev 9324)
@@ -55,30 +55,10 @@
 struct dcinfo last_dcinfo;
 BOOL server_auth2_negotiated = False;
 
-static void NTLMSSPcalc_p( pipes_struct *p, unsigned char *data, int len)
+static void NTLMSSPcalc_p( pipes_struct *p, unsigned char *data, size_t len)
 {
-	unsigned char *hash = p->auth.a_u.ntlmssp_auth->ntlmssp_hash;
-	unsigned char index_i = hash[256];
-	unsigned char index_j = hash[257];
-	int ind;
-
-	for( ind = 0; ind < len; ind++) {
-		unsigned char tc;
-		unsigned char t;
-
-		index_i++;
-		index_j += hash[index_i];
-
-		tc = hash[index_i];
-		hash[index_i] = hash[index_j];
-		hash[index_j] = tc;
-
-		t = hash[index_i] + hash[index_j];
-		data[ind] = data[ind] ^ hash[t];
-	}
-
-	hash[256] = index_i;
-	hash[257] = index_j;
+	unsigned char *a4state = p->auth.a_u.ntlmssp_auth->ntlmssp_arc4_state;
+	smb_arc4_crypt(a4state, data, len);
 }
 
 /*******************************************************************
@@ -495,39 +475,20 @@
 		return False;
 	} else {
 		uchar p24[24];
+		unsigned char k2[8];
 		NTLMSSPOWFencrypt(server_info->lm_session_key.data, lm_owf, p24);
-		{
-			unsigned char j = 0;
-			int ind;
 
-			unsigned char k2[8];
+		memcpy(k2, p24, 5);
+		k2[5] = 0xe5;
+		k2[6] = 0x38;
+		k2[7] = 0xb0;
 
-			memcpy(k2, p24, 5);
-			k2[5] = 0xe5;
-			k2[6] = 0x38;
-			k2[7] = 0xb0;
+		smb_arc4_init(pa->ntlmssp_arc4_state, k2, 8);
 
-			for (ind = 0; ind < 256; ind++)
-				pa->ntlmssp_hash[ind] = (unsigned char)ind;
+		dump_data_pw("NTLMSSP hash (v1)\n", pa->ntlmssp_arc4_state, 
+			     sizeof(pa->ntlmssp_arc4_state));
 
-			for( ind = 0; ind < 256; ind++) {
-				unsigned char tc;
-
-				j += (pa->ntlmssp_hash[ind] + k2[ind%8]);
-
-				tc = pa->ntlmssp_hash[ind];
-				pa->ntlmssp_hash[ind] = pa->ntlmssp_hash[j];
-				pa->ntlmssp_hash[j] = tc;
-			}
-
-			pa->ntlmssp_hash[256] = 0;
-			pa->ntlmssp_hash[257] = 0;
-		}
-
-		dump_data_pw("NTLMSSP hash (v1)\n", pa->ntlmssp_hash, 
-			     sizeof(pa->ntlmssp_hash));
-
-/*		NTLMSSPhash(p->ntlmssp_hash, p24); */
+/*		NTLMSSPhash(p->ntlmssp_arc4_state, p24); */
 		pa->ntlmssp_seq_num = 0;
 
 	}
@@ -1789,8 +1750,8 @@
 		 * has already been consumed.
 		 */
 		char *data = prs_data_p(rpc_in) + RPC_HDR_REQ_LEN;
-		dump_data_pw("NTLMSSP hash (v1)\n", p->auth.a_u.ntlmssp_auth->ntlmssp_hash, 
-			     sizeof(p->auth.a_u.ntlmssp_auth->ntlmssp_hash));
+		dump_data_pw("NTLMSSP hash (v1)\n", p->auth.a_u.ntlmssp_auth->ntlmssp_arc4_state, 
+			     sizeof(p->auth.a_u.ntlmssp_auth->ntlmssp_arc4_state));
 
 		dump_data_pw("Incoming RPC PDU (NTLMSSP sealed)\n", 
 			     (const unsigned char *)data, data_len);



More information about the samba-cvs mailing list