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.
6 // In its own file so that a faster assembly or C version
7 // can be substituted easily.
94 func blockGeneric(dig
*digest
, p
[]byte) {
96 h0
, h1
, h2
, h3
, h4
, h5
, h6
, h7
:= dig
.h
[0], dig
.h
[1], dig
.h
[2], dig
.h
[3], dig
.h
[4], dig
.h
[5], dig
.h
[6], dig
.h
[7]
98 for i
:= 0; i
< 16; i
++ {
100 w
[i
] = uint64(p
[j
])<<56 |
uint64(p
[j
+1])<<48 |
uint64(p
[j
+2])<<40 |
uint64(p
[j
+3])<<32 |
101 uint64(p
[j
+4])<<24 |
uint64(p
[j
+5])<<16 |
uint64(p
[j
+6])<<8 |
uint64(p
[j
+7])
103 for i
:= 16; i
< 80; i
++ {
105 t1
:= (v1
>>19 | v1
<<(64-19)) ^ (v1
>>61 | v1
<<(64-61)) ^ (v1
>> 6)
107 t2
:= (v2
>>1 | v2
<<(64-1)) ^ (v2
>>8 | v2
<<(64-8)) ^ (v2
>> 7)
109 w
[i
] = t1
+ w
[i
-7] + t2
+ w
[i
-16]
112 a
, b
, c
, d
, e
, f
, g
, h
:= h0
, h1
, h2
, h3
, h4
, h5
, h6
, h7
114 for i
:= 0; i
< 80; i
++ {
115 t1
:= h
+ ((e
>>14 | e
<<(64-14)) ^ (e
>>18 | e
<<(64-18)) ^ (e
>>41 | e
<<(64-41))) + ((e
& f
) ^ (^e
& g
)) + _K
[i
] + w
[i
]
117 t2
:= ((a
>>28 | a
<<(64-28)) ^ (a
>>34 | a
<<(64-34)) ^ (a
>>39 | a
<<(64-39))) + ((a
& b
) ^ (a
& c
) ^ (b
& c
))
141 dig
.h
[0], dig
.h
[1], dig
.h
[2], dig
.h
[3], dig
.h
[4], dig
.h
[5], dig
.h
[6], dig
.h
[7] = h0
, h1
, h2
, h3
, h4
, h5
, h6
, h7