[svn] / ecrypt / trunk / submissions / achterbahn / 128-80 / opt1 / achterbahn.h  

svn: ecrypt/trunk/submissions/achterbahn/128-80/opt1/achterbahn.h

File: [svn] / ecrypt / trunk / submissions / achterbahn / 128-80 / opt1 / achterbahn.h (download) (as text)
Revision: 166, Fri Jan 5 15:40:21 2007 UTC (6 years, 5 months ago) by cdecanni
File size: 28857 byte(s)
* imported implementation of ACHTERBAHN-128/80.
/* ------------------------------------------------------------------------- *
 *
 *   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
 * ------------------------------------------------------------------------- */

eSTREAM Project

Powered by ViewCVS 1.0-dev
(Powered by Apache)

ViewCVS and CVS Help