// 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
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-#if NET_2_0
-
using System.Runtime.InteropServices;
using Mono.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