...
Source file src/pkg/vendor/golang.org/x/crypto/internal/chacha20/xor.go
1
2
3
4
5 package chacha20
6
7 import (
8 "runtime"
9 )
10
11
12 const unaligned = runtime.GOARCH == "386" ||
13 runtime.GOARCH == "amd64" ||
14 runtime.GOARCH == "arm64" ||
15 runtime.GOARCH == "ppc64le" ||
16 runtime.GOARCH == "s390x"
17
18
19
20 func xor(dst, src []byte, u uint32) {
21 _, _ = src[3], dst[3]
22 if unaligned {
23
24
25
26
27
28 v := uint32(src[0])
29 v |= uint32(src[1]) << 8
30 v |= uint32(src[2]) << 16
31 v |= uint32(src[3]) << 24
32 v ^= u
33 dst[0] = byte(v)
34 dst[1] = byte(v >> 8)
35 dst[2] = byte(v >> 16)
36 dst[3] = byte(v >> 24)
37 } else {
38 dst[0] = src[0] ^ byte(u)
39 dst[1] = src[1] ^ byte(u>>8)
40 dst[2] = src[2] ^ byte(u>>16)
41 dst[3] = src[3] ^ byte(u>>24)
42 }
43 }
44
View as plain text