First of all we should know the algorithm that available in our machine.
Code snippet to know all available algorithm in C#
Before running this on your machine make sure to ENABLE FIPS. Otherwise, you will get all ‘Y’ for COMPLIANT.
https://blogs.msdn.microsoft.com/icumove/2009/01/31/working-with-fips-in-net-c/
Code snippet to know all available algorithm in C#
Before running this on your machine make sure to ENABLE FIPS. Otherwise, you will get all ‘Y’ for COMPLIANT.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Security.Cryptography;//extra using System.Reflection;//extra namespace Know_All_FIPS_algorithm { class Program { static void Main(string[] args) { Assembly core = Assembly.Load("System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"); Assembly mscorlib = Assembly.Load("mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"); Type[] subclasses = new Type[] { typeof(SymmetricAlgorithm), typeof(HashAlgorithm), typeof(AsymmetricAlgorithm) }; Print(mscorlib, subclasses); Console.WriteLine(); Console.WriteLine(); Print(core, subclasses); Console.Read(); } private static void Print(Assembly asm, Type[] subclasses) { string columnFormat = "{0,-35}{1,-15}{2}"; Console.WriteLine("FIPS Compliant in {0}", asm.GetName()); Console.WriteLine(columnFormat, "Name", "Compliant", "Subclass"); foreach (Type type in asm.GetTypes()) { foreach (Type subclass in subclasses) { if (type.IsSubclassOf(subclass)) { if (!type.IsAbstract) { string isCompliant = null; try { Activator.CreateInstance(type); isCompliant = "Y"; } catch (TargetInvocationException) { isCompliant = "N"; } catch (Exception e) { Console.WriteLine(e.Message); } finally { Console.WriteLine( columnFormat, type.Name, isCompliant, subclass.Name); } } } } } } } }
Output:
------------------------
FIPS Compliant in mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77 a5c561934e089 Name Compliant Subclass DESCryptoServiceProvider Y SymmetricAlgorithm DSACryptoServiceProvider Y AsymmetricAlgorithm HMACMD5 Y HashAlgorithm HMACRIPEMD160 Y HashAlgorithm HMACSHA1 Y HashAlgorithm HMACSHA256 Y HashAlgorithm HMACSHA384 Y HashAlgorithm HMACSHA512 Y HashAlgorithm MACTripleDES Y HashAlgorithm MD5CryptoServiceProvider Y HashAlgorithm RC2CryptoServiceProvider Y SymmetricAlgorithm RIPEMD160Managed Y HashAlgorithm RSACryptoServiceProvider Y AsymmetricAlgorithm RijndaelManaged Y SymmetricAlgorithm SHA1CryptoServiceProvider Y HashAlgorithm SHA1Managed Y HashAlgorithm SHA256Managed Y HashAlgorithm SHA384Managed Y HashAlgorithm SHA512Managed Y HashAlgorithm TripleDESCryptoServiceProvider Y SymmetricAlgorithm FIPS Compliant in System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken= b77a5c561934e089 Name Compliant Subclass AesCryptoServiceProvider Y SymmetricAlgorithm AesManaged Y SymmetricAlgorithm ECDiffieHellmanCng Y AsymmetricAlgorithm ECDsaCng Y AsymmetricAlgorithm MD5Cng Y HashAlgorithm RSACng Y AsymmetricAlgorithm SHA1Cng Y HashAlgorithm SHA256Cng Y HashAlgorithm SHA256CryptoServiceProvider Y HashAlgorithm SHA384Cng Y HashAlgorithm SHA384CryptoServiceProvider Y HashAlgorithm SHA512Cng Y HashAlgorithm SHA512CryptoServiceProvider Y HashAlgorithmReference for framework 2.0
https://blogs.msdn.microsoft.com/icumove/2009/01/31/working-with-fips-in-net-c/