Ignore:
Timestamp:
Dec 10, 2008, 10:53:31 AM (13 years ago)
Author:
Gerhard Junker
Message:

TIGER Hash implementes under SSCext
ToDo Tiger Plugin

Location:
trunk/CrypPlugins/PKCS5
Files:
2 edited

Legend:

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

    r130 r138  
    2525namespace PKCS5
    2626{
    27         [Author("Gerhard Junker", null, "private project member", "http://www.uni-siegen.de")]
    28     [PluginInfo(false, "PKCS#5", "PKCS#5 V2.1 Hash", "", "PKCS5/PKCS5.png")]
    29     public class PKCS5 : IHash
    30     {
    31 
    32         /// <summary>
    33         /// can only handle one input canal
    34         /// </summary>
    35         private enum dataCanal
     27  [Author("Gerhard Junker", null, "private project member", "http://www.uni-siegen.de")]
     28  [PluginInfo(false, "PKCS#5", "PKCS#5 V2.1 Hash", "", "PKCS5/PKCS5.png")]
     29  public class PKCS5 : IHash
     30  {
     31
     32    /// <summary>
     33    /// can only handle one input canal
     34    /// </summary>
     35    private enum dataCanal
     36    {
     37      /// <summary>
     38      /// nothing assigned
     39      /// </summary>
     40      none,
     41      /// <summary>
     42      /// using stream interface
     43      /// </summary>
     44      streamCanal,
     45      /// <summary>
     46      /// using byte array interface
     47      /// </summary>
     48      byteCanal
     49    };
     50
     51
     52    /// <summary>
     53    /// Initializes a new instance of the <see cref="PKCS5"/> class.
     54    /// </summary>
     55    public PKCS5()
     56    {
     57      this.settings = new PKCS5Settings();
     58    }
     59
     60    #region Settings
     61
     62    private PKCS5Settings settings;
     63
     64    /// <summary>
     65    /// Gets or sets the settings.
     66    /// </summary>
     67    /// <value>The settings.</value>
     68    public ISettings Settings
     69    {
     70      get
     71      {
     72        return settings;
     73      }
     74      set
     75      {
     76        settings = (PKCS5Settings)value;
     77        OnPropertyChanged("Settings");
     78        GuiLogMessage("Settings changed.", NotificationLevel.Debug);
     79      }
     80    }
     81
     82
     83    /// <summary>
     84    /// Gets or sets a value indicating whether this instance has changes.
     85    /// </summary>
     86    /// <value>
     87    ///         <c>true</c> if this instance has changes; otherwise, <c>false</c>.
     88    /// </value>
     89    public bool HasChanges
     90    {
     91      get
     92      {
     93        return settings.HasChanges;
     94      }
     95
     96      set
     97      {
     98        settings.HasChanges = value;
     99        GuiLogMessage("HasChanges changed.", NotificationLevel.Debug);
     100      }
     101    }
     102
     103    #endregion
     104
     105    #region Input key / password
     106
     107    // Input key
     108    private byte[] key = { };
     109    private dataCanal keyCanal = dataCanal.none;
     110
     111    /// <summary>
     112    /// Notifies the update input.
     113    /// </summary>
     114    private void NotifyUpdateKey()
     115    {
     116      OnPropertyChanged("KeyStream");
     117      OnPropertyChanged("KeyData");
     118    }
     119
     120    /// <summary>
     121    /// Gets or sets the input data.
     122    /// </summary>
     123    /// <value>The input key.</value>
     124    [PropertyInfo(Direction.Input, "Key Stream", "Key stream to be hashed", "", false, false, DisplayLevel.Beginner, QuickWatchFormat.Hex, null)]
     125    public CryptoolStream KeyStream
     126    {
     127      get
     128      {
     129        CryptoolStream keyDataStream = new CryptoolStream();
     130        keyDataStream.OpenRead(this.GetPluginInfoAttribute().Caption, key);
     131        return keyDataStream;
     132      }
     133      set
     134      {
     135        if (null == value)
     136          return;
     137
     138        if (keyCanal != dataCanal.none && keyCanal != dataCanal.streamCanal)
     139          GuiLogMessage("Duplicate input key not allowed!", NotificationLevel.Warning);
     140        keyCanal = dataCanal.streamCanal;
     141
     142        long len = value.Length;
     143        key = new byte[len];
     144
     145        for (long i = 0; i < len; i++)
     146          key[i] = (byte)value.ReadByte();
     147
     148        NotifyUpdateKey();
     149        GuiLogMessage("KeyStream changed.", NotificationLevel.Debug);
     150      }
     151    }
     152
     153    /// <summary>
     154    /// Gets the input data.
     155    /// </summary>
     156    /// <value>The input data.</value>
     157    [PropertyInfo(Direction.Input, "Key Data", "Key stream to be hashed", "", false, false, DisplayLevel.Beginner, QuickWatchFormat.Hex, null)]
     158    public byte[] KeyData
     159    {
     160      get
     161      {
     162        return key;
     163      }
     164      set
     165      {
     166        if (keyCanal != dataCanal.none && keyCanal != dataCanal.byteCanal)
     167          GuiLogMessage("Duplicate key data not allowed!", NotificationLevel.Warning);
     168        keyCanal = dataCanal.byteCanal;
     169
     170        long len = value.Length;
     171        key = new byte[len];
     172
     173        for (long i = 0; i < len; i++)
     174          key[i] = value[i];
     175
     176        NotifyUpdateKey();
     177        GuiLogMessage("KeyData changed.", NotificationLevel.Debug);
     178      }
     179    }
     180    #endregion
     181
     182    #region Salt data / Seed data
     183
     184    // Salt Data
     185    private byte[] salt = { };
     186    private dataCanal saltCanal = dataCanal.none;
     187
     188    /// <summary>
     189    /// Notifies the update salt.
     190    /// </summary>
     191    private void NotifyUpdateSalt()
     192    {
     193      OnPropertyChanged("SaltStream");
     194      OnPropertyChanged("SaltData");
     195    }
     196
     197    /// <summary>
     198    /// Gets or sets the salt data.
     199    /// </summary>
     200    /// <value>The salt data.</value>
     201    [PropertyInfo(Direction.Input, "Salt Stream", "Salt - Input salt data to change the PKCS hash", "", false, false, DisplayLevel.Beginner, QuickWatchFormat.Hex, null)]
     202    public CryptoolStream SaltStream
     203    {
     204      get
     205      {
     206        CryptoolStream saltDataStream = new CryptoolStream();
     207        saltDataStream.OpenRead(this.GetPluginInfoAttribute().Caption, salt);
     208        return saltDataStream;
     209      }
     210      set
     211      {
     212        if (null == value)
     213          return;
     214
     215        if (saltCanal != dataCanal.none && saltCanal != dataCanal.streamCanal)
     216          GuiLogMessage("Duplicate salt input not allowed!", NotificationLevel.Warning);
     217        saltCanal = dataCanal.streamCanal;
     218
     219        long len = value.Length;
     220        salt = new byte[len];
     221
     222        for (long i = 0; i < len; i++)
     223          salt[i] = (byte)value.ReadByte();
     224
     225        NotifyUpdateSalt();
     226        GuiLogMessage("SaltStream changed.", NotificationLevel.Debug);
     227      }
     228    }
     229
     230    /// <summary>
     231    /// Gets or sets the salt data.
     232    /// </summary>
     233    /// <value>The salt data.</value>
     234    [PropertyInfo(Direction.Input, "Salt Data", "Salt - Input salt data to to be change the PKCS hash", "", false, false, DisplayLevel.Beginner, QuickWatchFormat.Hex, null)]
     235    public byte[] SaltData
     236    {
     237      get
     238      {
     239        return salt;
     240      }
     241
     242      set
     243      {
     244        if (saltCanal != dataCanal.none && saltCanal != dataCanal.byteCanal)
     245          GuiLogMessage("Duplicate salt input not allowed!", NotificationLevel.Warning);
     246        saltCanal = dataCanal.byteCanal;
     247
     248        long len = value.Length;
     249        salt = new byte[len];
     250
     251        for (long i = 0; i < len; i++)
     252          salt[i] = value[i];
     253
     254        NotifyUpdateSalt();
     255        GuiLogMessage("SaltData changed.", NotificationLevel.Debug);
     256      }
     257    }
     258    #endregion
     259
     260    #region Output
     261
     262    // Output
     263    private List<CryptoolStream> listCryptoolStreamsOut = new List<CryptoolStream>();
     264    private byte[] outputData = { };
     265
     266    /// <summary>
     267    /// Notifies the update output.
     268    /// </summary>
     269    private void NotifyUpdateOutput()
     270    {
     271      OnPropertyChanged("HashOutputStream");
     272      OnPropertyChanged("HashOutputData");
     273    }
     274
     275
     276    /// <summary>
     277    /// Gets or sets the output data stream.
     278    /// </summary>
     279    /// <value>The output data stream.</value>
     280    [PropertyInfo(Direction.Output, "Hashed Stream", "Output stream of the hashed value", "",
     281      true, false, DisplayLevel.Beginner, QuickWatchFormat.Hex, null)]
     282    public CryptoolStream HashOutputStream
     283    {
     284      get
     285      {
     286        CryptoolStream outputDataStream = null;
     287        if (outputData != null)
    36288        {
    37             /// <summary>
    38             /// nothing assigned
    39             /// </summary>
    40             none,
    41             /// <summary>
    42             /// using stream interface
    43             /// </summary>
    44             streamCanal,
    45             /// <summary>
    46             /// using byte array interface
    47             /// </summary>
    48             byteCanal
    49         };
    50 
    51 
    52         /// <summary>
    53         /// Initializes a new instance of the <see cref="PKCS5"/> class.
    54         /// </summary>
    55         public PKCS5()
    56         {
    57             this.settings = new PKCS5Settings();
     289          outputDataStream = new CryptoolStream();
     290          outputDataStream.OpenRead(this.GetPluginInfoAttribute().Caption, outputData);
     291          listCryptoolStreamsOut.Add(outputDataStream);
    58292        }
    59 
    60         #region Settings
    61 
    62                                 private PKCS5Settings settings;
    63 
    64                                 /// <summary>
    65                                 /// Gets or sets the settings.
    66                                 /// </summary>
    67                                 /// <value>The settings.</value>
    68                                 public ISettings Settings
    69                                 {
    70                                         get
    71                                         {
    72                                                 return settings;
    73                                         }
    74                                         set
    75                                         {
    76                                                 settings = (PKCS5Settings)value;
    77                                                 OnPropertyChanged("Settings");
    78                                                 GuiLogMessage("Settings changed.", NotificationLevel.Debug);
    79                                         }
    80                                 }
    81 
    82 
    83         /// <summary>
    84         /// Gets or sets a value indicating whether this instance has changes.
    85         /// </summary>
    86         /// <value>
    87         ///     <c>true</c> if this instance has changes; otherwise, <c>false</c>.
    88         /// </value>
    89         public bool HasChanges
    90         {
    91             get
    92             {
    93                 return settings.HasChanges;
    94             }
    95 
    96             set
    97             {
    98                 settings.HasChanges = value;
    99                 GuiLogMessage("HasChanges changed.", NotificationLevel.Debug);
    100             }
    101         }
    102 
    103         #endregion
    104 
    105         #region Input key / password
    106 
    107         // Input key
    108         private byte[] key = { };
    109         private dataCanal keyCanal = dataCanal.none;
    110 
    111         /// <summary>
    112         /// Notifies the update input.
    113         /// </summary>
    114         private void NotifyUpdateKey()
    115         {
    116             OnPropertyChanged("KeyStream");
    117             OnPropertyChanged("KeyData");
    118         }
    119 
    120         /// <summary>
    121         /// Gets or sets the input data.
    122         /// </summary>
    123         /// <value>The input key.</value>
    124         [PropertyInfo(Direction.Input, "Key Stream", "Key stream to be hashed", "", false, false, DisplayLevel.Beginner, QuickWatchFormat.Hex, null)]
    125         public CryptoolStream KeyStream
    126         {
    127             get
    128             {
    129                 CryptoolStream keyDataStream = new CryptoolStream();
    130                 keyDataStream.OpenRead(this.GetPluginInfoAttribute().Caption, key);
    131                 return keyDataStream;
    132             }
    133             set
    134             {
    135                 if (null == value)
    136                     return;
    137 
    138                 if (keyCanal != dataCanal.none && keyCanal != dataCanal.streamCanal)
    139                     GuiLogMessage("Duplicate input key not allowed!", NotificationLevel.Warning);
    140                 keyCanal = dataCanal.streamCanal;
    141 
    142                 long len = value.Length;
    143                 key = new byte[len];
    144 
    145                 for (long i = 0; i < len; i++)
    146                     key[i] = (byte)value.ReadByte();
    147 
    148                 NotifyUpdateKey();
    149                 GuiLogMessage("KeyStream changed.", NotificationLevel.Debug);
    150             }
    151         }
    152 
    153         /// <summary>
    154         /// Gets the input data.
    155         /// </summary>
    156         /// <value>The input data.</value>
    157         [PropertyInfo(Direction.Input, "Key Data", "Key stream to be hashed", "", false, false, DisplayLevel.Beginner, QuickWatchFormat.Hex, null)]
    158         public byte[] KeyData
    159         {
    160             get
    161             {
    162                 return key;
    163             }
    164             set
    165             {
    166                                                         if (keyCanal != dataCanal.none && keyCanal != dataCanal.byteCanal)
    167                                                                 GuiLogMessage("Duplicate key data not allowed!", NotificationLevel.Warning);
    168                                                         keyCanal = dataCanal.byteCanal;
    169 
    170                 long len = value.Length;
    171                 key = new byte[len];
    172 
    173                 for (long i = 0; i < len; i++)
    174                     key[i] = value[i];
    175 
    176                 NotifyUpdateKey();
    177                 GuiLogMessage("KeyData changed.", NotificationLevel.Debug);
    178             }
    179         }
    180         #endregion
    181 
    182         #region Salt data / Seed data
    183 
    184         // Salt Data
    185         private byte[] salt = { };
    186         private dataCanal saltCanal = dataCanal.none;
    187 
    188         /// <summary>
    189         /// Notifies the update salt.
    190         /// </summary>
    191         private void NotifyUpdateSalt()
    192         {
    193             OnPropertyChanged("SaltStream");
    194             OnPropertyChanged("SaltData");
    195         }
    196 
    197         /// <summary>
    198         /// Gets or sets the salt data.
    199         /// </summary>
    200         /// <value>The salt data.</value>
    201         [PropertyInfo(Direction.Input, "Salt Stream", "Salt - Input salt data to change the PKCS hash", "", false, false, DisplayLevel.Beginner, QuickWatchFormat.Hex, null)]
    202         public CryptoolStream SaltStream
    203         {
    204             get
    205             {
    206                 CryptoolStream saltDataStream = new CryptoolStream();
    207                 saltDataStream.OpenRead(this.GetPluginInfoAttribute().Caption, salt);
    208                 return saltDataStream;
    209             }
    210             set
    211             {
    212                                                         if (null == value)
    213                                                                 return;
    214 
    215                 if (saltCanal != dataCanal.none && saltCanal != dataCanal.streamCanal)
    216                     GuiLogMessage("Duplicate salt input not allowed!", NotificationLevel.Warning);
    217                 saltCanal = dataCanal.streamCanal;
    218 
    219                 long len = value.Length;
    220                 salt = new byte[len];
    221 
    222                 for (long i = 0; i < len; i++)
    223                     salt[i] = (byte)value.ReadByte();
    224 
    225                 NotifyUpdateSalt();
    226                 GuiLogMessage("SaltStream changed.", NotificationLevel.Debug);
    227             }
    228         }
    229 
    230         /// <summary>
    231         /// Gets or sets the salt data.
    232         /// </summary>
    233         /// <value>The salt data.</value>
    234         [PropertyInfo(Direction.Input, "Salt Data", "Salt - Input salt data to to be change the PKCS hash", "", false, false, DisplayLevel.Beginner, QuickWatchFormat.Hex, null)]
    235         public byte[] SaltData
    236         {
    237             get
    238             {
    239                 return salt;
    240             }
    241 
    242             set
    243             {
    244                 if (saltCanal != dataCanal.none && saltCanal != dataCanal.byteCanal)
    245                     GuiLogMessage("Duplicate salt input not allowed!", NotificationLevel.Warning);
    246                 saltCanal = dataCanal.byteCanal;
    247 
    248                 long len = value.Length;
    249                 salt = new byte[len];
    250 
    251                 for (long i = 0; i < len; i++)
    252                     salt[i] = value[i];
    253 
    254                 NotifyUpdateSalt();
    255                 GuiLogMessage("SaltData changed.", NotificationLevel.Debug);
    256             }
    257         }
    258         #endregion
    259 
    260         #region Output
    261 
    262         // Output
    263         private List<CryptoolStream> listCryptoolStreamsOut = new List<CryptoolStream>();
    264         private byte[] outputData = { };
    265 
    266         /// <summary>
    267         /// Notifies the update output.
    268         /// </summary>
    269         private void NotifyUpdateOutput()
    270         {
    271             OnPropertyChanged("HashOutputStream");
    272             OnPropertyChanged("HashOutputData");
    273         }
    274 
    275 
    276         /// <summary>
    277         /// Gets or sets the output data stream.
    278         /// </summary>
    279         /// <value>The output data stream.</value>
    280         [PropertyInfo(Direction.Output, "Hashed Stream", "Output stream of the hashed value", "",
    281                                         true, false, DisplayLevel.Beginner, QuickWatchFormat.Hex, null)]
    282         public CryptoolStream HashOutputStream
    283         {
    284             get
    285             {
    286                 CryptoolStream outputDataStream = null;
    287                 if (outputData != null)
    288                 {
    289                     outputDataStream = new CryptoolStream();
    290                     outputDataStream.OpenRead(this.GetPluginInfoAttribute().Caption, outputData);
    291                     listCryptoolStreamsOut.Add(outputDataStream);
    292                 }
    293                 GuiLogMessage("Got HashOutputStream.", NotificationLevel.Debug);
    294                 return outputDataStream;
    295             }
    296             //set
    297             //{
    298             //} //readonly
    299         }
    300 
    301         /// <summary>
    302         /// Gets the output data.
    303         /// </summary>
    304         /// <value>The output data.</value>
    305         [PropertyInfo(Direction.Output, "Hashed Data", "Output data of the hashed value", "",
    306                                         true, false, DisplayLevel.Beginner, QuickWatchFormat.Hex, null)]
    307         public byte[] HashOutputData
    308         {
    309             get
    310             {
    311                 GuiLogMessage("Got HashOutputData.", NotificationLevel.Debug);
    312                 return this.outputData;
    313             }
    314                                                 //set
    315                                                 //{
    316                                                 //    if (outputData != value)
    317                                                 //    {
    318                                                 //        this.outputData = value;
    319                                                 //    }
    320                                                 //    NotifyUpdateOutput();
    321                                                 //}
    322         }
    323 
    324         /// <summary>
    325         /// Hashes this instance.
    326         /// </summary>
    327         public void Hash()
    328         {
    329             System.Security.Cryptography.PKCS5MaskGenerationMethod pkcs5Hash =
     293        GuiLogMessage("Got HashOutputStream.", NotificationLevel.Debug);
     294        return outputDataStream;
     295      }
     296      //set
     297      //{
     298      //} //readonly
     299    }
     300
     301    /// <summary>
     302    /// Gets the output data.
     303    /// </summary>
     304    /// <value>The output data.</value>
     305    [PropertyInfo(Direction.Output, "Hashed Data", "Output data of the hashed value", "",
     306      true, false, DisplayLevel.Beginner, QuickWatchFormat.Hex, null)]
     307    public byte[] HashOutputData
     308    {
     309      get
     310      {
     311        GuiLogMessage("Got HashOutputData.", NotificationLevel.Debug);
     312        return this.outputData;
     313      }
     314      //set
     315      //{
     316      //    if (outputData != value)
     317      //    {
     318      //        this.outputData = value;
     319      //    }
     320      //    NotifyUpdateOutput();
     321      //}
     322    }
     323
     324    /// <summary>
     325    /// Hashes this instance.
     326    /// </summary>
     327    public void Hash()
     328    {
     329      System.Security.Cryptography.PKCS5MaskGenerationMethod pkcs5Hash =
    330330                                                        new System.Security.Cryptography.PKCS5MaskGenerationMethod();
    331331
    332             pkcs5Hash.SelectedShaFunction =
    333                                                         (PKCS5MaskGenerationMethod.ShaFunction)settings.SHAFunction;
    334 
    335             outputData =
    336                                                         pkcs5Hash.GenerateMask(this.key, this.salt, settings.Count, settings.Length >> 3);
    337 
    338             NotifyUpdateOutput();
    339         }
    340         #endregion
    341 
    342         #region IPlugin Member
     332      pkcs5Hash.SelectedShaFunction =
     333        (PKCS5MaskGenerationMethod.ShaFunction)settings.SHAFunction;
     334
     335      outputData =
     336        pkcs5Hash.GenerateMask(this.key, this.salt, settings.Count, settings.Length >> 3);
     337
     338      NotifyUpdateOutput();
     339    }
     340    #endregion
     341
     342    #region IPlugin Member
    343343
    344344#pragma warning disable 67
    345         public event StatusChangedEventHandler OnPluginStatusChanged;
    346         public event GuiLogNotificationEventHandler OnGuiLogNotificationOccured;
    347         public event PluginProgressChangedEventHandler OnPluginProgressChanged;
     345    public event StatusChangedEventHandler OnPluginStatusChanged;
     346    public event GuiLogNotificationEventHandler OnGuiLogNotificationOccured;
     347    public event PluginProgressChangedEventHandler OnPluginProgressChanged;
    348348#pragma warning restore
    349349
    350         /// <summary>
    351         /// Provide all presentation stuff in this user control, it will be opened in an tab.
    352         /// Return null if your plugin has no presentation.
    353         /// </summary>
    354         /// <value>The presentation.</value>
    355         public System.Windows.Controls.UserControl Presentation
    356         {
    357             get
    358             {
    359                 return null;
    360             }
    361         }
    362 
    363         /// <summary>
    364         /// Gets the quick watch presentation - will be displayed inside of the plugin presentation-element. You
    365         /// can return the existing Presentation if it makes sense to display it inside a small area. But be aware that
    366         /// if Presentation is displayed in QuickWatchPresentation you can't open Presentation it in a tab before you
    367         /// you close QuickWatchPresentation;
    368         /// Return null if your plugin has no QuickWatchPresentation.
    369         /// </summary>
    370         /// <value>The quick watch presentation.</value>
    371         public System.Windows.Controls.UserControl QuickWatchPresentation
    372         {
    373             get
    374             {
    375                 return null;
    376             }
    377         }
    378 
    379         /// <summary>
    380         /// Will be called from editor after restoring settings and before adding to workspace.
    381         /// </summary>
    382         public void Initialize()
    383         {
    384             GuiLogMessage("Initialize.", NotificationLevel.Debug);
    385         }
    386 
    387         /// <summary>
    388         /// Will be called from editor before right before chain-run starts
    389         /// </summary>
    390         public void PreExecution()
    391         {
    392             GuiLogMessage("PreExecution.", NotificationLevel.Debug);
    393         }
    394 
    395         /// <summary>
    396         /// Will be called from editor while chain-run is active and after last necessary input
    397         /// for plugin has been set.
    398         /// </summary>
    399         public void Execute()
    400         {
    401             GuiLogMessage("Execute.", NotificationLevel.Debug);
    402             Hash();
    403         }
    404 
    405         /// <summary>
    406         /// Will be called from editor after last plugin in chain has finished its work.
    407         /// </summary>
    408         public void PostExecution()
    409         {
    410             GuiLogMessage("PostExecution.", NotificationLevel.Debug);
    411         }
    412 
    413         /// <summary>
    414         /// Not defined yet.
    415         /// </summary>
    416         public void Pause()
    417         {
    418             GuiLogMessage("Pause.", NotificationLevel.Debug);
    419         }
    420 
    421         /// <summary>
    422         /// Will be called from editor while chain-run is active. Plugin hast to stop work immediately.
    423         /// </summary>
    424         public void Stop()
    425         {
    426             GuiLogMessage("Stop.", NotificationLevel.Debug);
    427         }
    428 
    429         /// <summary>
    430         /// Will be called from editor when element is deleted from worksapce.
    431         /// Releases unmanaged and - optionally - managed resources
    432         /// </summary>
    433         public void Dispose()
    434         {
    435             foreach (CryptoolStream stream in listCryptoolStreamsOut)
    436             {
    437                 stream.Close();
    438             }
    439             listCryptoolStreamsOut.Clear();
    440             GuiLogMessage("Dispose.", NotificationLevel.Debug);
    441         }
    442 
    443         #endregion
    444 
    445         #region INotifyPropertyChanged Member
    446 
    447         /// <summary>
    448         /// Occurs when a property value changes.
    449         /// </summary>
    450         public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
    451 
    452         /// <summary>
    453         /// Called when [property changed].
    454         /// </summary>
    455         /// <param name="name">The name.</param>
    456         protected void OnPropertyChanged(string name)
    457         {
    458             if (PropertyChanged != null)
    459             {
    460                 if (name == "Settings")
    461                     Hash();
    462                 else
    463                     PropertyChanged(this, new PropertyChangedEventArgs(name));
    464             }
    465         }
    466 
    467         /// <summary>
    468         /// GUIs the log message.
    469         /// </summary>
    470         /// <param name="message">The message.</param>
    471         /// <param name="logLevel">The log level.</param>
    472         private void GuiLogMessage(string message, NotificationLevel logLevel)
    473         {
    474             EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this,
    475                                                         new GuiLogEventArgs(message, this, logLevel));
    476         }
    477 
    478         #endregion
    479     }
     350    /// <summary>
     351    /// Provide all presentation stuff in this user control, it will be opened in an tab.
     352    /// Return null if your plugin has no presentation.
     353    /// </summary>
     354    /// <value>The presentation.</value>
     355    public System.Windows.Controls.UserControl Presentation
     356    {
     357      get
     358      {
     359        return null;
     360      }
     361    }
     362
     363    /// <summary>
     364    /// Gets the quick watch presentation - will be displayed inside of the plugin presentation-element. You
     365    /// can return the existing Presentation if it makes sense to display it inside a small area. But be aware that
     366    /// if Presentation is displayed in QuickWatchPresentation you can't open Presentation it in a tab before you
     367    /// you close QuickWatchPresentation;
     368    /// Return null if your plugin has no QuickWatchPresentation.
     369    /// </summary>
     370    /// <value>The quick watch presentation.</value>
     371    public System.Windows.Controls.UserControl QuickWatchPresentation
     372    {
     373      get
     374      {
     375        return null;
     376      }
     377    }
     378
     379    /// <summary>
     380    /// Will be called from editor after restoring settings and before adding to workspace.
     381    /// </summary>
     382    public void Initialize()
     383    {
     384      GuiLogMessage("Initialize.", NotificationLevel.Debug);
     385    }
     386
     387    /// <summary>
     388    /// Will be called from editor before right before chain-run starts
     389    /// </summary>
     390    public void PreExecution()
     391    {
     392      GuiLogMessage("PreExecution.", NotificationLevel.Debug);
     393    }
     394
     395    /// <summary>
     396    /// Will be called from editor while chain-run is active and after last necessary input
     397    /// for plugin has been set.
     398    /// </summary>
     399    public void Execute()
     400    {
     401      GuiLogMessage("Execute.", NotificationLevel.Debug);
     402      Hash();
     403    }
     404
     405    /// <summary>
     406    /// Will be called from editor after last plugin in chain has finished its work.
     407    /// </summary>
     408    public void PostExecution()
     409    {
     410      GuiLogMessage("PostExecution.", NotificationLevel.Debug);
     411    }
     412
     413    /// <summary>
     414    /// Not defined yet.
     415    /// </summary>
     416    public void Pause()
     417    {
     418      GuiLogMessage("Pause.", NotificationLevel.Debug);
     419    }
     420
     421    /// <summary>
     422    /// Will be called from editor while chain-run is active. Plugin hast to stop work immediately.
     423    /// </summary>
     424    public void Stop()
     425    {
     426      GuiLogMessage("Stop.", NotificationLevel.Debug);
     427    }
     428
     429    /// <summary>
     430    /// Will be called from editor when element is deleted from worksapce.
     431    /// Releases unmanaged and - optionally - managed resources
     432    /// </summary>
     433    public void Dispose()
     434    {
     435      foreach (CryptoolStream stream in listCryptoolStreamsOut)
     436      {
     437        stream.Close();
     438      }
     439      listCryptoolStreamsOut.Clear();
     440      GuiLogMessage("Dispose.", NotificationLevel.Debug);
     441    }
     442
     443    #endregion
     444
     445    #region INotifyPropertyChanged Member
     446
     447    /// <summary>
     448    /// Occurs when a property value changes.
     449    /// </summary>
     450    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
     451
     452    /// <summary>
     453    /// Called when [property changed].
     454    /// </summary>
     455    /// <param name="name">The name.</param>
     456    protected void OnPropertyChanged(string name)
     457    {
     458      if (PropertyChanged != null)
     459      {
     460        if (name == "Settings")
     461          Hash();
     462        else
     463          PropertyChanged(this, new PropertyChangedEventArgs(name));
     464      }
     465    }
     466
     467    /// <summary>
     468    /// GUIs the log message.
     469    /// </summary>
     470    /// <param name="message">The message.</param>
     471    /// <param name="logLevel">The log level.</param>
     472    private void GuiLogMessage(string message, NotificationLevel logLevel)
     473    {
     474      EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this,
     475        new GuiLogEventArgs(message, this, logLevel));
     476    }
     477
     478    #endregion
     479  }
    480480}
  • trunk/CrypPlugins/PKCS5/PKCS5Settings.cs

    r133 r138  
    2828namespace PKCS5
    2929{
    30     /// <summary>
    31     /// Settings for PKCS#5 v2
    32     /// </summary>
    33     public class PKCS5Settings : ISettings
    34     {
    35         private bool hasChanges = false;
     30  /// <summary>
     31  /// Settings for PKCS#5 v2
     32  /// </summary>
     33  public class PKCS5Settings : ISettings
     34  {
     35    private bool hasChanges = false;
    3636
    37         #region ISettings Member
     37    #region ISettings Member
    3838
    3939
    40                         /// <summary>
    41                         /// selected internal hash HMAC function
    42                         /// </summary>
    43                           private PKCS5MaskGenerationMethod.ShaFunction selectedShaFunction
     40    /// <summary>
     41    /// selected internal hash HMAC function
     42    /// </summary>
     43    private PKCS5MaskGenerationMethod.ShaFunction selectedShaFunction
    4444                                        = PKCS5MaskGenerationMethod.ShaFunction.SHA256;
    4545
    46         [ContextMenu("SHA Function",
    47                                         "Select the hash function (MD5, SHA1 or one out of the SHA2 family)", 0,
    48                                         DisplayLevel.Beginner, ContextMenuControlType.ComboBox, null,
    49                                         new string[] {"MD5", "SHA1", "SHA256", "SHA384", "SHA512"})]
    50         [TaskPane("Select hash function",
    51                                         "Select the hash function (MD2, SHA1 or one out of the SHA2 family)", "", 0, true,
    52                                         DisplayLevel.Beginner, ControlType.ComboBox,
    53                                         new string[] { "MD5", "SHA1", "SHA256", "SHA384", "SHA512" })]
    54         public int SHAFunction
    55         {
    56             get
    57             {
    58                 return (int)this.selectedShaFunction;
    59             }
    60             set
    61             {
    62                 this.selectedShaFunction = (PKCS5MaskGenerationMethod.ShaFunction)value;
    63                                                                 //CheckLength();
    64                                                                 // set to max hash length
    65                                                                 length = PKCS5MaskGenerationMethod.GetHashLength(selectedShaFunction) * 8;
    66                                                                 hasChanges = true;
    67                                                                 OnPropertyChanged("SHAFunction");
    68                                                                 OnPropertyChanged("Length");
    69             }
    70         }
     46    [ContextMenu("SHA Function",
     47      "Select the hash function (MD5, SHA1 or one out of the SHA2 family)", 0,
     48      DisplayLevel.Beginner, ContextMenuControlType.ComboBox, null,
     49      new string[] { "MD5", "SHA1", "SHA256", "SHA384", "SHA512" })]
     50    [TaskPane("Select hash function",
     51      "Select the hash function (MD2, SHA1 or one out of the SHA2 family)", "", 0, true,
     52      DisplayLevel.Beginner, ControlType.ComboBox,
     53      new string[] { "MD5", "SHA1", "SHA256", "SHA384", "SHA512" })]
     54    public int SHAFunction
     55    {
     56      get
     57      {
     58        return (int)this.selectedShaFunction;
     59      }
     60      set
     61      {
     62        this.selectedShaFunction = (PKCS5MaskGenerationMethod.ShaFunction)value;
     63        //CheckLength();
     64        // set to max hash length
     65        length = PKCS5MaskGenerationMethod.GetHashLength(selectedShaFunction) * 8;
     66        hasChanges = true;
     67        OnPropertyChanged("SHAFunction");
     68        OnPropertyChanged("Length");
     69      }
     70    }
    7171
    72                         /// <summary>
    73                         /// count of hash loops
    74                         /// </summary>
    75                                 private int count = 1000;
    76         [TaskPane("Number of iterations (counter)",
    77                                         "The counter determines how often the hash function is applied." +
    78                                         " A value bigger than 1000 is recommended.", "", 1, false,     
    79                                         DisplayLevel.Beginner, ControlType.TextBox, ValidationType.RangeInteger, 1, 9999)]
    80         public int Count
    81         {
    82             get
    83             {
    84                 return count;
    85             }
    86             set
    87             {
    88                 count = value;
    89                 if (count == 0)
    90                     count = 1000;
    91                 hasChanges = true;
    92                 OnPropertyChanged("Count");
    93             }
    94         }
     72    /// <summary>
     73    /// count of hash loops
     74    /// </summary>
     75    private int count = 1000;
     76    [TaskPane("Number of iterations (counter)",
     77      "The counter determines how often the hash function is applied." +
     78      " A value bigger than 1000 is recommended.", "", 1, false,
     79      DisplayLevel.Beginner, ControlType.TextBox, ValidationType.RangeInteger, 1, 9999)]
     80    public int Count
     81    {
     82      get
     83      {
     84        return count;
     85      }
     86      set
     87      {
     88        count = value;
     89        if (count == 0)
     90          count = 1000;
     91        hasChanges = true;
     92        OnPropertyChanged("Count");
     93      }
     94    }
    9595
    96                         /// <summary>
    97                         /// length of calculated hash in bits
    98                         /// </summary>
    99                                 private int length = 256;
    100         [TaskPane("Length of output key",
    101                                         "The length of the output in bits must be a multiple of 8.", "", 2, false,
    102                                         DisplayLevel.Beginner, ControlType.TextBox, ValidationType.RangeInteger, -64, 2048)]
    103                                 public int Length
    104                                 {
    105                                         get
    106                                         {
    107                                                 return length;
    108                                         }
    109                                         set
    110                                         {
    111                                                 length = value;
    112                                                 if (length < 0) // change from bytes to bits [hack]
    113                                                         length *= -8;
    114                                                
    115                                                 while ((length & 0x07) != 0) // go to the next multiple of 8
    116                                                         length++;
     96    /// <summary>
     97    /// length of calculated hash in bits
     98    /// </summary>
     99    private int length = 256;
     100    [TaskPane("Length of output key",
     101      "The length of the output in bits must be a multiple of 8.", "", 2, false,
     102      DisplayLevel.Beginner, ControlType.TextBox, ValidationType.RangeInteger, -64, 2048)]
     103    public int Length
     104    {
     105      get
     106      {
     107        return length;
     108      }
     109      set
     110      {
     111        length = value;
     112        if (length < 0) // change from bytes to bits [hack]
     113          length *= -8;
    117114
    118                                                 //CheckLength();
     115        while ((length & 0x07) != 0) // go to the next multiple of 8
     116          length++;
    119117
    120                                                 hasChanges = true;
    121                                                 OnPropertyChanged("Length");
    122                                         }
    123                                 }
     118        //CheckLength();
    124119
    125                                 /// <summary>
    126                                 /// Checks the length.
    127                                 /// </summary>
    128                                 private void CheckLength()
    129                                 {
    130                                         // get max length of this hash
    131                                         int newlen = PKCS5MaskGenerationMethod.GetHashLength(selectedShaFunction) * 8;
    132                                         if (newlen < length)
    133                                         {
    134                                                 length = newlen; // reduce it to max length
    135                                                 hasChanges = true;
    136                                         }
    137                                 }
     120        hasChanges = true;
     121        OnPropertyChanged("Length");
     122      }
     123    }
    138124
    139         /// <summary>
    140         /// Gets or sets a value indicating whether this instance has changes.
    141         /// </summary>
    142         /// <value>
    143         ///     <c>true</c> if this instance has changes; otherwise, <c>false</c>.
    144         /// </value>
    145         public bool HasChanges
    146         {
    147             get
    148             {
    149                 return hasChanges;
    150             }
    151             set
    152             {
    153                 hasChanges = value;
    154             }
    155         }
     125    /// <summary>
     126    /// Checks the length.
     127    /// </summary>
     128    private void CheckLength()
     129    {
     130      // get max length of this hash
     131      int newlen = PKCS5MaskGenerationMethod.GetHashLength(selectedShaFunction) * 8;
     132      if (newlen < length)
     133      {
     134        length = newlen; // reduce it to max length
     135        hasChanges = true;
     136      }
     137    }
    156138
    157         #endregion
     139    /// <summary>
     140    /// Gets or sets a value indicating whether this instance has changes.
     141    /// </summary>
     142    /// <value>
     143    ///         <c>true</c> if this instance has changes; otherwise, <c>false</c>.
     144    /// </value>
     145    public bool HasChanges
     146    {
     147      get
     148      {
     149        return hasChanges;
     150      }
     151      set
     152      {
     153        hasChanges = value;
     154      }
     155    }
    158156
    159         #region INotifyPropertyChanged Member
     157    #endregion
    160158
    161         public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
     159    #region INotifyPropertyChanged Member
    162160
    163         /// <summary>
    164         /// Called when [property changed].
    165         /// </summary>
    166         /// <param name="name">The name.</param>
    167         protected void OnPropertyChanged(string name)
    168         {
    169             if (PropertyChanged != null)
    170             {
    171                 PropertyChanged(this, new PropertyChangedEventArgs(name));
    172             }
    173             hasChanges = true;
    174         }
     161    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
    175162
    176         #endregion
     163    /// <summary>
     164    /// Called when [property changed].
     165    /// </summary>
     166    /// <param name="name">The name.</param>
     167    protected void OnPropertyChanged(string name)
     168    {
     169      if (PropertyChanged != null)
     170      {
     171        PropertyChanged(this, new PropertyChangedEventArgs(name));
     172      }
     173      hasChanges = true;
    177174    }
     175
     176    #endregion
     177  }
    178178}
Note: See TracChangeset for help on using the changeset viewer.