Add RandomX hashing wrapper

This commit is contained in:
Capri 2026-09-13 17:02:13 +00:00
commit 1a927ccb44
Signed by: VextaProject
SSH key fingerprint: SHA256:739BZv8LvIDY2tR7lXLy/IQ6MaGTQtYcG9GNvCjmpVM
3 changed files with 61 additions and 0 deletions

View file

@ -550,6 +550,8 @@ libvexta_consensus_a_SOURCES = \
crypto/jh.cpp \
crypto/keccak.cpp \
crypto/luffa.cpp \
crypto/randomx_hash.cpp \
crypto/randomx_hash.h \
crypto/shavite.cpp \
crypto/simd.cpp \
crypto/hashodo.h \

View file

@ -0,0 +1,35 @@
#include <crypto/randomx_hash.h>
#include <randomx.h>
bool VextaRandomXHash(
const void* input,
std::size_t input_size,
const void* key,
std::size_t key_size,
uint8_t output[VEXTA_RANDOMX_HASH_SIZE])
{
randomx_cache* cache = randomx_alloc_cache(RANDOMX_FLAG_DEFAULT);
if (cache == nullptr) {
return false;
}
randomx_init_cache(cache, key, key_size);
randomx_vm* vm = randomx_create_vm(
RANDOMX_FLAG_DEFAULT,
cache,
nullptr);
if (vm == nullptr) {
randomx_release_cache(cache);
return false;
}
randomx_calculate_hash(vm, input, input_size, output);
randomx_destroy_vm(vm);
randomx_release_cache(cache);
return true;
}

24
src/crypto/randomx_hash.h Normal file
View file

@ -0,0 +1,24 @@
#ifndef VEXTA_CRYPTO_RANDOMX_HASH_H
#define VEXTA_CRYPTO_RANDOMX_HASH_H
#include <cstddef>
#include <cstdint>
static constexpr std::size_t VEXTA_RANDOMX_HASH_SIZE = 32;
/**
* Calculate a RandomX hash using an explicit key.
*
* This wrapper intentionally uses RANDOMX_FLAG_DEFAULT so consensus hashing
* does not depend on CPU-specific runtime feature detection.
*
* Returns false if RandomX cache or VM allocation fails.
*/
bool VextaRandomXHash(
const void* input,
std::size_t input_size,
const void* key,
std::size_t key_size,
uint8_t output[VEXTA_RANDOMX_HASH_SIZE]);
#endif // VEXTA_CRYPTO_RANDOMX_HASH_H