1 // Copyright 2018 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 package cipher 6 7 // xorBytes xors the bytes in a and b. The destination should have enough 8 // space, otherwise xorBytes will panic. Returns the number of bytes xor'd. 9 func xorBytes(dst, a, b []byte) int { 10 n := len(a) 11 if len(b) < n { 12 n = len(b) 13 } 14 if n == 0 { 15 return 0 16 } 17 _ = dst[n-1] 18 xorBytesSSE2(&dst[0], &a[0], &b[0], n) // amd64 must have SSE2 19 return n 20 } 21 22 func xorWords(dst, a, b []byte) { 23 xorBytes(dst, a, b) 24 } 25 26 //go:noescape 27 func xorBytesSSE2(dst, a, b *byte, n int) 28