| written by hand — loosely derived from golang.org/x/crypto/internal/subtle, |
| but splitting the internal package across a module boundary |
| |
| -- .mod -- |
| module golang.org/x/internal |
| -- .info -- |
| {"Version":"v0.1.0","Name":"","Short":"","Time":"2018-07-25T17:24:00Z"} |
| -- go.mod -- |
| module golang.org/x/internal |
| -- subtle/aliasing.go -- |
| // 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 |
| |
| // This is a tiny version of golang.org/x/crypto/internal/subtle. |
| |
| package subtle |
| |
| import "unsafe" |
| |
| func AnyOverlap(x, y []byte) bool { |
| return len(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])) |
| } |
| -- subtle/aliasing_appengine.go -- |
| // 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 |
| |
| import "reflect" |
| |
| func AnyOverlap(x, y []byte) bool { |
| return len(x) > 0 && len(y) > 0 && |
| reflect.ValueOf(&x[0]).Pointer() <= reflect.ValueOf(&y[len(y)-1]).Pointer() && |
| reflect.ValueOf(&y[0]).Pointer() <= reflect.ValueOf(&x[len(x)-1]).Pointer() |
| } |