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

2FISH - first fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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;
Note: See TracChangeset for help on using the changeset viewer.