Added check and failover of hash algorithms: OpenSSL > Cng > Default
[pithos-ms-client] / trunk / Pithos.Network / BlockHashAlgorithms.cs
index 2814f79..c129a34 100644 (file)
@@ -43,11 +43,12 @@ using System.Collections.Concurrent;
 using System.Diagnostics.Contracts;\r
 using System.IO;\r
 using System.Reflection;\r
+using System.Security.Cryptography;\r
 using System.ServiceModel.Channels;\r
 using System.Threading;\r
 using System.Threading.Tasks;\r
 using System.Threading.Tasks.Dataflow;\r
-using OpenSSL.Crypto;\r
+\r
 \r
 namespace Pithos.Network\r
 {\r
@@ -251,10 +252,9 @@ namespace Pithos.Network
             if (size == 0)\r
             {\r
                 var buf = new byte[0];\r
-                using (var hasher = new MessageDigestContext(MessageDigest.CreateByName(algorithm)))\r
-                {                    \r
-                    hasher.Init();\r
-                    hashes[0] = hasher.Digest(buf);\r
+                using (var hasher = HashAlgorithm.Create(algorithm))\r
+                {\r
+                    hashes[0] = hasher.ComputeHash(buf);\r
                     return hashes;\r
                 }\r
             }\r
@@ -264,13 +264,12 @@ namespace Pithos.Network
             var actualHashers = parallelism > blocks ? (byte)blocks : parallelism;\r
 \r
             var buffer = new byte[actualHashers][];\r
-            var hashers = new MessageDigestContext[actualHashers];\r
+            var hashers = new HashAlgorithm[actualHashers];\r
             var bufferManager = GetBufferManager(blockSize, actualHashers);\r
             for (var i = 0; i < actualHashers; i++)\r
             {\r
                 buffer[i] = bufferManager.TakeBuffer(blockSize);// new byte[blockSize];\r
-                hashers[i] = new MessageDigestContext(MessageDigest.CreateByName(algorithm));\r
-                hashers[i].Init();\r
+                hashers[i] = HashAlgorithm.Create(algorithm);                \r
             }\r
             try\r
             {\r
@@ -281,7 +280,7 @@ namespace Pithos.Network
                 int bufIdx = 0;\r
                 long index = 0;\r
 \r
-                long block = 0;\r
+                //long block = 0;\r
 \r
                 while ((read = await stream.ReadAsync(buffer[bufIdx], 0, blockSize).ConfigureAwait(false)) > 0)\r
                 {\r
@@ -307,7 +306,8 @@ namespace Pithos.Network
 \r
                                                             var hasher = hashers[idx];\r
 \r
-                                                            byte[] hash;\r
+                                                            byte[] hash=hasher.ComputeHash(buffer[idx],0,lastByteIndex+1);\r
+/*\r
                                                             if (buffer[idx].Length == lastByteIndex || lastByteIndex==-1)\r
                                                                 hash = hasher.Digest(buffer[idx]);\r
                                                             else\r
@@ -316,6 +316,7 @@ namespace Pithos.Network
                                                                 Buffer.BlockCopy(buffer[idx],0,buf,0,lastByteIndex+1);\r
                                                                 hash = hasher.Digest(buf);\r
                                                             }\r
+*/\r
 \r
                                                             \r
                                                             \r