~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Wine Cross Reference
wine/dlls/rsaenh/rc4.c

Version: ~ [ wine-1.5.31 ] ~ [ wine-1.5.30 ] ~ [ wine-1.5.29 ] ~ [ wine-1.5.28 ] ~ [ wine-1.5.27 ] ~ [ wine-1.5.26 ] ~ [ wine-1.5.25 ] ~ [ wine-1.5.24 ] ~ [ wine-1.5.23 ] ~ [ wine-1.5.22 ] ~ [ wine-1.5.21 ] ~ [ wine-1.5.20 ] ~ [ wine-1.5.19 ] ~ [ wine-1.5.18 ] ~ [ wine-1.5.17 ] ~ [ wine-1.5.16 ] ~ [ wine-1.5.15 ] ~ [ wine-1.5.14 ] ~ [ wine-1.5.13 ] ~ [ wine-1.5.12 ] ~ [ wine-1.5.11 ] ~ [ wine-1.5.10 ] ~ [ wine-1.5.9 ] ~ [ wine-1.5.8 ] ~ [ wine-1.5.7 ] ~ [ wine-1.4.1 ] ~ [ wine-1.5.6 ] ~ [ wine-1.5.5 ] ~ [ wine-1.5.4 ] ~ [ wine-1.5.3 ] ~ [ wine-1.5.2 ] ~ [ wine-1.5.1 ] ~ [ wine-1.5.0 ] ~ [ wine-1.4 ] ~ [ wine-1.4-rc6 ] ~ [ wine-1.4-rc5 ] ~ [ wine-1.4-rc4 ] ~ [ wine-1.4-rc3 ] ~ [ wine-1.4-rc2 ] ~ [ wine-1.4-rc1 ] ~ [ wine-1.3.37 ] ~ [ wine-1.3.36 ] ~ [ wine-1.3.35 ] ~ [ wine-1.3.34 ] ~ [ wine-1.3.33 ] ~ [ wine-1.3.32 ] ~ [ wine-1.3.31 ] ~ [ wine-1.3.30 ] ~ [ wine-1.3.29 ] ~ [ wine-1.3.28 ] ~ [ wine-1.3.27 ] ~ [ wine-1.3.26 ] ~ [ wine-1.3.25 ] ~ [ wine-1.3.24 ] ~ [ wine-1.3.23 ] ~ [ wine-1.3.22 ] ~ [ wine-1.3.21 ] ~ [ wine-1.3.20 ] ~ [ wine-1.3.19 ] ~ [ wine-1.3.18 ] ~ [ wine-1.2.3 ] ~ [ wine-1.3.17 ] ~ [ wine-1.3.16 ] ~ [ wine-1.3.15 ] ~ [ wine-1.3.14 ] ~ [ wine-1.3.13 ] ~ [ wine-1.3.12 ] ~ [ wine-1.3.11 ] ~ [ wine-1.3.10 ] ~ [ wine-1.3.9 ] ~ [ wine-1.2.2 ] ~ [ wine-1.3.8 ] ~ [ wine-1.3.7 ] ~ [ wine-1.3.6 ] ~ [ wine-1.3.5 ] ~ [ wine-1.2.1 ] ~ [ wine-1.3.4 ] ~ [ wine-1.3.3 ] ~ [ wine-1.3.2 ] ~ [ wine-1.3.1 ] ~ [ wine-1.3.0 ] ~ [ wine-1.2 ] ~ [ wine-1.2-rc7 ] ~ [ wine-1.2-rc6 ] ~ [ wine-1.2-rc5 ] ~ [ wine-1.2-rc4 ] ~ [ wine-1.2-rc3 ] ~ [ wine-1.2-rc2 ] ~ [ wine-1.2-rc1 ] ~ [ wine-1.1.44 ] ~ [ wine-1.1.43 ] ~ [ wine-1.1.42 ] ~ [ wine-1.1.41 ] ~ [ wine-1.1.40 ] ~ [ wine-1.1.39 ] ~ [ wine-1.1.38 ] ~ [ wine-1.1.37 ] ~ [ wine-1.1.36 ] ~ [ wine-1.1.35 ] ~ [ wine-1.1.34 ] ~ [ wine-1.1.33 ] ~ [ wine-1.1.32 ] ~ [ wine-1.1.31 ] ~ [ wine-1.1.30 ] ~ [ wine-1.1.29 ] ~ [ wine-1.1.28 ] ~ [ wine-1.1.27 ] ~ [ wine-1.1.26 ] ~ [ wine-1.1.25 ] ~ [ wine-1.1.24 ] ~ [ wine-1.1.23 ] ~ [ wine-1.1.22 ] ~ [ wine-1.1.21 ] ~ [ wine-1.1.20 ] ~ [ wine-1.1.19 ] ~ [ wine-1.1.18 ] ~ [ wine-1.1.17 ] ~ [ wine-1.1.16 ] ~ [ wine-1.1.15 ] ~ [ wine-1.1.14 ] ~ [ wine-1.1.13 ] ~ [ wine-1.1.12 ] ~ [ wine-1.1.11 ] ~ [ wine-1.1.10 ] ~ [ wine-1.1.9 ] ~ [ wine-1.1.8 ] ~ [ wine-1.1.7 ] ~ [ wine-1.0.1 ] ~ [ wine-1.1.6 ] ~ [ wine-1.1.5 ] ~ [ wine-1.1.4 ] ~ [ wine-1.1.3 ] ~ [ wine-1.1.2 ] ~ [ wine-1.1.1 ] ~ [ wine-1.1.0 ] ~ [ wine-1.0 ] ~

  1 /*
  2  * dlls/rsaenh/rc4.c
  3  * RC4 functions
  4  *
  5  * Copyright 2004 Michael Jung
  6  * Based on public domain code by Tom St Denis (tomstdenis@iahu.ca)
  7  *
  8  * This library is free software; you can redistribute it and/or
  9  * modify it under the terms of the GNU Lesser General Public
 10  * License as published by the Free Software Foundation; either
 11  * version 2.1 of the License, or (at your option) any later version.
 12  *
 13  * This library is distributed in the hope that it will be useful,
 14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 16  * Lesser General Public License for more details.
 17  *
 18  * You should have received a copy of the GNU Lesser General Public
 19  * License along with this library; if not, write to the Free Software
 20  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 21  */
 22 
 23 /*
 24  * This file contains code from the LibTomCrypt cryptographic 
 25  * library written by Tom St Denis (tomstdenis@iahu.ca). LibTomCrypt
 26  * is in the public domain. The code in this file is tailored to
 27  * special requirements. Take a look at http://libtomcrypt.org for the
 28  * original version. 
 29  */
 30 
 31 #include "tomcrypt.h"
 32 
 33 int rc4_start(prng_state *prng)
 34 {
 35     /* set keysize to zero */
 36     prng->rc4.x = 0;
 37     
 38     return CRYPT_OK;
 39 }
 40 
 41 int rc4_add_entropy(const unsigned char *buf, unsigned long len, prng_state *prng)
 42 {
 43     /* trim as required */
 44     if (prng->rc4.x + len > 256) {
 45        if (prng->rc4.x == 256) {
 46           /* I can't possibly accept another byte, ok maybe a mint wafer... */
 47           return CRYPT_OK;
 48        } else {
 49           /* only accept part of it */
 50           len = 256 - prng->rc4.x;
 51        }       
 52     }
 53 
 54     while (len--) {
 55        prng->rc4.buf[prng->rc4.x++] = *buf++;
 56     }
 57 
 58     return CRYPT_OK;
 59 }
 60 
 61 int rc4_ready(prng_state *prng)
 62 {
 63     unsigned char key[256], tmp, *s;
 64     int keylen, x, y, j;
 65 
 66     /* extract the key */
 67     s = prng->rc4.buf;
 68     memcpy(key, s, 256);
 69     keylen = prng->rc4.x;
 70 
 71     /* make RC4 perm and shuffle */
 72     for (x = 0; x < 256; x++) {
 73         s[x] = x;
 74     }
 75 
 76     for (j = x = y = 0; x < 256; x++) {
 77         y = (y + prng->rc4.buf[x] + key[j++]) & 255;
 78         if (j == keylen) {
 79            j = 0; 
 80         }
 81         tmp = s[x]; s[x] = s[y]; s[y] = tmp;
 82     }
 83     prng->rc4.x = 0;
 84     prng->rc4.y = 0;
 85 
 86     return CRYPT_OK;
 87 }
 88 
 89 unsigned long rc4_read(unsigned char *buf, unsigned long len, prng_state *prng)
 90 {
 91    unsigned char x, y, *s, tmp;
 92    unsigned long n;
 93 
 94    n = len;
 95    x = prng->rc4.x;
 96    y = prng->rc4.y;
 97    s = prng->rc4.buf;
 98    while (len--) {
 99       x = (x + 1) & 255;
100       y = (y + s[x]) & 255;
101       tmp = s[x]; s[x] = s[y]; s[y] = tmp;
102       tmp = (s[x] + s[y]) & 255;
103       *buf++ ^= s[tmp];
104    }
105    prng->rc4.x = x;
106    prng->rc4.y = y;
107    return n;
108 }
109 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.