⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rc4.cc

📁 COPE the first practical network coding scheme which is developped on click
💻 CC
字号:
/* -*- related-file-name: "../include/click/rc4.h" -*- */#include <click/config.h>#include "rc4.hh"/* * rc4.c * * Copyright (c) 1996-2000 Whistle Communications, Inc. * All rights reserved. *  * Subject to the following obligations and disclaimer of warranty, use and * redistribution of this software, in source or object code forms, with or * without modifications are expressly permitted by Whistle Communications; * provided, however, that: * 1. Any and all reproductions of the source or object code must include the *    copyright notice above and the following disclaimer of warranties; and * 2. No rights are granted, in any manner or form, to use Whistle *    Communications, Inc. trademarks, including the mark "WHISTLE *    COMMUNICATIONS" on advertising, endorsements, or otherwise except as *    such appears in the above copyright notice or in the software. *  * THIS SOFTWARE IS BEING PROVIDED BY WHISTLE COMMUNICATIONS "AS IS", AND * TO THE MAXIMUM EXTENT PERMITTED BY LAW, WHISTLE COMMUNICATIONS MAKES NO * REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING THIS SOFTWARE, * INCLUDING WITHOUT LIMITATION, ANY AND ALL IMPLIED WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. * WHISTLE COMMUNICATIONS DOES NOT WARRANT, GUARANTEE, OR MAKE ANY * REPRESENTATIONS REGARDING THE USE OF, OR THE RESULTS OF THE USE OF THIS * SOFTWARE IN TERMS OF ITS CORRECTNESS, ACCURACY, RELIABILITY OR OTHERWISE. * IN NO EVENT SHALL WHISTLE COMMUNICATIONS BE LIABLE FOR ANY DAMAGES * RESULTING FROM OR ARISING OUT OF ANY USE OF THIS SOFTWARE, INCLUDING * WITHOUT LIMITATION, ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, * PUNITIVE, OR CONSEQUENTIAL DAMAGES, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES, LOSS OF USE, DATA OR PROFITS, HOWEVER CAUSED AND UNDER ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF WHISTLE COMMUNICATIONS IS ADVISED OF THE POSSIBILITY * OF SUCH DAMAGE. * */static  voidswap_bytes(unsigned char *a, unsigned char *b){	unsigned char temp;		temp = *a;	*a = *b;	*b = temp;}/* * Initialize an RC4 state buffer using the supplied key, * which can have arbitrary length. */voidrc4_init(struct rc4_state *const state, const unsigned char *key, int keylen){	unsigned char j;	int i;	/* Initialize state with identity permutation */	for (i = 0; i < 256; i++)		state->perm[i] = (unsigned char)i; 	state->index1 = 0;	state->index2 = 0;  	/* Randomize the permutation using key data */	for (j = i = 0; i < 256; i++) {		j += state->perm[i] + key[i % keylen]; 		swap_bytes(&state->perm[i], &state->perm[j]);	}}/* * Encrypt some data using the supplied RC4 state buffer. * The input and output buffers may be the same buffer. * Since RC4 is a stream cypher, this function is used * for both encryption and decryption. */voidrc4_crypt_skip(struct rc4_state *const state,	const unsigned char *inbuf, unsigned char *outbuf, int buflen, int skip){	int i;	unsigned char j;	for (i = 0; i < skip; i++) {		/* Update modification indicies */		state->index1++;		state->index2 += state->perm[state->index1];		/* Modify permutation */		swap_bytes(&state->perm[state->index1],		    &state->perm[state->index2]);		/* Encrypt/decrypt next byte */		j = state->perm[state->index1] + state->perm[state->index2];	}	for (i = 0; i < buflen; i++) {		/* Update modification indicies */		state->index1++;		state->index2 += state->perm[state->index1];		/* Modify permutation */		swap_bytes(&state->perm[state->index1],		    &state->perm[state->index2]);		/* Encrypt/decrypt next byte */		j = state->perm[state->index1] + state->perm[state->index2];		outbuf[i] = inbuf[i] ^ state->perm[j];	}}/*                                                                                   * CRC 32 -- routine from RFC 2083                                                   *//* Table of CRCs of all 8-bit messages */static u_int32_t crc_table[256];/* Make the table for a fast CRC. */static voidcrc_init(void){  u_int32_t c;  int n, k;    for (n = 0; n < 256; n++) {    c = (u_int32_t)n;    for (k = 0; k < 8; k++) {      if (c & 1)	c = 0xedb88320UL ^ (c >> 1);      else	c = c >> 1;    }    crc_table[n] = c;  }}u_int32_trfc_2083_crc_update(u_int32_t crc, u_int8_t *buf, int len){  u_int8_t *endbuf;  static int initialized = 0;  if (initialized == 0) {    initialized = 1;    crc_init();  }  for (endbuf = buf + len; buf < endbuf; buf++)    crc = crc_table[(crc ^ *buf) & 0xff] ^ (crc >> 8);  return crc;}ELEMENT_PROVIDES(rc4)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -