mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-27 06:25:51 +00:00
Start cleanup into ripple_data, split out some hash_value() instances Tidy up CBigNum into ripple_data, moving definitions to .cpp Split and clean up base58 stuff Remove unused files from VS2012 project Clean up some bignum stuff and remove unused files Partial cleanup of RFC1751 Enormous cleanup with RippleAddress and related, into ripple_data Remove unused VS project files Move ECIES stuff into CKey
90 lines
3.2 KiB
C++
90 lines
3.2 KiB
C++
#ifndef RIPPLE_HASHUTILITIES_H
|
|
#define RIPPLE_HASHUTILITIES_H
|
|
|
|
// VFALCO: NOTE, these came from BitcoinUtil.h
|
|
|
|
// VFALCO: TODO, Rewrite the callers so we don't need templates,
|
|
// then define these in a .cpp so they are no longer inline.
|
|
//
|
|
template<typename T1>
|
|
inline uint256 SHA256Hash(const T1 pbegin, const T1 pend)
|
|
{
|
|
static unsigned char pblank[1];
|
|
uint256 hash1;
|
|
SHA256((pbegin == pend ? pblank : (unsigned char*)&pbegin[0]), (pend - pbegin) * sizeof(pbegin[0]), (unsigned char*)&hash1);
|
|
uint256 hash2;
|
|
SHA256((unsigned char*)&hash1, sizeof(hash1), (unsigned char*)&hash2);
|
|
return hash2;
|
|
}
|
|
|
|
template<typename T1, typename T2>
|
|
inline uint256 SHA256Hash(const T1 p1begin, const T1 p1end,
|
|
const T2 p2begin, const T2 p2end)
|
|
{
|
|
static unsigned char pblank[1];
|
|
uint256 hash1;
|
|
SHA256_CTX ctx;
|
|
SHA256_Init(&ctx);
|
|
SHA256_Update(&ctx, (p1begin == p1end ? pblank : (unsigned char*)&p1begin[0]), (p1end - p1begin) * sizeof(p1begin[0]));
|
|
SHA256_Update(&ctx, (p2begin == p2end ? pblank : (unsigned char*)&p2begin[0]), (p2end - p2begin) * sizeof(p2begin[0]));
|
|
SHA256_Final((unsigned char*)&hash1, &ctx);
|
|
uint256 hash2;
|
|
SHA256((unsigned char*)&hash1, sizeof(hash1), (unsigned char*)&hash2);
|
|
return hash2;
|
|
}
|
|
|
|
template<typename T1, typename T2, typename T3>
|
|
inline uint256 SHA256Hash(const T1 p1begin, const T1 p1end,
|
|
const T2 p2begin, const T2 p2end,
|
|
const T3 p3begin, const T3 p3end)
|
|
{
|
|
static unsigned char pblank[1];
|
|
uint256 hash1;
|
|
SHA256_CTX ctx;
|
|
SHA256_Init(&ctx);
|
|
SHA256_Update(&ctx, (p1begin == p1end ? pblank : (unsigned char*)&p1begin[0]), (p1end - p1begin) * sizeof(p1begin[0]));
|
|
SHA256_Update(&ctx, (p2begin == p2end ? pblank : (unsigned char*)&p2begin[0]), (p2end - p2begin) * sizeof(p2begin[0]));
|
|
SHA256_Update(&ctx, (p3begin == p3end ? pblank : (unsigned char*)&p3begin[0]), (p3end - p3begin) * sizeof(p3begin[0]));
|
|
SHA256_Final((unsigned char*)&hash1, &ctx);
|
|
uint256 hash2;
|
|
SHA256((unsigned char*)&hash1, sizeof(hash1), (unsigned char*)&hash2);
|
|
return hash2;
|
|
}
|
|
|
|
inline uint160 Hash160(const std::vector<unsigned char>& vch)
|
|
{
|
|
uint256 hash1;
|
|
SHA256(&vch[0], vch.size(), (unsigned char*)&hash1);
|
|
uint160 hash2;
|
|
RIPEMD160((unsigned char*)&hash1, sizeof(hash1), (unsigned char*)&hash2);
|
|
return hash2;
|
|
}
|
|
|
|
/*
|
|
#ifdef WIN32
|
|
// This is used to attempt to keep keying material out of swap
|
|
// Note that VirtualLock does not provide this as a guarantee on Windows,
|
|
// but, in practice, memory that has been VirtualLock'd almost never gets written to
|
|
// the pagefile except in rare circumstances where memory is extremely low.
|
|
#include <windows.h>
|
|
#define mlock(p, n) VirtualLock((p), (n));
|
|
#define munlock(p, n) VirtualUnlock((p), (n));
|
|
#else
|
|
#include <sys/mman.h>
|
|
#include <limits.h>
|
|
// This comes from limits.h if it's not defined there set a sane default
|
|
#ifndef PAGESIZE
|
|
#include <unistd.h>
|
|
#define PAGESIZE sysconf(_SC_PAGESIZE)
|
|
#endif
|
|
#define mlock(a,b) \
|
|
mlock(((void *)(((size_t)(a)) & (~((PAGESIZE)-1)))),\
|
|
(((((size_t)(a)) + (b) - 1) | ((PAGESIZE) - 1)) + 1) - (((size_t)(a)) & (~((PAGESIZE) - 1))))
|
|
#define munlock(a,b) \
|
|
munlock(((void *)(((size_t)(a)) & (~((PAGESIZE)-1)))),\
|
|
(((((size_t)(a)) + (b) - 1) | ((PAGESIZE) - 1)) + 1) - (((size_t)(a)) & (~((PAGESIZE) - 1))))
|
|
#endif
|
|
*/
|
|
|
|
#endif
|