This commit is contained in:
Jay D Dee
2023-10-06 22:18:09 -04:00
parent bc5a5c6df8
commit 31c4dedf59
144 changed files with 5931 additions and 3746 deletions

View File

@@ -8,10 +8,10 @@
void keccakhash_8way(void *state, const void *input)
{
keccak256_8way_context ctx;
keccak256_8way_init( &ctx );
keccak256_8way_update( &ctx, input, 80 );
keccak256_8way_close( &ctx, state );
keccak256_8x64_context ctx;
keccak256_8x64_init( &ctx );
keccak256_8x64_update( &ctx, input, 80 );
keccak256_8x64_close( &ctx, state );
}
int scanhash_keccak_8way( struct work *work, uint32_t max_nonce,
@@ -61,10 +61,10 @@ int scanhash_keccak_8way( struct work *work, uint32_t max_nonce,
void keccakhash_4way(void *state, const void *input)
{
keccak256_4way_context ctx;
keccak256_4way_init( &ctx );
keccak256_4way_update( &ctx, input, 80 );
keccak256_4way_close( &ctx, state );
keccak256_4x64_context ctx;
keccak256_4x64_init( &ctx );
keccak256_4x64_update( &ctx, input, 80 );
keccak256_4x64_close( &ctx, state );
}
int scanhash_keccak_4way( struct work *work, uint32_t max_nonce,

View File

@@ -207,30 +207,30 @@ void keccak256_8way_init( void *kc )
}
void
keccak256_8way_update(void *cc, const void *data, size_t len)
keccak256_8x64_update(void *cc, const void *data, size_t len)
{
keccak64_8way_core(cc, data, len, 136);
}
void
keccak256_8way_close(void *cc, void *dst)
keccak256_8x64_close(void *cc, void *dst)
{
keccak64_8way_close(cc, dst, 32, 136);
}
void keccak512_8way_init( void *kc )
void keccak512_8x64_init( void *kc )
{
keccak64_8way_init( kc, 512 );
}
void
keccak512_8way_update(void *cc, const void *data, size_t len)
keccak512_8x64_update(void *cc, const void *data, size_t len)
{
keccak64_8way_core(cc, data, len, 72);
}
void
keccak512_8way_close(void *cc, void *dst)
keccak512_8x64_close(void *cc, void *dst)
{
keccak64_8way_close(cc, dst, 64, 72);
}
@@ -395,24 +395,24 @@ void keccak256_4way_init( void *kc )
}
void
keccak256_4way_update(void *cc, const void *data, size_t len)
keccak256_4x64_update(void *cc, const void *data, size_t len)
{
keccak64_core(cc, data, len, 136);
}
void
keccak256_4way_close(void *cc, void *dst)
keccak256_4x64_close(void *cc, void *dst)
{
keccak64_close(cc, dst, 32, 136);
}
void keccak512_4way_init( void *kc )
void keccak512_4x64_init( void *kc )
{
keccak64_init( kc, 512 );
}
void
keccak512_4way_update(void *cc, const void *data, size_t len)
keccak512_4x64_update(void *cc, const void *data, size_t len)
{
keccak64_core(cc, data, len, 72);
}

View File

@@ -1,64 +1,94 @@
#ifndef KECCAK_HASH_4WAY_H__
#define KECCAK_HASH_4WAY_H__
#ifdef __AVX2__
#include <stddef.h>
#include "simd-utils.h"
/**
* This structure is a context for Keccak computations: it contains the
* intermediate values and some data from the last entered block. Once a
* Keccak computation has been performed, the context can be reused for
* another computation.
*
* The contents of this structure are private. A running Keccak computation
* can be cloned by copying the context (e.g. with a simple
* <code>memcpy()</code>).
*/
#if defined(__AVX512F__) && defined(__AVX512VL__) && defined(__AVX512DQ__) && defined(__AVX512BW__)
typedef struct {
__m512i buf[144*8];
__m512i w[25];
size_t ptr, lim;
typedef struct
{
__m512i buf[144*8];
__m512i w[25];
size_t ptr, lim;
} keccak64_ctx_m512i __attribute__((aligned(128)));
typedef keccak64_ctx_m512i keccak256_8way_context;
typedef keccak64_ctx_m512i keccak512_8way_context;
typedef keccak64_ctx_m512i keccak256_8x64_context;
typedef keccak64_ctx_m512i keccak512_8x64_context;
void keccak256_8way_init(void *cc);
void keccak256_8way_update(void *cc, const void *data, size_t len);
void keccak256_8way_close(void *cc, void *dst);
void keccak256_8x64_init(void *cc);
void keccak256_8x64_update(void *cc, const void *data, size_t len);
void keccak256_8x64_close(void *cc, void *dst);
void keccak512_8way_init(void *cc);
void keccak512_8way_update(void *cc, const void *data, size_t len);
void keccak512_8way_close(void *cc, void *dst);
void keccak512_8way_addbits_and_close(
void *cc, unsigned ub, unsigned n, void *dst);
void keccak512_8x64_init(void *cc);
void keccak512_8x64_update(void *cc, const void *data, size_t len);
void keccak512_8x64_close(void *cc, void *dst);
// legacy naming
#define keccak512_8way_context keccak512_8x64_context
#define keccak512_8way_init keccak512_8x64_init
#define keccak512_8way_update keccak512_8x64_update
#define keccak512_8way_close keccak512_8x64_close
#define keccak256_8way_context keccak256_8x64_context
#define keccak256_8way_init keccak256_8x64_init
#define keccak256_8way_update keccak256_8x64_update
#define keccak256_8way_close keccak256_8x64_close
#endif
typedef struct {
__m256i buf[144*8];
__m256i w[25];
size_t ptr, lim;
#if defined(__AVX2__)
typedef struct
{
__m256i buf[144*8];
__m256i w[25];
size_t ptr, lim;
} keccak64_ctx_m256i __attribute__((aligned(128)));
typedef keccak64_ctx_m256i keccak256_4way_context;
typedef keccak64_ctx_m256i keccak512_4way_context;
typedef keccak64_ctx_m256i keccak256_4x64_context;
typedef keccak64_ctx_m256i keccak512_4x64_context;
void keccak256_4way_init(void *cc);
void keccak256_4way_update(void *cc, const void *data, size_t len);
void keccak256_4way_close(void *cc, void *dst);
void keccak256_4x64_init(void *cc);
void keccak256_4x64_update(void *cc, const void *data, size_t len);
void keccak256_4x64_close(void *cc, void *dst);
void keccak512_4way_init(void *cc);
void keccak512_4way_update(void *cc, const void *data, size_t len);
void keccak512_4way_close(void *cc, void *dst);
void keccak512_4way_addbits_and_close(
void *cc, unsigned ub, unsigned n, void *dst);
void keccak512_4x64_init(void *cc);
void keccak512_4x64_update(void *cc, const void *data, size_t len);
void keccak512_4x64_close(void *cc, void *dst);
// legacy naming
#define keccak512_4way_context keccak512_4x64_context
#define keccak512_4way_init keccak512_4x64_init
#define keccak512_4way_update keccak512_4x64_update
#define keccak512_4way_close keccak512_4x64_close
#define keccak256_4way_context keccak256_4x64_context
#define keccak256_4way_init keccak256_4x64_init
#define keccak256_4way_update keccak256_4x64_update
#define keccak256_4way_close keccak256_4x64_close
#endif
#if defined(__SSE2__) || defined(__ARM_NEON)
typedef struct
{
v128_t buf[144*4];
v128_t w[50];
size_t ptr, lim;
} keccak32_ctx_v128 __attribute__((aligned(64)));
typedef keccak32_ctx_v128 keccak256_4x32_context;
typedef keccak32_ctx_v128 keccak512_4x32_context;
void keccak256_4x32_init(void *cc);
void keccak256_4x32_update(void *cc, const void *data, size_t len);
void keccak256_4x32_close(void *cc, void *dst);
void keccak512_4x32_init(void *cc);
void keccak512_4x32_update(void *cc, const void *data, size_t len);
void keccak512_4x32_close(void *cc, void *dst);
#endif
#endif

View File

@@ -11,13 +11,13 @@ void sha3d_hash_8way(void *state, const void *input)
uint32_t buffer[16*8] __attribute__ ((aligned (128)));
keccak256_8way_context ctx;
keccak256_8way_init( &ctx );
keccak256_8way_update( &ctx, input, 80 );
keccak256_8way_close( &ctx, buffer );
keccak256_8x64_init( &ctx );
keccak256_8x64_update( &ctx, input, 80 );
keccak256_8x64_close( &ctx, buffer );
keccak256_8way_init( &ctx );
keccak256_8way_update( &ctx, buffer, 32 );
keccak256_8way_close( &ctx, state );
keccak256_8x64_init( &ctx );
keccak256_8x64_update( &ctx, buffer, 32 );
keccak256_8x64_close( &ctx, state );
}
int scanhash_sha3d_8way( struct work *work, uint32_t max_nonce,
@@ -71,13 +71,13 @@ void sha3d_hash_4way(void *state, const void *input)
uint32_t buffer[16*4] __attribute__ ((aligned (64)));
keccak256_4way_context ctx;
keccak256_4way_init( &ctx );
keccak256_4way_update( &ctx, input, 80 );
keccak256_4way_close( &ctx, buffer );
keccak256_4x64_init( &ctx );
keccak256_4x64_update( &ctx, input, 80 );
keccak256_4x64_close( &ctx, buffer );
keccak256_4way_init( &ctx );
keccak256_4way_update( &ctx, buffer, 32 );
keccak256_4way_close( &ctx, state );
keccak256_4x64_init( &ctx );
keccak256_4x64_update( &ctx, buffer, 32 );
keccak256_4x64_close( &ctx, state );
}
int scanhash_sha3d_4way( struct work *work, uint32_t max_nonce,