void lyra2re_hash(const char* input, char* output) { sph_blake256_context ctx_blake; sph_groestl256_context ctx_groestl; sph_keccak256_context ctx_keccak; sph_skein256_context ctx_skein; uint32_t hashA[8], hashB[8]; sph_blake256_init(&ctx_blake); sph_blake256 (&ctx_blake, input, 80); sph_blake256_close (&ctx_blake, hashA); sph_keccak256_init(&ctx_keccak); sph_keccak256 (&ctx_keccak,hashA, 32); sph_keccak256_close(&ctx_keccak, hashB); LYRA2((void*)hashA, 32, (const void*)hashB, 32, (const void*)hashB, 32, 1, 8, 8); sph_skein256_init(&ctx_skein); sph_skein256 (&ctx_skein, hashA, 32); sph_skein256_close(&ctx_skein, hashB); sph_groestl256_init(&ctx_groestl); sph_groestl256 (&ctx_groestl, hashB, 32); sph_groestl256_close(&ctx_groestl, hashA); memcpy(output, hashA, 32); }
void lyra2_hash(void *state, const void *input) { sph_blake256_context ctx_blake; sph_keccak256_context ctx_keccak; sph_skein256_context ctx_skein; sph_groestl256_context ctx_groestl; uint32_t hashA[8], hashB[8]; sph_blake256_init(&ctx_blake); sph_blake256(&ctx_blake, input, 80); sph_blake256_close(&ctx_blake, hashA); sph_keccak256_init(&ctx_keccak); sph_keccak256(&ctx_keccak, hashA, 32); sph_keccak256_close(&ctx_keccak, hashB); LYRA2(hashA, 32, hashB, 32, hashB, 32, 1, 8, 8); sph_skein256_init(&ctx_skein); sph_skein256(&ctx_skein, hashA, 32); sph_skein256_close(&ctx_skein, hashB); sph_groestl256_init(&ctx_groestl); sph_groestl256(&ctx_groestl, hashB, 32); sph_groestl256_close(&ctx_groestl, hashA); memcpy(state, hashA, 32); }
void lyra2re_hash(void *state, const void *input) { lyra2re_ctx_holder ctx; memcpy(&ctx, &lyra2re_ctx, sizeof(lyra2re_ctx)); // uint32_t _ALIGN(128) hashA[8], hashB[8]; uint32_t _ALIGN(128) hash[32]; #define hashA hash #define hashB hash+16 sph_blake256(&ctx.blake, input, 80); sph_blake256_close(&ctx.blake, hashA); sph_keccak256(&ctx.keccak, hashA, 32); sph_keccak256_close(&ctx.keccak, hashB); LYRA2(hashA, 32, hashB, 32, hashB, 32, 1, 8, 8); sph_skein256(&ctx.skein, hashA, 32); sph_skein256_close(&ctx.skein, hashB); #ifdef NO_AES_NI sph_groestl256( &ctx.groestl, hashB, 32 ); sph_groestl256_close( &ctx.groestl, hashA ); #else update_groestl256( &ctx.groestl, hashB, 256 ); final_groestl256( &ctx.groestl, hashA ); #endif memcpy(state, hashA, 32); }
inline void lyra2rehash(void *state, const void *input) { sph_blake256_context ctx_blake; sph_groestl256_context ctx_groestl; sph_keccak256_context ctx_keccak; sph_skein256_context ctx_skein; uint32_t hashA[8], hashB[8]; sph_blake256_init(&ctx_blake); sph_blake256 (&ctx_blake, input, 80); sph_blake256_close (&ctx_blake, hashA); sph_keccak256_init(&ctx_keccak); sph_keccak256 (&ctx_keccak,hashA, 32); sph_keccak256_close(&ctx_keccak, hashB); LYRA2(hashA, 32, hashB, 32, hashB, 32, 1, 8, 8); sph_skein256_init(&ctx_skein); sph_skein256 (&ctx_skein, hashA, 32); sph_skein256_close(&ctx_skein, hashB); sph_groestl256_init(&ctx_groestl); sph_groestl256 (&ctx_groestl, hashB, 32); sph_groestl256_close(&ctx_groestl, hashA); //printf("cpu hash %08x %08x %08x %08x\n",hashA[0],hashA[1],hashA[2],hashA[3]); memcpy(state, hashA, 32); }