private Bit[] UnboxingFourBits(Bit[] sixBits, int boxIndex)
        {
            Bit[] binRow = { sixBits.First(), sixBits.Last() };
            Bit[] binCol = { sixBits[1], sixBits[2], sixBits[3], sixBits[4] };

            int decRow = BinaryNumbersMapper.TwoBitsDecimalMapping[binRow];
            int decCol = BinaryNumbersMapper.FourBitsDecimalMapping[binCol];

            SBox sBox = SBoxMapper.S[boxIndex];
            byte decSBoxEquivalent = sBox[decRow][decCol];

            Bit[] strippedBits = StripFourBits(decSBoxEquivalent);
            return(strippedBits);
        }
Exemple #2
0
        private void SKS(WUPfunc wup, SBox S, uint[] w, uint w0, uint w1, uint w2, uint w3, int i0, int i1, int i2, int i3, int ofs)
        {
            wup(w, ofs);

            uint[] r = new uint[5];

            r[0] = w[w0];
            r[1] = w[w1];
            r[2] = w[w2];
            r[3] = w[w3];
            r[4] = 0;

            S(ref r[0], ref r[1], ref r[2], ref r[3], ref r[4]);

            serpent24SubKeys[ofs]     = r[i0];
            serpent24SubKeys[ofs + 1] = r[i1];
            serpent24SubKeys[ofs + 2] = r[i2];
            serpent24SubKeys[ofs + 3] = r[i3];
        }
Exemple #3
0
 /*
  * One Serpent round.
  *   ofs = current subkey counter
  *   S = S-box for this round
  *   i0 to i4 = input register numbers (the fifth is a scratch register)
  *   o0 to o3 = output register numbers
  */
 private void Serpent_Round(int ofs, SBox S, uint[] r, int i0, int i1, int i2, int i3, int i4, int o0, int o1, int o2, int o3)
 {
     KeyAddition(ref r[i0], ref r[i1], ref r[i2], ref r[i3], ofs);
     S(ref r[i0], ref r[i1], ref r[i2], ref r[i3], ref r[i4]);
     Serpent_LinearTransform(ref r[o0], ref r[o1], ref r[o2], ref r[o3]);
 }
Exemple #4
0
        static void GenerateSubstitutionTable(
            SBox name,
            string switchVariable   = "INPUT",
            string assignVariable   = "OUTPUT",
            string entityName       = "ENTITY_NAME",
            string architectureName = "ARCHITECTURE_NAME")
        {
            byte mask    = 15; // 0b00001111
            var  result  = InitSBoxHeader(switchVariable, entityName, architectureName);
            int  counter = 0;

            switch (name)
            {
            case SBox.AesSbox:
                var aesSbox = TableValues.AesSBox();
                foreach (var row in aesSbox)
                {
                    foreach (var number in row)
                    {
                        int    columnIndex  = counter & mask;
                        int    rowIndex     = (counter >> 4) & mask;
                        string newValue     = GetBinaryValue(aesSbox[rowIndex][columnIndex], 8);
                        string counterValue = GetBinaryValue(counter++, 8);
                        result.Add($"\t\twhen \"{counterValue}\" => {assignVariable} <= \"{newValue}\";");
                    }
                }

                result.Add("end case;");
                result.Add("end process;");
                result.Add($"end {architectureName};");
                File.WriteAllLines(_path + "AesSbox.vhd", result);
                break;

            case SBox.AesSboxInv:
                var aesSboxInv = TableValues.AesSBoxInv();
                foreach (var row in aesSboxInv)
                {
                    foreach (var number in row)
                    {
                        int    columnIndex  = counter & mask;
                        int    rowIndex     = (counter >> 4) & mask;
                        string newValue     = GetBinaryValue(aesSboxInv[rowIndex][columnIndex], 8);
                        string counterValue = GetBinaryValue(counter++, 8);
                        result.Add($"\twhen \"{counterValue}\" => {assignVariable} <= \"{newValue}\";");
                    }
                }

                result.Add("end case;");
                result.Add("end process;");
                result.Add($"end {architectureName};");
                File.WriteAllLines(_path + "AesSboxInv.vhd", result);
                break;

            case SBox.Des1:
                var des1 = TableValues.DesSBox(1);
                GenerateDesSbox(des1, "Des1", assignVariable, entityName, architectureName: architectureName);
                break;

            case SBox.Des2:
                var des2 = TableValues.DesSBox(2);
                GenerateDesSbox(des2, "Des2", assignVariable, architectureName);
                break;

            case SBox.Des3:
                var des3 = TableValues.DesSBox(3);
                GenerateDesSbox(des3, "Des3", assignVariable, architectureName);
                break;

            case SBox.Des4:
                var des4 = TableValues.DesSBox(4);
                GenerateDesSbox(des4, "Des4", assignVariable, architectureName);
                break;

            case SBox.Des5:
                var des5 = TableValues.DesSBox(5);
                GenerateDesSbox(des5, "Des5", assignVariable, architectureName);
                break;

            case SBox.Des6:
                var des6 = TableValues.DesSBox(6);
                GenerateDesSbox(des6, "Des6", assignVariable, architectureName);
                break;

            case SBox.Des7:
                var des7 = TableValues.DesSBox(7);
                GenerateDesSbox(des7, "Des7", assignVariable, architectureName);
                break;

            case SBox.Des8:
                var des8 = TableValues.DesSBox(8);
                GenerateDesSbox(des8, "Des8", assignVariable, entityName, architectureName: architectureName);
                break;
            }
        }
Exemple #5
0
 private Key()
 {
     KeyWords = new byte[Properties.Settings.Default.NUMBER_OF_KEY_WORDS][];
     InitializeKeyConstant();
     sBoxInstance = SBox.GetSBoxInstance;
 }
 // create sbox and mixcolumn instance for next use
 public EncryptDecryptRoundStep()
 {
     sBoxInstance      = SBox.GetSBoxInstance;
     mixColumnInstance = MixColumn.GetMixColumnInstance;
 }