Changeset 732 for trunk/CrypPlugins/SDES


Ignore:
Timestamp:
Oct 16, 2009, 1:57:08 PM (12 years ago)
Author:
kopal
Message:
  • QuadraticSieve: corrected spelling error
  • SDES: can now be used by the KeySearcher correctly
File:
1 edited

Legend:

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

    r731 r732  
    2828using System.Threading;
    2929using System.Windows.Threading;
     30using System.Runtime.InteropServices;
    3031
    3132namespace Cryptool.Plugins.Cryptography.Encryption
     
    544545        #region private
    545546        private SDES plugin;
    546         private CryptoolStream input;
     547        private byte[] input;
    547548        private List<CryptoolStream> listCryptoolStreams = new List<CryptoolStream>();
    548549        #endregion
     
    650651        private byte[] execute(byte[] key, int blocksize)
    651652        {
     653            byte[] output;
     654            if (blocksize > 0)
     655                output = new byte[blocksize];
     656            else
     657                output = new byte[plugin.InputStream.Length];
     658
    652659            if (input == null || plugin.InputChanged)
    653660            {
    654661                plugin.InputChanged = false;
    655                 input = new CryptoolStream();
    656                 input.OpenRead(plugin.InputStream.FileName);
    657                 if(blocksize <= input.Length)
    658                     input.SetLength(blocksize);
    659                 listCryptoolStreams.Add(input);
     662                input = new byte[blocksize];
     663                for (int i = 0; i < blocksize; i++)
     664                {
     665                    if(i<plugin.InputStream.Length)
     666                        input[i] = plugin.InputStream.Read();
     667                }
    660668            }
    661669
    662670            plugin.InputKey = key;
    663             CryptoolStream output = new CryptoolStream();
    664             output.OpenWrite();
    665 
     671         
    666672            System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
    667673            if (((SDESSettings)plugin.Settings).Mode == 0)
    668674            {               
    669675                ElectronicCodeBook ecb = new ElectronicCodeBook(plugin);
    670                 ecb.decrypt(input, output, key);
     676                ecb.encrypt(input, output, key,blocksize);
    671677            }
    672678            else
    673679            {
    674680                CipherBlockChaining cbc = new CipherBlockChaining(plugin);
    675                 cbc.decrypt(input, output, key, Tools.stringToBinaryByteArray(enc.GetString(plugin.InputIV)));
     681                cbc.decrypt(input, output, key, Tools.stringToBinaryByteArray(enc.GetString(plugin.InputIV)),blocksize);
    676682            }           
    677 
    678             byte[] byteValues = new byte[output.Length];
    679             int bytesRead;
    680             output.Seek(0, SeekOrigin.Begin);
    681             bytesRead = output.Read(byteValues, 0, byteValues.Length);
    682             plugin.Dispose();
    683             output.Close();
    684             return byteValues;
     683           
     684            return output;
    685685        }
    686686
     
    14541454        }//end encrypt
    14551455
     1456        ///
     1457        ///Encrypts the given plaintext with the given key
     1458        ///using CipherBlockChaining
     1459        ///
     1460        /// blocksize tells the algorithm how many bytes it has to encrypt
     1461        /// blocksize = 0 => encrypt all
     1462        public void encrypt(byte[] input, byte[] output, byte[] key, byte[] vector, [Optional, DefaultParameterValue(0)] int blocksize)
     1463        {
     1464
     1465            int until = output.Length;
     1466
     1467            if (input.Length < output.Length)
     1468                until = input.Length;
     1469
     1470            if (blocksize < until && blocksize > 0)
     1471                until = blocksize;
     1472
     1473            for (int i = 0; i < until; i++)
     1474            {
     1475                vector = Tools.exclusive_or(vector, Tools.byteToByteArray(input[i]));
     1476                vector = mAlgorithm.encrypt(vector, key);
     1477                output[i] = Tools.byteArrayToByte(vector);
     1478
     1479            }//end while
     1480
     1481        }//end encrypt
     1482
    14561483        ///<summary>
    14571484        ///Decrypts the given plaintext with the given Key
     
    14831510        }//end decrypt
    14841511
     1512        ///
     1513        ///Decrypt the given plaintext with the given key
     1514        ///using CipherBlockChaining
     1515        ///
     1516        /// blocksize tells the algorithm how many bytes it has to encrypt
     1517        /// blocksize = 0 => encrypt all
     1518        public void decrypt(byte[] input, byte[] output, byte[] key, byte[] vector, [Optional, DefaultParameterValue(0)] int blocksize)
     1519        {
     1520
     1521            int until = output.Length;
     1522
     1523            if (input.Length < output.Length)
     1524                until = input.Length;
     1525
     1526            if (blocksize < until && blocksize > 0)
     1527                until = blocksize;
     1528
     1529            for (int i = 0; i < until; i++)
     1530            {
     1531                output[i] = (Tools.byteArrayToByte(Tools.exclusive_or(mAlgorithm.decrypt(Tools.byteToByteArray(input[i]), key), vector)));
     1532                vector = Tools.byteToByteArray(input[i]);
     1533                           
     1534            }//end while
     1535
     1536        }//end encrypt
     1537
    14851538    }//end class CipherBlockChaining
    14861539
     
    15321585        }//end encrypt
    15331586
     1587        ///
     1588        ///Encrypts the given plaintext with the given key
     1589        ///using ElectronicCodeBookMode
     1590        ///
     1591        /// blocksize tells the algorithm how many bytes it has to encrypt
     1592        /// blocksize = 0 => encrypt all
     1593        public void encrypt(byte[] input, byte[] output, byte[] key, [Optional, DefaultParameterValue(0)] int blocksize)
     1594        {
     1595
     1596            int until = output.Length;
     1597
     1598            if(input.Length < output.Length)
     1599                until=input.Length;
     1600
     1601            if(blocksize < until && blocksize > 0)
     1602                until = blocksize;
     1603
     1604            for(int i=0;i<until;i++)
     1605            {               
     1606                //Step 2 encrypt symbol
     1607                output[i] = Tools.byteArrayToByte(this.mAlgorithm.encrypt(Tools.byteToByteArray(input[i]), key));
     1608               
     1609                mSdes.ProgressChanged(i, until);
     1610
     1611            }//end while
     1612
     1613        }//end encrypt
     1614
    15341615        ///<summary>
    15351616        ///Decrypts the given plaintext with the given Key
     
    15601641        }//end decrypt
    15611642
     1643        ///
     1644        ///Decrypt the given plaintext with the given key
     1645        ///using ElectronicCodeBookMode
     1646        ///
     1647        /// blocksize tells the algorithm how many bytes it has to decrypt
     1648        /// blocksize = 0 => encrypt all
     1649        public void decrypt(byte[] input, byte[] output, byte[] key, [Optional, DefaultParameterValue(0)] int blocksize)
     1650        {
     1651
     1652            int until = output.Length;
     1653
     1654            if (input.Length < output.Length)
     1655                until = input.Length;
     1656
     1657            if (blocksize < until && blocksize > 0)
     1658                until = blocksize;
     1659
     1660            for (int i = 0; i < until; i++)
     1661            {
     1662                //Step 2 encrypt symbol
     1663                output[i] = Tools.byteArrayToByte(this.mAlgorithm.decrypt(Tools.byteToByteArray(input[i]), key));
     1664
     1665                mSdes.ProgressChanged(i, until);
     1666
     1667            }//end while
     1668
     1669        }//end encrypt
     1670
    15621671    }//end class ElectronicCodeBook
    15631672
Note: See TracChangeset for help on using the changeset viewer.