[corlib] Parse datetime string using culture calendar. Fixes #18052
[mono.git] / mcs / class / corlib / System.Security.Cryptography / HMACSHA384.cs
index eeeac22e78db5d3456528adce1d058ad569b5c92..a25b0e71f4e5a40693492b5d3ed513ec948bbccd 100644 (file)
@@ -2,10 +2,11 @@
 // HMACSHA384.cs: HMAC implementation using SHA384
 //
 // Author:
-//     Sebastien Pouliot  <sebastien@ximian.com>
+//     Sebastien Pouliot  <sebastien@xamarin.com>
 //
 // (C) 2003 Motus Technologies Inc. (http://www.motus.com)
-// Copyright (C) 2004-2005 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2004-2005, 2007 Novell, Inc (http://www.novell.com)
+// Copyright 2013 Xamarin Inc. (http://www.xamarin.com)
 //
 // Permission is hereby granted, free of charge, to any person obtaining
 // a copy of this software and associated documentation files (the
@@ -27,8 +28,6 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-#if NET_2_0
-
 using System.Runtime.InteropServices;
 
 using Mono.Security.Cryptography;
@@ -38,18 +37,43 @@ namespace System.Security.Cryptography {
        [ComVisible (true)]
        public class HMACSHA384 : HMAC {
 
+               private bool legacy;
+
+#if !FULL_AOT_RUNTIME
+               static bool legacy_mode;
+
+               static HMACSHA384 ()
+               {
+                       legacy_mode = (Environment.GetEnvironmentVariable ("legacyHMACMode") == "1");
+               }
+#endif
+
                public HMACSHA384 () 
                        : this (KeyBuilder.Key (8))
                {
                }
 
-               public HMACSHA384 (byte[] rgbKey) : base () 
+               public HMACSHA384 (byte[] key)
                {
+#if FULL_AOT_RUNTIME
+                       BlockSizeValue = 128;
+                       SetHash ("SHA384", new SHA384Managed ());
+#else
+                       ProduceLegacyHmacValues = legacy_mode;
                        HashName = "SHA384";
+#endif
                        HashSizeValue = 384;
-                       Key = rgbKey;
+                       Key = key;
+               }
+
+               // this property will appear in the next .NET service pack
+               // http://blogs.msdn.com/shawnfa/archive/2007/01/31/please-do-not-use-the-net-2-0-hmacsha512-and-hmacsha384-classes.aspx
+               public bool ProduceLegacyHmacValues {
+                       get { return legacy; }
+                       set {
+                               legacy = value;
+                               BlockSizeValue = legacy ? 64 : 128;
+                       }
                }
        }
 }
-
-#endif