66 lines
1.9 KiB
C
66 lines
1.9 KiB
C
#ifndef SHA256_BACKEND_H
|
|
#define SHA256_BACKEND_H
|
|
|
|
#include <stdint.h>
|
|
|
|
/*
|
|
* Compact SHA256 state: only the 8 chaining words (32 bytes).
|
|
* Avoids copying the bloated OpenSSL SHA256_CTX (~112 bytes) in the hot loop.
|
|
*/
|
|
typedef struct {
|
|
uint32_t h[8];
|
|
} sha256_state_t;
|
|
|
|
typedef struct {
|
|
sha256_state_t init_state;
|
|
sha256_state_t first_chunk_state;
|
|
uint8_t block1_template[64];
|
|
uint8_t block2_template[64];
|
|
} sha256d80_midstate_t;
|
|
|
|
/* Set state to SHA256 initial values (IV). */
|
|
void sha256_state_init(sha256_state_t *state);
|
|
|
|
/* Serialize the 8 state words into a 32-byte big-endian digest. */
|
|
void sha256_state_to_digest(const sha256_state_t *state, uint8_t out[32]);
|
|
|
|
/* Single SHA256 block compression (64-byte block). */
|
|
void sha256_transform_fast(sha256_state_t *state, const uint8_t block[64]);
|
|
|
|
/*
|
|
* 2-way interleaved SHA256 block compression.
|
|
* Processes two independent (state, block) pairs so the CPU can overlap both
|
|
* instruction chains. On non-ARM builds falls back to two sequential calls.
|
|
*/
|
|
void sha256_transform_fast_2way(
|
|
sha256_state_t *stA, const uint8_t blkA[64],
|
|
sha256_state_t *stB, const uint8_t blkB[64]
|
|
);
|
|
|
|
/* Prepare SHA256d(80-byte header) midstate and constant blocks from header[0..75]. */
|
|
void sha256d80_midstate_init(sha256d80_midstate_t *mid, const uint8_t header_76[76]);
|
|
|
|
/*
|
|
* Hash 4 consecutive nonces with SHA256d(header80).
|
|
* start_nonce lane order: [n, n+1, n+2, n+3].
|
|
*/
|
|
void sha256d80_hash_4way(
|
|
const sha256d80_midstate_t *mid,
|
|
uint32_t start_nonce,
|
|
sha256_state_t out_states[4]
|
|
);
|
|
|
|
/*
|
|
* Hash 4 consecutive nonces and return hit mask against target words.
|
|
* target_words are big-endian words target[0..7].
|
|
* bit i set => lane i meets target.
|
|
*/
|
|
uint32_t sha256d80_scan_4way(
|
|
const sha256d80_midstate_t *mid,
|
|
uint32_t start_nonce,
|
|
const uint32_t target_words[8],
|
|
sha256_state_t out_states[4]
|
|
);
|
|
|
|
#endif
|