Changeset 17469
- Timestamp:
- 08/10/12 18:20:45 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
titan/titan/rc4.h
r17455 r17469 2 2 #define RC4_H 3 3 4 struct rc4ctx { 5 unsigned char S[256]; 6 unsigned char i; 7 unsigned char j; 4 struct rc4ctx 5 { 6 unsigned char S[256]; 7 unsigned char i; 8 unsigned char j; 8 9 }; 9 10 … … 12 13 void rc4init(struct rc4ctx *ctx, char *key, size_t keylen) 13 14 { 14 15 15 int i; 16 unsigned char j = 0; 16 17 17 for (i = 0; i < sizeof(ctx->S); i++) { 18 ctx->S[i] = i; 19 } 18 for(i = 0; i < sizeof(ctx->S); i++) 19 { 20 ctx->S[i] = i; 21 } 20 22 21 for (i = 0; i < sizeof(ctx->S); i++) { 22 j += (ctx->S[i] + key[i % keylen]); 23 SWAPRC4(ctx->S[i], ctx->S[j]); 24 } 23 for(i = 0; i < sizeof(ctx->S); i++) 24 { 25 j += (ctx->S[i] + key[i % keylen]); 26 SWAPRC4(ctx->S[i], ctx->S[j]); 27 } 25 28 } 26 29 27 30 void rc4crypt(struct rc4ctx *ctx, char *data, size_t len) 28 31 { 29 32 unsigned int i; 30 33 31 32 34 ctx->i = 0; 35 ctx->j = 0; 33 36 34 for (i = 0; i < len; i++) { 35 unsigned char s; 37 for(i = 0; i < len; i++) 38 { 39 unsigned char s; 36 40 37 ctx->i++;38 ctx->j += ctx->S[ctx->i];41 ctx->i++; 42 ctx->j += ctx->S[ctx->i]; 39 43 40 SWAPRC4(ctx->S[ctx->i], ctx->S[ctx->j]);44 SWAPRC4(ctx->S[ctx->i], ctx->S[ctx->j]); 41 45 42 s = ctx->S[ctx->i] + ctx->S[ctx->j];43 data[i] = data[i] ^ ctx->S[s];44 46 s = ctx->S[ctx->i] + ctx->S[ctx->j]; 47 data[i] = data[i] ^ ctx->S[s]; 48 } 45 49 } 46 50 47 51 void rc4(char *data, size_t dlen, char *key, size_t klen) 48 52 { 49 struct rc4ctx ctx; 50 rc4init(&ctx, key, klen); 51 rc4crypt(&ctx, data, dlen); 53 struct rc4ctx ctx; 54 55 rc4init(&ctx, key, klen); 56 rc4crypt(&ctx, data, dlen); 52 57 } 53 58
Note: See TracChangeset
for help on using the changeset viewer.