@@ -7,66 +7,62 @@ import math.bits
77
88// vfmt off
99const n__ = [
10- u32 (0 ), 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 ,
10+ u8 (0 ), 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 ,
1111 7 , 4 , 13 , 1 , 10 , 6 , 15 , 3 , 12 , 0 , 9 , 5 , 2 , 14 , 11 , 8 ,
1212 3 , 10 , 14 , 4 , 9 , 15 , 8 , 1 , 2 , 7 , 0 , 6 , 13 , 11 , 5 , 12 ,
1313 1 , 9 , 11 , 10 , 0 , 8 , 12 , 4 , 13 , 3 , 7 , 15 , 14 , 5 , 6 , 2 ,
1414 4 , 0 , 5 , 9 , 7 , 12 , 2 , 10 , 14 , 1 , 3 , 8 , 11 , 6 , 15 , 13 ,
1515]
1616
1717const r__ = [
18- u32 (11 ), 14 , 15 , 12 , 5 , 8 , 7 , 9 , 11 , 13 , 14 , 15 , 6 , 7 , 9 , 8 ,
18+ u8 (11 ), 14 , 15 , 12 , 5 , 8 , 7 , 9 , 11 , 13 , 14 , 15 , 6 , 7 , 9 , 8 ,
1919 7 , 6 , 8 , 13 , 11 , 9 , 7 , 15 , 7 , 12 , 15 , 9 , 11 , 7 , 13 , 12 ,
2020 11 , 13 , 6 , 7 , 14 , 9 , 13 , 15 , 14 , 8 , 13 , 6 , 5 , 12 , 7 , 5 ,
2121 11 , 12 , 14 , 15 , 14 , 15 , 9 , 8 , 9 , 14 , 5 , 6 , 8 , 6 , 5 , 12 ,
2222 9 , 15 , 5 , 11 , 6 , 8 , 13 , 12 , 5 , 12 , 13 , 14 , 11 , 8 , 5 , 6 ,
2323]
2424
2525const n_ = [
26- u32 (5 ), 14 , 7 , 0 , 9 , 2 , 11 , 4 , 13 , 6 , 15 , 8 , 1 , 10 , 3 , 12 ,
26+ u8 (5 ), 14 , 7 , 0 , 9 , 2 , 11 , 4 , 13 , 6 , 15 , 8 , 1 , 10 , 3 , 12 ,
2727 6 , 11 , 3 , 7 , 0 , 13 , 5 , 10 , 14 , 15 , 8 , 12 , 4 , 9 , 1 , 2 ,
2828 15 , 5 , 1 , 3 , 7 , 14 , 6 , 9 , 11 , 8 , 12 , 2 , 10 , 0 , 4 , 13 ,
2929 8 , 6 , 4 , 1 , 3 , 11 , 15 , 0 , 5 , 12 , 2 , 13 , 9 , 7 , 10 , 14 ,
3030 12 , 15 , 10 , 4 , 1 , 5 , 8 , 7 , 6 , 2 , 13 , 14 , 0 , 3 , 9 , 11 ,
3131]
3232
3333const r_ = [
34- u32 (8 ), 9 , 9 , 11 , 13 , 15 , 15 , 5 , 7 , 7 , 8 , 11 , 14 , 14 , 12 , 6 ,
34+ u8 (8 ), 9 , 9 , 11 , 13 , 15 , 15 , 5 , 7 , 7 , 8 , 11 , 14 , 14 , 12 , 6 ,
3535 9 , 13 , 15 , 7 , 12 , 8 , 9 , 11 , 7 , 7 , 12 , 7 , 6 , 15 , 13 , 11 ,
3636 9 , 7 , 15 , 11 , 8 , 6 , 6 , 14 , 12 , 13 , 5 , 14 , 13 , 13 , 7 , 5 ,
3737 15 , 5 , 8 , 11 , 14 , 14 , 6 , 14 , 6 , 9 , 12 , 9 , 12 , 5 , 15 , 8 ,
3838 8 , 5 , 12 , 9 , 12 , 5 , 14 , 6 , 8 , 13 , 6 , 5 , 15 , 13 , 11 , 11 ,
3939]
4040// vfmt on
4141@[direct_array_access]
42- fn block (mut md Digest, p0 []u8 ) int {
43- mut p := p0 .clone ()
42+ fn block (mut md Digest, p []u8 ) int {
4443 mut n := 0
4544 mut x := []u32 {len: 16 }
4645 mut alpha := u32 (0 )
4746 mut beta := u32 (0 )
4847
49- for p.len > = block_size {
48+ for n + block_size < = p.len {
5049 mut a, mut b, mut c, mut d, mut e := md.s[0 ], md.s[1 ], md.s[2 ], md.s[3 ], md.s[4 ]
5150 mut aa, mut bb, mut cc, mut dd, mut ee := a, b, c, d, e
52- mut j := 0
5351
5452 for i := 0 ; i < 16 ; i++ {
53+ j := n + i * 4
5554 x[i] = u32 (p[j]) | u32 (p[j + 1 ]) << 8 | u32 (p[j + 2 ]) << 16 | u32 (p[j + 3 ]) << 24
56- j + = 4
5755 }
5856
5957 mut i := 0
6058 for i < 16 {
6159 alpha = a + (b ^ c ^ d) + x[n__[i]]
62- mut s := int (r__[i])
63- alpha = bits.rotate_left_32 (alpha, s) + e
60+ alpha = bits.rotate_left_32 (alpha, r__[i]) + e
6461 beta = bits.rotate_left_32 (c, 10 )
6562 a , b , c , d , e = e, alpha, b, beta, d
6663
6764 alpha = aa + (bb ^ (cc | ~ dd)) + x[n_[i]] + 0x50a28be6
68- s = int (r_[i])
69- alpha = bits.rotate_left_32 (alpha, s) + ee
65+ alpha = bits.rotate_left_32 (alpha, r_[i]) + ee
7066 beta = bits.rotate_left_32 (cc, 10 )
7167 aa , bb , cc , dd , ee = ee, alpha, bb, beta, dd
7268
@@ -75,15 +71,13 @@ fn block(mut md Digest, p0 []u8) int {
7571
7672 for i < 32 {
7773 alpha = a + (b & c | ~ b & d) + x[n__[i]] + 0x5a827999
78- mut s := int (r__[i])
79- alpha = bits.rotate_left_32 (alpha, s) + e
74+ alpha = bits.rotate_left_32 (alpha, r__[i]) + e
8075 beta = bits.rotate_left_32 (c, 10 )
8176 a , b , c , d , e = e, alpha, b, beta, d
8277
8378 // parallel line
8479 alpha = aa + (bb & dd | cc & ~ dd) + x[n_[i]] + 0x5c4dd124
85- s = int (r_[i])
86- alpha = bits.rotate_left_32 (alpha, s) + ee
80+ alpha = bits.rotate_left_32 (alpha, r_[i]) + ee
8781 beta = bits.rotate_left_32 (cc, 10 )
8882 aa , bb , cc , dd , ee = ee, alpha, bb, beta, dd
8983
@@ -92,15 +86,13 @@ fn block(mut md Digest, p0 []u8) int {
9286
9387 for i < 48 {
9488 alpha = a + (b | ~ c ^ d) + x[n__[i]] + 0x6ed9eba1
95- mut s := int (r__[i])
96- alpha = bits.rotate_left_32 (alpha, s) + e
89+ alpha = bits.rotate_left_32 (alpha, r__[i]) + e
9790 beta = bits.rotate_left_32 (c, 10 )
9891 a , b , c , d , e = e, alpha, b, beta, d
9992
10093 // parallel line
10194 alpha = aa + (bb | ~ cc ^ dd) + x[n_[i]] + 0x6d703ef3
102- s = int (r_[i])
103- alpha = bits.rotate_left_32 (alpha, s) + ee
95+ alpha = bits.rotate_left_32 (alpha, r_[i]) + ee
10496 beta = bits.rotate_left_32 (cc, 10 )
10597 aa , bb , cc , dd , ee = ee, alpha, bb, beta, dd
10698
@@ -109,15 +101,13 @@ fn block(mut md Digest, p0 []u8) int {
109101
110102 for i < 64 {
111103 alpha = a + (b & d | c & ~ d) + x[n__[i]] + 0x8f1bbcdc
112- mut s := int (r__[i])
113- alpha = bits.rotate_left_32 (alpha, s) + e
104+ alpha = bits.rotate_left_32 (alpha, r__[i]) + e
114105 beta = bits.rotate_left_32 (c, 10 )
115106 a , b , c , d , e = e, alpha, b, beta, d
116107
117108 // parallel line
118109 alpha = aa + (bb & cc | ~ bb & dd) + x[n_[i]] + 0x7a6d76e9
119- s = int (r_[i])
120- alpha = bits.rotate_left_32 (alpha, s) + ee
110+ alpha = bits.rotate_left_32 (alpha, r_[i]) + ee
121111 beta = bits.rotate_left_32 (cc, 10 )
122112 aa , bb , cc , dd , ee = ee, alpha, bb, beta, dd
123113
@@ -126,15 +116,13 @@ fn block(mut md Digest, p0 []u8) int {
126116
127117 for i < 80 {
128118 alpha = a + (b ^ (c | ~ d)) + x[n__[i]] + 0xa953fd4e
129- mut s := int (r__[i])
130- alpha = bits.rotate_left_32 (alpha, s) + e
119+ alpha = bits.rotate_left_32 (alpha, r__[i]) + e
131120 beta = bits.rotate_left_32 (c, 10 )
132121 a , b , c , d , e = e, alpha, b, beta, d
133122
134123 // parallel line
135124 alpha = aa + (bb ^ cc ^ dd) + x[n_[i]]
136- s = int (r_[i])
137- alpha = bits.rotate_left_32 (alpha, s) + ee
125+ alpha = bits.rotate_left_32 (alpha, r_[i]) + ee
138126 beta = bits.rotate_left_32 (cc, 10 )
139127 aa , bb , cc , dd , ee = ee, alpha, bb, beta, dd
140128
@@ -148,7 +136,6 @@ fn block(mut md Digest, p0 []u8) int {
148136 md.s[4 ] = md.s[0 ] + b + cc
149137 md.s[0 ] = dd
150138
151- p = p[block_size..].clone ()
152139 n + = block_size
153140 }
154141 return n
0 commit comments