Ignore:
Timestamp:
Nov 17, 2009, 12:19:05 PM (12 years ago)
Author:
oruba
Message:

Faster keystream generation by the use of lists instead of arrays

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/Trivium/Trivium.cs

    r832 r860  
    3737
    3838        #region Public Variables
    39         public uint[] a = new uint[93];
     39        /*public uint[] a = new uint[93];
    4040        public uint[] b = new uint[84];
    41         public uint[] c = new uint[111];
     41        public uint[] c = new uint[111]; */
     42        public List<uint> a = new List<uint>(new uint[93]);
     43        public List<uint> b = new List<uint>(new uint[84]);
     44        public List<uint> c = new List<uint>(new uint[111]);
    4245        public uint t1, t2, t3;
    4346        public int masterSlaveRounds = 0;
     
    460463        public void initTrivium(int[] IV, int[] key)
    461464        {
    462                 int i,j;
    463 
    464             int[] buffer = new int[8];
     465            int i; //,j;
    465466
    466467            if (settings.UseByteSwapping)
    467468            {
     469                int[] buffer = new int[8];
    468470                // Byte-Swapping Key
    469471                for (int l = 0; l < 10; l++)
     
    485487            }
    486488
    487                 for (i = 0; i < 80; i++){
     489                for (i = 0; i < 80; i++)
     490            {
    488491                        a[i] = (uint)key[i]; // hier key rein als binär
    489                         b[i] = (uint)IV[i]; // hier IV rein als binär
    490                         c[i] = 0;
    491                 }
     492                b[i] = (uint)IV[i]; // hier IV rein als binär
     493                c[i] = 0;
     494            }
    492495                while (i < 84){
    493496                        a[i] = 0;
     
    505508                        i++;
    506509                }
    507                 while (i < 111){
     510            while (i < 111){
    508511                        c[i] = 1;
    509512                        i++;
     
    524527                t2 = b[68] ^ (b[81] & b[82]) ^ b[83] ^ c[86];
    525528                t3 = c[65] ^ (c[108] & c[109]) ^ c[110] ^ a[68];
    526                 for (j = 92; j > 0; j--)
     529                /*for (j = 92; j > 0; j--)
     530                    a[j] = a[j - 1];
     531                for (j = 83; j > 0; j--)
     532                    b[j] = b[j - 1];
     533                for (j = 110; j > 0; j--)
     534                    c[j] = c[j - 1];
     535                a[0] = t3;
     536                b[0] = t1;
     537                c[0] = t2; */
     538                a.Insert(0, t3);
     539                b.Insert(0, t1);
     540                c.Insert(0, t2);
     541                a.RemoveAt(a.Count - 1);
     542                b.RemoveAt(b.Count - 1);
     543                c.RemoveAt(c.Count - 1);
     544            }
     545        }
     546
     547        public string keystreamTrivium(int nBits)
     548        {
     549            int i; //, j;
     550            uint z;
     551
     552            string keystreamZ = null;
     553            List<int> keyOutput = new List<int>();
     554
     555            for (i = 0; i < nBits; i++)
     556            {
     557                /*t1 = a[65] ^ a[92];
     558                t2 = b[68] ^ b[83];
     559                t3 = c[65] ^ c[110];
     560                z = t1 ^ t2 ^ t3; */
     561                z = a[65] ^ a[92] ^ b[68] ^ b[83] ^ c[65] ^ c[110];
     562
     563                if (!settings.UseByteSwapping)
     564                    keystreamZ += z;
     565                else
     566                    keyOutput.Add((int)z);
     567
     568                t1 = t1 ^ (a[90] & a[91]) ^ b[77];
     569                t2 = t2 ^ (b[81] & b[82]) ^ c[86];
     570                t3 = t3 ^ (c[108] & c[109]) ^ a[68];
     571                /*for (j = 92; j > 0; j--)
    527572                    a[j] = a[j - 1];
    528573                for (j = 83; j > 0; j--)
     
    532577                a[0] = t3;
    533578                b[0] = t1;
    534                 c[0] = t2;
    535             }
    536         }
    537 
    538         public string keystreamTrivium(int nBits)
    539         {
    540             int i, j;
    541             uint z;
    542 
    543             string keystreamZ = null;
    544             List<int> keyOutput = new List<int>();
    545 
    546             for (i = 0; i < nBits; i++)
    547             {
    548                 t1 = a[65] ^ a[92];
    549                 t2 = b[68] ^ b[83];
    550                 t3 = c[65] ^ c[110];
    551                 z = t1 ^ t2 ^ t3;
    552 
    553                 if (!settings.UseByteSwapping)
    554                     keystreamZ += z;
    555                 else
    556                     keyOutput.Add((int)z);
    557 
    558                 t1 = t1 ^ (a[90] & a[91]) ^ b[77];
    559                 t2 = t2 ^ (b[81] & b[82]) ^ c[86];
    560                 t3 = t3 ^ (c[108] & c[109]) ^ a[68];
    561                 for (j = 92; j > 0; j--)
    562                     a[j] = a[j - 1];
    563                 for (j = 83; j > 0; j--)
    564                     b[j] = b[j - 1];
    565                 for (j = 110; j > 0; j--)
    566                     c[j] = c[j - 1];
    567                 a[0] = t3;
    568                 b[0] = t1;
    569                 c[0] = t2;
     579                c[0] = t2;*/
     580                a.Insert(0, t3);
     581                b.Insert(0, t1);
     582                c.Insert(0, t2);
     583                a.RemoveAt(a.Count - 1);
     584                b.RemoveAt(b.Count - 1);
     585                c.RemoveAt(c.Count - 1);
    570586            }
    571587
     
    593609                }
    594610            }
    595 
    596611            return keystreamZ;
    597612        }
Note: See TracChangeset for help on using the changeset viewer.