Skip to content
This repository has been archived by the owner on Nov 22, 2018. It is now read-only.

Commit

Permalink
Change SHA256 algorithm to work on FIPS-compliant machines.
Browse files Browse the repository at this point in the history
  • Loading branch information
NTaylorMullen committed Aug 10, 2016
1 parent 0bdfef6 commit bea6687
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public static void ConfigureOptions(AntiforgeryOptions options, DataProtectionOp

private static string ComputeCookieName(string applicationId)
{
using (var sha256 = SHA256.Create())
using (var sha256 = CryptographyAlgorithms.CreateSHA256())
{
var hash = sha256.ComputeHash(Encoding.UTF8.GetBytes(applicationId));
var subHash = hash.Take(8).ToArray();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ public SHA256 Sha256
{
if (_sha256 == null)
{
_sha256 = SHA256.Create();
_sha256 = CryptographyAlgorithms.CreateSHA256();
}

return _sha256;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System.Security.Cryptography;

namespace Microsoft.AspNetCore.Antiforgery.Internal
{
public static class CryptographyAlgorithms
{
#if NETSTANDARD1_3
public static SHA256 CreateSHA256()
{
var sha256 = SHA256.Create();

return sha256;
}
#else
public static SHA256 CreateSHA256()
{
SHA256 sha256;

try
{
sha256 = SHA256.Create();
}
// SHA256.Create is documented to throw this exception on FIPS compliant machines.
// See: https://msdn.microsoft.com/en-us/library/z08hz7ad%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396
catch (System.Reflection.TargetInvocationException)

This comment has been minimized.

Copy link
@davidfowl

davidfowl Aug 11, 2016

Member

Can we avoid the exception somehow?

This comment has been minimized.

Copy link
@NTaylorMullen

NTaylorMullen Aug 11, 2016

Author Member

Have an open issue on corefx on routes to determine FIPS compliance which would enable us to avoid it: https://github.com/dotnet/corefx/issues/10694

{
// Fallback to a FIPS compliant SHA256 algorithm.
sha256 = new SHA256CryptoServiceProvider();
}

return sha256;
}
#endif
}
}

0 comments on commit bea6687

Please sign in to comment.