OSDN Git Service

Hulk did something
[bytom/vapor.git] / vendor / golang.org / x / crypto / sha3 / xor_unaligned.go
1 // Copyright 2015 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 // +build amd64 386 ppc64le
6 // +build !appengine
7
8 package sha3
9
10 import "unsafe"
11
12 func xorInUnaligned(d *state, buf []byte) {
13         bw := (*[maxRate / 8]uint64)(unsafe.Pointer(&buf[0]))
14         n := len(buf)
15         if n >= 72 {
16                 d.a[0] ^= bw[0]
17                 d.a[1] ^= bw[1]
18                 d.a[2] ^= bw[2]
19                 d.a[3] ^= bw[3]
20                 d.a[4] ^= bw[4]
21                 d.a[5] ^= bw[5]
22                 d.a[6] ^= bw[6]
23                 d.a[7] ^= bw[7]
24                 d.a[8] ^= bw[8]
25         }
26         if n >= 104 {
27                 d.a[9] ^= bw[9]
28                 d.a[10] ^= bw[10]
29                 d.a[11] ^= bw[11]
30                 d.a[12] ^= bw[12]
31         }
32         if n >= 136 {
33                 d.a[13] ^= bw[13]
34                 d.a[14] ^= bw[14]
35                 d.a[15] ^= bw[15]
36                 d.a[16] ^= bw[16]
37         }
38         if n >= 144 {
39                 d.a[17] ^= bw[17]
40         }
41         if n >= 168 {
42                 d.a[18] ^= bw[18]
43                 d.a[19] ^= bw[19]
44                 d.a[20] ^= bw[20]
45         }
46 }
47
48 func copyOutUnaligned(d *state, buf []byte) {
49         ab := (*[maxRate]uint8)(unsafe.Pointer(&d.a[0]))
50         copy(buf, ab[:])
51 }
52
53 var (
54         xorIn   = xorInUnaligned
55         copyOut = copyOutUnaligned
56 )
57
58 const xorImplementationUnaligned = "unaligned"