UNPKG

2.39 kBJavaScriptView Raw
1var sigma = [
2 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
3 [14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3],
4 [11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4],
5 [7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8],
6 [9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13],
7 [2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9],
8 [12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11],
9 [13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10],
10 [6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5],
11 [10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0],
12 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
13 [14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3]
14]
15
16function G (r, i, a, b, c, d) {
17 return `
18 ;; G(${r}, ${i})
19
20 ;; ${a} = ${a} + ${b} + $m${sigma[r][2 * i + 0]}
21 (set_local ${a} (i64.add (get_local ${a}) (i64.add (get_local ${b}) (get_local $m${sigma[r][2 * i + 0]}))))
22
23 ;; ${d} = rotr64(${d} ^ ${a}, 32)
24 (set_local ${d} (i64.rotr (i64.xor (get_local ${d}) (get_local ${a})) (i64.const 32)))
25
26 ;; ${c} = ${c} + ${d}
27 (set_local ${c} (i64.add (get_local ${c}) (get_local ${d})))
28
29 ;; ${b} = rotr64(${b} ^ ${c}, 24)
30 (set_local ${b} (i64.rotr (i64.xor (get_local ${b}) (get_local ${c})) (i64.const 24)))
31
32 ;; ${a} = ${a} + ${b} + $m${sigma[r][2 * i + 1]}
33 (set_local ${a} (i64.add (get_local ${a}) (i64.add (get_local ${b}) (get_local $m${sigma[r][2 * i + 1]}))))
34
35 ;; ${d} = rotr64(${d} ^ ${a}, 16)
36 (set_local ${d} (i64.rotr (i64.xor (get_local ${d}) (get_local ${a})) (i64.const 16)))
37
38 ;; ${c} = ${c} + ${d}
39 (set_local ${c} (i64.add (get_local ${c}) (get_local ${d})))
40
41 ;; ${b} = rotr64(${b} ^ ${c}, 63)
42 (set_local ${b} (i64.rotr (i64.xor (get_local ${b}) (get_local ${c})) (i64.const 63)))`
43}
44
45function ROUND (r) {
46 return `
47 ;; ROUND(${r})
48 ${G(r, 0, '$v0', '$v4', '$v8', '$v12')}
49 ${G(r, 1, '$v1', '$v5', '$v9', '$v13')}
50 ${G(r, 2, '$v2', '$v6', '$v10', '$v14')}
51 ${G(r, 3, '$v3', '$v7', '$v11', '$v15')}
52 ${G(r, 4, '$v0', '$v5', '$v10', '$v15')}
53 ${G(r, 5, '$v1', '$v6', '$v11', '$v12')}
54 ${G(r, 6, '$v2', '$v7', '$v8', '$v13')}
55 ${G(r, 7, '$v3', '$v4', '$v9', '$v14')}
56 `
57}
58
59console.log(
60 ROUND(0),
61 ROUND(1),
62 ROUND(2),
63 ROUND(3),
64 ROUND(4),
65 ROUND(5),
66 ROUND(6),
67 ROUND(7),
68 ROUND(8),
69 ROUND(9),
70 ROUND(10),
71 ROUND(11)
72)