Moved some code (NTLMSSPcalc) out of smbdes and inline for paranioa
authorJeremy Allison <jra@samba.org>
Thu, 12 Nov 1998 04:17:54 +0000 (04:17 +0000)
committerJeremy Allison <jra@samba.org>
Thu, 12 Nov 1998 04:17:54 +0000 (04:17 +0000)
resons and my own piece of mind...
Jeremy.
(This used to be commit 45131501f23ce1eec2f23fe2c1060cd5a2736ec9)

source3/include/proto.h
source3/libsmb/smbdes.c
source3/rpc_client/cli_pipe.c
source3/rpc_server/srv_util.c

index 24d4040c3ceea7200da4d7ede431c532c6c8c14b..019e793aa6aefa96aa0822589761559bd701469c 100644 (file)
@@ -530,7 +530,6 @@ void E_old_pw_hash( unsigned char *p14, unsigned char *in, unsigned char *out);
 void cred_hash1(unsigned char *out,unsigned char *in,unsigned char *key);
 void cred_hash2(unsigned char *out,unsigned char *in,unsigned char *key);
 void cred_hash3(unsigned char *out,unsigned char *in,unsigned char *key, int forw);
-void NTLMSSPcalc( unsigned char hash[258], unsigned char *data, int len);
 void SamOEMhash( unsigned char *data, unsigned char *key, int val);
 
 /*The following definitions come from  libsmb/smbencrypt.c  */
index 5bff1742af4af50e10c0c770fb7a8cb1855b056c..d0e1c6e85fb00d0c91c0af57f5f1d74dc018f04e 100644 (file)
@@ -358,32 +358,6 @@ void cred_hash3(unsigned char *out,unsigned char *in,unsigned char *key, int for
         smbhash(out + 8, in + 8, key2, forw);
 }
 
