Changeset e2869bf for lib


Ignore:
Timestamp:
2007-10-07T22:07:25Z (17 years ago)
Author:
Wilmer van der Gaast <wilmer@…>
Branches:
master
Children:
2896674
Parents:
2305488
Message:

"Changed" the ArcFour implementation. I'm afraid this was a waste of time,
but at least I added a neat unittest...

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lib/arc.c

    r2305488 re2869bf  
    6161        struct arc_state *st;
    6262        int i, j, tmp;
     63        unsigned char S2[256];
    6364       
    6465        st = g_malloc( sizeof( struct arc_state ) );
    6566        st->i = st->j = 0;
    66         for( i = 0; i < 256; i ++ )
    67                 st->S[i] = i;
    68        
    6967        if( kl <= 0 )
    7068                kl = strlen( (char*) key );
    7169       
     70        for( i = 0; i < 256; i ++ )
     71        {
     72                st->S[i] = i;
     73                S2[i] = key[i%kl];
     74        }
     75       
    7276        for( i = j = 0; i < 256; i ++ )
    7377        {
    74                 j = ( j + st->S[i] + key[i%kl] ) & 0xff;
     78                j = ( j + st->S[i] + S2[i] ) & 0xff;
    7579                tmp = st->S[i];
    7680                st->S[i] = st->S[j];
    7781                st->S[j] = tmp;
    7882        }
     83       
     84        memset( S2, 0, 256 );
     85        i = j = 0;
    7986       
    8087        for( i = 0; i < cycles; i ++ )
     
    104111        st->S[st->i] = st->S[st->j];
    105112        st->S[st->j] = tmp;
    106        
    107         return st->S[(st->S[st->i] + st->S[st->j]) & 0xff];
     113        tmp = (st->S[st->i] + st->S[st->j]) & 0xff;
     114       
     115        return st->S[tmp];
    108116}
    109117
Note: See TracChangeset for help on using the changeset viewer.