mirror of
https://github.com/JayDDee/cpuminer-opt.git
synced 2025-09-17 23:44:27 +00:00
94 lines
2.5 KiB
C
94 lines
2.5 KiB
C
#include "keccak-gate.h"
|
|
#include "sph_keccak.h"
|
|
#include "algo/sha/sha256d.h"
|
|
|
|
int hard_coded_eb = 1;
|
|
|
|
// KECCAK
|
|
|
|
bool register_keccak_algo( algo_gate_t* gate )
|
|
{
|
|
gate->optimizations = AVX2_OPT | AVX512_OPT;
|
|
gate->gen_merkle_root = (void*)&sha256_gen_merkle_root;
|
|
opt_target_factor = 128.0;
|
|
#if defined (KECCAK_8WAY)
|
|
gate->scanhash = (void*)&scanhash_keccak_8way;
|
|
gate->hash = (void*)&keccakhash_8way;
|
|
#elif defined (KECCAK_4WAY)
|
|
gate->scanhash = (void*)&scanhash_keccak_4way;
|
|
gate->hash = (void*)&keccakhash_4way;
|
|
#else
|
|
gate->scanhash = (void*)&scanhash_keccak;
|
|
gate->hash = (void*)&keccakhash;
|
|
#endif
|
|
return true;
|
|
};
|
|
|
|
// KECCAKC
|
|
|
|
bool register_keccakc_algo( algo_gate_t* gate )
|
|
{
|
|
gate->optimizations = AVX2_OPT | AVX512_OPT;
|
|
gate->gen_merkle_root = (void*)&sha256d_gen_merkle_root;
|
|
opt_target_factor = 256.0;
|
|
#if defined (KECCAK_8WAY)
|
|
gate->scanhash = (void*)&scanhash_keccak_8way;
|
|
gate->hash = (void*)&keccakhash_8way;
|
|
#elif defined (KECCAK_4WAY)
|
|
gate->scanhash = (void*)&scanhash_keccak_4way;
|
|
gate->hash = (void*)&keccakhash_4way;
|
|
#else
|
|
gate->scanhash = (void*)&scanhash_keccak;
|
|
gate->hash = (void*)&keccakhash;
|
|
#endif
|
|
return true;
|
|
};
|
|
|
|
// SHA3D
|
|
|
|
void sha3d( void *state, const void *input, int len )
|
|
{
|
|
uint32_t _ALIGN(64) buffer[16], hash[16];
|
|
sph_keccak_context ctx_keccak;
|
|
|
|
sph_keccak256_init( &ctx_keccak );
|
|
sph_keccak256 ( &ctx_keccak, input, len );
|
|
sph_keccak256_close( &ctx_keccak, (void*) buffer );
|
|
|
|
sph_keccak256_init( &ctx_keccak );
|
|
sph_keccak256 ( &ctx_keccak, buffer, 32 );
|
|
sph_keccak256_close( &ctx_keccak, (void*) hash );
|
|
|
|
memcpy(state, hash, 32);
|
|
}
|
|
|
|
void sha3d_gen_merkle_root( char* merkle_root, struct stratum_ctx* sctx )
|
|
{
|
|
sha3d( merkle_root, sctx->job.coinbase, (int) sctx->job.coinbase_size );
|
|
for ( int i = 0; i < sctx->job.merkle_count; i++ )
|
|
{
|
|
memcpy( merkle_root + 32, sctx->job.merkle[i], 32 );
|
|
sha256d( merkle_root, merkle_root, 64 );
|
|
}
|
|
}
|
|
|
|
bool register_sha3d_algo( algo_gate_t* gate )
|
|
{
|
|
hard_coded_eb = 6;
|
|
// opt_extranonce = false;
|
|
gate->optimizations = AVX2_OPT | AVX512_OPT;
|
|
gate->gen_merkle_root = (void*)&sha3d_gen_merkle_root;
|
|
#if defined (KECCAK_8WAY)
|
|
gate->scanhash = (void*)&scanhash_sha3d_8way;
|
|
gate->hash = (void*)&sha3d_hash_8way;
|
|
#elif defined (KECCAK_4WAY)
|
|
gate->scanhash = (void*)&scanhash_sha3d_4way;
|
|
gate->hash = (void*)&sha3d_hash_4way;
|
|
#else
|
|
gate->scanhash = (void*)&scanhash_sha3d;
|
|
gate->hash = (void*)&sha3d_hash;
|
|
#endif
|
|
return true;
|
|
};
|
|
|