-/*-
+/*
* Copyright 2009 Colin Percival, 2011 ArtForz, 2011 pooler, 2013 Balthazar
* All rights reserved.
*
* online backup system.
*/
-#include <string.h>
-#include <openssl/evp.h>
-
#include "scrypt.h"
#ifdef _MSC_VER
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]);
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;