| // 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. | |
| package subtle_test | |
| import ( | |
| "testing" | |
| "crypto/internal/subtle" | |
| ) | |
| var a, b [100]byte | |
| var aliasingTests = []struct { | |
| x, y []byte | |
| anyOverlap, inexactOverlap bool | |
| }{ | |
| {a[:], b[:], false, false}, | |
| {a[:], b[:0], false, false}, | |
| {a[:], b[:50], false, false}, | |
| {a[40:50], a[50:60], false, false}, | |
| {a[40:50], a[60:70], false, false}, | |
| {a[:51], a[50:], true, true}, | |
| {a[:], a[:], true, false}, | |
| {a[:50], a[:60], true, false}, | |
| {a[:], nil, false, false}, | |
| {nil, nil, false, false}, | |
| {a[:], a[:0], false, false}, | |
| {a[:10], a[:10:20], true, false}, | |
| {a[:10], a[5:10:20], true, true}, | |
| } | |
| func testAliasing(t *testing.T, i int, x, y []byte, anyOverlap, inexactOverlap bool) { | |
| any := subtle.AnyOverlap(x, y) | |
| if any != anyOverlap { | |
| t.Errorf("%d: wrong AnyOverlap result, expected %v, got %v", i, anyOverlap, any) | |
| } | |
| inexact := subtle.InexactOverlap(x, y) | |
| if inexact != inexactOverlap { | |
| t.Errorf("%d: wrong InexactOverlap result, expected %v, got %v", i, inexactOverlap, any) | |
| } | |
| } | |
| func TestAliasing(t *testing.T) { | |
| for i, tt := range aliasingTests { | |
| testAliasing(t, i, tt.x, tt.y, tt.anyOverlap, tt.inexactOverlap) | |
| testAliasing(t, i, tt.y, tt.x, tt.anyOverlap, tt.inexactOverlap) | |
| } | |
| } |