using System.Collections.Generic;
using System.Linq;
-using System.Security.Cryptography;
-
namespace Novacoin
{
/// <summary>
uint[] V = new uint[(131072 + 63) / sizeof(uint)];
byte[] dataBytes = inputBytes.ToArray();
- byte[] keyBytes1 = PBKDF2Sha256GetBytes(128, dataBytes, dataBytes, 1);
+ byte[] keyBytes1 = CryptoUtils.PBKDF2_Sha256(128, dataBytes, dataBytes, 1);
uint[] X = Interop.ToUInt32Array(keyBytes1);
uint i, j, k;
}
byte[] xBytes = Interop.LEBytes(X);
- byte[] keyBytes2 = PBKDF2Sha256GetBytes(32, dataBytes, xBytes, 1);
+ byte[] keyBytes2 = CryptoUtils.PBKDF2_Sha256(32, dataBytes, xBytes, 1);
return new ScryptHash256(keyBytes2);
}
- private static byte[] PBKDF2Sha256GetBytes(int dklen, byte[] password, byte[] salt, int iterationCount)
- {
- using (var hmac = new HMACSHA256(password))
- {
- int hashLength = hmac.HashSize / 8;
- if ((hmac.HashSize & 7) != 0)
- hashLength++;
- int keyLength = dklen / hashLength;
- if ((long)dklen > (0xFFFFFFFFL * hashLength) || dklen < 0)
- throw new ArgumentOutOfRangeException("dklen");
- if (dklen % hashLength != 0)
- keyLength++;
- byte[] extendedkey = new byte[salt.Length + 4];
- Buffer.BlockCopy(salt, 0, extendedkey, 0, salt.Length);
- using (var ms = new System.IO.MemoryStream())
- {
- for (int i = 0; i < keyLength; i++)
- {
- extendedkey[salt.Length] = (byte)(((i + 1) >> 24) & 0xFF);
- extendedkey[salt.Length + 1] = (byte)(((i + 1) >> 16) & 0xFF);
- extendedkey[salt.Length + 2] = (byte)(((i + 1) >> 8) & 0xFF);
- extendedkey[salt.Length + 3] = (byte)(((i + 1)) & 0xFF);
- byte[] u = hmac.ComputeHash(extendedkey);
- Array.Clear(extendedkey, salt.Length, 4);
- byte[] f = u;
- for (int j = 1; j < iterationCount; j++)
- {
- u = hmac.ComputeHash(u);
- for (int k = 0; k < f.Length; k++)
- {
- f[k] ^= u[k];
- }
- }
- ms.Write(f, 0, f.Length);
- Array.Clear(u, 0, u.Length);
- Array.Clear(f, 0, f.Length);
- }
- byte[] dk = new byte[dklen];
- ms.Position = 0;
- ms.Read(dk, 0, dklen);
- ms.Position = 0;
- for (long i = 0; i < ms.Length; i++)
- {
- ms.WriteByte(0);
- }
- Array.Clear(extendedkey, 0, extendedkey.Length);
- return dk;
- }
- }
- }
-
private static void xor_salsa8(ref uint[] B, int indexB, ref uint[] Bx, int indexBx)
{
uint x00, x01, x02, x03, x04, x05, x06, x07, x08, x09, x10, x11, x12, x13, x14, x15;