static void Main(string[] args) { // estimating costs bool free_swaps = true; Console.Write("operation, CNOT count, 1-qubit Clifford count, T count, R count, M count, T depth, initial width, extra width, comment, full depth"); // GIFT-64 Estimates.GiftSBox <QGIFT.InPlace.GiftSbox>("tower_field = false", free_swaps); Estimates.SubCells <QGIFT.InPlace.SubCells>("state size is the same for all", free_swaps); Estimates.PermBits <QGIFT.InPlace.PermBits>("in_place = true - state size is the same for all", free_swaps); Estimates.AddRoundKey <QGIFT.InPlace.AddRoundKey>("widest = true - state size is the same for all", free_swaps); Estimates.KeySchedule <QGIFT.InPlace.KeySchedule>("in_place = true - round = 28", 28, free_swaps); Estimates.AddConstants <QGIFT.InPlace.AddConstants>("widest = true - state size is the same for all", 28, free_swaps); // GIFT-64 Estimates.Round <QGIFT.Round>("state size is the same for all", 0, free_swaps); for (int round = 1; round <= 28; round++) { Estimates.Round <QGIFT.Round>($"round = {round}", round, free_swaps); } Estimates.Gift <QGIFT.Gift>("in_place", 28, free_swaps, "_128_in-place"); Estimates.GroverOracle <QGIFT.GroverOracle>("in_place mixcolumn - r = 1", 1, 28, free_swaps, "_128_in-place-MC_r1"); Estimates.GroverOracle <QGIFT.GroverOracle>("in_place mixcolumn - r = 2", 2, 28, free_swaps, "_128_in-place-MC_r2"); Estimates.GroverOracle <QGIFT.GroverOracle>("in_place mixcolumn - r = 3", 3, 28, free_swaps, "_128_in-place-MC_r3"); Console.WriteLine(); }
static void Main(string[] args) { // estimating costs bool free_swaps = true; Console.Write("operation, CNOT count, 1-qubit Clifford count, T count, R count, M count, T depth, initial width, extra width, comment, full depth"); // SATURNIN Estimates.SaturninSboxZero <QSATURNIN.InPlace.SaturninSboxZero>("in_place = true", free_swaps); Estimates.SaturninSBoxOne <QSATURNIN.InPlace.SaturninSboxOne>("in_place = true", free_swaps); Estimates.SubCells <QSATURNIN.InPlace.SubCells>("in_place = true", free_swaps); Estimates.NibblePermutation <QSATURNIN.InPlace.NibblePermutation>("in_place = true", 20, free_swaps); Estimates.MixHalfWord <QSATURNIN.InPlace.MixHalfWord>("in_place = true", true, free_swaps); Estimates.MixColumns <QSATURNIN.InPlace.MixColumns>("in_place = true", true, free_swaps); Estimates.InverseNibblePermutation <QSATURNIN.InPlace.InverseNibblePermutation>("in_place = true", 20, free_swaps); Estimates.AddRoundKey <QSATURNIN.InPlace.AddRoundKey>("in_place = true", free_swaps); Estimates.AddRoundConstants <QSATURNIN.InPlace.AddRoundConstants>("in_place = true", free_swaps); Estimates.RotateKey <QSATURNIN.InPlace.RotateKey>("in_place = true", free_swaps); Estimates.SubKeyGeneration <QSATURNIN.InPlace.SubKeyGeneration>("in_place = true, super-round = 10, ", 20, free_swaps); // SATURNIN 256 Estimates.Round <QSATURNIN.Round>("state size is the same for all", 0, free_swaps); for (int round = 1; round <= 20; round++) { Estimates.Round <QSATURNIN.Round>($"round = {round}", round, free_swaps); } Estimates.SATURNIN <QSATURNIN.SATURNIN>("in_place", 20, free_swaps, "_256_in-place"); Estimates.GroverOracle <QSATURNIN.GroverOracle>("in_place mixcolumn - r = 1", 1, 20, free_swaps, "_256_in-place-MC_r1"); Estimates.GroverOracle <QSATURNIN.GroverOracle>("in_place mixcolumn - r = 2", 2, 20, free_swaps, "_256_in-place-MC_r2"); Estimates.GroverOracle <QSATURNIN.GroverOracle>("in_place mixcolumn - r = 3", 3, 20, free_swaps, "_256_in-place-MC_r3"); Console.WriteLine(); }
static void Main(string[] args) { // estimating costs bool free_swaps = true; Console.Write("operation, CNOT count, 1-qubit Clifford count, T count, R count, M count, T depth, initial width, extra width, comment, full depth"); Estimates.SBox <QLowMC.InPlace.SBox>("in_place = true", true, free_swaps); Estimates.SBox <QLowMC.SBox>("in_place = false", false, free_swaps); Estimates.SBoxLayer <QLowMC.SBoxLayer>("in_place = false - L0", 32, 10, false, free_swaps); Estimates.SBoxLayer <QLowMC.InPlace.SBoxLayer>("in_place = true - L0", 32, 10, true, free_swaps); Estimates.SBoxLayer <QLowMC.SBoxLayer>("in_place = false - L1", 128, 10, false, free_swaps); Estimates.SBoxLayer <QLowMC.InPlace.SBoxLayer>("in_place = true - L1", 128, 10, true, free_swaps); Estimates.SBoxLayer <QLowMC.SBoxLayer>("in_place = false - L3", 192, 10, false, free_swaps); Estimates.SBoxLayer <QLowMC.InPlace.SBoxLayer>("in_place = true - L3", 192, 10, true, free_swaps); Estimates.SBoxLayer <QLowMC.SBoxLayer>("in_place = false - L5", 256, 10, false, free_swaps); Estimates.SBoxLayer <QLowMC.InPlace.SBoxLayer>("in_place = true - L5", 256, 10, true, free_swaps); // L0 toy category -- for development only /* * for (int round = 0; round <= 10; round++) * { * int category = 0; * int blocksize = 32; * Estimates.KeyExpansion<QLowMC.InPlace.L0.KeyExpansion>($"in_place = true - L{category} - round {round}", round, blocksize, category, free_swaps, $"_r{round}"); * if (round > 0) * { * Estimates.AffineLayer<QLowMC.InPlace.L0.AffineLayer>($"in_place = true - L{category} - round {round}", round, blocksize, category, free_swaps, $"_r{round}"); * Estimates.Round<QLowMC.Round>($"in_place = true - L{category} - round {round}", round, blocksize, category, free_swaps); * } * }*/ // category 1 /* * for (int round = 0; round <= 20; round++) * { * int category = 1; * int blocksize = 128; * Estimates.KeyExpansion<QLowMC.InPlace.L1.KeyExpansion>($"in_place = true - L{category} - round {round}", round, blocksize, category, free_swaps); * if (round > 0) * { * Estimates.AffineLayer<QLowMC.InPlace.L1.AffineLayer>($"in_place = true - L{category} - round {round}", round, blocksize, category, free_swaps); * Estimates.Round<QLowMC.Round>($"in_place = true - L{category} - round {round}", round, blocksize, category, free_swaps); * } * }*/ // category 3 /* * for (int round = 0; round <= 30; round++) * { * int category = 3; * int blocksize = 192; * Estimates.KeyExpansion<QLowMC.InPlace.L3.KeyExpansion>($"in_place = true - L{category} - round {round}", round, blocksize, category, free_swaps); * if (round > 0) * { * Estimates.AffineLayer<QLowMC.InPlace.L3.AffineLayer>($"in_place = true - L{category} - round {round}", round, blocksize, category, free_swaps); * Estimates.Round<QLowMC.Round>($"in_place = true - L{category} - round {round}", round, blocksize, category, free_swaps); * } * }*/ // category 5 for (int round = 0; round <= 38; round++) { int category = 5; int blocksize = 256; Estimates.KeyExpansion <QLowMC.InPlace.L5.KeyExpansion>($"in_place = true - L{category} - round {round}", round, blocksize, category, free_swaps); if (round > 0) { Estimates.AffineLayer <QLowMC.InPlace.L5.AffineLayer>($"in_place = true - L{category} - round {round}", round, blocksize, category, free_swaps); Estimates.Round <QLowMC.Round>($"in_place = true - L{category} - round {round}", round, blocksize, category, free_swaps); } } //Estimates.Encrypt<QLowMC.Encrypt>("L0", 32, 0, free_swaps, "_l0"); //Estimates.Encrypt<QLowMC.Encrypt>("L1", 128, 1, free_swaps, "_l1"); //Estimates.Encrypt<QLowMC.Encrypt>("L3", 192, 3, free_swaps, "_l3"); Estimates.Encrypt <QLowMC.Encrypt>("L5", 256, 5, free_swaps, "_l5"); //Estimates.GroverOracle<QLowMC.GroverOracle>("L0 - 1 pair", 32, 1, 0, free_swaps, "_l0_r1"); //Estimates.GroverOracle<QLowMC.GroverOracle>("L1 - 1 pair", 128, 1, 1, free_swaps, "_l1_r1"); //Estimates.GroverOracle<QLowMC.GroverOracle>("L3 - 1 pair", 192, 1, 3, free_swaps, "_l3_r1"); Estimates.GroverOracle <QLowMC.GroverOracle>("L5 - 1 pair", 256, 1, 5, free_swaps, "_l5_r1"); //Estimates.GroverOracle<QLowMC.GroverOracle>("L0 - 2 pairs", 32, 2, 0, free_swaps, "_l0_r2"); //Estimates.GroverOracle<QLowMC.GroverOracle>("L1 - 2 pairs", 128, 2, 1, free_swaps, "_l1_r2"); //Estimates.GroverOracle<QLowMC.GroverOracle>("L3 - 2 pairs", 192, 2, 3, free_swaps, "_l3_r2"); Estimates.GroverOracle <QLowMC.GroverOracle>("L5 - 2 pairs", 256, 2, 5, free_swaps, "_l5_r2"); Console.WriteLine(); }
static void Main(string[] args) { // estimating costs bool free_swaps = true; Console.Write("operation, CNOT count, 1-qubit Clifford count, T count, R count, M count, T depth, initial width, extra width, comment, full depth"); // GF256 Estimates.Mul <QGF256.Mul>("unrolled = false", false, free_swaps); Estimates.Mul <QGF256.UnrolledMul>("unrolled = true", true, free_swaps); Estimates.Square <QGF256.Square>("in_place = false", false, free_swaps); Estimates.Square <QGF256.InPlace.Square>("in_place = true", true, free_swaps); Estimates.Fourth <QGF256.Fourth>("in_place = false", false, free_swaps); Estimates.Fourth <QGF256.InPlace.Fourth>("in_place = true", true, free_swaps); Estimates.Sixteenth <QGF256.Sixteenth>("in_place = false", free_swaps); Estimates.SixtyFourth <QGF256.InPlace.SixtyFourth>("in_place = true", free_swaps); // AES Estimates.SBox <GLRS16.SBox>("tower_field = false", false, false, free_swaps); // Estimates.SBox<NigelsSbox.SBox>("tower_field = true", true, free_swaps); Estimates.SBox <LPS19.SBox>("tower_field = true", true, true, free_swaps); Estimates.SBox <BoyarPeralta11.SBox>("tower_field = true", true, false, free_swaps); Estimates.ByteSub <QAES.ByteSub>("state size is the same for all", free_swaps); Estimates.ShiftRow <QAES.InPlace.ShiftRow>("in_place = true - state size is the same for all", free_swaps); Estimates.MixWord <QAES.InPlace.MixWord>("in_place = true", true, free_swaps); Estimates.MixWord <MaximovMixColumn.MixWord>("in_place = false", false, free_swaps); Estimates.MixColumn <QAES.InPlace.MixColumn>("widest = true - state size is the same for all", true, free_swaps); Estimates.MixColumn <MaximovMixColumn.MixColumn>("widest = false - state size is the same for all", false, free_swaps); Estimates.AddRoundKey <QAES.Widest.AddRoundKey>("widest = true - state size is the same for all", free_swaps); // InPlace full KeyExpansion is never run as part of the algorithms, only for tests // Estimates.KeyExpansion<QAES.InPlace.KeyExpansion>("in_place = true, Nr = 10, Nk = 4", true, 10, 4, free_swaps); // Estimates.KeyExpansion<QAES.InPlace.KeyExpansion>("in_place = true, Nr = 12, Nk = 6", true, 12, 6, free_swaps); // Estimates.KeyExpansion<QAES.InPlace.KeyExpansion>("in_place = true, Nr = 14, Nk = 8", true, 14, 8, free_swaps); // Partial key expansion is called for different sizes and in different rounds, and may have different values each time // AES 128 for (int round = 1; round <= 10; round++) { Estimates.InPlacePartialKeyExpansion <QAES.InPlace.KeyExpansion>($"$KE_0^(Nk-1)$ - round {round}", 10, 4, round, 0, 3, free_swaps); } // AES 192 for (int round = 1; round <= 12; round++) { if (round % 3 == 1) { int key_round = (round / 3) * 2 + 1; if (round > 1) { Estimates.InPlacePartialKeyExpansion <QAES.InPlace.KeyExpansion>($"$KE_(2*Nk/3)^(Nk-1)$ - round {round}", 12, 6, key_round, 4, 5, free_swaps); } Estimates.InPlacePartialKeyExpansion <QAES.InPlace.KeyExpansion>($"$KE_0^(Nk/3-1)$ - round {round}", 12, 6, key_round, 0, 1, free_swaps); } else if (round % 3 == 2) { int key_round = (round / 3) * 2 + 1; Estimates.InPlacePartialKeyExpansion <QAES.InPlace.KeyExpansion>($"$KE_2^(Nk-1)$ - round {round}", 12, 6, key_round, 2, 5, free_swaps); } else { int key_round = (round / 3) * 2; Estimates.InPlacePartialKeyExpansion <QAES.InPlace.KeyExpansion>($"$KE_0^(2 Nk/3-1)$ - round {round}", 12, 6, key_round, 0, 3, free_swaps); } } // AES 256 for (int round = 1; round <= 14; round++) { if (round % 2 == 0) { int key_round = round / 2; Estimates.InPlacePartialKeyExpansion <QAES.InPlace.KeyExpansion>($"$KE_0^(Nk/2-1)$ - round {round}", 14, 8, key_round, 0, 3, free_swaps); } else { if (round > 2) { int key_round = round / 2; Estimates.InPlacePartialKeyExpansion <QAES.InPlace.KeyExpansion>($"$KE_(Nk/2)^(Nk-1)$ - round {round}", 14, 8, key_round, 4, 7, free_swaps); } } } Estimates.KeyExpansion <QAES.Widest.KeyExpansion>("in_place = false - Nr = 10 - Nk = 4 - not currently used", false, 10, 4, free_swaps); Estimates.KeyExpansion <QAES.Widest.KeyExpansion>("in_place = false - Nr = 12 - Nk = 6 - not currently used", false, 12, 6, free_swaps); Estimates.KeyExpansion <QAES.Widest.KeyExpansion>("in_place = false - Nr = 14 - Nk = 8 - not currently used", false, 14, 8, free_swaps); Estimates.Round <QAES.Widest.Round>("state size is the same for all", 0, false, 4, free_swaps); for (int round = 1; round <= 10; round++) { int Nk = 4; Estimates.Round <QAES.SmartWide.Round>($"round = {round} - Nk = {Nk} - in_place mixcolumn", round, true, Nk, true, free_swaps); Estimates.Round <QAES.SmartWide.Round>($"round = {round} - Nk = {Nk} - Maximov's mixcolumn", round, true, Nk, false, free_swaps); } for (int round = 1; round <= 12; round++) { int Nk = 6; Estimates.Round <QAES.SmartWide.Round>($"round = {round} - Nk = {Nk} - in_place mixcolumn", round, true, Nk, true, free_swaps); Estimates.Round <QAES.SmartWide.Round>($"round = {round} - Nk = {Nk} - Maximov's mixcolumn", round, true, Nk, false, free_swaps); } for (int round = 1; round <= 14; round++) { int Nk = 8; Estimates.Round <QAES.SmartWide.Round>($"round = {round} - Nk = {Nk} - in_place mixcolumn", round, true, Nk, true, free_swaps); Estimates.Round <QAES.SmartWide.Round>($"round = {round} - Nk = {Nk} - Maximov's mixcolumn", round, true, Nk, false, free_swaps); } Estimates.FinalRound <QAES.Widest.FinalRound>("state size is the same for all", false, 4, free_swaps); Estimates.FinalRound <QAES.SmartWide.FinalRound>("Nk = 4 - state size is the same for all but in-place expansion isn't", true, 4, free_swaps); Estimates.FinalRound <QAES.SmartWide.FinalRound>("Nk = 6 - state size is the same for all but in-place expansion isn't", true, 6, free_swaps); Estimates.FinalRound <QAES.SmartWide.FinalRound>("Nk = 8 - state size is the same for all but in-place expansion isn't", true, 8, free_swaps); Estimates.Rijndael <QAES.SmartWide.Rijndael>("smart_wide = true - Nr = 10 - Nk = 4 - in_place mixcolumn", true, 10, 4, true, free_swaps, "_128_in-place-MC"); Estimates.Rijndael <QAES.SmartWide.Rijndael>("smart_wide = true - Nr = 12 - Nk = 6 - in_place mixcolumn", true, 12, 6, true, free_swaps, "_192_in-place-MC"); Estimates.Rijndael <QAES.SmartWide.Rijndael>("smart_wide = true - Nr = 14 - Nk = 8 - in_place mixcolumn", true, 14, 8, true, free_swaps, "_256_in-place-MC"); Estimates.Rijndael <QAES.SmartWide.Rijndael>("smart_wide = true - Nr = 10 - Nk = 4 - Maximov's mixcolumn", true, 10, 4, false, free_swaps, "_128_maximov-MC"); Estimates.Rijndael <QAES.SmartWide.Rijndael>("smart_wide = true - Nr = 12 - Nk = 6 - Maximov's mixcolumn", true, 12, 6, false, free_swaps, "_192_maximov-MC"); Estimates.Rijndael <QAES.SmartWide.Rijndael>("smart_wide = true - Nr = 14 - Nk = 8 - Maximov's mixcolumn", true, 14, 8, false, free_swaps, "_256_maximov-MC"); Estimates.Rijndael <QAES.Widest.Rijndael>("smart_wide = false - Nr = 10 - Nk = 4", false, 10, 4, true, free_swaps, "_128_in-place-MC"); Estimates.Rijndael <QAES.Widest.Rijndael>("smart_wide = false - Nr = 12 - Nk = 6", false, 12, 6, true, free_swaps, "_192_in-place-MC"); Estimates.Rijndael <QAES.Widest.Rijndael>("smart_wide = false - Nr = 14 - Nk = 8", false, 14, 8, true, free_swaps, "_256_in-place-MC"); Estimates.GroverOracle <QAES.SmartWide.GroverOracle>("smart_wide = true - Nr = 10 - Nk = 4 - in_place mixcolumn - r = 1", true, 1, 10, 4, true, free_swaps, "_128_in-place-MC_r1"); Estimates.GroverOracle <QAES.SmartWide.GroverOracle>("smart_wide = true - Nr = 12 - Nk = 6 - in_place mixcolumn - r = 1", true, 1, 12, 6, true, free_swaps, "_192_in-place-MC_r1"); Estimates.GroverOracle <QAES.SmartWide.GroverOracle>("smart_wide = true - Nr = 14 - Nk = 8 - in_place mixcolumn - r = 1", true, 1, 14, 8, true, free_swaps, "_256_in-place-MC_r1"); Estimates.GroverOracle <QAES.SmartWide.GroverOracle>("smart_wide = true - Nr = 10 - Nk = 4 - in_place mixcolumn - r = 2", true, 2, 10, 4, true, free_swaps, "_128_in-place-MC_r2"); Estimates.GroverOracle <QAES.SmartWide.GroverOracle>("smart_wide = true - Nr = 12 - Nk = 6 - in_place mixcolumn - r = 2", true, 2, 12, 6, true, free_swaps, "_192_in-place-MC_r2"); Estimates.GroverOracle <QAES.SmartWide.GroverOracle>("smart_wide = true - Nr = 14 - Nk = 8 - in_place mixcolumn - r = 2", true, 2, 14, 8, true, free_swaps, "_256_in-place-MC_r2"); Estimates.GroverOracle <QAES.SmartWide.GroverOracle>("smart_wide = true - Nr = 10 - Nk = 4 - in_place mixcolumn - r = 3", true, 3, 10, 4, true, free_swaps, "_128_in-place-MC_r3"); Estimates.GroverOracle <QAES.SmartWide.GroverOracle>("smart_wide = true - Nr = 12 - Nk = 6 - in_place mixcolumn - r = 3", true, 3, 12, 6, true, free_swaps, "_192_in-place-MC_r3"); Estimates.GroverOracle <QAES.SmartWide.GroverOracle>("smart_wide = true - Nr = 14 - Nk = 8 - in_place mixcolumn - r = 3", true, 3, 14, 8, true, free_swaps, "_256_in-place-MC_r3"); Estimates.GroverOracle <QAES.SmartWide.GroverOracle>("smart_wide = true - Nr = 10 - Nk = 4 - Maximov's mixcolumn - r = 1", true, 1, 10, 4, false, free_swaps, "_128_maximov-MC_r1"); Estimates.GroverOracle <QAES.SmartWide.GroverOracle>("smart_wide = true - Nr = 12 - Nk = 6 - Maximov's mixcolumn - r = 1", true, 1, 12, 6, false, free_swaps, "_192_maximov-MC_r1"); Estimates.GroverOracle <QAES.SmartWide.GroverOracle>("smart_wide = true - Nr = 14 - Nk = 8 - Maximov's mixcolumn - r = 1", true, 1, 14, 8, false, free_swaps, "_256_maximov-MC_r1"); Estimates.GroverOracle <QAES.SmartWide.GroverOracle>("smart_wide = true - Nr = 10 - Nk = 4 - Maximov's mixcolumn - r = 2", true, 2, 10, 4, false, free_swaps, "_128_maximov-MC_r2"); Estimates.GroverOracle <QAES.SmartWide.GroverOracle>("smart_wide = true - Nr = 12 - Nk = 6 - Maximov's mixcolumn - r = 2", true, 2, 12, 6, false, free_swaps, "_192_maximov-MC_r2"); Estimates.GroverOracle <QAES.SmartWide.GroverOracle>("smart_wide = true - Nr = 14 - Nk = 8 - Maximov's mixcolumn - r = 2", true, 2, 14, 8, false, free_swaps, "_256_maximov-MC_r2"); Estimates.GroverOracle <QAES.SmartWide.GroverOracle>("smart_wide = true - Nr = 10 - Nk = 4 - Maximov's mixcolumn - r = 3", true, 3, 10, 4, false, free_swaps, "_128_maximov-MC_r3"); Estimates.GroverOracle <QAES.SmartWide.GroverOracle>("smart_wide = true - Nr = 12 - Nk = 6 - Maximov's mixcolumn - r = 3", true, 3, 12, 6, false, free_swaps, "_192_maximov-MC_r3"); Estimates.GroverOracle <QAES.SmartWide.GroverOracle>("smart_wide = true - Nr = 14 - Nk = 8 - Maximov's mixcolumn - r = 3", true, 3, 14, 8, false, free_swaps, "_256_maximov-MC_r3"); Console.WriteLine(); }
static void Main(string[] args) { // estimating costs bool free_swaps = true; Console.Write("operation, CNOT count, 1-qubit Clifford count, T count, R count, M count, T depth, initial width, extra width, comment, full depth"); // SKINNY-64 Estimates.SkinnySBox <QSKINNY.InPlace.SkinnySbox>("tower_field = false", free_swaps); Estimates.SubCells <QSKINNY.InPlace.SubCells>("state size is the same for all", free_swaps); Estimates.AddConstants <QSKINNY.InPlace.AddConstants>("in_place = true - state size is the same for all", 40, free_swaps); Estimates.AddRoundTweakey <QSKINNY.InPlace.AddRoundTweakey>("widest = true - state size is the same for all", free_swaps); Estimates.AddRoundTweakey_z2 <QSKINNY.InPlace.AddRoundTweakey_z2>("widest = true - state size is the same for all", free_swaps); Estimates.AddRoundTweakey_z3 <QSKINNY.InPlace.AddRoundTweakey_z3>("widest = true - state size is the same for all", free_swaps); Estimates.TweakeyUpdate <QSKINNY.InPlace.TweakeyUpdate>("in_place = true - round = 32", 32, free_swaps); Estimates.TweakeyUpdate_z2 <QSKINNY.InPlace.TweakeyUpdate_2>("in_place = true - round = 36", 36, free_swaps); Estimates.TweakeyUpdate_z3 <QSKINNY.InPlace.TweakeyUpdate_3>("in_place = true - round = 40", 40, free_swaps); Estimates.ShiftRows <QSKINNY.InPlace.ShiftRows>("widest = true - state size is the same for all", free_swaps); Estimates.MixHalfWord <QSKINNY.InPlace.MixHalfWord>("widest = true - state size is the same for all", true, free_swaps); Estimates.MixColumns <QSKINNY.InPlace.MixColumns>("widest = true - state size is the same for all", true, free_swaps); // SKINNY-64 Estimates.Round <QSKINNY_64_64.Round>("state size is the same for all", 0, free_swaps); for (int round = 1; round <= 32; round++) { Estimates.Round <QSKINNY_64_64.Round>($"round = {round}", round, free_swaps); } Estimates.Round <QSKINNY_64_128.Round>("state size is the same for all", 0, free_swaps); for (int round = 1; round <= 36; round++) { Estimates.Round_z2 <QSKINNY_64_128.Round>($"round = {round}", round, free_swaps); } Estimates.Round <QSKINNY_64_192.Round>("state size is the same for all", 0, free_swaps); for (int round = 1; round <= 40; round++) { Estimates.Round_z3 <QSKINNY_64_192.Round>($"round = {round}", round, free_swaps); } Estimates.Skinny_64_64 <QSKINNY_64_64.Skinny>("in_place", 32, free_swaps, "_128_in-place"); Estimates.Skinny_64_128 <QSKINNY_64_128.Skinny>("in_place", 36, free_swaps, "_128_in-place"); Estimates.Skinny_64_192 <QSKINNY_64_192.Skinny>("in_place", 40, free_swaps, "_128_in-place"); Estimates.GroverOracle_64_64 <QSKINNY_64_64.GroverOracle>("in_place mixcolumn - r = 1", 1, 32, free_swaps, "_128_in-place-MC_r1"); Estimates.GroverOracle_64_64 <QSKINNY_64_64.GroverOracle>("in_place mixcolumn - r = 2", 2, 32, free_swaps, "_128_in-place-MC_r2"); Estimates.GroverOracle_64_64 <QSKINNY_64_64.GroverOracle>("in_place mixcolumn - r = 3", 3, 32, free_swaps, "_128_in-place-MC_r3"); Estimates.GroverOracle_64_128 <QSKINNY_64_128.GroverOracle>("in_place mixcolumn - r = 1", 1, 36, free_swaps, "_128_in-place-MC_r1"); Estimates.GroverOracle_64_128 <QSKINNY_64_128.GroverOracle>("in_place mixcolumn - r = 2", 2, 36, free_swaps, "_128_in-place-MC_r2"); Estimates.GroverOracle_64_128 <QSKINNY_64_128.GroverOracle>("in_place mixcolumn - r = 3", 3, 36, free_swaps, "_128_in-place-MC_r3"); Estimates.GroverOracle_64_192 <QSKINNY_64_192.GroverOracle>("in_place mixcolumn - r = 1", 1, 40, free_swaps, "_128_in-place-MC_r1"); Estimates.GroverOracle_64_192 <QSKINNY_64_192.GroverOracle>("in_place mixcolumn - r = 2", 2, 40, free_swaps, "_128_in-place-MC_r2"); Estimates.GroverOracle_64_192 <QSKINNY_64_192.GroverOracle>("in_place mixcolumn - r = 3", 3, 40, free_swaps, "_128_in-place-MC_r3"); Console.WriteLine(); }