Added hammock project to debug streaming issues
[pithos-ms-client] / trunk / hammock / src / netCF / Hammock.Compact / Security / Cryptography / KeyedHashAlgorithm.cs
1 using System;
2 using System.Security.Cryptography;
3
4 namespace Hammock.Security.Cryptography
5 {
6   public abstract class KeyedHashAlgorithm : HashAlgorithm
7   {
8     protected byte[] KeyValue;
9
10     public virtual byte[] Key
11     {
12       get
13       {
14         return (byte[])this.KeyValue.Clone();
15       }
16       set
17       {
18         if (this.State != 0)
19         {
20           throw new CryptographicException("Key can't be changed at this state.");
21         }
22
23         this.ZeroizeKey();
24         this.KeyValue = (byte[])value.Clone();
25       }
26     }
27
28     ~KeyedHashAlgorithm()
29     {
30       this.Dispose(false);
31     }
32
33     protected override void Dispose(bool disposing)
34     {
35       this.ZeroizeKey();
36       base.Dispose(disposing);
37     }
38
39     private void ZeroizeKey()
40     {
41       if (this.KeyValue != null)
42         Array.Clear(this.KeyValue, 0, this.KeyValue.Length);
43     }
44
45     public static new KeyedHashAlgorithm Create()
46     {
47       return Create("System.Security.Cryptography.KeyedHashAlgorithm");
48     }
49
50     public static new KeyedHashAlgorithm Create(string algName)
51     {
52       return (KeyedHashAlgorithm)CryptoConfig.CreateFromName(algName);
53     }
54   }
55 }