Changeset 226


Ignore:
Timestamp:
Feb 17, 2009, 7:36:05 PM (13 years ago)
Author:
Gerhard Junker
Message:

2FISH - first fixes

Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPluginBase/CrypPluginBase.csproj

    r210 r226  
    44    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    55    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    6     <ProductVersion>9.0.30729</ProductVersion>
     6    <ProductVersion>9.0.21022</ProductVersion>
    77    <SchemaVersion>2.0</SchemaVersion>
    88    <ProjectGuid>{25DB2B47-A457-4EC2-960B-395CE07AE093}</ProjectGuid>
     
    130130      <Generator>PublicResXFileCodeGenerator</Generator>
    131131      <LastGenOutput>Resource.Designer.cs</LastGenOutput>
     132      <SubType>Designer</SubType>
    132133    </EmbeddedResource>
    133134  </ItemGroup>
  • trunk/CrypPlugins/FileOutput/FileOutput.csproj

    r4 r226  
    44    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    55    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    6     <ProductVersion>9.0.30729</ProductVersion>
     6    <ProductVersion>9.0.21022</ProductVersion>
    77    <SchemaVersion>2.0</SchemaVersion>
    88    <ProjectGuid>{C5325D3D-C78B-4294-8CF6-B29E3B64C5F9}</ProjectGuid>
     
    118118    <EmbeddedResource Include="About.resx">
    119119      <DependentUpon>About.cs</DependentUpon>
     120      <SubType>Designer</SubType>
    120121    </EmbeddedResource>
    121122    <EmbeddedResource Include="WindowsFormsUserControl\HexBoxContainer.resx">
  • trunk/CrypPlugins/Twofish/Twofish.cs

    r223 r226  
    3131  public class Twofish : IEncryption
    3232  {
     33      private byte[] iv = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
     34
    3335
    3436    /// <summary>
     
    275277      }
    276278    }
     279
    277280    #endregion
     281
     282    [PropertyInfo(Direction.Input, "IV", "Initialization Vector", "",
     283    false, false, DisplayLevel.Beginner, QuickWatchFormat.Hex, null)]
     284    public byte[] IV
     285    {
     286        get
     287        {
     288            return iv;
     289        }
     290        set
     291        {
     292            Array.Clear(iv, 0, iv.Length);
     293
     294            if (null == value)
     295                return;
     296
     297            for (int i = 0; i < value.Length && i < iv.Length; i++)
     298                iv[i] = value[i];
     299
     300            NotifyUpdateInput();
     301            GuiLogMessage("InputData changed.", NotificationLevel.Debug);
     302        }
     303    }
     304
    278305
    279306
     
    370397    private void Crypt()
    371398    {
    372       byte[] iv = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
    373 
    374399      // fit key to correct length
    375400      byte[] k2 = new byte[settings.KeyLength / 8];
     
    386411     
    387412      int pos = 0;
    388       if (outputData.Length != inputdata.Length) 
    389         outputData = new byte[inputdata.Length];
     413
     414      int len = inputdata.Length;
     415      if (settings.Action == 0) // input padding
     416      {
     417          if (len % 16 != 0)
     418              len += (16 - len % 16);
     419      }
     420      if (outputData.Length != len) 
     421        outputData = new byte[len];
    390422
    391423      switch (settings.Action)
     
    400432            }
    401433            byte[] final = encrypt.TransformFinalBlock(inputdata, pos, inputdata.Length - pos);
    402             final.CopyTo(outputData, pos);
     434            Array.Copy(final, 0, outputData, pos, 16);
    403435            encrypt.Dispose();
    404436            break;
     
    412444              pos += decrypt.TransformBlock(inputdata, pos, decrypt.InputBlockSize, outputData, pos);
    413445            }
    414             byte[] final = decrypt.TransformFinalBlock(inputdata, pos, inputdata.Length);
    415             final.CopyTo(outputData, pos);
     446            byte[] final = decrypt.TransformFinalBlock(inputdata, pos, 16);
     447
     448              for (int i = pos; i < outputData.Length; i++)
     449                outputData[i] = final[i - pos];
     450
    416451            decrypt.Dispose();
    417452            break;
  • trunk/CrypTool 2.0.sln

    r192 r226  
    9595EndProject
    9696Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{B2A0D8D8-D323-47A2-9C45-78EADE3A2297}"
     97        ProjectSection(SolutionItems) = preProject
     98                CrypTool 2.0.vsmdi = CrypTool 2.0.vsmdi
     99        EndProjectSection
    97100EndProject
    98101Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DevTestMethods", "DevTestMethods\DevTestMethods.csproj", "{F4CCBE43-F19E-49A1-982E-B66919F5D701}"
     
    117120EndProject
    118121Global
     122        GlobalSection(TestCaseManagementSettings) = postSolution
     123                CategoryFile = CrypTool 2.0.vsmdi
     124        EndGlobalSection
    119125        GlobalSection(SolutionConfigurationPlatforms) = preSolution
    120126                Debug|.NET = Debug|.NET
  • trunk/SSCext/SSC2fish.cs

    r160 r226  
    7676      key = rgbKey;
    7777
    78       if (cipherMode == CipherMode.CBC)
    79         iv = rgbIV;
    80 
    81       int kl = rgbKey.Length * 8;
    82       if (ValidKeySize(kl)) keySize = kl;
     78      Array.Clear(iv, 0, iv.Length);
     79
     80      if (null != rgbIV)
     81      {
     82          for (int i = 0; i < iv.Length && i < rgbIV.Length; i++)
     83              iv[i] = rgbIV[i];
     84      }
     85
     86        int kl = rgbKey.Length * 8;
     87        if (ValidKeySize(kl)) keySize = kl;
    8388
    8489      return new TwofishEncryption(keySize, ref key, ref iv, cipherMode,
     
    98103      key = rgbKey; // this appears to make a new copy
    99104
    100       if (cipherMode == CipherMode.CBC)
    101         iv = rgbIV;
     105      Array.Clear(iv, 0, iv.Length);
     106
     107      if (null != rgbIV)
     108      {
     109          for (int i = 0; i < iv.Length && i < rgbIV.Length; i++)
     110              iv[i] = rgbIV[i];
     111      }
    102112
    103113      int kl = rgbKey.Length * 8;
     
    115125    {
    116126      if ((iv == null) || (iv.Length == 0))
    117         iv  = new byte[blockSize / 8]; // zeroed by default
     127        iv  = new byte[16]; // zeroed by default
    118128      else
    119         Array.Clear(iv, 0, IV.Length);
     129        Array.Clear(iv, 0, iv.Length);
    120130    }
    121131
     
    265275      set
    266276      {
    267         iv = value;
     277          Array.Clear(iv, 0, iv.Length);
     278          for (int i = 0; i < iv.Length && i < value.Length; i++ )
     279              iv[i] = value[i];
    268280      }
    269281      get
  • trunk/SSCext/TwofishBase.cs

    r159 r226  
    289289      protected uint[] sboxKeys = new uint[MAX_KEY_BITS / 64];  /* key bits used for S-boxes */
    290290      protected uint[] subKeys = new uint[TOTAL_SUBKEYS];               /* round subkeys, input/output whitening bits */
    291       protected uint[] Key = { 0, 0, 0, 0, 0, 0, 0, 0 };                                //new int[MAX_KEY_BITS/32];
     291      protected uint[] Key = { 0, 0, 0, 0, 0, 0, 0, 0 };                //new int[MAX_KEY_BITS/32];
    292292      protected uint[] IV = { 0, 0, 0, 0 };                                             // this should be one block size
    293293      private int keyLength;
  • trunk/SSCext/TwofishEncryption.cs

    r157 r226  
    134134        {
    135135          outputBuffer = new byte[16]; // blocksize
     136          byte[] tmp = new byte[16];
    136137          uint[] x=new uint[4];
    137138
     139       
     140          // Padding
     141          Array.Clear(tmp, 0, tmp.Length);
     142          for (int i = 0; i < inputCount; i++)
     143              tmp[i] = inputBuffer[inputOffset + i];
     144
     145       
    138146          // load it up
    139147          for (int i=0; i < 4; i++) // should be okay as we have already said to pad with zeros
    140148          {
    141149            x[i] =
    142               (uint)(inputBuffer[i * 4 + 3 + inputOffset] << 24) |
    143               (uint)(inputBuffer[i * 4 + 2 + inputOffset] << 16) |
    144               (uint)(inputBuffer[i * 4 + 1 + inputOffset] <<  8) |
    145               (uint)(inputBuffer[i * 4 + 0 + inputOffset]      );
     150              (uint)(tmp[i * 4 + 3] << 24) |
     151              (uint)(tmp[i * 4 + 2] << 16) |
     152              (uint)(tmp[i * 4 + 1] <<  8) |
     153              (uint)(tmp[i * 4 + 0]      );
    146154
    147155          }
     
    170178        }
    171179
    172         return outputBuffer;
     180        if (encryptionDirection == EncryptionDirection.Encrypting)
     181            return outputBuffer;
     182
     183        int len = 15;
     184        while(len >= 0 && outputBuffer[len] == 0) len--;
     185
     186        byte[] erg = new byte[len + 1];
     187
     188        Array.Copy(outputBuffer, erg, len + 1);
     189        return erg;
    173190      }
    174191
Note: See TracChangeset for help on using the changeset viewer.