add exosis algo (timetravel type) (#326)

This commit is contained in:
opensourcerulez 2018-10-22 20:31:16 +03:00 committed by Tanguy Pruvot
parent 42a6e8529e
commit 5a54297999
7 changed files with 194 additions and 1 deletions

157
stratum/algos/exosis.c Normal file
View file

@ -0,0 +1,157 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define HASH_FUNC_BASE_TIMESTAMP 1538556426 // Exosis: Genesis Timestamp
#define HASH_FUNC_COUNT 8
#define HASH_FUNC_COUNT_PERMUTATIONS 40320
#include <sha3/sph_blake.h>
#include <sha3/sph_bmw.h>
#include <sha3/sph_groestl.h>
#include <sha3/sph_jh.h>
#include <sha3/sph_keccak.h>
#include <sha3/sph_skein.h>
#include <sha3/sph_luffa.h>
#include <sha3/sph_cubehash.h>
#define _ALIGN(x) __attribute__ ((aligned(x)))
// helpers
inline void swap(int *a, int *b) {
int c = *a;
*a = *b;
*b = c;
}
static void reverse(int *pbegin, int *pend) {
while ( (pbegin != pend) && (pbegin != --pend) )
swap(pbegin++, pend);
}
static void next_permutation(int *pbegin, int *pend) {
if (pbegin == pend)
return;
int *i = pbegin;
++i;
if (i == pend)
return;
i = pend;
--i;
while (1) {
int *j = i;
--i;
if (*i < *j) {
int *k = pend;
while (!(*i < *--k))
/* pass */;
swap(i, k);
reverse(j, pend);
return; // true
}
if (i == pbegin) {
reverse(pbegin, pend);
return; // false
}
}
}
// helpers
void exosis_hash(const char* input, char* output, uint32_t len)
{
uint32_t _ALIGN(64) hash[16 * HASH_FUNC_COUNT];
uint32_t *hashA, *hashB;
uint32_t dataLen = 64;
uint32_t *work_data = (uint32_t *)input;
const uint32_t timestamp = work_data[17];
sph_blake512_context ctx_blake;
sph_bmw512_context ctx_bmw;
sph_groestl512_context ctx_groestl;
sph_skein512_context ctx_skein;
sph_jh512_context ctx_jh;
sph_keccak512_context ctx_keccak;
sph_luffa512_context ctx_luffa;
sph_cubehash512_context ctx_cubehash;
// We want to permute algorithms. To get started we
// initialize an array with a sorted sequence of unique
// integers where every integer represents its own algorithm.
uint32_t permutation[HASH_FUNC_COUNT];
for (uint32_t i = 0; i < HASH_FUNC_COUNT; i++) {
permutation[i]=i;
}
// Compute the next permuation
uint32_t steps = (timestamp - HASH_FUNC_BASE_TIMESTAMP) % HASH_FUNC_COUNT_PERMUTATIONS;
for (uint32_t i = 0; i < steps; i++) {
next_permutation(permutation, permutation + HASH_FUNC_COUNT);
}
for (uint32_t i = 0; i < HASH_FUNC_COUNT; i++) {
if (i == 0) {
dataLen = len;
hashA = work_data;
} else {
dataLen = 64;
hashA = &hash[16 * (i - 1)];
}
hashB = &hash[16 * i];
switch(permutation[i]) {
case 0:
sph_blake512_init(&ctx_blake);
sph_blake512(&ctx_blake, hashA, dataLen);
sph_blake512_close(&ctx_blake, hashB);
break;
case 1:
sph_bmw512_init(&ctx_bmw);
sph_bmw512(&ctx_bmw, hashA, dataLen);
sph_bmw512_close(&ctx_bmw, hashB);
break;
case 2:
sph_groestl512_init(&ctx_groestl);
sph_groestl512(&ctx_groestl, hashA, dataLen);
sph_groestl512_close(&ctx_groestl, hashB);
break;
case 3:
sph_skein512_init(&ctx_skein);
sph_skein512(&ctx_skein, hashA, dataLen);
sph_skein512_close(&ctx_skein, hashB);
break;
case 4:
sph_jh512_init(&ctx_jh);
sph_jh512(&ctx_jh, hashA, dataLen);
sph_jh512_close(&ctx_jh, hashB);
break;
case 5:
sph_keccak512_init(&ctx_keccak);
sph_keccak512(&ctx_keccak, hashA, dataLen);
sph_keccak512_close(&ctx_keccak, hashB);
break;
case 6:
sph_luffa512_init(&ctx_luffa);
sph_luffa512(&ctx_luffa, hashA, dataLen);
sph_luffa512_close(&ctx_luffa, hashB);
break;
case 7:
sph_cubehash512_init(&ctx_cubehash);
sph_cubehash512(&ctx_cubehash, hashA, dataLen);
sph_cubehash512_close(&ctx_cubehash, hashB);
break;
default:
break;
}
}
memcpy(output, &hash[16 * (HASH_FUNC_COUNT - 1)], 32);
}

16
stratum/algos/exosis.h Normal file
View file

@ -0,0 +1,16 @@
#ifndef EXOSIS_H
#define EXOSIS_H
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
void exosis_hash(const char* input, char* output, uint32_t len);
#ifdef __cplusplus
}
#endif
#endif

