Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
tpruvot
GitHub Repository: tpruvot/cpuminer-multi
Path: blob/linux/scryptjane/scrypt-jane-mix_salsa.h
1201 views
1
#if !defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_SALSA_INCLUDED)
2
3
#undef SCRYPT_MIX
4
#define SCRYPT_MIX "Salsa20/8 Ref"
5
6
#undef SCRYPT_SALSA_INCLUDED
7
#define SCRYPT_SALSA_INCLUDED
8
#define SCRYPT_SALSA_BASIC
9
10
static void
11
salsa_core_basic(uint32_t state[16]) {
12
size_t rounds = 8;
13
uint32_t x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,t;
14
15
x0 = state[0];
16
x1 = state[1];
17
x2 = state[2];
18
x3 = state[3];
19
x4 = state[4];
20
x5 = state[5];
21
x6 = state[6];
22
x7 = state[7];
23
x8 = state[8];
24
x9 = state[9];
25
x10 = state[10];
26
x11 = state[11];
27
x12 = state[12];
28
x13 = state[13];
29
x14 = state[14];
30
x15 = state[15];
31
32
#define quarter(a,b,c,d) \
33
t = a+d; t = ROTL32(t, 7); b ^= t; \
34
t = b+a; t = ROTL32(t, 9); c ^= t; \
35
t = c+b; t = ROTL32(t, 13); d ^= t; \
36
t = d+c; t = ROTL32(t, 18); a ^= t; \
37
38
for (; rounds; rounds -= 2) {
39
quarter( x0, x4, x8,x12)
40
quarter( x5, x9,x13, x1)
41
quarter(x10,x14, x2, x6)
42
quarter(x15, x3, x7,x11)
43
quarter( x0, x1, x2, x3)
44
quarter( x5, x6, x7, x4)
45
quarter(x10,x11, x8, x9)
46
quarter(x15,x12,x13,x14)
47
}
48
49
state[0] += x0;
50
state[1] += x1;
51
state[2] += x2;
52
state[3] += x3;
53
state[4] += x4;
54
state[5] += x5;
55
state[6] += x6;
56
state[7] += x7;
57
state[8] += x8;
58
state[9] += x9;
59
state[10] += x10;
60
state[11] += x11;
61
state[12] += x12;
62
state[13] += x13;
63
state[14] += x14;
64
state[15] += x15;
65
66
#undef quarter
67
}
68
69
#endif
70
71
72