ObjFW  Check-in [33b1eb8387]

Overview
Comment:scrypt: Add swaps for big endian systems
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: 33b1eb838708d722a5168d4783119e4ef318c53817c6bcb92d6fe43b0de9ba1c
User & Date: js on 2016-10-08 15:57:43
Other Links: manifest | tags
Context
2016-10-08
15:57
Never override CoreFoundations's forward handler check-in: c70fd7d7f3 user: js tags: trunk
15:57
scrypt: Add swaps for big endian systems check-in: 33b1eb8387 user: js tags: trunk
15:57
Initialize with nil to make old Apple GCC happy check-in: 7b81264b58 user: js tags: trunk
Changes

Modified src/scrypt.m from [76cf8287ce] to [434e17ebe7].

28
29
30
31
32
33
34
35

36
37
38
39
40
41
42
28
29
30
31
32
33
34

35
36
37
38
39
40
41
42







-
+








void
of_salsa20_8_core(uint32_t buffer[16])
{
	uint32_t tmp[16];

	for (uint_fast8_t i = 0; i < 16; i++)
		tmp[i] = buffer[i];
		tmp[i] = OF_BSWAP32_IF_BE(buffer[i]);

	for (uint_fast8_t i = 0; i < 8; i+= 2) {
		tmp[ 4] ^= OF_ROL(tmp[ 0] + tmp[12],  7);
		tmp[ 8] ^= OF_ROL(tmp[ 4] + tmp[ 0],  9);
		tmp[12] ^= OF_ROL(tmp[ 8] + tmp[ 4], 13);
		tmp[ 0] ^= OF_ROL(tmp[12] + tmp[ 8], 18);
		tmp[ 9] ^= OF_ROL(tmp[ 5] + tmp[ 1],  7);
66
67
68
69
70
71
72

73

74
75
76
77
78
79
80
66
67
68
69
70
71
72
73

74
75
76
77
78
79
80
81







+
-
+







		tmp[12] ^= OF_ROL(tmp[15] + tmp[14],  7);
		tmp[13] ^= OF_ROL(tmp[12] + tmp[15],  9);
		tmp[14] ^= OF_ROL(tmp[13] + tmp[12], 13);
		tmp[15] ^= OF_ROL(tmp[14] + tmp[13], 18);
	}

	for (uint_fast8_t i = 0; i < 16; i++)
		buffer[i] = OF_BSWAP32_IF_BE(OF_BSWAP32_IF_BE(buffer[i]) +
		buffer[i] += tmp[i];
		    tmp[i]);

	of_explicit_memset(tmp, 0, sizeof(tmp));
}

void
of_scrypt_block_mix(uint32_t *output, const uint32_t *input, size_t blockSize)
{
119
120
121
122
123
124
125
126


127
128
129
130
131
132
133
120
121
122
123
124
125
126

127
128
129
130
131
132
133
134
135







-
+
+








	for (size_t i = 0; i < costFactor; i++) {
		memcpy(tmp2 + i * 32 * blockSize, tmp, 128 * blockSize);
		of_scrypt_block_mix(tmp, tmp2 + i * 32 * blockSize, blockSize);
	}

	for (size_t i = 0; i < costFactor; i++) {
		uint32_t j = tmp[(2 * blockSize - 1) * 16] & (costFactor - 1);
		uint32_t j = OF_BSWAP32_IF_BE(tmp[(2 * blockSize - 1) * 16]) &
		    (costFactor - 1);

		for (size_t k = 0; k < 32 * blockSize; k++)
			tmp[k] ^= tmp2[j * 32 * blockSize + k];

		of_scrypt_block_mix(buffer, tmp, blockSize);

		if (i < costFactor - 1)