svn: ecrypt/trunk/submissions/achterbahn/128-80/opt1/achterbahn.h
/* ------------------------------------------------------------------------- *
*
* Program: A C H T E R B A H N - 128 / 80
* Version 1.2 of the C reference implementation (optimized)
*
* Authors: Berndt M. Gammel, Email: gammel@matpack.de
* Rainer Goettfert, Email: rainer.goettfert@gmx.de
* Oliver Kniffler, Email: oliver.kniffler@arcor.de
*
* Language: ANSI C99
*
* Sources: achterbahn.c
* achterbahn.h
* ecrypt-sync.h
*
* Includes: ecrypt-portable.h,
* ecrypt-config.h,
* ecrypt-machine.h
*
* Makefile: Makefile
*
* Platforms: This program has been tested on the following platforms:
* gcc 3.4.4, Cygwin, Windows 2000
* gcc 4.1.0, S.u.S.E. Linux 10.1
*
* Copyright: (C) 2005-2006 by Berndt M. Gammel, Rainer Goettfert,
* and Oliver Kniffler
*
* ------------------------------------------------------------------------- */
/* ------------------------------------------------------------------------- *
* This is the the include file "acherbahn.h"
* ------------------------------------------------------------------------- */
#define ZERO 0U
#define ONE 1U
#define false 0U
#define true 1U
/* ------------------------------------------------------------------------- *
* NLFSRs
* Note, that the macros Axx_cycle8(x,feedin8) require intermediary
* global variables:
* u32 F, M;
* u64 FL, ML;
* ------------------------------------------------------------------------- */
/* NLFSR lengths */
#define A0_size 21U /* NLFSR A0: n = 21 */
#define A1_size 22U /* NLFSR A1: n = 22 */
#define A2_size 23U /* NLFSR A2: n = 23 */
#define A3_size 24U /* NLFSR A3: n = 24 */
#define A4_size 25U /* NLFSR A4: n = 25 */
#define A5_size 26U /* NLFSR A5: n = 26 */
#define A6_size 27U /* NLFSR A6: n = 27 */
#define A7_size 28U /* NLFSR A7: n = 28 */
#define A8_size 29U /* NLFSR A8: n = 29 */
#define A9_size 30U /* NLFSR A9: n = 30 */
#define A10_size 31U /* NLFSR A10: n = 31 */
#define A11_size 32U /* NLFSR A11: n = 32 */
#define A12_size 33U /* NLFSR A12: n = 33 */
/* NLFSR bit mask which equals the period */
#define A0_mask 0x001FFFFFU /* NLFSR A0: n = 21 */
#define A1_mask 0x003FFFFFU /* NLFSR A1: n = 22 */
#define A2_mask 0x007FFFFFU /* NLFSR A2: n = 23 */
#define A3_mask 0x00FFFFFFU /* NLFSR A3: n = 24 */
#define A4_mask 0x01FFFFFFU /* NLFSR A4: n = 25 */
#define A5_mask 0x03FFFFFFU /* NLFSR A5: n = 26 */
#define A6_mask 0x07FFFFFFU /* NLFSR A6: n = 27 */
#define A7_mask 0x0FFFFFFFU /* NLFSR A7: n = 28 */
#define A8_mask 0x1FFFFFFFU /* NLFSR A8: n = 29 */
#define A9_mask 0x3FFFFFFFU /* NLFSR A9: n = 30 */
#define A10_mask 0x7FFFFFFFU /* NLFSR A10: n = 31 */
#define A11_mask 0xFFFFFFFFU /* NLFSR A11: n = 32 */
#define A12_mask 0x1FFFFFFFFULL /* NLFSR A12: n = 33 */
/* ------------------------------------------------------------------------- *
* Boolean functions of basic gates
* ------------------------------------------------------------------------- */
#define AND3(a,b,c) ((a)&(b)&(c))
#define AND2(a,b) ((a)&(b))
#define XOR3(a,b,c) ((a)^(b)^(c))
#define MUX3(a,b,c) (((c)&((a)^(b)))^(a))
#define MAJ3(a,b,c) (((a)&((b)^(c)))^((b)&(c)))
/* ------------------------------------------------------------------------- *
* NLFSR A0 (length 21, period = 2097151)
*
* A0(x) = x0 + x2 + x3 + x4 + x5 + x6 + x8 + x11 + x15 + x1*x11 + x2*x11
* + x2*x12 + x4*x6 + x4*x7 + x5*x6 + x1*x2*x11 + x1*x2*x12
* + x1*x9*x11 + x9*x10*x11 + x1*x2*x6*x13 + x1*x2*x9*x11
* + x2*x9*x10*x11 + x1*x2*x9*x12 + x2*x9*x10*x12
* + x1*x2*x6*x9*x13 + x2*x6*x9*x10*x13
*
* ------------------------------------------------------------------------- */
#define A0_cycle(x,feedin)\
(x = (x >> ONE) | ((ONE & (XOR3(XOR3(feedin,\
(x)>>15,\
XOR3((x)>>3,(x)>>2,(x))),\
XOR3(AND2((x)>>4,(x)>>7),\
XOR3((x)>>5,(x)>>6,(x)>>8),\
MUX3((x)>>4,(x)>>5,(x)>>6)),\
MUX3(MUX3((x)>>11,(x)>>12,(x)>>2),\
AND3((x)>>6,(x)>>2,(x)>>13),\
MUX3((x)>>1,(x)>>10,(x)>>9)))\
)) << 20))
#define A0_cycle3(x,feedin3)\
M = ((x)>>15) & 0x3F,\
F = M ^ (feedin3) ^ (x) ^ ((x)>>2) ^ ((x)>>3) ^ ((x)>>5) ^ ((x)>>6)\
^ ((x)>>8) ^ (((x)>>4) & ((x)>>7))\
^ MUX3(((x)>>4),((x)>>5),((x)>>6))\
^ MUX3(MUX3(((x)>>11),((x)>>12),((x)>>2)),\
((x)>>2) & ((x)>>6) & ((x)>>13),\
MUX3(((x)>>1),((x)>>10),((x)>>9))),\
F = (F&0x07) << (A0_size-3),\
(x) = F|((x)>>3)
#define A0_cycle8(x,feedin8)\
M = ((x)>>15) & 0x3F,\
F = M ^ (feedin8) ^ (x) ^ ((x)>>2) ^ ((x)>>3) ^ ((x)>>5) ^ ((x)>>6)\
^ ((x)>>8) ^ (((x)>>4) & ((x)>>7))\
^ MUX3(((x)>>4),((x)>>5),((x)>>6))\
^ MUX3(MUX3(((x)>>11),((x)>>12),((x)>>2)),\
((x)>>2) & ((x)>>6) & ((x)>>13),\
MUX3(((x)>>1),((x)>>10),((x)>>9))),\
F = ((F^(F<<6))&0xFF) << (A0_size-8),\
(x) = F|((x)>>8)
/* ------------------------------------------------------------------------- *
* NLFSR A1 (length 22, period = 4194303)
*
* A1(x) = x0 + x1 + x5 + x6 + x8 + x13 + x15 + x1*x3 + x1*x7 + x1*x13
* + x4*x12 + x5*x11 + x6*x12 + x7*x9 + x1*x11*x14 + x1*x4*x11*x14
* + x1*x7*x11*x14 + x1*x4*x10*x11*x14 + x1*x7*x9*x11*x14
* + x1*x10*x11*x12*x14
*
* ------------------------------------------------------------------------- */
#define A1_cycle(x,feedin)\
(x = (x >> ONE) | ((ONE & (XOR3(XOR3(feedin,\
(x)>>15,\
XOR3((x)>>8,(x)>>5,(x))),\
XOR3(AND2((x)>>5,(x)>>11),\
MUX3((x)>>13,(x)>>3,(x)>>1),\
MUX3((x)>>6,(x)>>4,(x)>>12)),\
MUX3(MUX3((x)>>1,(x)>>9,(x)>>7),\
MUX3((x)>>4,(x)>>12,(x)>>10),\
AND3((x)>>1,(x)>>11,(x)>>14)))\
)) << 21))
#define A1_cycle2(x,feedin2)\
M = ((x)>>15) & 0x7F,\
F = M ^ (feedin2) ^ (x) ^ ((x)>>5) ^ ((x)>>8) ^ (((x)>>5) & ((x)>>11))\
^ MUX3(((x)>>13),((x)>>3),((x)>>1))\
^ MUX3(((x)>>6),((x)>>4),((x)>>12))\
^ MUX3(MUX3(((x)>>1),((x)>>9),((x)>>7)),\
MUX3(((x)>>4),((x)>>12),((x)>>10)),\
((x)>>1) & ((x)>>11) & ((x)>>14)),\
F = (F&0x3) << (A1_size-2),\
(x) = F|((x)>>2)
#define A1_cycle8(x,feedin8)\
M = ((x)>>15) & 0x7F,\
F = M ^ (feedin8) ^ (x) ^ ((x)>>5) ^ ((x)>>8) ^ (((x)>>5) & ((x)>>11))\
^ MUX3(((x)>>13),((x)>>3),((x)>>1))\
^ MUX3(((x)>>6),((x)>>4),((x)>>12))\
^ MUX3(MUX3(((x)>>1),((x)>>9),((x)>>7)),\
MUX3(((x)>>4),((x)>>12),((x)>>10)),\
((x)>>1) & ((x)>>11) & ((x)>>14)),\
F = ((F^(F<<7))&0xFF) << (A1_size-8),\
(x) = F|((x)>>8)
/* ------------------------------------------------------------------------- *
* NLFSR A2 (length 23, period = 8388607)
*
* A2(x) = x0 + x4 + x5 + x13 + x16 + x1*x6 + x1*x7 + x4*x6 + x5*x11 + x7*x9
* + x8*x11 + x12*x14 + x1*x5*x9*x15 + x1*x9*x10*x15
* + x1*x3*x9*x11*x15 + x1*x5*x9*x11*x15 + x1*x8*x9*x11*x15
* + x1*x9*x10*x11*x15
*
* ------------------------------------------------------------------------- */
#define A2_cycle(x,feedin)\
(x = (x >> ONE) | ((ONE & (XOR3(XOR3(feedin,\
(x)>>16,\
XOR3((x)>>13,(x)>>4,(x))),\
XOR3(AND2((x)>>12,(x)>>14),\
MUX3((x)>>1,(x)>>9,(x)>>7),\
MUX3((x)>>1,(x)>>4,(x)>>6)),\
MUX3(MUX3((x)>>5,(x)>>8,(x)>>11),\
MUX3((x)>>10,(x)>>3,(x)>>11),\
AND3((x)>>1,(x)>>9,(x)>>15)))\
)) << 22))
#define A2_cycle8(x,feedin8)\
M = ((x)>>16) & 0x7F,\
F = M ^ (feedin8) ^ (x) ^ ((x)>>4) ^ ((x)>>13) ^ (((x)>>12) & ((x)>>14))\
^ MUX3(((x)>>1),((x)>>9),((x)>>7))\
^ MUX3(((x)>>1),((x)>>4),((x)>>6))\
^ MUX3(MUX3(((x)>>5),((x)>>8),((x)>>11)),\
MUX3(((x)>>10),((x)>>3),((x)>>11)),\
((x)>>1) & ((x)>>9) & ((x)>>15)),\
F = ((F^(F<<7))&0xFF) << (A2_size-8),\
(x) = F|((x)>>8)
/* ------------------------------------------------------------------------- *
* NLFSR A3 (length 24, period = 16777215)
*
* A3(x) = x0 + x2 + x3 + x6 + x8 + x12 + x18 + x1*x11 + x1*x15 + x2*x13
* + x4*x13 + x6*x15 + x12*x13 + x13*x14 + x2*x5*x14
* + x2*x5*x6 + x2*x6*x7 + x2*x7*x14 + x5*x6*x7 + x5*x7*x14
* + x1*x2*x5*x15 + x1*x2*x7*x15 + x1*x5*x7*x15 + x2*x5*x6*x15
* + x2*x5*x9*x14 + x2*x5*x9*x16 + x2*x6*x7*x15 + x2*x7*x9*x14
* + x2*x7*x9*x16 + x5*x6*x7*x15 + x5*x7*x9*x14 + x5*x7*x9*x16
*
* ------------------------------------------------------------------------- */
#define A3_cycle(x,feedin)\
(x = (x >> ONE) | ((ONE & (XOR3(XOR3(feedin,\
(x)>>18,\
XOR3((x)>>8,(x)>>3,(x))),\
XOR3(AND2((x)>>1,(x)>>11),\
MUX3((x)>>2,(x)>>14,(x)>>13),\
MUX3((x)>>12,(x)>>4,(x)>>13)),\
MUX3(MUX3((x)>>6,(x)>>1,(x)>>15),\
MUX3((x)>>14,(x)>>16,(x)>>9),\
MAJ3((x)>>2,(x)>>5,(x)>>7)))\
)) << 23))
#define A3_cycle8(x,feedin8)\
M = ((x)>>18) & 0x3F,\
F = M ^ (feedin8) ^ (x) ^ ((x)>>3) ^ ((x)>>8) ^ (((x)>>1) & ((x)>>11))\
^ MUX3(((x)>>2),((x)>>14),((x)>>13))\
^ MUX3(((x)>>12),((x)>>4),((x)>>13))\
^ MUX3(MUX3(((x)>>6),((x)>>1),((x)>>15)),\
MUX3(((x)>>14),((x)>>16),((x)>>9)),\
MAJ3(((x)>>2),((x)>>5),((x)>>7))),\
F = ((F^(F<<6))&0xFF) << (A3_size-8),\
(x) = F|((x)>>8)
/* ------------------------------------------------------------------------- *
* NLFSR A4 (length 25, period = 33554431)
*
* A4(x) = x0 + x6 + x11 + x20 + x1*x5 + x3*x5 + x4*x12 + x5*x14 + x6*x16
* + x7*x16 + x8*x15 + x8*x17 + x15*x17 + x2*x3*x14 + x2*x5*x14
* + x5*x8*x15 + x5*x8*x17 + x5*x12*x13 + x5*x12*x14 + x5*x15*x17
* + x2*x3*x12*x13 + x2*x3*x12*x14 + x2*x3*x8*x15 + x2*x3*x8*x17
* + x2*x3*x15*x17 + x2*x5*x8*x15 + x2*x5*x8*x17 + x2*x5*x12*x13
* + x2*x5*x12*x14 + x2*x5*x15*x17
*
* ------------------------------------------------------------------------- */
#define A4_cycle(x,feedin) \
(x = (x >> ONE) | ((ONE & (XOR3(XOR3(feedin,\
(x)>>20,\
XOR3((x)>>11,(x)>>1,(x))),\
XOR3(AND2((x)>>4,(x)>>12),\
MUX3((x)>>1,(x)>>3,(x)>>5),\
MUX3((x)>>6,(x)>>7,(x)>>16)),\
MUX3(MAJ3((x)>>8,(x)>>15,(x)>>17),\
MUX3((x)>>14,(x)>>13,(x)>>12),\
MUX3((x)>>5,(x)>>3,(x)>>2)))\
)) << 24))
#define A4_cycle7(x,feedin7)\
M = ((x)>>20) & 0x1F,\
F = M ^ (feedin7) ^ (x) ^ ((x)>>1) ^ ((x)>>11) ^ (((x)>>4) & ((x)>>12))\
^ MUX3(((x)>>1),((x)>>3),((x)>>5))\
^ MUX3(((x)>>6),((x)>>7),((x)>>16))\
^ MUX3(MAJ3(((x)>>8),((x)>>15),((x)>>17)),\
MUX3(((x)>>14),((x)>>13),((x)>>12)),\
MUX3(((x)>>5),((x)>>3),((x)>>2))),\
F = ((F^(F<<5))&0x7F) << (A4_size-7),\
(x) = F|((x)>>7)
#define A4_cycle8(x,feedin8)\
M = ((x)>>20) & 0x1F,\
F = M ^ (feedin8) ^ (x) ^ ((x)>>1) ^ ((x)>>11) ^ (((x)>>4) & ((x)>>12))\
^ MUX3(((x)>>1),((x)>>3),((x)>>5))\
^ MUX3(((x)>>6),((x)>>7),((x)>>16))\
^ MUX3(MAJ3(((x)>>8),((x)>>15),((x)>>17)),\
MUX3(((x)>>14),((x)>>13),((x)>>12)),\
MUX3(((x)>>5),((x)>>3),((x)>>2))),\
F = ((F^(F<<5))&0xFF) << (A4_size-8),\
(x) = F|((x)>>8)
/* ------------------------------------------------------------------------- *
* NLFSR A5 (length 26, period = 67108863)
*
* A5(x) = x0 + x4 + x5 + x15 + x16 + x17 + x21 + x2*x4 + x2*x18 + x3*x6
* + x4*x13 + x12*x13 + x3*x4*x10 + x3*x4*x15 + x3*x10*x14
* + x3*x14*x15 + x4*x10*x15 + x10*x14*x15 + x3*x4*x10*x13
* + x3*x4*x13*x15 + x3*x7*x10*x11 + x3*x7*x10*x14 + x3*x7*x11*x15
* + x3*x7*x14*x15 + x3*x10*x12*x13 + x3*x12*x13*x15
* + x4*x10*x13*x15 + x7*x10*x11*x15 + x7*x10*x14*x15
* + x10*x12*x13*x15
*
* ------------------------------------------------------------------------- */
#define A5_cycle(x,feedin) \
(x = (x >> ONE) | ((ONE & (XOR3(XOR3(feedin,\
(x)>>21,\
XOR3((x)>>17,(x)>>16,(x)>>15)),\
XOR3(XOR3((x)>>5,(x)>>4,(x)),\
AND2((x)>>3,(x)>>6),\
MUX3((x)>>4,(x)>>18,(x)>>2)),\
MUX3(MUX3((x)>>4,(x)>>12,(x)>>13),\
MUX3((x)>>14,(x)>>11,(x)>>7),\
MAJ3((x)>>3,(x)>>10,(x)>>15)))\
)) << 25))
#define A5_cycle6(x,feedin6)\
M = ((x)>>21) & 0x1F,\
F = M ^ (feedin6) ^ (x) ^ ((x)>>4) ^ ((x)>>5) ^ ((x)>>15) ^ ((x)>>16) ^ ((x)>>17)\
^ (((x)>>3) & ((x)>>6)) ^ MUX3(((x)>>4),((x)>>18),((x)>>2))\
^ MUX3(MUX3(((x)>>4),((x)>>12),((x)>>13)),\
MUX3(((x)>>14),((x)>>11),((x)>>7)),\
MAJ3(((x)>>3),((x)>>10),((x)>>15))),\
F = ((F^(F<<5))&0x3F) << (A5_size-6),\
(x) = F|((x)>>6)
#define A5_cycle8(x,feedin8)\
M = ((x)>>21) & 0x1F,\
F = M ^ (feedin8) ^ (x) ^ ((x)>>4) ^ ((x)>>5) ^ ((x)>>15) ^ ((x)>>16) ^ ((x)>>17)\
^ (((x)>>3) & ((x)>>6)) ^ MUX3(((x)>>4),((x)>>18),((x)>>2))\
^ MUX3(MUX3(((x)>>4),((x)>>12),((x)>>13)),\
MUX3(((x)>>14),((x)>>11),((x)>>7)),\
MAJ3(((x)>>3),((x)>>10),((x)>>15))),\
F = ((F^(F<<5))&0xFF) << (A5_size-8),\
(x) = F|((x)>>8)
/* ------------------------------------------------------------------------- *
* NLFSR A6 (length 27, period = 134217727)
*
* A6(x) = x0 + x3 + x4 + x15 + x25 + x1*x3 + x1*x8 + x1*x12 + x6*x17
* + x10*x13 + x10*x17 + x13*x14 + x5*x10*x11*x18
* + x2*x5*x11*x16*x18 + x2*x5*x11*x17*x18 + x5*x10*x11*x13*x18
* + x5*x11*x13*x14*x18 + x5*x11*x16*x17*x18
*
* ------------------------------------------------------------------------- */
#define A6_cycle(x,feedin) \
(x = (x >> ONE) | ((ONE & (XOR3(XOR3(feedin,\
(x)>>25,\
XOR3((x)>>15,(x)>>4,(x))),\
XOR3(AND2((x)>>1,(x)>>12),\
MUX3((x)>>10,(x)>>6,(x)>>17),\
MUX3((x)>>3,(x)>>8,(x)>>1)),\
MUX3(MUX3((x)>>10,(x)>>14,(x)>>13),\
MAJ3((x)>>17,(x)>>2,(x)>>16),\
AND3((x)>>18,(x)>>11,(x)>>5)))\
)) << 26))
#define A6_cycle5(x,feedin5)\
M = ((x)>>25) & 0x03,\
F = M ^ (feedin5) ^ (x) ^ ((x)>>4) ^ ((x)>>15) ^ (((x)>>1) & ((x)>>12))\
^ MUX3(((x)>>3),((x)>>8),((x)>>1)) ^ MUX3(((x)>>10),((x)>>6),((x)>>17))\
^ MUX3(MUX3(((x)>>10),((x)>>14),((x)>>13)),\
MAJ3(((x)>>2),((x)>>16),((x)>>17)),\
((x)>>5) & ((x)>>11) & ((x)>>18)),\
F ^= F<<2,\
F ^= F<<4,\
F = (F&0x1F) << (A6_size-5),\
(x) = F|((x)>>5)
#define A6_cycle8(x,feedin8)\
M = ((x)>>25) & 0x03,\
F = M ^ (feedin8) ^ (x) ^ ((x)>>4) ^ ((x)>>15) ^ (((x)>>1) & ((x)>>12))\
^ MUX3(((x)>>3),((x)>>8),((x)>>1)) ^ MUX3(((x)>>10),((x)>>6),((x)>>17))\
^ MUX3(MUX3(((x)>>10),((x)>>14),((x)>>13)),\
MAJ3(((x)>>2),((x)>>16),((x)>>17)),\
((x)>>5) & ((x)>>11) & ((x)>>18)),\
F ^= F<<2,\
F ^= F<<4,\
F = (F&0xFF) << (A6_size-8),\
(x) = F|((x)>>8)
/* ------------------------------------------------------------------------- *
* NLFSR A7 (length 28, period = 268435455)
*
* A7(x) = x0 + x1 + x5 + x20 + x25 + x1*x2 + x2*x17 + x4*x12 + x10*x15
* + x10*x18 + x14*x16 + x16*x20 + x7*x9*x18*x19
* + x1*x2*x7*x9*x13*x19 + x7*x9*x10*x15*x19 + x7*x9*x10*x18*x19
*
* ------------------------------------------------------------------------- */
#define A7_cycle(x,feedin) \
(x = (x >> ONE) | ((ONE & (XOR3(XOR3(feedin,\
(x)>>25,\
XOR3((x)>>18,(x)>>5,(x))),\
XOR3(AND2((x)>>4,(x)>>12),\
MUX3((x)>>1,(x)>>17,(x)>>2),\
MUX3((x)>>20,(x)>>14,(x)>>16)),\
MUX3(MUX3((x)>>18,(x)>>15,(x)>>10),\
AND3((x)>>1,(x)>>2,(x)>>13),\
AND3((x)>>7,(x)>>9,(x)>>19)))\
)) << 27))
#define A7_cycle4(x,feedin4)\
M = ((x)>>25) & 0x7,\
F = M ^ (feedin4) ^ (x) ^ ((x)>>5) ^ ((x)>>18) ^ (((x)>>4) & ((x)>>12))\
^ MUX3(((x)>>1),((x)>>17),((x)>>2))\
^ MUX3(((x)>>20),((x)>>14),((x)>>16))\
^ MUX3(MUX3(((x)>>18),((x)>>15),((x)>>10)),\
((x)>>1) & ((x)>>2) & ((x)>>13),\
((x)>>7) & ((x)>>9) & ((x)>>19)),\
F ^= F<<3,\
F = (F&0x0F) << (A7_size-4),\
(x) = F|((x)>>4)
#define A7_cycle8(x,feedin8)\
M = ((x)>>25) & 0x7,\
F = M ^ (feedin8) ^ (x) ^ ((x)>>5) ^ ((x)>>18) ^ (((x)>>4) & ((x)>>12))\
^ MUX3(((x)>>1),((x)>>17),((x)>>2))\
^ MUX3(((x)>>20),((x)>>14),((x)>>16))\
^ MUX3(MUX3(((x)>>18),((x)>>15),((x)>>10)),\
((x)>>1) & ((x)>>2) & ((x)>>13),\
((x)>>7) & ((x)>>9) & ((x)>>19)),\
F ^= F<<3,\
F ^= F<<6,\
F = (F&0xFF) << (A7_size-8),\
(x) = F|((x)>>8)
/* ------------------------------------------------------------------------- *
* NLFSR A8 (length 29, period = 536870911)
*
* A8(x) = x0 + x2 + x10 + x11 + x17 + x18 + x21 + x24 + x1*x4 + x8*x21
* + x10*x21 + x13*x19 + x6*x15*x19 + x8*x9*x18 + x13*x14*x16
* + x13*x14*x19 + x13*x15*x19 + x6*x14*x15*x16 + x6*x14*x15*x19
* + x8*x9*x18*x19 + x13*x14*x15*x16 + x13*x14*x15*x19
* + x8*x9*x14*x16*x18 + x8*x9*x14*x18*x19
*
* ------------------------------------------------------------------------- */
#define A8_cycle(x,feedin) \
(x = (x >> ONE) | ((ONE & (XOR3(XOR3(feedin,\
(x)>>24,\
XOR3((x)>>21,(x)>>18,(x)>>17)),\
XOR3(AND2((x)>>1,(x)>>4),\
XOR3((x)>>11,(x)>>2,(x)),\
MUX3((x)>>10,(x)>>8,(x)>>21)),\
MUX3(AND3((x)>>8,(x)>>18,(x)>>9),\
MUX3((x)>>13,(x)>>6,(x)>>15),\
MUX3((x)>>19,(x)>>16,(x)>>14)))\
)) << 28))
#define A8_cycle3(x,feedin3)\
M = ((x)>>24) & 0x1F,\
F = M ^ (feedin3) ^ (x) ^ ((x)>>2) ^ ((x)>>11) ^ ((x)>>17) ^ ((x)>>18) ^ ((x)>>21)\
^ (((x)>>1) & ((x)>>4)) ^ MUX3(((x)>>10),((x)>>8),((x)>>21))\
^ MUX3(((x)>>8) & ((x)>>9) & ((x)>>18),\
MUX3(((x)>>13),((x)>>6),((x)>>15)),\
MUX3(((x)>>19),((x)>>16),((x)>>14))),\
F = (F&0x07) << (A8_size-3),\
(x) = F|((x)>>3)
#define A8_cycle8(x,feedin8)\
M = ((x)>>24) & 0x1F,\
F = M ^ (feedin8) ^ (x) ^ ((x)>>2) ^ ((x)>>11) ^ ((x)>>17) ^ ((x)>>18) ^ ((x)>>21)\
^ (((x)>>1) & ((x)>>4)) ^ MUX3(((x)>>10),((x)>>8),((x)>>21))\
^ MUX3(((x)>>8) & ((x)>>9) & ((x)>>18),\
MUX3(((x)>>13),((x)>>6),((x)>>15)),\
MUX3(((x)>>19),((x)>>16),((x)>>14))),\
F = ((F^(F<<5))&0xFF) << (A8_size-8),\
(x) = F|((x)>>8)
/* ------------------------------------------------------------------------- *
* NLFSR A9 (length 30, period = 1073741823 )
*
* A9(x) = x0 + x1 + x7 + x10 + x12 + x18 + x28 + x2*x8 + x4*x7 + x4*x18
* + x10*x12 + x10*x19 + x10*x22 + x14*x22 + x3*x5*x7 + x3*x7*x8
* + x5*x7*x8 + x1*x3*x5*x9 + x1*x3*x5*x21 + x1*x3*x8*x9
* + x1*x3*x8*x21 + x1*x5*x8*x9 + x1*x5*x8*x21 + x3*x4*x5*x7
* + x3*x4*x5*x18 + x3*x4*x7*x8 + x3*x4*x8*x18 + x3*x5*x9*x21
* + x3*x8*x9*x21 + x4*x5*x7*x8 + x4*x5*x8*x18 + x5*x8*x9*x21
*
* ------------------------------------------------------------------------- */
#define A9_cycle(x,feedin) \
(x = (x >> ONE) | ((ONE & (XOR3(XOR3(feedin,\
(x)>>28,\
XOR3((x)>>18,(x)>>1,(x))),\
XOR3(AND2((x)>>2,(x)>>8),\
MUX3((x)>>12,(x)>>19,(x)>>10),\
MUX3((x)>>10,(x)>>14,(x)>>22)),\
MUX3(MUX3((x)>>7,(x)>>18,(x)>>4),\
MAJ3((x)>>21,(x)>>9,(x)>>1),\
MAJ3((x)>>8,(x)>>5,(x)>>3)))\
)) << 29))
#define A9_cycle2(x,feedin2)\
M = ((x)>>28) & 0x3,\
F = M ^ (feedin2) ^ (x) ^ ((x)>>1) ^ ((x)>>18) ^ (((x)>>2) & ((x)>>8))\
^ MUX3(((x)>>12),((x)>>19),((x)>>10))\
^ MUX3(((x)>>10),((x)>>14),((x)>>22))\
^ MUX3(MUX3(((x)>>7),((x)>>18),((x)>>4)),\
MAJ3(((x)>>1),((x)>>9),((x)>>21)),\
MAJ3(((x)>>3),((x)>>5),((x)>>8))),\
F = (F&0x03) << (A9_size-2),\
(x) = F|((x)>>2)
#define A9_cycle8(x,feedin8)\
M = ((x)>>28) & 0x3,\
F = M ^ (feedin8) ^ (x) ^ ((x)>>1) ^ ((x)>>18) ^ (((x)>>2) & ((x)>>8))\
^ MUX3(((x)>>12),((x)>>19),((x)>>10))\
^ MUX3(((x)>>10),((x)>>14),((x)>>22))\
^ MUX3(MUX3(((x)>>7),((x)>>18),((x)>>4)),\
MAJ3(((x)>>1),((x)>>9),((x)>>21)),\
MAJ3(((x)>>3),((x)>>5),((x)>>8))),\
F ^= F<<2,\
F ^= F<<4,\
F = (F&0xFF) << (A9_size-8),\
(x) = F|((x)>>8)
/* ------------------------------------------------------------------------- *
* NLFSR A10 (length 31, period = 2147483647)
*
* A10(x) = x0 + x2 + x5 + x6 + x15 + x17 + x18 + x20 + x25 + x8*x18 + x8*x20
* + x12*x21 + x14*x19 + x17*x21 + x20*x22 + x4*x12*x22
* + x4*x19*x22 + x7*x20*x21 + x8*x18*x22 + x8*x20*x22
* + x12*x19*x22 + x20*x21*x22 + x4*x7*x12*x21 + x4*x7*x19*x21
* + x4*x12*x21*x22 + x4*x19*x21*x22 + x7*x8*x18*x21
* + x7*x8*x20*x21 + x7*x12*x19*x21 + x8*x18*x21*x22
* + x8*x20*x21*x22 + x12*x19*x21*x22
*
* ------------------------------------------------------------------------- */
#define A10_cycle(x,feedin) \
(x = (x >> ONE) | ((ONE & (XOR3(XOR3(feedin,\
(x)>>25,\
XOR3((x)>>18,(x)>>15,(x)>>6)),\
XOR3(XOR3((x)>>5,(x)>>2,(x)),\
AND2((x)>>19,(x)>>14),\
MUX3((x)>>17,(x)>>12,(x)>>21)),\
MUX3(MUX3((x)>>20,(x)>>18,(x)>>8),\
MAJ3((x)>>4,(x)>>12,(x)>>19),\
MUX3((x)>>22,(x)>>7,(x)>>21)))\
)) << 30))
#define A10_cycle8(x,feedin8)\
M = ((x)>>25) & 0x3F,\
F = M ^ (feedin8) ^ (x) ^ ((x)>>2) ^ ((x)>>5) ^ ((x)>>6) ^ ((x)>>15) ^ ((x)>>18)\
^ (((x)>>14) & ((x)>>19)) ^ MUX3(((x)>>17),((x)>>12),((x)>>21))\
^ MUX3(MUX3(((x)>>20),((x)>>18),((x)>>8)),\
MAJ3(((x)>>4),((x)>>12),((x)>>19)),\
MUX3(((x)>>22),((x)>>7),((x)>>21))),\
F = ((F^(F<<6))&0xFF) << (A10_size-8),\
(x) = F|((x)>>8)
/* ------------------------------------------------------------------------- *
* NLFSR A11 (length 32, period = 4294967295)
*
* A11(x) = x0 + x3 + x17 + x22 + x28 + x2*x13 + x5*x19 + x7*x19 + x8*x12
* + x8*x13 + x13*x15 + x2*x12*x13 + x7*x8*x12 + x7*x8*x14
* + x8*x12*x13 + x2*x7*x12*x13 + x2*x7*x13*x14 + x4*x11*x12*x24
* + x7*x8*x12*x13 + x7*x8*x13*x14 + x4*x7*x11*x12*x24
* + x4*x7*x11*x14*x24
*
* ------------------------------------------------------------------------- */
#define A11_cycle(x,feedin) \
(x = (x >> ONE) | ((ONE & (XOR3(XOR3(feedin,\
(x)>>28,\
XOR3((x)>>22,(x)>>17,(x)>>8)),\
XOR3(AND2((x)>>13,(x)>>15),\
XOR3((x)>>5,(x)>>3,(x)),\
MUX3((x)>>5,(x)>>7,(x)>>19)),\
MUX3(MUX3((x)>>8,(x)>>2,(x)>>13),\
AND3((x)>>4,(x)>>11,(x)>>24),\
MUX3((x)>>12,(x)>>14,(x)>>7)))\
)) << 31))
#define A11_cycle8(x,feedin8)\
M = ((x)>>28) & 0xF,\
F = M ^ (feedin8) ^ (x) ^ ((x)>>3) ^ ((x)>>5) ^ ((x)>>8) ^ ((x)>>17) ^ ((x)>>22)\
^ (((x)>>13) & ((x)>>15)) ^ MUX3(((x)>>5),((x)>>7),((x)>>19))\
^ MUX3(MUX3(((x)>>8),((x)>>2),((x)>>13)),\
((x)>>4) & ((x)>>11) & ((x)>>24),\
MUX3(((x)>>12),((x)>>14),((x)>>7))),\
F = ((F^(F<<4))&0xFF) << (A11_size-8),\
(x) = F|((x)>>8)
/* ------------------------------------------------------------------------- *
* NLFSR A12 (length 33, period = 8589934591)
*
* A12(x) = x0 + x2 + x7 + x9 + x10 + x15 + x23 + x25 + x30 + x8*x15
* + x12*x16 + x13*x15 + x13*x25 + x1*x8*x14 + x1*x8*x18
* + x8+x12*x16 + x8*x14*x18 + x8*x15*x16 + x8*x15*x17
* + x15*x17*x24 + x1*x8*x14*x17 + x1*x8*x17*x18 + x1*x14*x17*x24
* + x1*x17*x18*x24 + x8*x12*x16*x17 + x8*x14*x17*x18
* + x8*x15*x16*x17 + x12*x16*x17*x24 + x14*x17*x18*x24
* + x15*x16*x17*x24
*
* ------------------------------------------------------------------------- */
#define A12_cycle(x,feedin) \
(x = (x >> ONE) | ((ONE & (XOR3(XOR3(feedin,\
(x)>>30,\
XOR3((x)>>23,(x)>>10,(x)>>9)),\
XOR3(XOR3((x)>>7,(x)>>2,(x)),\
AND2((x)>>15,(x)>>16),\
MUX3((x)>>25,(x)>>15,(x)>>13)),\
MUX3(MUX3((x)>>15,(x)>>12,(x)>>16),\
MAJ3((x)>>14,(x)>>1,(x)>>18),\
MUX3((x)>>8,(x)>>24,(x)>>17)))\
)) << 32))
#define A12_cycle7(x,feedin7)\
ML = ((x)>>30) & 0x7,\
FL = ML ^ (feedin7) ^ (x) ^ ((x)>>2) ^ ((x)>>7) ^ ((x)>>9) ^ ((x)>>10) ^ ((x)>>23)\
^ (((x)>>15) & ((x)>>16)) ^ MUX3(((x)>>25),((x)>>15),((x)>>13))\
^ MUX3(MUX3(((x)>>15),((x)>>12),((x)>>16)),\
MAJ3(((x)>>1),((x)>>14),((x)>>18)),\
MUX3(((x)>>8),((x)>>24),((x)>>17))),\
FL ^= FL<<3,\
FL ^= FL<<6,\
FL = (FL&0x7F) << (A12_size-7),\
(x) = FL|((x)>>7)
#define A12_cycle8(x,feedin8)\
ML = ((x)>>30) & 0x7,\
FL = ML ^ (feedin8) ^ (x) ^ ((x)>>2) ^ ((x)>>7) ^ ((x)>>9) ^ ((x)>>10) ^ ((x)>>23)\
^ (((x)>>15) & ((x)>>16)) ^ MUX3(((x)>>25),((x)>>15),((x)>>13))\
^ MUX3(MUX3(((x)>>15),((x)>>12),((x)>>16)),\
MAJ3(((x)>>1),((x)>>14),((x)>>18)),\
MUX3(((x)>>8),((x)>>24),((x)>>17))),\
FL ^= FL<<3,\
FL ^= FL<<6,\
FL = (FL&0xFF) << (A12_size-8),\
(x) = FL|((x)>>8)
/* ------------------------------------------------------------------------- *
* EOF
* ------------------------------------------------------------------------- */