xref: /aosp_15_r20/external/tink/go/testutil/wycheproofutil_test.go (revision e7b1675dde1b92d52ec075b0a92829627f2c52a5)
1*e7b1675dSTing-Kang Chang// Copyright 2019 Google LLC
2*e7b1675dSTing-Kang Chang//
3*e7b1675dSTing-Kang Chang// Licensed under the Apache License, Version 2.0 (the "License");
4*e7b1675dSTing-Kang Chang// you may not use this file except in compliance with the License.
5*e7b1675dSTing-Kang Chang// You may obtain a copy of the License at
6*e7b1675dSTing-Kang Chang//
7*e7b1675dSTing-Kang Chang//      http://www.apache.org/licenses/LICENSE-2.0
8*e7b1675dSTing-Kang Chang//
9*e7b1675dSTing-Kang Chang// Unless required by applicable law or agreed to in writing, software
10*e7b1675dSTing-Kang Chang// distributed under the License is distributed on an "AS IS" BASIS,
11*e7b1675dSTing-Kang Chang// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*e7b1675dSTing-Kang Chang// See the License for the specific language governing permissions and
13*e7b1675dSTing-Kang Chang// limitations under the License.
14*e7b1675dSTing-Kang Chang//
15*e7b1675dSTing-Kang Chang////////////////////////////////////////////////////////////////////////////////
16*e7b1675dSTing-Kang Chang
17*e7b1675dSTing-Kang Changpackage testutil_test
18*e7b1675dSTing-Kang Chang
19*e7b1675dSTing-Kang Changimport (
20*e7b1675dSTing-Kang Chang	"encoding/json"
21*e7b1675dSTing-Kang Chang	"os"
22*e7b1675dSTing-Kang Chang	"testing"
23*e7b1675dSTing-Kang Chang
24*e7b1675dSTing-Kang Chang	"github.com/google/tink/go/testutil"
25*e7b1675dSTing-Kang Chang)
26*e7b1675dSTing-Kang Chang
27*e7b1675dSTing-Kang Changfunc TestPopulateSuite(t *testing.T) {
28*e7b1675dSTing-Kang Chang	testutil.SkipTestIfTestSrcDirIsNotSet(t)
29*e7b1675dSTing-Kang Chang
30*e7b1675dSTing-Kang Chang	// TODO(175520475): Test the HexBytes type.
31*e7b1675dSTing-Kang Chang	type AeadTest struct {
32*e7b1675dSTing-Kang Chang		testutil.WycheproofCase
33*e7b1675dSTing-Kang Chang		Key        string `json:"key"`
34*e7b1675dSTing-Kang Chang		IV         string `json:"iv"`
35*e7b1675dSTing-Kang Chang		AAD        string `json:"aad"`
36*e7b1675dSTing-Kang Chang		Message    string `json:"msg"`
37*e7b1675dSTing-Kang Chang		Ciphertext string `json:"ct"`
38*e7b1675dSTing-Kang Chang		Tag        string `json:"tag"`
39*e7b1675dSTing-Kang Chang	}
40*e7b1675dSTing-Kang Chang
41*e7b1675dSTing-Kang Chang	type AeadGroup struct {
42*e7b1675dSTing-Kang Chang		testutil.WycheproofGroup
43*e7b1675dSTing-Kang Chang		Tests []*AeadTest `json:"tests"`
44*e7b1675dSTing-Kang Chang	}
45*e7b1675dSTing-Kang Chang
46*e7b1675dSTing-Kang Chang	type AeadSuite struct {
47*e7b1675dSTing-Kang Chang		testutil.WycheproofSuite
48*e7b1675dSTing-Kang Chang		TestGroups []*AeadGroup `json:"testGroups"`
49*e7b1675dSTing-Kang Chang	}
50*e7b1675dSTing-Kang Chang
51*e7b1675dSTing-Kang Chang	suite := new(AeadSuite)
52*e7b1675dSTing-Kang Chang	if err := testutil.PopulateSuite(suite, "aes_gcm_test.json"); err != nil {
53*e7b1675dSTing-Kang Chang		t.Fatalf("error populating suite: %s", err)
54*e7b1675dSTing-Kang Chang	}
55*e7b1675dSTing-Kang Chang
56*e7b1675dSTing-Kang Chang	if suite.Algorithm != "AES-GCM" {
57*e7b1675dSTing-Kang Chang		t.Errorf("suite.Algorithm=%s, want AES-GCM", suite.Algorithm)
58*e7b1675dSTing-Kang Chang	}
59*e7b1675dSTing-Kang Chang
60*e7b1675dSTing-Kang Chang	if suite.TestGroups[0].Tests[0].Key == "" {
61*e7b1675dSTing-Kang Chang		t.Error("suite.TestGroups[0].Tests[0].Key is empty")
62*e7b1675dSTing-Kang Chang	}
63*e7b1675dSTing-Kang Chang}
64*e7b1675dSTing-Kang Chang
65*e7b1675dSTing-Kang Changfunc TestPopulateSuite_FileOpenError(t *testing.T) {
66*e7b1675dSTing-Kang Chang	testutil.SkipTestIfTestSrcDirIsNotSet(t)
67*e7b1675dSTing-Kang Chang
68*e7b1675dSTing-Kang Chang	suite := new(testutil.WycheproofSuite)
69*e7b1675dSTing-Kang Chang	err := testutil.PopulateSuite(suite, "NON_EXISTENT_FILE")
70*e7b1675dSTing-Kang Chang	if err == nil {
71*e7b1675dSTing-Kang Chang		t.Error("succeeded with non-existent file")
72*e7b1675dSTing-Kang Chang	}
73*e7b1675dSTing-Kang Chang	if _, ok := err.(*os.PathError); !ok {
74*e7b1675dSTing-Kang Chang		t.Errorf("unexpected error for non-existent file: %s", err)
75*e7b1675dSTing-Kang Chang	}
76*e7b1675dSTing-Kang Chang}
77*e7b1675dSTing-Kang Chang
78*e7b1675dSTing-Kang Changfunc TestPopulateSuite_DecodeError(t *testing.T) {
79*e7b1675dSTing-Kang Chang	testutil.SkipTestIfTestSrcDirIsNotSet(t)
80*e7b1675dSTing-Kang Chang
81*e7b1675dSTing-Kang Chang	var suite *testutil.WycheproofSuite
82*e7b1675dSTing-Kang Chang	err := testutil.PopulateSuite(suite, "aes_gcm_test.json")
83*e7b1675dSTing-Kang Chang	if err == nil {
84*e7b1675dSTing-Kang Chang		t.Error("succeeded with nil suite")
85*e7b1675dSTing-Kang Chang	}
86*e7b1675dSTing-Kang Chang	if _, ok := err.(*json.InvalidUnmarshalError); !ok {
87*e7b1675dSTing-Kang Chang		t.Errorf("unexpected error for decode error: %s", err)
88*e7b1675dSTing-Kang Chang	}
89*e7b1675dSTing-Kang Chang}
90