|
Monero
|
#include "randomx.h"#include "dataset.hpp"#include "vm_interpreted.hpp"#include "vm_interpreted_light.hpp"#include "vm_compiled.hpp"#include "vm_compiled_light.hpp"#include "blake2/blake2.h"#include "cpu.hpp"#include <cassert>#include <limits>#include <cfenv>
Variables | |
| constexpr unsigned long | DatasetItemCount = randomx::DatasetSize / RANDOMX_DATASET_ITEM_SIZE |
| randomx_cache * randomx_alloc_cache | ( | randomx_flags | flags | ) |
Creates a randomx_cache structure and allocates memory for RandomX Cache.
| flags | is any combination of these 2 flags (each flag can be set or not set): RANDOMX_FLAG_LARGE_PAGES - allocate memory in large pages RANDOMX_FLAG_JIT - create cache structure with JIT compilation support; this makes subsequent Dataset initialization faster Optionally, one of these two flags may be selected: RANDOMX_FLAG_ARGON2_SSSE3 - optimized Argon2 for CPUs with the SSSE3 instruction set makes subsequent cache initialization faster RANDOMX_FLAG_ARGON2_AVX2 - optimized Argon2 for CPUs with the AVX2 instruction set makes subsequent cache initialization faster |
| randomx_dataset * randomx_alloc_dataset | ( | randomx_flags | flags | ) |
Creates a randomx_dataset structure and allocates memory for RandomX Dataset.
| flags | is the initialization flags. Only one flag is supported (can be set or not set): RANDOMX_FLAG_LARGE_PAGES - allocate memory in large pages |
| void randomx_calculate_commitment | ( | const void * | input, |
| size_t | inputSize, | ||
| const void * | hash_in, | ||
| void * | com_out ) |
Calculate a RandomX commitment from a RandomX hash and its input.
| input | is a pointer to memory that was hashed. Must not be NULL. |
| inputSize | is the number of bytes in the input. |
| hash_in | is the output from randomx_calculate_hash* (RANDOMX_HASH_SIZE bytes). |
| com_out | is a pointer to memory where the commitment will be stored. Must not be NULL and at least RANDOMX_HASH_SIZE bytes must be available for writing. |
| void randomx_calculate_hash | ( | randomx_vm * | machine, |
| const void * | input, | ||
| size_t | inputSize, | ||
| void * | output ) |
Calculates a RandomX hash value.
| machine | is a pointer to a randomx_vm structure. Must not be NULL. |
| input | is a pointer to memory to be hashed. Must not be NULL. |
| inputSize | is the number of bytes to be hashed. |
| output | is a pointer to memory where the hash will be stored. Must not be NULL and at least RANDOMX_HASH_SIZE bytes must be available for writing. |
| void randomx_calculate_hash_first | ( | randomx_vm * | machine, |
| const void * | input, | ||
| size_t | inputSize ) |
Set of functions used to calculate multiple RandomX hashes more efficiently. randomx_calculate_hash_first will begin a hash calculation. randomx_calculate_hash_next will output the hash value of the previous input and begin the calculation of the next hash. randomx_calculate_hash_last will output the hash value of the previous input.
WARNING: These functions may alter the floating point rounding mode of the calling thread.
| machine | is a pointer to a randomx_vm structure. Must not be NULL. |
| input | is a pointer to memory to be hashed. Must not be NULL. |
| inputSize | is the number of bytes to be hashed. |
| nextInput | is a pointer to memory to be hashed for the next hash. Must not be NULL. |
| nextInputSize | is the number of bytes to be hashed for the next hash. |
| output | is a pointer to memory where the hash will be stored. Must not be NULL and at least RANDOMX_HASH_SIZE bytes must be available for writing. |
| void randomx_calculate_hash_last | ( | randomx_vm * | machine, |
| void * | output ) |
| void randomx_calculate_hash_next | ( | randomx_vm * | machine, |
| const void * | nextInput, | ||
| size_t | nextInputSize, | ||
| void * | output ) |
| randomx_vm * randomx_create_vm | ( | randomx_flags | flags, |
| randomx_cache * | cache, | ||
| randomx_dataset * | dataset ) |
Creates and initializes a RandomX virtual machine.
| flags | is any combination of these 5 flags (each flag can be set or not set): RANDOMX_FLAG_LARGE_PAGES - allocate scratchpad memory in large pages RANDOMX_FLAG_HARD_AES - virtual machine will use hardware accelerated AES RANDOMX_FLAG_FULL_MEM - virtual machine will use the full dataset RANDOMX_FLAG_JIT - virtual machine will use a JIT compiler RANDOMX_FLAG_SECURE - when combined with RANDOMX_FLAG_JIT, the JIT pages are never writable and executable at the same time (W^X policy) The numeric values of the first 4 flags are ordered so that a higher value will provide faster hash calculation and a lower numeric value will provide higher portability. Using RANDOMX_FLAG_DEFAULT (all flags not set) works on all platforms, but is the slowest. |
| cache | is a pointer to an initialized randomx_cache structure. Can be NULL if RANDOMX_FLAG_FULL_MEM is set. |
| dataset | is a pointer to a randomx_dataset structure. Can be NULL if RANDOMX_FLAG_FULL_MEM is not set. |
| unsigned long randomx_dataset_item_count | ( | void | ) |
Gets the number of items contained in the dataset.
| void randomx_destroy_vm | ( | randomx_vm * | machine | ) |
Releases all memory occupied by the randomx_vm structure.
| machine | is a pointer to a previously created randomx_vm structure. |
| void * randomx_get_dataset_memory | ( | randomx_dataset * | dataset | ) |
Returns a pointer to the internal memory buffer of the dataset structure. The size of the internal memory buffer is randomx_dataset_item_count() * RANDOMX_DATASET_ITEM_SIZE.
| dataset | is a pointer to a previously allocated randomx_dataset structure. Must not be NULL. |
| randomx_flags randomx_get_flags | ( | void | ) |
| void randomx_init_cache | ( | randomx_cache * | cache, |
| const void * | key, | ||
| size_t | keySize ) |
Initializes the cache memory and SuperscalarHash using the provided key value. Does nothing if called again with the same key value.
| cache | is a pointer to a previously allocated randomx_cache structure. Must not be NULL. |
| key | is a pointer to memory which contains the key value. Must not be NULL. |
| keySize | is the number of bytes of the key. |
| void randomx_init_dataset | ( | randomx_dataset * | dataset, |
| randomx_cache * | cache, | ||
| unsigned long | startItem, | ||
| unsigned long | itemCount ) |
Initializes dataset items.
Note: In order to use the Dataset, all items from 0 to (randomx_dataset_item_count() - 1) must be initialized. This may be done by several calls to this function using non-overlapping item sequences.
| dataset | is a pointer to a previously allocated randomx_dataset structure. Must not be NULL. |
| cache | is a pointer to a previously allocated and initialized randomx_cache structure. Must not be NULL. |
| startItem | is the item number where intialization should start. |
| itemCount | is the number of items that should be initialized. |
| void randomx_release_cache | ( | randomx_cache * | cache | ) |
Releases all memory occupied by the randomx_cache structure.
| cache | is a pointer to a previously allocated randomx_cache structure. |
| void randomx_release_dataset | ( | randomx_dataset * | dataset | ) |
Releases all memory occupied by the randomx_dataset structure.
| dataset | is a pointer to a previously allocated randomx_dataset structure. |
| void randomx_vm_set_cache | ( | randomx_vm * | machine, |
| randomx_cache * | cache ) |
Reinitializes a virtual machine with a new Cache. This function should be called anytime the Cache is reinitialized with a new key. Does nothing if called with a Cache containing the same key value as already set.
| machine | is a pointer to a randomx_vm structure that was initialized without RANDOMX_FLAG_FULL_MEM. Must not be NULL. |
| cache | is a pointer to an initialized randomx_cache structure. Must not be NULL. |
| void randomx_vm_set_dataset | ( | randomx_vm * | machine, |
| randomx_dataset * | dataset ) |
Reinitializes a virtual machine with a new Dataset.
| machine | is a pointer to a randomx_vm structure that was initialized with RANDOMX_FLAG_FULL_MEM. Must not be NULL. |
| dataset | is a pointer to an initialized randomx_dataset structure. Must not be NULL. |
|
constexpr |