Changeset 328


Ignore:
Timestamp:
May 28, 2009, 6:26:06 PM (13 years ago)
Author:
Sören Rinne
Message:
  • added switch for changing TEA into XTEA
  • added rounds selection for XTEA
  • added icons for XTEA
  • changed TEA-Sample.cte
Location:
trunk
Files:
2 added
4 edited

Legend:

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

    r230 r328  
    1616{
    1717    [Author("Soeren Rinne", "soeren.rinne@cryptool.de", "Ruhr-Universitaet Bochum, Chair for Embedded Security (EmSec)", "http://www.crypto.ruhr-uni-bochum.de/")]
    18     [PluginInfo(false, "TEA", "Tiny Encryption Algorithm", "TEA/DetailedDescription/Description.xaml", "TEA/Images/tea.png", "TEA/Images/encrypt.png", "TEA/Images/decrypt.png")]
     18    [PluginInfo(false, "TEA", "Tiny Encryption Algorithm", "TEA/DetailedDescription/Description.xaml", "TEA/Images/tea.png", "TEA/Images/encrypt.png", "TEA/Images/decrypt.png", "TEA/Images/encryptX.png", "TEA/Images/decryptX.png")]
    1919    [EncryptionType(EncryptionType.SymmetricBlock)]
    2020    public class TEA : IEncryption
     
    249249
    250250                //encryption or decryption
    251                 GuiLogMessage("Action is: " + action, NotificationLevel.Debug);
     251                //GuiLogMessage("Action is: " + action, NotificationLevel.Debug);
    252252                DateTime startTime = DateTime.Now;
    253253               
     
    256256                if (action == 0)
    257257                {
    258                     StatusChanged((int)TEAImage.Encode);
    259258                    GuiLogMessage("Starting encryption [Keysize=128 Bits, Blocksize=64 Bits]", NotificationLevel.Info);
    260259                    for (int i = 0; i <= blocks-1; i++)
     
    263262                        vector[1] = BitConverter.ToUInt32(inputbuffer, (i * 8 + 4));
    264263
    265                         encode(vector, key);
     264                        // see in settings which version of TEA to use
     265                        if (settings.Version == 0)
     266                        {
     267                            encode_tea(vector, key);
     268                            StatusChanged((int)TEAImage.Encode);
     269                        }
     270                        else if (settings.Version == 1)
     271                        {
     272                            encode_xtea((uint)settings.Rounds, vector, key);
     273                            StatusChanged((int)TEAImage.EncodeX);
     274                        }
     275
    266276                        //write buffer to output stream
    267277                        outputbuffer = BitConverter.GetBytes(vector[0]);
     
    271281                    }
    272282                } else if (action == 1) {
    273                     StatusChanged((int)TEAImage.Decode);
    274283                    GuiLogMessage("Starting decryption [Keysize=128 Bits, Blocksize=64 Bits]", NotificationLevel.Info);
    275284                    for (int i = 0; i <= blocks-1; i++)
     
    278287                        vector[1] = BitConverter.ToUInt32(inputbuffer, i * 8 + 4);
    279288
    280                         decode(vector, key);
     289                        // see in settings which version of TEA to use
     290                        if (settings.Version == 0)
     291                        {
     292                            decode_tea(vector, key);
     293                            StatusChanged((int)TEAImage.Decode);
     294                        }
     295                        else if (settings.Version == 1)
     296                        {
     297                            decode_xtea((uint)settings.Rounds, vector, key);
     298                            StatusChanged((int)TEAImage.DecodeX);
     299                        }
     300
    281301                        //write buffer to output stream
    282302                        outputbuffer = BitConverter.GetBytes(vector[0]);
     
    315335                        GuiLogMessage("Decryption complete! (in: " + inputStream.Length.ToString() + " bytes, out: " + outbytes.ToString() + " bytes)", NotificationLevel.Info);
    316336                    }
    317                     GuiLogMessage("Wrote data to file: " + outputStream.FileName, NotificationLevel.Info);
     337                    GuiLogMessage("Wrote data to file: " + outputStream.FileName, NotificationLevel.Debug);
    318338                    GuiLogMessage("Time used: " + duration.ToString(), NotificationLevel.Debug);
    319339                    outputStream.Close();
     
    346366        }
    347367
    348         private void encode(uint[] v, uint[] k)
     368        private void encode_tea(uint[] v, uint[] k)
    349369        {
    350370            uint y = v[0];
    351371            uint z = v[1];
     372
     373            uint k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3];
    352374
    353375            uint sum = 0;
     
    357379            while (n-- > 0)
    358380            {
     381                /*
     382                 sum += delta;
     383                 v0 += ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
     384                 v1 += ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);
     385                */
     386                sum += delta;
     387                y += ((z << 4) + k0) ^ (z + sum) ^ ((z >> 5) + k1);
     388                z += ((y << 4) + k2) ^ (y + sum) ^ ((y >> 5) + k3);
     389            }
     390
     391            v[0] = y;
     392            v[1] = z;
     393        }
     394
     395        private void decode_tea(uint[] v, uint[] k)
     396        {
     397            uint n = 32;
     398            uint sum = 0xC6EF3720;
     399
     400            uint k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3];
     401            uint y = v[0];
     402            uint z = v[1];
     403            uint delta = 0x9e3779b9;
     404
     405            while (n-- > 0)
     406            {
     407                /*
     408                 v1 -= ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);
     409                 v0 -= ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
     410                 sum -= delta;
     411                */
     412                z -= ((y << 4) + k2) ^ (y + sum) ^ ((y >> 5) + k3);
     413                y -= ((z << 4) + k0) ^ (z + sum) ^ ((z >> 5) + k1);
     414                sum -= delta;
     415            }
     416
     417            v[0] = y;
     418            v[1] = z;
     419        }
     420
     421        private void encode_xtea(uint rounds, uint[] v, uint[] k)
     422        {
     423            uint y = v[0];
     424            uint z = v[1];
     425
     426            uint sum = 0;
     427            uint delta = 0x9e3779b9;
     428            uint n = rounds;
     429
     430            while (n-- > 0)
     431            {
    359432                y += (z << 4 ^ z >> 5) + z ^ sum + k[sum & 3];
    360433                sum += delta;
     
    366439        }
    367440
    368         private void decode(uint[] v, uint[] k)
    369         {
    370             uint n = 32;
     441        private void decode_xtea(uint rounds, uint[] v, uint[] k)
     442        {
     443            uint n = rounds;
    371444            uint sum;
    372445            uint y = v[0];
     
    374447            uint delta = 0x9e3779b9;
    375448
    376             sum = delta << 5;
     449            sum = delta * n;
    377450
    378451            while (n-- > 0)
     
    401474        public void Initialize()
    402475        {
    403             //throw new NotImplementedException();
    404476        }
    405477
     
    420492        public void Pause()
    421493        {
    422             //throw new NotImplementedException();
    423494        }
    424495
     
    473544        Default,
    474545        Encode,
    475         Decode
     546        Decode,
     547        EncodeX,
     548        DecodeX
    476549    }
    477550}
  • trunk/CrypPlugins/TEA/TEA.csproj

    r4 r328  
    44    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    55    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    6     <ProductVersion>9.0.21022</ProductVersion>
     6    <ProductVersion>9.0.30729</ProductVersion>
    77    <SchemaVersion>2.0</SchemaVersion>
    88    <ProjectGuid>{1C42ADB9-643E-4B1C-A862-7DBE3CD22A7A}</ProjectGuid>
     
    8989    </Resource>
    9090  </ItemGroup>
     91  <ItemGroup>
     92    <Resource Include="Images\decryptX.png" />
     93    <Resource Include="Images\encryptX.png" />
     94  </ItemGroup>
    9195  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
    9296  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
  • trunk/CrypPlugins/TEA/TEASettings.cs

    r4 r328  
    2222        private bool hasChanges = false;
    2323        private int action = 0; //0=encrypt, 1=decrypt
    24         //private int mode = 0; //0="ECB", 1="CBC", 2="CFB", 3="OFB"
    2524        private int padding = 0; //0="Zeros"=default, 1="None", 2="PKCS7"
     25        private int version = 0; //0="TEA"=default, 1="XTEA"
     26        private int rounds = 64;
    2627
    2728        [ContextMenu("Action","Do you want the input data to be encrypted or decrypted?",1, DisplayLevel.Beginner, ContextMenuControlType.ComboBox, new int[] { 1, 2}, "Encrypt","Decrypt")]
     
    3233            set { this.action = (int)value; }
    3334        }
    34 
    35         /*[ContextMenu("Chaining mode", "Select the block cipher mode of operation.", 2, DisplayLevel.Beginner, ContextMenuControlType.ComboBox, null, new String[] { "Electronic Code Book (ECB)", "Cipher Block Chaining (CBC)", "Cipher Feedback (CFB)" })]
    36         [TaskPane("Chaining Mode", "Select the block cipher mode of operation.", null, 2, false, DisplayLevel.Experienced, ControlType.ComboBox, new String[] { "Electronic Bode Book (ECB)", "Cipher Block Chaining (CBC)", "Cipher Feedback (CFB)" })]
    37         public int Mode
    38         {
    39             get { return this.mode; }
    40             set
    41             {
    42                 if (((int)value) != mode) hasChanges = true;
    43                 this.mode = (int)value;
    44                 //OnPropertyChanged("Mode");
    45             }
    46         }*/
    4735
    4836        [ContextMenu("Padding mode", "Select a mode to fill partial data blocks.", 3, DisplayLevel.Beginner, ContextMenuControlType.ComboBox, null, "Zeros", "None", "PKCS7")]
     
    5644                this.padding = (int)value;
    5745                //OnPropertyChanged("Padding");
     46            }
     47        }
     48
     49        [ContextMenu("TEA version", "Select the version of TEA you want to use.", 4, DisplayLevel.Beginner, ContextMenuControlType.ComboBox, null, "TEA", "XTEA")]
     50        [TaskPane("TEA version", "Select the version of TEA you want to use.", "", 4, false, DisplayLevel.Experienced, ControlType.ComboBox, new String[] { "TEA (1994)", "XTEA (1997)" })]
     51        public int Version
     52        {
     53            get { return this.version; }
     54            set
     55            {
     56                if (((int)value) != version) hasChanges = true;
     57                this.version = (int)value;
     58                //OnPropertyChanged("Padding");
     59            }
     60        }
     61
     62        [TaskPane("Number of rounds", "This applies only to XTEA. Default are 64 rounds.", "Rounds", 5, false, DisplayLevel.Beginner, ControlType.NumericUpDown, ValidationType.RangeInteger, 0, int.MaxValue)]
     63        public int Rounds
     64        {
     65            get { return this.rounds; }
     66            set
     67            {
     68                if (((int)value) != rounds) hasChanges = true;
     69                this.rounds = value;
     70                //OnPropertyChanged("Rounds");
    5871            }
    5972        }
Note: See TracChangeset for help on using the changeset viewer.