Skip to content

Commit 8c7ce8f

Browse files
Improve VIPStar hash implementation and update dependencies
- Fixed VIPStar hash function arguments for better type flexibility - Added SHA256 implementation to improve hash processing accuracy - Updated package.json and package-lock.json version to 1.1.0
1 parent 0a27867 commit 8c7ce8f

File tree

4 files changed

+105
-118
lines changed

4 files changed

+105
-118
lines changed

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/multihashing.cc

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -558,9 +558,7 @@ DECLARE_FUNC(vipstar)
558558
char *input = Buffer::Data(target);
559559
char output[32];
560560

561-
uint32_t input_len = Buffer::Length(target);
562-
563-
vipstar_hash(output, input, input_len);
561+
vipstar_hash((uint32_t*)output, (const uint32_t*)input);
564562

565563
SET_BUFFER_RETURN(output, 32);
566564
}

src/vipstar.c

Lines changed: 8 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
#include "vipstar.h"
77

8+
static inline void sha256d_181_swap(uint32_t *hash, const uint32_t *data);
9+
810
void vipstar_hash(uint32_t *output, const uint32_t *input) {
911
sha256d_181_swap(output, input);
1012
}
@@ -136,13 +138,13 @@ static inline void sha256d_181_swap(uint32_t *hash, const uint32_t *data)
136138
uint32_t S[16];
137139
int i;
138140

139-
sha256_init(S);
140-
sha256_transform(S, data);
141-
sha256_transform(S, data + 16);
142-
sha256_transform(S, data + 32);
141+
vipstar_sha256_init(S);
142+
vipstar_sha256_transform(S, data);
143+
vipstar_sha256_transform(S, data + 16);
144+
vipstar_sha256_transform(S, data + 32);
143145
memcpy(S + 8, sha256d_hash1 + 8, 32);
144-
sha256_init(hash);
145-
sha256_transform(hash, S);
146+
vipstar_sha256_init(hash);
147+
vipstar_sha256_transform(hash, S);
146148
}
147149

148150

