X-Git-Url: https://git.cryptolib.org/?a=blobdiff_plain;f=grain%2Fgrain.c;h=fc8c7f7670a968d54c9bffd087b4100246988f8a;hb=eb0cafe05ab4cdf60878dbd81e4ff3712d5150f2;hp=8d30d2266299a367a2f5891daa0220f58642fe2d;hpb=d32eba56ce10ea6b9eff123b50d9842673b38f2b;p=avr-crypto-lib.git diff --git a/grain/grain.c b/grain/grain.c index 8d30d22..fc8c7f7 100644 --- a/grain/grain.c +++ b/grain/grain.c @@ -40,10 +40,10 @@ #define _B(i) (((ctx->nfsr[9-((i)/8)])>>(7-((i)%8)))&1) -uint8_t h_lut[4] PROGMEM = {0x4C, 0xB6, 0xD3, 0x26}; +const uint8_t h_lut[4] PROGMEM = {0x4C, 0xB6, 0xD3, 0x26}; #ifdef GRAIN_BADOPTIMISATION -uint8_t g_lut[128] PROGMEM = { +const uint8_t g_lut[128] PROGMEM = { 0xF0, 0xA5, 0x0F, 0x5A, 0x0F, 0x5A, 0xF0, 0xA5, 0x0F, 0x5A, 0xF0, 0xA5, 0xF0, 0x5A, 0x0F, 0x0F, 0xC3, 0x96, 0x3C, 0x69, 0x3C, 0x69, 0xC3, 0x96, 0x9C, 0xC9, 0x63, 0x36, 0x63, 0xC9, 0x9C, 0x9C, 0x0F, 0x5A, 0x0F, 0x5A, 0xF0, 0xA5, 0xF0, 0x5A, 0xF0, 0xA5, 0xF0, 0xA5, 0x0F, 0xA5, 0x0F, 0xF0, @@ -54,7 +54,7 @@ uint8_t g_lut[128] PROGMEM = { 0xF3, 0x2E, 0xF3, 0x2E, 0x0C, 0xD1, 0x0C, 0x2E, 0xAC, 0x71, 0xAC, 0x71, 0x53, 0x71, 0xA3, 0xD4 }; #endif -uint8_t grain_enc(grain_ctx_t* ctx){ +uint8_t grain_enc(grain_ctx_t *ctx){ uint8_t s80, s0, c1, c2; uint8_t i; /* clock the LFSR */ @@ -134,7 +134,17 @@ uint8_t grain_enc(grain_ctx_t* ctx){ h = (pgm_read_byte(h_lut+(i/8)))>>(i%8); h ^= B(0) ^ B(1) ^ B(3) ^ B(9) ^ B(30) ^ B(42) ^ B(55); - return h&1; + return (h&1); +} + +uint8_t grain_getbyte(grain_ctx_t *ctx){ + uint8_t i=0; + uint8_t r=0; + do{ + r >>= 1; + r |= grain_enc(ctx)?0x80:0x00; + }while(++i<8); + return r; } #ifdef GRAIN_REVERSEKEY @@ -156,7 +166,7 @@ uint8_t reverse_bits(uint8_t a){ #endif -void grain_init(const void* key, const void* iv, grain_ctx_t* ctx){ +void grain_init(const void *key, const void *iv, grain_ctx_t *ctx){ uint8_t i,t; /* load the 80bit key */