1 // Copyright 2009 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
8 // In its own file so that a faster assembly or C version
9 // can be substituted easily.
20 func block(dig
*digest
, p
[]byte) {
23 h0
, h1
, h2
, h3
, h4
:= dig
.h
[0], dig
.h
[1], dig
.h
[2], dig
.h
[3], dig
.h
[4]
25 // Can interlace the computation of w with the
26 // rounds below if needed for speed.
27 for i
:= 0; i
< 16; i
++ {
29 w
[i
] = uint32(p
[j
])<<24 |
uint32(p
[j
+1])<<16 |
uint32(p
[j
+2])<<8 |
uint32(p
[j
+3])
32 a
, b
, c
, d
, e
:= h0
, h1
, h2
, h3
, h4
34 // Each of the four 20-iteration rounds
35 // differs only in the computation of f and
36 // the choice of K (_K0, _K1, etc).
40 a5
:= a
<<5 | a
>>(32-5)
41 b30
:= b
<<30 | b
>>(32-30)
42 t
:= a5
+ f
+ e
+ w
[i
&0xf] + _K0
43 a
, b
, c
, d
, e
= t
, a
, b30
, c
, d
46 tmp
:= w
[(i
-3)&0xf] ^ w
[(i
-8)&0xf] ^ w
[(i
-14)&0xf] ^ w
[(i
)&0xf]
47 w
[i
&0xf] = tmp
<<1 | tmp
>>(32-1)
50 a5
:= a
<<5 | a
>>(32-5)
51 b30
:= b
<<30 | b
>>(32-30)
52 t
:= a5
+ f
+ e
+ w
[i
&0xf] + _K0
53 a
, b
, c
, d
, e
= t
, a
, b30
, c
, d
56 tmp
:= w
[(i
-3)&0xf] ^ w
[(i
-8)&0xf] ^ w
[(i
-14)&0xf] ^ w
[(i
)&0xf]
57 w
[i
&0xf] = tmp
<<1 | tmp
>>(32-1)
59 a5
:= a
<<5 | a
>>(32-5)
60 b30
:= b
<<30 | b
>>(32-30)
61 t
:= a5
+ f
+ e
+ w
[i
&0xf] + _K1
62 a
, b
, c
, d
, e
= t
, a
, b30
, c
, d
65 tmp
:= w
[(i
-3)&0xf] ^ w
[(i
-8)&0xf] ^ w
[(i
-14)&0xf] ^ w
[(i
)&0xf]
66 w
[i
&0xf] = tmp
<<1 | tmp
>>(32-1)
67 f
:= ((b | c
) & d
) |
(b
& c
)
69 a5
:= a
<<5 | a
>>(32-5)
70 b30
:= b
<<30 | b
>>(32-30)
71 t
:= a5
+ f
+ e
+ w
[i
&0xf] + _K2
72 a
, b
, c
, d
, e
= t
, a
, b30
, c
, d
75 tmp
:= w
[(i
-3)&0xf] ^ w
[(i
-8)&0xf] ^ w
[(i
-14)&0xf] ^ w
[(i
)&0xf]
76 w
[i
&0xf] = tmp
<<1 | tmp
>>(32-1)
78 a5
:= a
<<5 | a
>>(32-5)
79 b30
:= b
<<30 | b
>>(32-30)
80 t
:= a5
+ f
+ e
+ w
[i
&0xf] + _K3
81 a
, b
, c
, d
, e
= t
, a
, b30
, c
, d
93 dig
.h
[0], dig
.h
[1], dig
.h
[2], dig
.h
[3], dig
.h
[4] = h0
, h1
, h2
, h3
, h4