// Copyright 2018 The Go Authors. All rights reserved.// Use of this source code is governed by a BSD-style// license that can be found in the LICENSE file.// +build !appengine// Package subtle implements functions that are often useful in cryptographic// code but require careful thought to use correctly.packagesubtle// import "golang.org/x/crypto/internal/subtle"import"unsafe"// AnyOverlap reports whether x and y share memory at any (not necessarily// corresponding) index. The memory beyond the slice length is ignored.funcAnyOverlap(x,y[]byte)bool{returnlen(x)>0&&len(y)>0&&uintptr(unsafe.Pointer(&x[0]))<=uintptr(unsafe.Pointer(&y[len(y)-1]))&&uintptr(unsafe.Pointer(&y[0]))<=uintptr(unsafe.Pointer(&x[len(x)-1]))}// InexactOverlap reports whether x and y share memory at any non-corresponding// index. The memory beyond the slice length is ignored. Note that x and y can// have different lengths and still not have any inexact overlap.//// InexactOverlap can be used to implement the requirements of the crypto/cipher// AEAD, Block, BlockMode and Stream interfaces.funcInexactOverlap(x,y[]byte)bool{iflen(x)==0||len(y)==0||&x[0]==&y[0]{returnfalse}returnAnyOverlap(x,y)}