#include <string>
#include "crypter.h"
-#include "scrypt.h"
#ifdef WIN32
#include <windows.h>
(unsigned char *)&strKeyData[0], strKeyData.size(), nRounds, chKey, chIV);
}
- if (nDerivationMethod == 1)
- {
- // Passphrase conversion
- uint256 scryptHash = scrypt_salted_multiround_hash((const void*)strKeyData.c_str(), strKeyData.size(), &chSalt[0], 8, nRounds);
-
- i = EVP_BytesToKey(EVP_aes_256_cbc(), EVP_sha512(), &chSalt[0],
- (unsigned char *)&scryptHash, sizeof scryptHash, nRounds, chKey, chIV);
- OPENSSL_cleanse(&scryptHash, sizeof scryptHash);
- }
-
-
if (i != (int)WALLET_CRYPTO_KEY_SIZE)
{
OPENSSL_cleanse(&chKey, sizeof chKey);
return result;
}
-uint256 scrypt(const void* data, size_t datalen, const void* salt, size_t saltlen, void *scratchpad)
-{
- unsigned int *V;
- unsigned int X[32];
- uint256 result = 0;
- V = (unsigned int *)(((uintptr_t)(scratchpad) + 63) & ~ (uintptr_t)(63));
-
- PBKDF2_SHA256((const uint8_t*)data, datalen, (const uint8_t*)salt, saltlen, 1, (uint8_t *)X, 128);
- scrypt_core(X, V);
- PBKDF2_SHA256((const uint8_t*)data, datalen, (uint8_t *)X, 128, 1, (uint8_t*)&result, 32);
-
- return result;
-}
-
-uint256 scrypt_hash(const void* input, size_t inputlen)
-{
- unsigned char scratchpad[SCRYPT_BUFFER_SIZE];
- return scrypt_nosalt(input, inputlen, scratchpad);
-}
-
-uint256 scrypt_salted_hash(const void* input, size_t inputlen, const void* salt, size_t saltlen)
-{
- unsigned char scratchpad[SCRYPT_BUFFER_SIZE];
- return scrypt(input, inputlen, salt, saltlen, scratchpad);
-}
-
-uint256 scrypt_salted_multiround_hash(const void* input, size_t inputlen, const void* salt, size_t saltlen, const unsigned int nRounds)
-{
- uint256 resultHash = scrypt_salted_hash(input, inputlen, salt, saltlen);
- uint256 transitionalHash = resultHash;
-
- for(unsigned int i = 1; i < nRounds; i++)
- {
- resultHash = scrypt_salted_hash(input, inputlen, (const void*)&transitionalHash, 32);
- transitionalHash = resultHash;
- }
-
- return resultHash;
-}
-
uint256 scrypt_blockhash(const void* input)
{
unsigned char scratchpad[SCRYPT_BUFFER_SIZE];
return scrypt_nosalt(input, 80, scratchpad);
}
-
#include "util.h"
#include "net.h"
-uint256 scrypt_salted_multiround_hash(const void* input, size_t inputlen, const void* salt, size_t saltlen, const unsigned int nRounds);
-uint256 scrypt_salted_hash(const void* input, size_t inputlen, const void* salt, size_t saltlen);
-uint256 scrypt_hash(const void* input, size_t inputlen);
uint256 scrypt_blockhash(const void* input);
#endif // SCRYPT_MINE_H