MCPcopy Create free account
hub / github.com/LUX-Core/lux / SMix

Function SMix

src/crypto/scrypt.cpp:309–360  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

307}
308
309void SMix(uint8_t *B, unsigned int r, unsigned int N, void* _V, void* XY)
310{
311 //new
312 uint32_t* X = (uint32_t*)XY;
313 uint32_t* Y = (uint32_t*)((uint8_t*)(XY) + 128 * r);
314 uint32_t* Z = (uint32_t*)((uint8_t *)(XY) + 256 * r);
315 uint32_t * V = (uint32_t*)_V;
316
317 uint32_t j, k;
318
319 /* 1: X <-- B */
320 for (k = 0; k < 32 * r; k++)
321 X[k] = le32dec_2(&B[4 * k]);
322
323 /* 2: for i = 0 to N - 1 do */
324 for (unsigned int i = 0; i < N; i += 2)
325 {
326 /* 3: V_i <-- X */
327 blkcpy(&V[i * (32 * r)], X, 128 * r);
328
329 /* 4: X <-- H(X) */
330 blockmix_salsa8(X, Y, Z, r);
331
332 /* 3: V_i <-- X */
333 blkcpy(&V[(i + 1) * (32 * r)], Y, 128 * r);
334
335 /* 4: X <-- H(X) */
336 blockmix_salsa8(Y, X, Z, r);
337 }
338
339 /* 6: for i = 0 to N - 1 do */
340 for (unsigned int i = 0; i < N; i += 2)
341 {
342 /* 7: j <-- Integerify(X) mod N */
343 j = integerify(X, r) & (N - 1);
344
345 /* 8: X <-- H(X \xor V_j) */
346 blkxor(X, &V[j * (32 * r)], 128 * r);
347 blockmix_salsa8(X, Y, Z, r);
348
349 /* 7: j <-- Integerify(X) mod N */
350 j = integerify(Y, r) & (N - 1);
351
352 /* 8: X <-- H(X \xor V_j) */
353 blkxor(Y, &V[j * (32 * r)], 128 * r);
354 blockmix_salsa8(Y, X, Z, r);
355 }
356
357 /* 10: B' <-- X */
358 for (k = 0; k < 32 * r; k++)
359 le32enc_2(&B[4 * k], X[k]);
360}
361
362void scrypt(const char* pass, unsigned int pLen, const char* salt, unsigned int sLen, char *output, unsigned int N, unsigned int r, unsigned int p, unsigned int dkLen)
363{

Callers 1

scryptFunction · 0.85

Calls 6

le32dec_2Function · 0.85
le32enc_2Function · 0.85
blkcpyFunction · 0.70
blockmix_salsa8Function · 0.70
integerifyFunction · 0.70
blkxorFunction · 0.70

Tested by

no test coverage detected