Changeset 226 for trunk/SSCext


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

2FISH - first fixes

Location:
trunk/SSCext
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • 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.