View file

@ -11,7 +11,7 @@ LDFLAGS=-O2 -lgmp
SOURCES=lyra2re.c lyra2v2.c Lyra2.c lyra2z.c Lyra2-z.c Sponge.c allium.c \ SOURCES=lyra2re.c lyra2v2.c Lyra2.c lyra2z.c Lyra2-z.c Sponge.c allium.c \
c11.c x11.c x12.c x13.c hsr14.c sm3.c x14.c x15.c x17.c \ c11.c x11.c x12.c x13.c hsr14.c sm3.c x14.c x15.c x17.c \
x22i.c SWIFFTX/SWIFFTX.c \ x22i.c SWIFFTX/SWIFFTX.c \
blake.c blakecoin.c blake2s.c jha.c keccak.c lbry.c tribus.c \ blake.c blakecoin.c blake2s.c jha.c keccak.c lbry.c tribus.c exosis.c \
deep.c fresh.c groestl.c neoscrypt.c nist5.c quark.c qubit.c skein.c skein2.c \ deep.c fresh.c groestl.c neoscrypt.c nist5.c quark.c qubit.c skein.c skein2.c \
bitcore.c timetravel.c x11evo.c x16r.c x16s.c xevan.c bastion.c hmq17.c sonoa.c \ bitcore.c timetravel.c x11evo.c x16r.c x16s.c xevan.c bastion.c hmq17.c sonoa.c \
bmw.c luffa.c pentablake.c vitalium.c whirlpool.c whirlpoolx.c zr5.c \ bmw.c luffa.c pentablake.c vitalium.c whirlpool.c whirlpoolx.c zr5.c \

View file

@ -0,0 +1,15 @@
[TCP]
server = yaamp.com
port = 3557
password = tu8tu5
[SQL]
host = yaampdb
database = yaamp
username = root
password = patofpaq
[STRATUM]
algo = exosis
difficulty = 0.125
max_ttf = 50000

View file

@ -129,6 +129,7 @@ YAAMP_ALGO g_algos[] =
{"x16s", x16s_hash, 0x100, 0, 0}, {"x16s", x16s_hash, 0x100, 0, 0},
{"timetravel", timetravel_hash, 0x100, 0, 0}, {"timetravel", timetravel_hash, 0x100, 0, 0},
{"bitcore", timetravel10_hash, 0x100, 0, 0}, {"bitcore", timetravel10_hash, 0x100, 0, 0},
{"exosis", exosis_hash, 0x100, 0, 0},
{"hsr", hsr_hash, 1, 0, 0}, {"hsr", hsr_hash, 1, 0, 0},
{"hmq1725", hmq17_hash, 0x10000, 0, 0}, {"hmq1725", hmq17_hash, 0x10000, 0, 0},

View file

@ -209,3 +209,4 @@ void sha256_double_hash_hex(const char *input, char *output, unsigned int len);
#include "algos/aergo.h" #include "algos/aergo.h"
#include "algos/hex.h" #include "algos/hex.h"
#include "algos/argon2d-dyn.h" #include "algos/argon2d-dyn.h"
#include "algos/exosis.h"

View file

@ -19,6 +19,7 @@ function yaamp_get_algos()
'blake2s', 'blake2s',
'decred', 'decred',
'deep', 'deep',
'exosis',
'hmq1725', 'hmq1725',
'keccak', 'keccak',
'keccakc', 'keccakc',
@ -165,6 +166,7 @@ function getAlgoColors($algo)
'bastion' => '#e0b0b0', 'bastion' => '#e0b0b0',
'blake' => '#f0f0f0', 'blake' => '#f0f0f0',
'blakecoin' => '#f0f0f0', 'blakecoin' => '#f0f0f0',
'exosis' => '#49CCFE',
'groestl' => '#d0a0a0', 'groestl' => '#d0a0a0',
'jha' => '#a0d0c0', 'jha' => '#a0d0c0',
'dmd-gr' => '#a0c0f0', 'dmd-gr' => '#a0c0f0',
@ -225,6 +227,7 @@ function getAlgoPort($algo)
'scrypt' => 3433, 'scrypt' => 3433,
'timetravel' => 3555, 'timetravel' => 3555,
'bitcore' => 3556, 'bitcore' => 3556,
'exosis' => 3557,
'c11' => 3573, 'c11' => 3573,
'deep' => 3535, 'deep' => 3535,
'x11' => 3533, 'x11' => 3533,