OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libgo/] [go/] [crypto/] [sha256/] [sha256block.go] - Blame information for rev 801

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 747 jeremybenn
// 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.
4
 
5
// SHA256 block step.
6
// In its own file so that a faster assembly or C version
7
// can be substituted easily.
8
 
9
package sha256
10
 
11
var _K = []uint32{
12
        0x428a2f98,
13
        0x71374491,
14
        0xb5c0fbcf,
15
        0xe9b5dba5,
16
        0x3956c25b,
17
        0x59f111f1,
18
        0x923f82a4,
19
        0xab1c5ed5,
20
        0xd807aa98,
21
        0x12835b01,
22
        0x243185be,
23
        0x550c7dc3,
24
        0x72be5d74,
25
        0x80deb1fe,
26
        0x9bdc06a7,
27
        0xc19bf174,
28
        0xe49b69c1,
29
        0xefbe4786,
30
        0x0fc19dc6,
31
        0x240ca1cc,
32
        0x2de92c6f,
33
        0x4a7484aa,
34
        0x5cb0a9dc,
35
        0x76f988da,
36
        0x983e5152,
37
        0xa831c66d,
38
        0xb00327c8,
39
        0xbf597fc7,
40
        0xc6e00bf3,
41
        0xd5a79147,
42
        0x06ca6351,
43
        0x14292967,
44
        0x27b70a85,
45
        0x2e1b2138,
46
        0x4d2c6dfc,
47
        0x53380d13,
48
        0x650a7354,
49
        0x766a0abb,
50
        0x81c2c92e,
51
        0x92722c85,
52
        0xa2bfe8a1,
53
        0xa81a664b,
54
        0xc24b8b70,
55
        0xc76c51a3,
56
        0xd192e819,
57
        0xd6990624,
58
        0xf40e3585,
59
        0x106aa070,
60
        0x19a4c116,
61
        0x1e376c08,
62
        0x2748774c,
63
        0x34b0bcb5,
64
        0x391c0cb3,
65
        0x4ed8aa4a,
66
        0x5b9cca4f,
67
        0x682e6ff3,
68
        0x748f82ee,
69
        0x78a5636f,
70
        0x84c87814,
71
        0x8cc70208,
72
        0x90befffa,
73
        0xa4506ceb,
74
        0xbef9a3f7,
75
        0xc67178f2,
76
}
77
 
78
func _Block(dig *digest, p []byte) int {
79
        var w [64]uint32
80
        n := 0
81
        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]
82
        for len(p) >= _Chunk {
83
                // Can interlace the computation of w with the
84
                // rounds below if needed for speed.
85
                for i := 0; i < 16; i++ {
86
                        j := i * 4
87
                        w[i] = uint32(p[j])<<24 | uint32(p[j+1])<<16 | uint32(p[j+2])<<8 | uint32(p[j+3])
88
                }
89
                for i := 16; i < 64; i++ {
90
                        t1 := (w[i-2]>>17 | w[i-2]<<(32-17)) ^ (w[i-2]>>19 | w[i-2]<<(32-19)) ^ (w[i-2] >> 10)
91
 
92
                        t2 := (w[i-15]>>7 | w[i-15]<<(32-7)) ^ (w[i-15]>>18 | w[i-15]<<(32-18)) ^ (w[i-15] >> 3)
93
 
94
                        w[i] = t1 + w[i-7] + t2 + w[i-16]
95
                }
96
 
97
                a, b, c, d, e, f, g, h := h0, h1, h2, h3, h4, h5, h6, h7
98
 
99
                for i := 0; i < 64; i++ {
100
                        t1 := h + ((e>>6 | e<<(32-6)) ^ (e>>11 | e<<(32-11)) ^ (e>>25 | e<<(32-25))) + ((e & f) ^ (^e & g)) + _K[i] + w[i]
101
 
102
                        t2 := ((a>>2 | a<<(32-2)) ^ (a>>13 | a<<(32-13)) ^ (a>>22 | a<<(32-22))) + ((a & b) ^ (a & c) ^ (b & c))
103
 
104
                        h = g
105
                        g = f
106
                        f = e
107
                        e = d + t1
108
                        d = c
109
                        c = b
110
                        b = a
111
                        a = t1 + t2
112
                }
113
 
114
                h0 += a
115
                h1 += b
116
                h2 += c
117
                h3 += d
118
                h4 += e
119
                h5 += f
120
                h6 += g
121
                h7 += h
122
 
123
                p = p[_Chunk:]
124
                n += _Chunk
125
        }
126
 
127
        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
128
        return n
129
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.