-void NTLMSSPcalc( unsigned char hash[258], unsigned char *data, int len)
-{
-       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;
-}
-
 void SamOEMhash( unsigned char *data, unsigned char *key, int val)
 {
   unsigned char s_box[256];
index e02bb889cc5378d9bd9716a0b25a798f9c4523e1..b899c6e08e0a2f7f4a8707569ef9297a2ba3a601 100644 (file)
@@ -133,6 +133,33 @@ static BOOL rpc_check_hdr(prs_struct *rdata, RPC_HDR *rhdr,
        return True;
 }
 
+static void NTLMSSPcalc_ap( struct cli_state *cli, unsigned char *data, int len)
+{
+       unsigned char *hash = cli->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;
+}
+
 /****************************************************************************
  decrypt data on an rpc pipe
  ****************************************************************************/
@@ -157,7 +184,7 @@ static BOOL rpc_auth_pipe(struct cli_state *cli, prs_struct *rdata,
        {
                DEBUG(10,("rpc_auth_pipe: seal\n"));
                dump_data(100, reply_data, data_len);
-               NTLMSSPcalc(cli->ntlmssp_hash, (uchar*)reply_data, data_len);
+               NTLMSSPcalc_ap(cli, (uchar*)reply_data, data_len);
                dump_data(100, reply_data, data_len);
        }
 
@@ -185,7 +212,7 @@ static BOOL rpc_auth_pipe(struct cli_state *cli, prs_struct *rdata,
 
                DEBUG(10,("rpc_auth_pipe: verify\n"));
                dump_data(100, data, auth_len);
-               NTLMSSPcalc(cli->ntlmssp_hash, (uchar*)(data+4), auth_len - 4);
+               NTLMSSPcalc_ap(cli, (uchar*)(data+4), auth_len - 4);
                prs_init(&auth_verf, 0x08, 4, 0, True);
                memcpy(auth_verf.data->data, data, 16);
                smb_io_rpc_auth_ntlmssp_chk("auth_sign", &chk, &auth_verf, 0);
@@ -612,7 +639,7 @@ BOOL rpc_api_pipe_req(struct cli_state *cli, uint8 op_num,
        if (auth_seal)
        {
                crc32 = crc32_calc_buffer(data->offset, mem_data(&data->data, 0));
-               NTLMSSPcalc(cli->ntlmssp_hash, (uchar*)mem_data(&data->data, 0), data->offset);
+               NTLMSSPcalc_ap(cli, (uchar*)mem_data(&data->data, 0), data->offset);
        }
 
        if (auth_seal || auth_verify)
@@ -629,7 +656,7 @@ BOOL rpc_api_pipe_req(struct cli_state *cli, uint8 op_num,
 
                make_rpc_auth_ntlmssp_chk(&chk, NTLMSSP_SIGN_VERSION, crc32, cli->ntlmssp_seq_num++);
                smb_io_rpc_auth_ntlmssp_chk("auth_sign", &chk, &auth_verf, 0);
-               NTLMSSPcalc(cli->ntlmssp_hash, (uchar*)mem_data(&auth_verf.data, 4), 12);
+               NTLMSSPcalc_ap(cli, (uchar*)mem_data(&auth_verf.data, 4), 12);
        }
 
        if (auth_seal || auth_verify)
index 51df42cdff074b16f657b9cbe812feae3232c707..161f845af3fe72c174a9e3f89cd1681bd46256d9 100644 (file)
@@ -154,6 +154,33 @@ int make_dom_gids(char *gids_str, DOM_GID **ppgids)
   return count;
 }
 
+static void NTLMSSPcalc_p( pipes_struct *p, unsigned char *data, int len)
+{
+    unsigned char *hash = p->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;
+}
+
 /*******************************************************************
  turns a DCE/RPC request into a DCE/RPC reply
 
@@ -252,7 +279,7 @@ BOOL create_rpc_reply(pipes_struct *p,
                if (auth_seal)
                {
                        crc32 = crc32_calc_buffer(data_len, data);
-                       NTLMSSPcalc(p->ntlmssp_hash, (uchar*)data, data_len);
+                       NTLMSSPcalc_p(p, (uchar*)data, data_len);
                }
 
                if (auth_seal || auth_verify)
@@ -268,7 +295,7 @@ BOOL create_rpc_reply(pipes_struct *p,
                        make_rpc_auth_ntlmssp_chk(&p->ntlmssp_chk, NTLMSSP_SIGN_VERSION, crc32, p->ntlmssp_seq_num++);
                        smb_io_rpc_auth_ntlmssp_chk("auth_sign", &(p->ntlmssp_chk), &p->rverf, 0);
                        auth_data = mem_data(&p->rverf.data, 4);
-                       NTLMSSPcalc(p->ntlmssp_hash, (uchar*)auth_data, 12);
+                       NTLMSSPcalc_p(p, (uchar*)auth_data, 12);
                }
        }
 
@@ -633,7 +660,7 @@ static BOOL api_pipe_auth_process(pipes_struct *p, prs_struct *pd)
        {
                char *data = mem_data(&pd->data, pd->offset);
                DEBUG(5,("api_pipe_auth_process: data %d\n", pd->offset));
-               NTLMSSPcalc(p->ntlmssp_hash, (uchar*)data, data_len);
+               NTLMSSPcalc_p(p, (uchar*)data, data_len);
                crc32 = crc32_calc_buffer(data_len, data);
        }
 
@@ -650,7 +677,7 @@ static BOOL api_pipe_auth_process(pipes_struct *p, prs_struct *pd)
        {
                char *req_data = mem_data(&pd->data, pd->offset + 4);
                DEBUG(5,("api_pipe_auth_process: auth %d\n", pd->offset + 4));
-               NTLMSSPcalc(p->ntlmssp_hash, (uchar*)req_data, 12);
+               NTLMSSPcalc_p(p, (uchar*)req_data, 12);
                smb_io_rpc_auth_ntlmssp_chk("auth_sign", &(p->ntlmssp_chk), pd, 0);
 
                if (!rpc_auth_ntlmssp_chk(&(p->ntlmssp_chk), crc32,