]> git.cryptolib.org Git - avr-crypto-lib.git/blobdiff - arcfour/arcfour.c
a lot of fixes
[avr-crypto-lib.git] / arcfour / arcfour.c
index 6c068a8023ee0acb487b33a313c050f6afa8e9b4..ba66c165dd44e89e2d5691b2c3b0414fbe3b1d9f 100644 (file)
 
 void arcfour_init(const void *key, uint16_t length_b, arcfour_ctx_t *ctx){
        uint8_t t;
-       uint8_t length_B = length_b/8;
+       const uint8_t length_B = length_b/8;
+       uint8_t nidx = length_B;
        uint8_t x=0,y=0;
-       uint8_t *kptr=key;
+       const uint8_t *kptr = (const uint8_t*)key;
        do{
                ctx->s[x]=x;
-       }while(++x);
+       }while((uint8_t)++x);
 
        do{
                y += ctx->s[x] + *kptr++;
-               if(x==length_B){
-                       kptr = key;
+               if(!--nidx){
+                       kptr = (const uint8_t*)key;
+                       nidx = length_B;
                }
                y &= 0xff;
                /* ctx->s[y] <--> ctx->s[x] */
                t = ctx->s[y];
                ctx->s[y] = ctx->s[x];
                ctx->s[x] = t;
-       }while(++x);
+       }while((uint8_t)++x);
 
        ctx->i = ctx->j = 0;
 }