Move RC4 into crypto.h as a replaceable crypto function
This allows crypto library wrappers to override the internal RC4 implementation in the same way as can already be done for other crypto algorithms.
This commit is contained in:
parent
8ef1683115
commit
ac73690c06
13 changed files with 45 additions and 46 deletions
|
@ -89,7 +89,6 @@ OBJS += ctrl_iface.o
|
|||
endif
|
||||
|
||||
OBJS += ../src/crypto/md5.o
|
||||
OBJS += ../src/crypto/rc4.o
|
||||
|
||||
AESOBJS = # none so far
|
||||
|
||||
|
@ -437,6 +436,7 @@ ifdef NEED_FIPS186_2_PRF
|
|||
OBJS += ../src/crypto/fips_prf_openssl.o
|
||||
OBJS_p += ../src/crypto/fips_prf_openssl.o
|
||||
endif
|
||||
CONFIG_INTERNAL_RC4=y
|
||||
endif
|
||||
ifeq ($(CONFIG_TLS), gnutls)
|
||||
OBJS += ../src/crypto/crypto_gnutls.o
|
||||
|
@ -447,12 +447,14 @@ OBJS += ../src/crypto/fips_prf_gnutls.o
|
|||
OBJS_p += ../src/crypto/fips_prf_gnutls.o
|
||||
endif
|
||||
CONFIG_INTERNAL_SHA256=y
|
||||
CONFIG_INTERNAL_RC4=y
|
||||
endif
|
||||
ifeq ($(CONFIG_TLS), internal)
|
||||
ifeq ($(CONFIG_CRYPTO), libtomcrypt)
|
||||
OBJS += ../src/crypto/crypto_libtomcrypt.o
|
||||
OBJS_p += ../src/crypto/crypto_libtomcrypt.o
|
||||
CONFIG_INTERNAL_SHA256=y
|
||||
CONFIG_INTERNAL_RC4=y
|
||||
endif
|
||||
ifeq ($(CONFIG_CRYPTO), internal)
|
||||
OBJS += ../src/crypto/crypto_internal.o ../src/tls/rsa.o ../src/tls/bignum.o
|
||||
|
@ -473,6 +475,7 @@ CONFIG_INTERNAL_SHA1=y
|
|||
CONFIG_INTERNAL_MD4=y
|
||||
CONFIG_INTERNAL_MD5=y
|
||||
CONFIG_INTERNAL_SHA256=y
|
||||
CONFIG_INTERNAL_RC4=y
|
||||
endif
|
||||
endif
|
||||
else
|
||||
|
@ -480,6 +483,7 @@ CONFIG_INTERNAL_AES=y
|
|||
CONFIG_INTERNAL_SHA1=y
|
||||
CONFIG_INTERNAL_MD5=y
|
||||
CONFIG_INTERNAL_SHA256=y
|
||||
CONFIG_INTERNAL_RC4=y
|
||||
endif
|
||||
|
||||
ifdef CONFIG_INTERNAL_AES
|
||||
|
@ -500,6 +504,9 @@ endif
|
|||
ifdef CONFIG_INTERNAL_DES
|
||||
OBJS += ../src/crypto/des-internal.o
|
||||
endif
|
||||
ifdef CONFIG_INTERNAL_RC4
|
||||
OBJS += ../src/crypto/rc4.o
|
||||
endif
|
||||
|
||||
ifdef NEED_SHA256
|
||||
OBJS += ../src/crypto/sha256.o
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
#include "radius/radius_client.h"
|
||||
#include "ieee802_11_auth.h"
|
||||
#include "sta_info.h"
|
||||
#include "rc4.h"
|
||||
#include "crypto.h"
|
||||
#include "ieee802_1x.h"
|
||||
#include "wpa.h"
|
||||
#include "wme.h"
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
#include "radius/radius_client.h"
|
||||
#include "eapol_sm.h"
|
||||
#include "md5.h"
|
||||
#include "rc4.h"
|
||||
#include "crypto.h"
|
||||
#include "eloop.h"
|
||||
#include "sta_info.h"
|
||||
#include "wpa.h"
|
||||
|
|
|
@ -22,7 +22,6 @@
|
|||
#include "wpa.h"
|
||||
#include "sha1.h"
|
||||
#include "sha256.h"
|
||||
#include "rc4.h"
|
||||
#include "aes_wrap.h"
|
||||
#include "crypto.h"
|
||||
#include "eloop.h"
|
||||
|
|
|
@ -448,4 +448,20 @@ int __must_check crypto_mod_exp(const u8 *base, size_t base_len,
|
|||
const u8 *modulus, size_t modulus_len,
|
||||
u8 *result, size_t *result_len);
|
||||
|
||||
/**
|
||||
* rc4_skip - XOR RC4 stream to given data with skip-stream-start
|
||||
* @key: RC4 key
|
||||
* @keylen: RC4 key length
|
||||
* @skip: number of bytes to skip from the beginning of the RC4 stream
|
||||
* @data: data to be XOR'ed with RC4 stream
|
||||
* @data_len: buf length
|
||||
* Returns: 0 on success, -1 on failure
|
||||
*
|
||||
* Generate RC4 pseudo random stream for the given key, skip beginning of the
|
||||
* stream, and XOR the end result with the data buffer to perform RC4
|
||||
* encryption/decryption.
|
||||
*/
|
||||
int rc4_skip(const u8 *key, size_t keylen, size_t skip,
|
||||
u8 *data, size_t data_len);
|
||||
|
||||
#endif /* CRYPTO_H */
|
||||
|
|
|
@ -18,7 +18,6 @@
|
|||
#include "crypto.h"
|
||||
#include "md5.h"
|
||||
#include "sha1.h"
|
||||
#include "rc4.h"
|
||||
#include "aes.h"
|
||||
#include "tls/rsa.h"
|
||||
#include "tls/bignum.h"
|
||||
|
|
|
@ -16,7 +16,6 @@
|
|||
#include <tomcrypt.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "rc4.h"
|
||||
#include "crypto.h"
|
||||
|
||||
#ifndef mp_init_multi
|
||||
|
|
|
@ -18,7 +18,6 @@
|
|||
#include "sha1.h"
|
||||
#include "ms_funcs.h"
|
||||
#include "crypto.h"
|
||||
#include "rc4.h"
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
@ -15,24 +15,12 @@
|
|||
#include "includes.h"
|
||||
|
||||
#include "common.h"
|
||||
#include "rc4.h"
|
||||
#include "crypto.h"
|
||||
|
||||
#define S_SWAP(a,b) do { u8 t = S[a]; S[a] = S[b]; S[b] = t; } while(0)
|
||||
|
||||
/**
|
||||
* rc4 - XOR RC4 stream to given data with skip-stream-start
|
||||
* @key: RC4 key
|
||||
* @keylen: RC4 key length
|
||||
* @skip: number of bytes to skip from the beginning of the RC4 stream
|
||||
* @data: data to be XOR'ed with RC4 stream
|
||||
* @data_len: buf length
|
||||
*
|
||||
* Generate RC4 pseudo random stream for the given key, skip beginning of the
|
||||
* stream, and XOR the end result with the data buffer to perform RC4
|
||||
* encryption/decryption.
|
||||
*/
|
||||
void rc4_skip(const u8 *key, size_t keylen, size_t skip,
|
||||
u8 *data, size_t data_len)
|
||||
int rc4_skip(const u8 *key, size_t keylen, size_t skip,
|
||||
u8 *data, size_t data_len)
|
||||
{
|
||||
u32 i, j, k;
|
||||
u8 S[256], *pos;
|
||||
|
@ -67,4 +55,6 @@ void rc4_skip(const u8 *key, size_t keylen, size_t skip,
|
|||
S_SWAP(i, j);
|
||||
*pos++ ^= S[(S[i] + S[j]) & 0xff];
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1,21 +0,0 @@
|
|||
/*
|
||||
* RC4 stream cipher
|
||||
* Copyright (c) 2002-2005, Jouni Malinen <j@w1.fi>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* Alternatively, this software may be distributed under the terms of BSD
|
||||
* license.
|
||||
*
|
||||
* See README and COPYING for more details.
|
||||
*/
|
||||
|
||||
#ifndef RC4_H
|
||||
#define RC4_H
|
||||
|
||||
void rc4_skip(const u8 *key, size_t keylen, size_t skip,
|
||||
u8 *data, size_t data_len);
|
||||
|
||||
#endif /* RC4_H */
|
|
@ -20,7 +20,7 @@
|
|||
#include "eloop.h"
|
||||
#include "eapol_common.h"
|
||||
#include "md5.h"
|
||||
#include "rc4.h"
|
||||
#include "crypto.h"
|
||||
#include "state_machine.h"
|
||||
#include "wpabuf.h"
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
#include "includes.h"
|
||||
|
||||
#include "common.h"
|
||||
#include "rc4.h"
|
||||
#include "crypto.h"
|
||||
#include "aes_wrap.h"
|
||||
#include "wpa.h"
|
||||
#include "eloop.h"
|
||||
|
|
|
@ -52,7 +52,6 @@ OBJS = config.o
|
|||
OBJS += ../src/utils/common.o
|
||||
OBJS += ../src/utils/wpa_debug.o
|
||||
OBJS += ../src/utils/wpabuf.o
|
||||
OBJS += ../src/crypto/rc4.o
|
||||
OBJS_p = wpa_passphrase.o
|
||||
OBJS_p += ../src/utils/common.o
|
||||
OBJS_p += ../src/utils/wpa_debug.o
|
||||
|
@ -677,6 +676,7 @@ CONFIG_INTERNAL_AES=y
|
|||
CONFIG_INTERNAL_SHA1=y
|
||||
CONFIG_INTERNAL_MD5=y
|
||||
CONFIG_INTERNAL_SHA256=y
|
||||
CONFIG_INTERNAL_RC4=y
|
||||
endif
|
||||
ifdef CONFIG_SMARTCARD
|
||||
ifndef CONFIG_NATIVE_WINDOWS
|
||||
|
@ -732,6 +732,7 @@ OBJS_p += ../src/crypto/crypto_openssl.o
|
|||
ifdef NEED_FIPS186_2_PRF
|
||||
OBJS += ../src/crypto/fips_prf_openssl.o
|
||||
endif
|
||||
CONFIG_INTERNAL_RC4=y
|
||||
endif
|
||||
ifeq ($(CONFIG_TLS), gnutls)
|
||||
OBJS += ../src/crypto/crypto_gnutls.o
|
||||
|
@ -740,17 +741,20 @@ ifdef NEED_FIPS186_2_PRF
|
|||
OBJS += ../src/crypto/fips_prf_gnutls.o
|
||||
endif
|
||||
CONFIG_INTERNAL_SHA256=y
|
||||
CONFIG_INTERNAL_RC4=y
|
||||
endif
|
||||
ifeq ($(CONFIG_TLS), schannel)
|
||||
OBJS += ../src/crypto/crypto_cryptoapi.o
|
||||
OBJS_p += ../src/crypto/crypto_cryptoapi.o
|
||||
CONFIG_INTERNAL_SHA256=y
|
||||
CONFIG_INTERNAL_RC4=y
|
||||
endif
|
||||
ifeq ($(CONFIG_TLS), internal)
|
||||
ifeq ($(CONFIG_CRYPTO), libtomcrypt)
|
||||
OBJS += ../src/crypto/crypto_libtomcrypt.o
|
||||
OBJS_p += ../src/crypto/crypto_libtomcrypt.o
|
||||
CONFIG_INTERNAL_SHA256=y
|
||||
CONFIG_INTERNAL_RC4=y
|
||||
endif
|
||||
ifeq ($(CONFIG_CRYPTO), internal)
|
||||
OBJS += ../src/crypto/crypto_internal.o ../src/tls/bignum.o
|
||||
|
@ -771,18 +775,21 @@ CONFIG_INTERNAL_SHA1=y
|
|||
CONFIG_INTERNAL_MD4=y
|
||||
CONFIG_INTERNAL_MD5=y
|
||||
CONFIG_INTERNAL_SHA256=y
|
||||
CONFIG_INTERNAL_RC4=y
|
||||
endif
|
||||
ifeq ($(CONFIG_CRYPTO), cryptoapi)
|
||||
OBJS += ../src/crypto/crypto_cryptoapi.o
|
||||
OBJS_p += ../src/crypto/crypto_cryptoapi.o
|
||||
CFLAGS += -DCONFIG_CRYPTO_CRYPTOAPI
|
||||
CONFIG_INTERNAL_SHA256=y
|
||||
CONFIG_INTERNAL_RC4=y
|
||||
endif
|
||||
endif
|
||||
ifeq ($(CONFIG_TLS), none)
|
||||
OBJS += ../src/crypto/crypto_none.o
|
||||
OBJS_p += ../src/crypto/crypto_none.o
|
||||
CONFIG_INTERNAL_SHA256=y
|
||||
CONFIG_INTERNAL_RC4=y
|
||||
endif
|
||||
else
|
||||
CONFIG_INTERNAL_AES=y
|
||||
|
@ -812,6 +819,10 @@ ifdef CONFIG_INTERNAL_DES
|
|||
DESOBJS += ../src/crypto/des-internal.o
|
||||
endif
|
||||
|
||||
ifdef CONFIG_INTERNAL_RC4
|
||||
OBJS += ../src/crypto/rc4.o
|
||||
endif
|
||||
|
||||
ifdef CONFIG_IEEE80211R
|
||||
NEED_SHA256=y
|
||||
endif
|
||||
|
|
Loading…
Reference in a new issue