@@ -315,104 +317,6 @@ static inline void sha256d_ms_vips(uint32_t *hash, uint32_t *W,
315317
RNDr(S2, W2, 54);
316318
RNDr(S2, W2, 55);
317319
RNDr(S2, W2, 56);
318-
RNDr(S2, W2, 57);
319-
RNDr(S2, W2, 58);
320-
RNDr(S2, W2, 59);
321-
RNDr(S2, W2, 60);
322-
RNDr(S2, W2, 61);
323-
RNDr(S2, W2, 62);
324-
RNDr(S2, W2, 63);
325-
326-
for (i = 0; i < 8; i++)
327-
S[i] += S2[i];
328-
329-
330-
memcpy(W + 18, S + 18, sizeof(uint32_t) * 14);
331-
332-
333-
//second
334-
memcpy(S + 8, sha256d_hash1 + 8, 32);
335-
S[16] = s0(S[ 1]) + S[ 0];
336-
S[17] = s1(0x00000100u) + s0(S[ 2]) + S[ 1];
337-
S[18] = s1(S[16]) + s0(S[ 3]) + S[ 2];
338-
S[19] = s1(S[17]) + s0(S[ 4]) + S[ 3];
339-
S[20] = s1(S[18]) + s0(S[ 5]) + S[ 4];
340-
S[21] = s1(S[19]) + s0(S[ 6]) + S[ 5];
341-
S[22] = s1(S[20]) + 0x00000100u + s0(S[ 7]) + S[ 6];
342-
S[23] = s1(S[21]) + S[16] + s0(0x80000000u) + S[ 7];
343-
S[24] = s1(S[22]) + S[17] + 0x80000000u;
344-
S[25] = s1(S[23]) + S[18];
345-
S[26] = s1(S[24]) + S[19];
346-
S[27] = s1(S[25]) + S[20];
347-
S[28] = s1(S[26]) + S[21];
348-
S[29] = s1(S[27]) + S[22];
349-
S[30] = s1(S[28]) + S[23] + s0(0x00000100u);
350-
S[31] = s1(S[29]) + S[24] + s0(S[16]) + 0x00000100u;
351-
for (i = 32; i < 60; i += 2) {
352-
S[i] = s1(S[i - 2]) + S[i - 7] + s0(S[i - 15]) + S[i - 16];
353-
S[i+1] = s1(S[i - 1]) + S[i - 6] + s0(S[i - 14]) + S[i - 15];
354-
}
355-
S[60] = s1(S[58]) + S[53] + s0(S[45]) + S[44];
356-
357-
sha256_init(hash);
358-
359-
RNDr(hash, S, 0);
360-
RNDr(hash, S, 1);
361-
RNDr(hash, S, 2);
362-
RNDr(hash, S, 3);
363-
RNDr(hash, S, 4);
364-
RNDr(hash, S, 5);
365-
RNDr(hash, S, 6);
366-
RNDr(hash, S, 7);
367-
RNDr(hash, S, 8);
368-
RNDr(hash, S, 9);
369-
RNDr(hash, S, 10);
370-
RNDr(hash, S, 11);
371-
RNDr(hash, S, 12);
372-
RNDr(hash, S, 13);
373-
RNDr(hash, S, 14);
374-
RNDr(hash, S, 15);
375-
RNDr(hash, S, 16);
376-
RNDr(hash, S, 17);
377-
RNDr(hash, S, 18);
378-
RNDr(hash, S, 19);
379-
RNDr(hash, S, 20);
380-
RNDr(hash, S, 21);
381-
RNDr(hash, S, 22);
382-
RNDr(hash, S, 23);
383-
RNDr(hash, S, 24);
384-
RNDr(hash, S, 25);
385-
RNDr(hash, S, 26);
386-
RNDr(hash, S, 27);
387-
RNDr(hash, S, 28);
388-
RNDr(hash, S, 29);
389-
RNDr(hash, S, 30);
390-
RNDr(hash, S, 31);
391-
RNDr(hash, S, 32);
392-
RNDr(hash, S, 33);
393-
RNDr(hash, S, 34);
394-
RNDr(hash, S, 35);
395-
RNDr(hash, S, 36);
396-
RNDr(hash, S, 37);
397-
RNDr(hash, S, 38);
398-
RNDr(hash, S, 39);
399-
RNDr(hash, S, 40);
400-
RNDr(hash, S, 41);
401-
RNDr(hash, S, 42);
402-
RNDr(hash, S, 43);
403-
RNDr(hash, S, 44);
404-
RNDr(hash, S, 45);
405-
RNDr(hash, S, 46);
406-
RNDr(hash, S, 47);
407-
RNDr(hash, S, 48);
408-
RNDr(hash, S, 49);
409-
RNDr(hash, S, 50);
410-
RNDr(hash, S, 51);
411-
RNDr(hash, S, 52);
412-
RNDr(hash, S, 53);
413-
RNDr(hash, S, 54);
414-
RNDr(hash, S, 55);
415-
RNDr(hash, S, 56);
416320

417321
hash[2] += hash[6] + S1(hash[3]) + Ch(hash[3], hash[4], hash[5]) + S[57] + sha256_k[57];
418322
hash[1] += hash[5] + S1(hash[2]) + Ch(hash[2], hash[3], hash[4]) + S[58] + sha256_k[58];

src/vipstar.h

Lines changed: 94 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -64,17 +64,102 @@ static const uint32_t sha256d_hash1[16] = {
6464
S[(70 - i) % 8], S[(71 - i) % 8], \
6565
W[i] + sha256_k[i])
6666

67-
// Add missing function declarations
68-
static inline void sha256_init(uint32_t *state);
69-
static inline void sha256_transform(uint32_t *state, const uint32_t *block);
70-
71-
static inline void sha256d_181_swap(uint32_t *hash, const uint32_t *data);
72-
static inline void sha256d_preextend(uint32_t *W);
73-
static inline void sha256d_preextend2(uint32_t *W);
74-
static inline void sha256d_prehash(uint32_t *S, const uint32_t *W);
75-
static inline void sha256d_ms_vips(uint32_t *hash, uint32_t *W, const uint32_t *midstate, const uint32_t *prehash);
7667
void vipstar_hash(uint32_t *output, const uint32_t *input);
7768

69+
// Add missing SHA256 implementation for VIPStar
70+
static inline void vipstar_sha256_init(uint32_t *state)
71+
{
72+
memcpy(state, sha256_h, 32);
73+
}
74+
75+
static inline void vipstar_sha256_transform(uint32_t *state, const uint32_t *block)
76+
{
77+
uint32_t W[64];
78+
uint32_t S[8];
79+
uint32_t t0, t1;
80+
int i;
81+
82+
/* 1. Prepare message schedule W. */
83+
memcpy(W, block, 64);
84+
for (i = 16; i < 64; i += 2) {
85+
W[i] = s1(W[i - 2]) + W[i - 7] + s0(W[i - 15]) + W[i - 16];
86+
W[i+1] = s1(W[i - 1]) + W[i - 6] + s0(W[i - 14]) + W[i - 15];
87+
}
88+
89+
/* 2. Initialize working variables. */
90+
memcpy(S, state, 32);
91+
92+
/* 3. Mix. */
93+
RNDr(S, W, 0);
94+
RNDr(S, W, 1);
95+
RNDr(S, W, 2);
96+
RNDr(S, W, 3);
97+
RNDr(S, W, 4);
98+
RNDr(S, W, 5);
99+
RNDr(S, W, 6);
100+
RNDr(S, W, 7);
101+
RNDr(S, W, 8);
102+
RNDr(S, W, 9);
103+
RNDr(S, W, 10);
104+
RNDr(S, W, 11);
105+
RNDr(S, W, 12);
106+
RNDr(S, W, 13);
107+
RNDr(S, W, 14);
108+
RNDr(S, W, 15);
109+
RNDr(S, W, 16);
110+
RNDr(S, W, 17);
111+
RNDr(S, W, 18);
112+
RNDr(S, W, 19);
113+
RNDr(S, W, 20);
114+
RNDr(S, W, 21);
115+
RNDr(S, W, 22);
116+
RNDr(S, W, 23);
117+
RNDr(S, W, 24);
118+
RNDr(S, W, 25);
119+
RNDr(S, W, 26);
120+
RNDr(S, W, 27);
121+
RNDr(S, W, 28);
122+
RNDr(S, W, 29);
123+
RNDr(S, W, 30);
124+
RNDr(S, W, 31);
125+
RNDr(S, W, 32);
126+
RNDr(S, W, 33);
127+
RNDr(S, W, 34);
128+
RNDr(S, W, 35);
129+
RNDr(S, W, 36);
130+
RNDr(S, W, 37);
131+
RNDr(S, W, 38);
132+
RNDr(S, W, 39);
133+
RNDr(S, W, 40);
134+
RNDr(S, W, 41);
135+
RNDr(S, W, 42);
136+
RNDr(S, W, 43);
137+
RNDr(S, W, 44);
138+
RNDr(S, W, 45);
139+
RNDr(S, W, 46);
140+
RNDr(S, W, 47);
141+
RNDr(S, W, 48);
142+
RNDr(S, W, 49);
143+
RNDr(S, W, 50);
144+
RNDr(S, W, 51);
145+
RNDr(S, W, 52);
146+
RNDr(S, W, 53);
147+
RNDr(S, W, 54);
148+
RNDr(S, W, 55);
149+
RNDr(S, W, 56);
150+
RNDr(S, W, 57);
151+
RNDr(S, W, 58);
152+
RNDr(S, W, 59);
153+
RNDr(S, W, 60);
154+
RNDr(S, W, 61);
155+
RNDr(S, W, 62);
156+
RNDr(S, W, 63);
157+
158+
/* 4. Mix local working variables into global state */
159+
for (i = 0; i < 8; i++)
160+
state[i] += S[i];
161+
}
162+
78163
#ifdef __cplusplus
79164
}
80165
#endif

0 commit comments

Comments
 (0)