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 keyset_test 18*e7b1675dSTing-Kang Chang 19*e7b1675dSTing-Kang Changimport ( 20*e7b1675dSTing-Kang Chang "bytes" 21*e7b1675dSTing-Kang Chang "strings" 22*e7b1675dSTing-Kang Chang "testing" 23*e7b1675dSTing-Kang Chang 24*e7b1675dSTing-Kang Chang "google.golang.org/protobuf/proto" 25*e7b1675dSTing-Kang Chang "github.com/google/tink/go/keyset" 26*e7b1675dSTing-Kang Chang "github.com/google/tink/go/testkeyset" 27*e7b1675dSTing-Kang Chang "github.com/google/tink/go/testutil" 28*e7b1675dSTing-Kang Chang 29*e7b1675dSTing-Kang Chang tinkpb "github.com/google/tink/go/proto/tink_go_proto" 30*e7b1675dSTing-Kang Chang) 31*e7b1675dSTing-Kang Chang 32*e7b1675dSTing-Kang Changfunc TestBinaryIOUnencrypted(t *testing.T) { 33*e7b1675dSTing-Kang Chang buf := new(bytes.Buffer) 34*e7b1675dSTing-Kang Chang w := keyset.NewBinaryWriter(buf) 35*e7b1675dSTing-Kang Chang r := keyset.NewBinaryReader(buf) 36*e7b1675dSTing-Kang Chang 37*e7b1675dSTing-Kang Chang manager := testutil.NewHMACKeysetManager() 38*e7b1675dSTing-Kang Chang h, err := manager.Handle() 39*e7b1675dSTing-Kang Chang if h == nil || err != nil { 40*e7b1675dSTing-Kang Chang t.Fatalf("cannot get keyset handle: %v", err) 41*e7b1675dSTing-Kang Chang } 42*e7b1675dSTing-Kang Chang 43*e7b1675dSTing-Kang Chang ks1 := testkeyset.KeysetMaterial(h) 44*e7b1675dSTing-Kang Chang if err := w.Write(ks1); err != nil { 45*e7b1675dSTing-Kang Chang t.Fatalf("cannot write keyset: %v", err) 46*e7b1675dSTing-Kang Chang } 47*e7b1675dSTing-Kang Chang 48*e7b1675dSTing-Kang Chang ks2, err := r.Read() 49*e7b1675dSTing-Kang Chang if err != nil { 50*e7b1675dSTing-Kang Chang t.Fatalf("cannot read keyset: %v", err) 51*e7b1675dSTing-Kang Chang } 52*e7b1675dSTing-Kang Chang 53*e7b1675dSTing-Kang Chang if !proto.Equal(ks1, ks2) { 54*e7b1675dSTing-Kang Chang t.Errorf("written keyset (%s) doesn't match read keyset (%s)", ks1, ks2) 55*e7b1675dSTing-Kang Chang } 56*e7b1675dSTing-Kang Chang} 57*e7b1675dSTing-Kang Chang 58*e7b1675dSTing-Kang Changfunc TestBinaryIOEncrypted(t *testing.T) { 59*e7b1675dSTing-Kang Chang buf := new(bytes.Buffer) 60*e7b1675dSTing-Kang Chang w := keyset.NewBinaryWriter(buf) 61*e7b1675dSTing-Kang Chang r := keyset.NewBinaryReader(buf) 62*e7b1675dSTing-Kang Chang 63*e7b1675dSTing-Kang Chang kse1 := &tinkpb.EncryptedKeyset{EncryptedKeyset: []byte(strings.Repeat("A", 32))} 64*e7b1675dSTing-Kang Chang 65*e7b1675dSTing-Kang Chang if err := w.WriteEncrypted(kse1); err != nil { 66*e7b1675dSTing-Kang Chang t.Fatalf("cannot write encrypted keyset: %v", err) 67*e7b1675dSTing-Kang Chang } 68*e7b1675dSTing-Kang Chang 69*e7b1675dSTing-Kang Chang kse2, err := r.ReadEncrypted() 70*e7b1675dSTing-Kang Chang if err != nil { 71*e7b1675dSTing-Kang Chang t.Fatalf("cannot read encrypted keyset: %v", err) 72*e7b1675dSTing-Kang Chang } 73*e7b1675dSTing-Kang Chang 74*e7b1675dSTing-Kang Chang if !proto.Equal(kse1, kse2) { 75*e7b1675dSTing-Kang Chang t.Errorf("written encrypted keyset (%s) doesn't match read encrypted keyset (%s)", kse1, kse2) 76*e7b1675dSTing-Kang Chang } 77*e7b1675dSTing-Kang Chang} 78