2007-08-17 Sebastien Pouliot <sebastien@ximian.com>
[mono.git] / mcs / class / corlib / System.Security.Cryptography / HMACSHA1.cs
index 35d2d3864308b983f22573d541d8fefdb9c91d90..ecd2a13023eb4ee7e7c639c3b6683f3da69975fb 100644 (file)
@@ -2,14 +2,10 @@
 // HMACSHA1.cs: Handles HMAC with SHA-1
 //
 // Author:
-//     Sebastien Pouliot <sebastien@ximian.com>
+//     Sebastien Pouliot  <sebastien@ximian.com>
 //
-// (C) 2002, 2003 Motus Technologies Inc. (http://www.motus.com)
-// (C) 2004 Novell (http://www.novell.com)
-//
-
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+// (C) 2003 Motus Technologies Inc. (http://www.motus.com)
+// Copyright (C) 2004-2005 Novell, Inc (http://www.novell.com)
 //
 // Permission is hereby granted, free of charge, to any person obtaining
 // a copy of this software and associated documentation files (the
@@ -31,8 +27,8 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System;
 using System.IO;
+using System.Runtime.InteropServices;
 
 using Mono.Security.Cryptography;
 
@@ -51,7 +47,7 @@ namespace System.Security.Cryptography {
        //      not free :-(
        //      http://webstore.ansi.org/ansidocstore/product.asp?sku=ANSI+X9%2E71%2D2000
 
-#if (NET_1_0 || NET_1_1)       
+#if ! NET_2_0
        public class HMACSHA1: KeyedHashAlgorithm {
                private HMACAlgorithm hmac;
                private bool m_disposed;
@@ -107,8 +103,11 @@ namespace System.Security.Cryptography {
                        // let us throw an exception if hash name is invalid
                        // for HMACSHA1 (obviously this can't be done by the 
                        // generic HMAC class)
-                       SHA1 sha = (SHA1) hmac.Algo;
-
+                       if (!(hmac.Algo is SHA1)) {
+                               string algo = (hmac.Algo == null) ? "none" : hmac.Algo.GetType ().ToString ();
+                               string msg = Locale.GetText ("Invalid hash algorithm '{0}', expected '{1}'.");
+                               throw new InvalidCastException (String.Format (msg, algo, "SHA1"));
+                       }
                        State = 0;
                        hmac.Initialize ();
                }
@@ -135,22 +134,26 @@ namespace System.Security.Cryptography {
                }
        }
 #else
+       [ComVisible (true)]
        public class HMACSHA1 : HMAC {
 
-               public HMACSHA1 () : this (KeyBuilder.Key (8))
+               public HMACSHA1 ()
+                       : this (KeyBuilder.Key (8))
                {
                }
 
-               public HMACSHA1 (byte[] rgbKey) : base () 
+               public HMACSHA1 (byte[] rgbKey)
                {
                        HashName = "SHA1";
                        HashSizeValue = 160;
                        Key = rgbKey;
                }
 
-               ~HMACSHA1 () 
+               public HMACSHA1 (byte[] rgbKey, bool useManagedSha1)
                {
-                       Dispose (false);
+                       HashName = "System.Security.Cryptography.SHA1" + (useManagedSha1 ? "Managed" : "CryptoServiceProvider");
+                       HashSizeValue = 160;
+                       Key = rgbKey;
                }
        }
 #endif