1
0
mirror of https://github.com/taigrr/arc synced 2025-01-18 04:33:13 -08:00
2016-05-24 21:26:50 +09:00

444 lines
13 KiB
Go

package argon2
func block(z, t, a, b *[128]uint64) {
// t = a ^ b
// t = P(t)
// z = z ^ t
t[0] = a[0] ^ b[0]
t[1] = a[1] ^ b[1]
t[2] = a[2] ^ b[2]
t[3] = a[3] ^ b[3]
t[4] = a[4] ^ b[4]
t[5] = a[5] ^ b[5]
t[6] = a[6] ^ b[6]
t[7] = a[7] ^ b[7]
t[8] = a[8] ^ b[8]
t[9] = a[9] ^ b[9]
t[10] = a[10] ^ b[10]
t[11] = a[11] ^ b[11]
t[12] = a[12] ^ b[12]
t[13] = a[13] ^ b[13]
t[14] = a[14] ^ b[14]
t[15] = a[15] ^ b[15]
t[16] = a[16] ^ b[16]
t[17] = a[17] ^ b[17]
t[18] = a[18] ^ b[18]
t[19] = a[19] ^ b[19]
t[20] = a[20] ^ b[20]
t[21] = a[21] ^ b[21]
t[22] = a[22] ^ b[22]
t[23] = a[23] ^ b[23]
t[24] = a[24] ^ b[24]
t[25] = a[25] ^ b[25]
t[26] = a[26] ^ b[26]
t[27] = a[27] ^ b[27]
t[28] = a[28] ^ b[28]
t[29] = a[29] ^ b[29]
t[30] = a[30] ^ b[30]
t[31] = a[31] ^ b[31]
t[32] = a[32] ^ b[32]
t[33] = a[33] ^ b[33]
t[34] = a[34] ^ b[34]
t[35] = a[35] ^ b[35]
t[36] = a[36] ^ b[36]
t[37] = a[37] ^ b[37]
t[38] = a[38] ^ b[38]
t[39] = a[39] ^ b[39]
t[40] = a[40] ^ b[40]
t[41] = a[41] ^ b[41]
t[42] = a[42] ^ b[42]
t[43] = a[43] ^ b[43]
t[44] = a[44] ^ b[44]
t[45] = a[45] ^ b[45]
t[46] = a[46] ^ b[46]
t[47] = a[47] ^ b[47]
t[48] = a[48] ^ b[48]
t[49] = a[49] ^ b[49]
t[50] = a[50] ^ b[50]
t[51] = a[51] ^ b[51]
t[52] = a[52] ^ b[52]
t[53] = a[53] ^ b[53]
t[54] = a[54] ^ b[54]
t[55] = a[55] ^ b[55]
t[56] = a[56] ^ b[56]
t[57] = a[57] ^ b[57]
t[58] = a[58] ^ b[58]
t[59] = a[59] ^ b[59]
t[60] = a[60] ^ b[60]
t[61] = a[61] ^ b[61]
t[62] = a[62] ^ b[62]
t[63] = a[63] ^ b[63]
t[64] = a[64] ^ b[64]
t[65] = a[65] ^ b[65]
t[66] = a[66] ^ b[66]
t[67] = a[67] ^ b[67]
t[68] = a[68] ^ b[68]
t[69] = a[69] ^ b[69]
t[70] = a[70] ^ b[70]
t[71] = a[71] ^ b[71]
t[72] = a[72] ^ b[72]
t[73] = a[73] ^ b[73]
t[74] = a[74] ^ b[74]
t[75] = a[75] ^ b[75]
t[76] = a[76] ^ b[76]
t[77] = a[77] ^ b[77]
t[78] = a[78] ^ b[78]
t[79] = a[79] ^ b[79]
t[80] = a[80] ^ b[80]
t[81] = a[81] ^ b[81]
t[82] = a[82] ^ b[82]
t[83] = a[83] ^ b[83]
t[84] = a[84] ^ b[84]
t[85] = a[85] ^ b[85]
t[86] = a[86] ^ b[86]
t[87] = a[87] ^ b[87]
t[88] = a[88] ^ b[88]
t[89] = a[89] ^ b[89]
t[90] = a[90] ^ b[90]
t[91] = a[91] ^ b[91]
t[92] = a[92] ^ b[92]
t[93] = a[93] ^ b[93]
t[94] = a[94] ^ b[94]
t[95] = a[95] ^ b[95]
t[96] = a[96] ^ b[96]
t[97] = a[97] ^ b[97]
t[98] = a[98] ^ b[98]
t[99] = a[99] ^ b[99]
t[100] = a[100] ^ b[100]
t[101] = a[101] ^ b[101]
t[102] = a[102] ^ b[102]
t[103] = a[103] ^ b[103]
t[104] = a[104] ^ b[104]
t[105] = a[105] ^ b[105]
t[106] = a[106] ^ b[106]
t[107] = a[107] ^ b[107]
t[108] = a[108] ^ b[108]
t[109] = a[109] ^ b[109]
t[110] = a[110] ^ b[110]
t[111] = a[111] ^ b[111]
t[112] = a[112] ^ b[112]
t[113] = a[113] ^ b[113]
t[114] = a[114] ^ b[114]
t[115] = a[115] ^ b[115]
t[116] = a[116] ^ b[116]
t[117] = a[117] ^ b[117]
t[118] = a[118] ^ b[118]
t[119] = a[119] ^ b[119]
t[120] = a[120] ^ b[120]
t[121] = a[121] ^ b[121]
t[122] = a[122] ^ b[122]
t[123] = a[123] ^ b[123]
t[124] = a[124] ^ b[124]
t[125] = a[125] ^ b[125]
t[126] = a[126] ^ b[126]
t[127] = a[127] ^ b[127]
_P(&t[0], &t[1], &t[2], &t[3], &t[4], &t[5], &t[6], &t[7], &t[8], &t[9], &t[10], &t[11], &t[12], &t[13], &t[14], &t[15])
_P(&t[16], &t[17], &t[18], &t[19], &t[20], &t[21], &t[22], &t[23], &t[24], &t[25], &t[26], &t[27], &t[28], &t[29], &t[30], &t[31])
_P(&t[32], &t[33], &t[34], &t[35], &t[36], &t[37], &t[38], &t[39], &t[40], &t[41], &t[42], &t[43], &t[44], &t[45], &t[46], &t[47])
_P(&t[48], &t[49], &t[50], &t[51], &t[52], &t[53], &t[54], &t[55], &t[56], &t[57], &t[58], &t[59], &t[60], &t[61], &t[62], &t[63])
_P(&t[64], &t[65], &t[66], &t[67], &t[68], &t[69], &t[70], &t[71], &t[72], &t[73], &t[74], &t[75], &t[76], &t[77], &t[78], &t[79])
_P(&t[80], &t[81], &t[82], &t[83], &t[84], &t[85], &t[86], &t[87], &t[88], &t[89], &t[90], &t[91], &t[92], &t[93], &t[94], &t[95])
_P(&t[96], &t[97], &t[98], &t[99], &t[100], &t[101], &t[102], &t[103], &t[104], &t[105], &t[106], &t[107], &t[108], &t[109], &t[110], &t[111])
_P(&t[112], &t[113], &t[114], &t[115], &t[116], &t[117], &t[118], &t[119], &t[120], &t[121], &t[122], &t[123], &t[124], &t[125], &t[126], &t[127])
_P(&t[0], &t[1], &t[16], &t[17], &t[32], &t[33], &t[48], &t[49], &t[64], &t[65], &t[80], &t[81], &t[96], &t[97], &t[112], &t[113])
_P(&t[2], &t[3], &t[18], &t[19], &t[34], &t[35], &t[50], &t[51], &t[66], &t[67], &t[82], &t[83], &t[98], &t[99], &t[114], &t[115])
_P(&t[4], &t[5], &t[20], &t[21], &t[36], &t[37], &t[52], &t[53], &t[68], &t[69], &t[84], &t[85], &t[100], &t[101], &t[116], &t[117])
_P(&t[6], &t[7], &t[22], &t[23], &t[38], &t[39], &t[54], &t[55], &t[70], &t[71], &t[86], &t[87], &t[102], &t[103], &t[118], &t[119])
_P(&t[8], &t[9], &t[24], &t[25], &t[40], &t[41], &t[56], &t[57], &t[72], &t[73], &t[88], &t[89], &t[104], &t[105], &t[120], &t[121])
_P(&t[10], &t[11], &t[26], &t[27], &t[42], &t[43], &t[58], &t[59], &t[74], &t[75], &t[90], &t[91], &t[106], &t[107], &t[122], &t[123])
_P(&t[12], &t[13], &t[28], &t[29], &t[44], &t[45], &t[60], &t[61], &t[76], &t[77], &t[92], &t[93], &t[108], &t[109], &t[124], &t[125])
_P(&t[14], &t[15], &t[30], &t[31], &t[46], &t[47], &t[62], &t[63], &t[78], &t[79], &t[94], &t[95], &t[110], &t[111], &t[126], &t[127])
z[0] ^= a[0] ^ b[0] ^ t[0]
z[1] ^= a[1] ^ b[1] ^ t[1]
z[2] ^= a[2] ^ b[2] ^ t[2]
z[3] ^= a[3] ^ b[3] ^ t[3]
z[4] ^= a[4] ^ b[4] ^ t[4]
z[5] ^= a[5] ^ b[5] ^ t[5]
z[6] ^= a[6] ^ b[6] ^ t[6]
z[7] ^= a[7] ^ b[7] ^ t[7]
z[8] ^= a[8] ^ b[8] ^ t[8]
z[9] ^= a[9] ^ b[9] ^ t[9]
z[10] ^= a[10] ^ b[10] ^ t[10]
z[11] ^= a[11] ^ b[11] ^ t[11]
z[12] ^= a[12] ^ b[12] ^ t[12]
z[13] ^= a[13] ^ b[13] ^ t[13]
z[14] ^= a[14] ^ b[14] ^ t[14]
z[15] ^= a[15] ^ b[15] ^ t[15]
z[16] ^= a[16] ^ b[16] ^ t[16]
z[17] ^= a[17] ^ b[17] ^ t[17]
z[18] ^= a[18] ^ b[18] ^ t[18]
z[19] ^= a[19] ^ b[19] ^ t[19]
z[20] ^= a[20] ^ b[20] ^ t[20]
z[21] ^= a[21] ^ b[21] ^ t[21]
z[22] ^= a[22] ^ b[22] ^ t[22]
z[23] ^= a[23] ^ b[23] ^ t[23]
z[24] ^= a[24] ^ b[24] ^ t[24]
z[25] ^= a[25] ^ b[25] ^ t[25]
z[26] ^= a[26] ^ b[26] ^ t[26]
z[27] ^= a[27] ^ b[27] ^ t[27]
z[28] ^= a[28] ^ b[28] ^ t[28]
z[29] ^= a[29] ^ b[29] ^ t[29]
z[30] ^= a[30] ^ b[30] ^ t[30]
z[31] ^= a[31] ^ b[31] ^ t[31]
z[32] ^= a[32] ^ b[32] ^ t[32]
z[33] ^= a[33] ^ b[33] ^ t[33]
z[34] ^= a[34] ^ b[34] ^ t[34]
z[35] ^= a[35] ^ b[35] ^ t[35]
z[36] ^= a[36] ^ b[36] ^ t[36]
z[37] ^= a[37] ^ b[37] ^ t[37]
z[38] ^= a[38] ^ b[38] ^ t[38]
z[39] ^= a[39] ^ b[39] ^ t[39]
z[40] ^= a[40] ^ b[40] ^ t[40]
z[41] ^= a[41] ^ b[41] ^ t[41]
z[42] ^= a[42] ^ b[42] ^ t[42]
z[43] ^= a[43] ^ b[43] ^ t[43]
z[44] ^= a[44] ^ b[44] ^ t[44]
z[45] ^= a[45] ^ b[45] ^ t[45]
z[46] ^= a[46] ^ b[46] ^ t[46]
z[47] ^= a[47] ^ b[47] ^ t[47]
z[48] ^= a[48] ^ b[48] ^ t[48]
z[49] ^= a[49] ^ b[49] ^ t[49]
z[50] ^= a[50] ^ b[50] ^ t[50]
z[51] ^= a[51] ^ b[51] ^ t[51]
z[52] ^= a[52] ^ b[52] ^ t[52]
z[53] ^= a[53] ^ b[53] ^ t[53]
z[54] ^= a[54] ^ b[54] ^ t[54]
z[55] ^= a[55] ^ b[55] ^ t[55]
z[56] ^= a[56] ^ b[56] ^ t[56]
z[57] ^= a[57] ^ b[57] ^ t[57]
z[58] ^= a[58] ^ b[58] ^ t[58]
z[59] ^= a[59] ^ b[59] ^ t[59]
z[60] ^= a[60] ^ b[60] ^ t[60]
z[61] ^= a[61] ^ b[61] ^ t[61]
z[62] ^= a[62] ^ b[62] ^ t[62]
z[63] ^= a[63] ^ b[63] ^ t[63]
z[64] ^= a[64] ^ b[64] ^ t[64]
z[65] ^= a[65] ^ b[65] ^ t[65]
z[66] ^= a[66] ^ b[66] ^ t[66]
z[67] ^= a[67] ^ b[67] ^ t[67]
z[68] ^= a[68] ^ b[68] ^ t[68]
z[69] ^= a[69] ^ b[69] ^ t[69]
z[70] ^= a[70] ^ b[70] ^ t[70]
z[71] ^= a[71] ^ b[71] ^ t[71]
z[72] ^= a[72] ^ b[72] ^ t[72]
z[73] ^= a[73] ^ b[73] ^ t[73]
z[74] ^= a[74] ^ b[74] ^ t[74]
z[75] ^= a[75] ^ b[75] ^ t[75]
z[76] ^= a[76] ^ b[76] ^ t[76]
z[77] ^= a[77] ^ b[77] ^ t[77]
z[78] ^= a[78] ^ b[78] ^ t[78]
z[79] ^= a[79] ^ b[79] ^ t[79]
z[80] ^= a[80] ^ b[80] ^ t[80]
z[81] ^= a[81] ^ b[81] ^ t[81]
z[82] ^= a[82] ^ b[82] ^ t[82]
z[83] ^= a[83] ^ b[83] ^ t[83]
z[84] ^= a[84] ^ b[84] ^ t[84]
z[85] ^= a[85] ^ b[85] ^ t[85]
z[86] ^= a[86] ^ b[86] ^ t[86]
z[87] ^= a[87] ^ b[87] ^ t[87]
z[88] ^= a[88] ^ b[88] ^ t[88]
z[89] ^= a[89] ^ b[89] ^ t[89]
z[90] ^= a[90] ^ b[90] ^ t[90]
z[91] ^= a[91] ^ b[91] ^ t[91]
z[92] ^= a[92] ^ b[92] ^ t[92]
z[93] ^= a[93] ^ b[93] ^ t[93]
z[94] ^= a[94] ^ b[94] ^ t[94]
z[95] ^= a[95] ^ b[95] ^ t[95]
z[96] ^= a[96] ^ b[96] ^ t[96]
z[97] ^= a[97] ^ b[97] ^ t[97]
z[98] ^= a[98] ^ b[98] ^ t[98]
z[99] ^= a[99] ^ b[99] ^ t[99]
z[100] ^= a[100] ^ b[100] ^ t[100]
z[101] ^= a[101] ^ b[101] ^ t[101]
z[102] ^= a[102] ^ b[102] ^ t[102]
z[103] ^= a[103] ^ b[103] ^ t[103]
z[104] ^= a[104] ^ b[104] ^ t[104]
z[105] ^= a[105] ^ b[105] ^ t[105]
z[106] ^= a[106] ^ b[106] ^ t[106]
z[107] ^= a[107] ^ b[107] ^ t[107]
z[108] ^= a[108] ^ b[108] ^ t[108]
z[109] ^= a[109] ^ b[109] ^ t[109]
z[110] ^= a[110] ^ b[110] ^ t[110]
z[111] ^= a[111] ^ b[111] ^ t[111]
z[112] ^= a[112] ^ b[112] ^ t[112]
z[113] ^= a[113] ^ b[113] ^ t[113]
z[114] ^= a[114] ^ b[114] ^ t[114]
z[115] ^= a[115] ^ b[115] ^ t[115]
z[116] ^= a[116] ^ b[116] ^ t[116]
z[117] ^= a[117] ^ b[117] ^ t[117]
z[118] ^= a[118] ^ b[118] ^ t[118]
z[119] ^= a[119] ^ b[119] ^ t[119]
z[120] ^= a[120] ^ b[120] ^ t[120]
z[121] ^= a[121] ^ b[121] ^ t[121]
z[122] ^= a[122] ^ b[122] ^ t[122]
z[123] ^= a[123] ^ b[123] ^ t[123]
z[124] ^= a[124] ^ b[124] ^ t[124]
z[125] ^= a[125] ^ b[125] ^ t[125]
z[126] ^= a[126] ^ b[126] ^ t[126]
z[127] ^= a[127] ^ b[127] ^ t[127]
}
func _P(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15 *uint64) {
var v0 = *p0
var v1 = *p1
var v2 = *p2
var v3 = *p3
var v4 = *p4
var v5 = *p5
var v6 = *p6
var v7 = *p7
var v8 = *p8
var v9 = *p9
var v10 = *p10
var v11 = *p11
var v12 = *p12
var v13 = *p13
var v14 = *p14
var v15 = *p15
var t uint64
t = uint64(uint32(v0)) * uint64(uint32(v4))
v0 = v0 + v4 + t*2
v12 = v12 ^ v0
v12 = v12>>32 | v12<<32
t = uint64(uint32(v8)) * uint64(uint32(v12))
v8 = v8 + v12 + t*2
v4 = v4 ^ v8
v4 = v4>>24 | v4<<40
t = uint64(uint32(v0)) * uint64(uint32(v4))
v0 = v0 + v4 + t*2
v12 = v12 ^ v0
v12 = v12>>16 | v12<<48
t = uint64(uint32(v8)) * uint64(uint32(v12))
v8 = v8 + v12 + t*2
v4 = v4 ^ v8
v4 = v4>>63 | v4<<1
t = uint64(uint32(v1)) * uint64(uint32(v5))
v1 = v1 + v5 + t*2
v13 = v13 ^ v1
v13 = v13>>32 | v13<<32
t = uint64(uint32(v9)) * uint64(uint32(v13))
v9 = v9 + v13 + t*2
v5 = v5 ^ v9
v5 = v5>>24 | v5<<40
t = uint64(uint32(v1)) * uint64(uint32(v5))
v1 = v1 + v5 + t*2
v13 = v13 ^ v1
v13 = v13>>16 | v13<<48
t = uint64(uint32(v9)) * uint64(uint32(v13))
v9 = v9 + v13 + t*2
v5 = v5 ^ v9
v5 = v5>>63 | v5<<1
t = uint64(uint32(v2)) * uint64(uint32(v6))
v2 = v2 + v6 + t*2
v14 = v14 ^ v2
v14 = v14>>32 | v14<<32
t = uint64(uint32(v10)) * uint64(uint32(v14))
v10 = v10 + v14 + t*2
v6 = v6 ^ v10
v6 = v6>>24 | v6<<40
t = uint64(uint32(v2)) * uint64(uint32(v6))
v2 = v2 + v6 + t*2
v14 = v14 ^ v2
v14 = v14>>16 | v14<<48
t = uint64(uint32(v10)) * uint64(uint32(v14))
v10 = v10 + v14 + t*2
v6 = v6 ^ v10
v6 = v6>>63 | v6<<1
t = uint64(uint32(v3)) * uint64(uint32(v7))
v3 = v3 + v7 + t*2
v15 = v15 ^ v3
v15 = v15>>32 | v15<<32
t = uint64(uint32(v11)) * uint64(uint32(v15))
v11 = v11 + v15 + t*2
v7 = v7 ^ v11
v7 = v7>>24 | v7<<40
t = uint64(uint32(v3)) * uint64(uint32(v7))
v3 = v3 + v7 + t*2
v15 = v15 ^ v3
v15 = v15>>16 | v15<<48
t = uint64(uint32(v11)) * uint64(uint32(v15))
v11 = v11 + v15 + t*2
v7 = v7 ^ v11
v7 = v7>>63 | v7<<1
t = uint64(uint32(v0)) * uint64(uint32(v5))
v0 = v0 + v5 + t*2
v15 = v15 ^ v0
v15 = v15>>32 | v15<<32
t = uint64(uint32(v10)) * uint64(uint32(v15))
v10 = v10 + v15 + t*2
v5 = v5 ^ v10
v5 = v5>>24 | v5<<40
t = uint64(uint32(v0)) * uint64(uint32(v5))
v0 = v0 + v5 + t*2
v15 = v15 ^ v0
v15 = v15>>16 | v15<<48
t = uint64(uint32(v10)) * uint64(uint32(v15))
v10 = v10 + v15 + t*2
v5 = v5 ^ v10
v5 = v5>>63 | v5<<1
t = uint64(uint32(v1)) * uint64(uint32(v6))
v1 = v1 + v6 + t*2
v12 = v12 ^ v1
v12 = v12>>32 | v12<<32
t = uint64(uint32(v11)) * uint64(uint32(v12))
v11 = v11 + v12 + t*2
v6 = v6 ^ v11
v6 = v6>>24 | v6<<40
t = uint64(uint32(v1)) * uint64(uint32(v6))
v1 = v1 + v6 + t*2
v12 = v12 ^ v1
v12 = v12>>16 | v12<<48
t = uint64(uint32(v11)) * uint64(uint32(v12))
v11 = v11 + v12 + t*2
v6 = v6 ^ v11
v6 = v6>>63 | v6<<1
t = uint64(uint32(v2)) * uint64(uint32(v7))
v2 = v2 + v7 + t*2
v13 = v13 ^ v2
v13 = v13>>32 | v13<<32
t = uint64(uint32(v8)) * uint64(uint32(v13))
v8 = v8 + v13 + t*2
v7 = v7 ^ v8
v7 = v7>>24 | v7<<40
t = uint64(uint32(v2)) * uint64(uint32(v7))
v2 = v2 + v7 + t*2
v13 = v13 ^ v2
v13 = v13>>16 | v13<<48
t = uint64(uint32(v8)) * uint64(uint32(v13))
v8 = v8 + v13 + t*2
v7 = v7 ^ v8
v7 = v7>>63 | v7<<1
t = uint64(uint32(v3)) * uint64(uint32(v4))
v3 = v3 + v4 + t*2
v14 = v14 ^ v3
v14 = v14>>32 | v14<<32
t = uint64(uint32(v9)) * uint64(uint32(v14))
v9 = v9 + v14 + t*2
v4 = v4 ^ v9
v4 = v4>>24 | v4<<40
t = uint64(uint32(v3)) * uint64(uint32(v4))
v3 = v3 + v4 + t*2
v14 = v14 ^ v3
v14 = v14>>16 | v14<<48
t = uint64(uint32(v9)) * uint64(uint32(v14))
v9 = v9 + v14 + t*2
v4 = v4 ^ v9
v4 = v4>>63 | v4<<1
*p0 = v0
*p1 = v1
*p2 = v2
*p3 = v3
*p4 = v4
*p5 = v5
*p6 = v6
*p7 = v7
*p8 = v8
*p9 = v9
*p10 = v10
*p11 = v11
*p12 = v12
*p13 = v13
*p14 = v14
*p15 = v15
}