Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
tpruvot
GitHub Repository: tpruvot/cpuminer-multi
Path: blob/linux/scryptjane/scrypt-jane-mix_salsa64.h
1201 views
1
#if !defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_SALSA64_INCLUDED)
2
3
#undef SCRYPT_MIX
4
#define SCRYPT_MIX "Salsa64/8 Ref"
5
6
#undef SCRYPT_SALSA64_INCLUDED
7
#define SCRYPT_SALSA64_INCLUDED
8
#define SCRYPT_SALSA64_BASIC
9
10
static void
11
salsa64_core_basic(uint64_t state[16]) {
12
const size_t rounds = 8;
13
uint64_t v[16], t;
14
size_t i;
15
16
for (i = 0; i < 16; i++) v[i] = state[i];
17
18
#define G(a,b,c,d) \
19
t = v[a]+v[d]; t = ROTL64(t, 32); v[b] ^= t; \
20
t = v[b]+v[a]; t = ROTL64(t, 13); v[c] ^= t; \
21
t = v[c]+v[b]; t = ROTL64(t, 39); v[d] ^= t; \
22
t = v[d]+v[c]; t = ROTL64(t, 32); v[a] ^= t; \
23
24
for (i = 0; i < rounds; i += 2) {
25
G( 0, 4, 8,12);
26
G( 5, 9,13, 1);
27
G(10,14, 2, 6);
28
G(15, 3, 7,11);
29
G( 0, 1, 2, 3);
30
G( 5, 6, 7, 4);
31
G(10,11, 8, 9);
32
G(15,12,13,14);
33
}
34
35
for (i = 0; i < 16; i++) state[i] += v[i];
36
37
#undef G
38
}
39
40
#endif
41
42
43