X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Fscrypt-generic.cpp;h=aa078927b01cc1eee19f953edf2128092b3f9a33;hb=7965b6fb5f7f3c5e21112f32dfe819fa0438d48a;hp=fa7b5e0188141226a43bbbffca77090191f7029c;hpb=305e3aec8eea31ae167567c2a5a58de57e3187af;p=novacoin.git diff --git a/src/scrypt-generic.cpp b/src/scrypt-generic.cpp index fa7b5e0..aa07892 100644 --- a/src/scrypt-generic.cpp +++ b/src/scrypt-generic.cpp @@ -1,4 +1,4 @@ -/*- +/* * Copyright 2009 Colin Percival, 2011 ArtForz, 2011 pooler, 2013 Balthazar * All rights reserved. * @@ -27,9 +27,6 @@ * online backup system. */ -#include -#include - #include "scrypt.h" #ifdef _MSC_VER @@ -108,10 +105,21 @@ static INLINE void xor_salsa8(uint32_t B[16], const uint32_t Bx[16]) B[15] += x15; } -INLINE void scrypt_core(uint32_t *X, uint32_t *V) +/* cpu and memory intensive function to transform a 80 byte buffer into a 32 byte output + scratchpad size needs to be at least 63 + (128 * r * p) + (256 * r + 64) + (128 * r * N) bytes + r = 1, p = 1, N = 1024 + */ +uint256 scrypt_blockhash(const uint8_t* input) { - uint16_t i, j, k; + uint8_t scratchpad[SCRYPT_BUFFER_SIZE]; + uint32_t X[32]; + uint256 result = 0; + + uint32_t *V = (uint32_t *)(((uintptr_t)(scratchpad) + 63) & ~ (uintptr_t)(63)); + PKCS5_PBKDF2_HMAC((const char*)input, 80, input, 80, 1, EVP_sha256(), 128, (unsigned char *)X); + + uint16_t i, j, k; for (i = 0; i < 1024; i++) { memcpy(&V[i * 32], X, 128); xor_salsa8(&X[0], &X[16]); @@ -124,22 +132,7 @@ INLINE void scrypt_core(uint32_t *X, uint32_t *V) xor_salsa8(&X[0], &X[16]); xor_salsa8(&X[16], &X[0]); } -} - -/* cpu and memory intensive function to transform a 80 byte buffer into a 32 byte output - scratchpad size needs to be at least 63 + (128 * r * p) + (256 * r + 64) + (128 * r * N) bytes - r = 1, p = 1, N = 1024 - */ -uint256 scrypt_blockhash(const uint8_t* input) -{ - uint8_t scratchpad[SCRYPT_BUFFER_SIZE]; - uint32_t X[32]; - uint256 result = 0; - uint32_t *V = (uint32_t *)(((uintptr_t)(scratchpad) + 63) & ~ (uintptr_t)(63)); - - PKCS5_PBKDF2_HMAC((const char*)input, 80, input, 80, 1, EVP_sha256(), 128, (unsigned char *)X); - scrypt_core(X, V); PKCS5_PBKDF2_HMAC((const char*)input, 80, (const unsigned char*)X, 128, 1, EVP_sha256(), 32, (unsigned char*)&result); return result;