#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,
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