Files
m241Neelima/components/ip_net2-6.9/ip8021x/src/ip8021x_rc4.c
T
2026-07-30 11:19:44 +05:30

166 lines
4.5 KiB
C

/*
******************************************************************************
* INTERPEAK SOURCE FILE
*
* Document no: @(#) $Name: VXWORKS_ITER40_2019102207 $ $RCSfile: ip8021x_rc4.c,v $ $Revision: 1.3 $
* $Source: /home/interpeak/CVSRoot/ip8021x/src/ip8021x_rc4.c,v $
* $Author: myakan $
* $State: Exp $ $Locker: $
*
* Copyright 2000-2006 Interpeak AB (http://www.interpeak.se). All rights reserved.
* Design and implementation by Roger Boden <roger@interpeak.se>
******************************************************************************
*/
/*
****************************************************************************
* 1 DESCRIPTION
****************************************************************************
*/
/*
****************************************************************************
* 2 CONFIGURATION
****************************************************************************
*/
#include "ip8021x_config.h"
/*
****************************************************************************
* 3 INCLUDE FILES
****************************************************************************
*/
#include <ipcom_type.h>
#include <ipcom_cstyle.h>
#include "ip8021x.h"
#include "ip8021x_h.h"
/*
****************************************************************************
* 4 DEFINES
****************************************************************************
*/
#define IP8021X_RC4_SWAP(a,b) do { Ip_u8 t = S[a]; S[a] = S[b]; S[b] = t; } while(0)
/*
****************************************************************************
* 5 TYPES
****************************************************************************
*/
/*
****************************************************************************
* 6 EXTERN PROTOTYPES
****************************************************************************
*/
/*
****************************************************************************
* 7 LOCAL PROTOTYPES
****************************************************************************
*/
/*
****************************************************************************
* 8 DATA
****************************************************************************
*/
/*
****************************************************************************
* 9 STATIC FUNCTIONS
****************************************************************************
*/
/*
****************************************************************************
* 10 GLOBAL FUNCTIONS
****************************************************************************
*/
/*
*===========================================================================
* ip8021x_rc4_skip
*===========================================================================
* Description:
* Parameters:
* Returns:
*
*/
IP_GLOBAL void
ip8021x_rc4_skip(Ip_u8 *key, Ip_size_t keylen, Ip_size_t skip, Ip_u8 *data, Ip_size_t data_len)
{
Ip_u32 i;
Ip_u32 j;
Ip_u32 k;
Ip_u8 S[256];
unsigned int pos;
/* Initialize RC4 S-box */
for (i = 0; i < 256; i++)
S[i] = i; /*lint !e734*/
j = 0;
pos = 0;
for (i = 0; i < 256; i++) {
j = (j + S[i] + key[pos]) & 0xff;
pos++;
if (pos >= keylen)
pos = 0;
IP8021X_RC4_SWAP(i, j);
}
/* Skip the first 'skip' bytes of the key stream */
i = 0;
j = 0;
for (k = 0; k < skip; k++) {
i = (i + 1) & 0xff;
j = (j + S[i]) & 0xff;
IP8021X_RC4_SWAP(i, j);
}
/* Encrypt/decrypt the data */
for (k = 0; k < data_len; k++) {
i = (i + 1) & 0xff;
j = (j + S[i]) & 0xff;
IP8021X_RC4_SWAP(i, j);
*data++ ^= S[(S[i] + S[j]) & 0xff];
}
}
/*
*===========================================================================
* ip8021x_rc4
*===========================================================================
* Description:
* Parameters:
* Returns:
*
*/
IP_GLOBAL void
ip8021x_rc4(Ip_u8 *key, Ip_size_t key_len, Ip_u8 *buf, Ip_size_t len)
{
ip8021x_rc4_skip(key, key_len, 0, buf, len);
}
/*
****************************************************************************
* 11 PUBLIC FUNCTIONS
****************************************************************************
*/
/*
****************************************************************************
* END OF FILE
****************************************************************************
*/