33 #if defined(POLARSSL_ARC4_C)
50 for( i = 0; i < 256; i++ )
51 m[i] = (
unsigned char) i;
55 for( i = 0; i < 256; i++, k++ )
57 if( k >= keylen ) k = 0;
60 j = ( j + a + key[k] ) & 0xFF;
62 m[j] = (
unsigned char) a;
70 unsigned char *output )
80 for( i = 0; i < length; i++ )
82 x = ( x + 1 ) & 0xFF; a = m[x];
83 y = ( y + a ) & 0xFF; b = m[y];
85 m[x] = (
unsigned char) b;
86 m[y] = (
unsigned char) a;
88 output[i] = (
unsigned char)
89 ( input[i] ^ m[(
unsigned char)( a + b )] );
98 #if defined(POLARSSL_SELF_TEST)
108 static const unsigned char arc4_test_key[3][8] =
110 { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF },
111 { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF },
112 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
115 static const unsigned char arc4_test_pt[3][8] =
117 { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF },
118 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
119 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
122 static const unsigned char arc4_test_ct[3][8] =
124 { 0x75, 0xB7, 0x87, 0x80, 0x99, 0xE0, 0xC5, 0x96 },
125 { 0x74, 0x94, 0xC2, 0xE7, 0x10, 0x4B, 0x08, 0x79 },
126 { 0xDE, 0x18, 0x89, 0x41, 0xA3, 0x37, 0x5D, 0x3A }
135 unsigned char ibuf[8];
136 unsigned char obuf[8];
139 for( i = 0; i < 3; i++ )
142 printf(
" ARC4 test #%d: ", i + 1 );
144 memcpy( ibuf, arc4_test_pt[i], 8 );
146 arc4_setup( &ctx, (
unsigned char *) arc4_test_key[i], 8 );
149 if( memcmp( obuf, arc4_test_ct[i], 8 ) != 0 )
152 printf(
"failed\n" );
158 printf(
"passed\n" );