aboutsummaryrefslogtreecommitdiffhomepage
path: root/vendor/golang.org/x/crypto/internal/subtle/aliasing_test.go
blob: a5b62ff740167af41cb895a44ed2f17ac65f6f66 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// 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"

	"golang.org/x/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)
	}
}