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);

Reply via email to