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