r9421: Move arcfour code into it's own file, in lib/crypto.
authorAndrew Bartlett <abartlet@samba.org>
Sat, 20 Aug 2005 07:59:00 +0000 (07:59 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:33:37 +0000 (13:33 -0500)
Andrew Bartlett
(This used to be commit ca6cf462708810637544d4b4bef0f404fb89a002)

source4/lib/basic.mk
source4/lib/crypto/arcfour.c [new file with mode: 0644]
source4/lib/crypto/crypto.h
source4/lib/crypto/hmacmd5.h
source4/libcli/util/smbdes.c

index 3953d702bc9572ae7e5ee0aa4c3ba0dd78b664a7..4dd6a05d54a39c8ee2dc11cb7531b0f619d42036 100644 (file)
@@ -22,7 +22,8 @@ INIT_OBJ_FILES = \
 ADD_OBJ_FILES = \
                lib/crypto/md5.o \
                lib/crypto/hmacmd5.o \
-               lib/crypto/md4.o
+               lib/crypto/md4.o \
+               lib/crypto/arcfour.o
 # End SUBSYSTEM LIBCRYPTO
 ##############################
 
diff --git a/source4/lib/crypto/arcfour.c b/source4/lib/crypto/arcfour.c
new file mode 100644 (file)
index 0000000..cc5d2df
--- /dev/null
@@ -0,0 +1,92 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   An implementation of the arcfour algorithm
+
+   Copyright (C) Andrew Tridgell 1998
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+#include "lib/crypto/crypto.h"
+
+/* initialise the arcfour sbox with key */
+void arcfour_init(struct arcfour_state *state, const DATA_BLOB *key) 
+{
+       int ind;
+       uint8_t j = 0;
+       for (ind = 0; ind < sizeof(state->sbox); ind++) {
+               state->sbox[ind] = (uint8_t)ind;
+       }
+       
+       for (ind = 0; ind < sizeof(state->sbox); ind++) {
+               uint8_t tc;
+               
+               j += (state->sbox[ind] + key->data[ind%key->length]);
+               
+               tc = state->sbox[ind];
+               state->sbox[ind] = state->sbox[j];
+               state->sbox[j] = tc;
+       }
+       state->index_i = 0;
+       state->index_j = 0;
+}
+
+/* crypt the data with arcfour */
+void arcfour_crypt_sbox(struct arcfour_state *state, uint8_t *data, int len) 
+{
+       int ind;
+       
+       for (ind = 0; ind < len; ind++) {
+               uint8_t tc;
+               uint8_t t;
+
+               state->index_i++;
+               state->index_j += state->sbox[state->index_i];
+
+               tc = state->sbox[state->index_i];
+               state->sbox[state->index_i] = state->sbox[state->index_j];
+               state->sbox[state->index_j] = tc;
+               
+               t = state->sbox[state->index_i] + state->sbox[state->index_j];
+               data[ind] = data[ind] ^ state->sbox[t];
+       }
+}
+
+/*
+  arcfour encryption with a blob key
+*/
+void arcfour_crypt_blob(uint8_t *data, int len, const DATA_BLOB *key) 
+{
+       struct arcfour_state state;
+       arcfour_init(&state, key);
+       arcfour_crypt_sbox(&state, data, len);
+}
+
+/*
+  a variant that assumes a 16 byte key. This should be removed
+  when the last user is gone
+*/
+void arcfour_crypt(uint8_t *data, const uint8_t keystr[16], int len)
+{
+       DATA_BLOB key = data_blob(keystr, 16);
+       
+       arcfour_crypt_blob(data, len, &key);
+
+       data_blob_free(&key);
+}
+
+
index 8cf4b21aae419c15dc2451de68546d58505d8806..19457f60dc5c1f89c1a6a4e3994e42faad86dba0 100644 (file)
@@ -28,3 +28,9 @@ struct arcfour_state {
        uint8_t index_i;
        uint8_t index_j;
 };
+
+void arcfour_init(struct arcfour_state *state, const DATA_BLOB *key);
+void arcfour_crypt_sbox(struct arcfour_state *state, uint8_t *data, int len);
+void arcfour_crypt_blob(uint8_t *data, int len, const DATA_BLOB *key);
+void arcfour_crypt(uint8_t *data, const uint8_t keystr[16], int len);
+
index fb6692a05f00c6b304c3ab8c1879effdb258643a..6ee195875ee4d0aeebf8e0a99f6cdf6da26c517b 100644 (file)
@@ -1,6 +1,6 @@
 /* 
    Unix SMB/CIFS implementation.
-   Interface header: Scheduler service
+   Interface header:    HMAC MD5 code
    Copyright (C) Luke Kenneth Casson Leighton 1996-1999
    Copyright (C) Andrew Tridgell 1992-1999
    
index d214d4cfe494641774e3561fdcde763452eac626..d02cae602f2fac167d93c6e8e78f2af008b806fa 100644 (file)
@@ -365,73 +365,6 @@ void des_crypt112_16(uint8_t out[16], uint8_t in[16], const uint8_t key[14], int
         des_crypt56(out + 8, in + 8, key+7, forw);
 }
 
-/* initialise the arcfour sbox with key */
-void arcfour_init(struct arcfour_state *state, const DATA_BLOB *key) 
-{
-       int ind;
-       uint8_t j = 0;
-       for (ind = 0; ind < sizeof(state->sbox); ind++) {
-               state->sbox[ind] = (uint8_t)ind;
-       }
-       
-       for (ind = 0; ind < sizeof(state->sbox); ind++) {
-               uint8_t tc;
-               
-               j += (state->sbox[ind] + key->data[ind%key->length]);
-               
-               tc = state->sbox[ind];
-               state->sbox[ind] = state->sbox[j];
-               state->sbox[j] = tc;
-       }
-       state->index_i = 0;
-       state->index_j = 0;
-}
-
-/* crypt the data with arcfour */
-void arcfour_crypt_sbox(struct arcfour_state *state, uint8_t *data, int len) 
-{
-       int ind;
-       
-       for (ind = 0; ind < len; ind++) {
-               uint8_t tc;
-               uint8_t t;
-
-               state->index_i++;
-               state->index_j += state->sbox[state->index_i];
-
-               tc = state->sbox[state->index_i];
-               state->sbox[state->index_i] = state->sbox[state->index_j];
-               state->sbox[state->index_j] = tc;
-               
-               t = state->sbox[state->index_i] + state->sbox[state->index_j];
-               data[ind] = data[ind] ^ state->sbox[t];
-       }
-}
-
-/*
-  arcfour encryption with a blob key
-*/
-void arcfour_crypt_blob(uint8_t *data, int len, const DATA_BLOB *key) 
-{
-       struct arcfour_state state;
-       arcfour_init(&state, key);
-       arcfour_crypt_sbox(&state, data, len);
-}
-
-/*
-  a variant that assumes a 16 byte key. This should be removed
-  when the last user is gone
-*/
-void arcfour_crypt(uint8_t *data, const uint8_t keystr[16], int len)
-{
-       DATA_BLOB key = data_blob(keystr, 16);
-       
-       arcfour_crypt_blob(data, len, &key);
-
-       data_blob_free(&key);
-}
-
-
 /* Decode a sam password hash into a password.  The password hash is the
    same method used to store passwords in the NT registry.  The DES key
    used is based on the RID of the user. */