1// Copyright 2019 Google LLC 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14// 15//////////////////////////////////////////////////////////////////////////////// 16 17package keyset_test 18 19import ( 20 "bytes" 21 "strings" 22 "testing" 23 24 "google.golang.org/protobuf/proto" 25 "github.com/google/tink/go/keyset" 26 "github.com/google/tink/go/testkeyset" 27 "github.com/google/tink/go/testutil" 28 29 tinkpb "github.com/google/tink/go/proto/tink_go_proto" 30) 31 32func TestBinaryIOUnencrypted(t *testing.T) { 33 buf := new(bytes.Buffer) 34 w := keyset.NewBinaryWriter(buf) 35 r := keyset.NewBinaryReader(buf) 36 37 manager := testutil.NewHMACKeysetManager() 38 h, err := manager.Handle() 39 if h == nil || err != nil { 40 t.Fatalf("cannot get keyset handle: %v", err) 41 } 42 43 ks1 := testkeyset.KeysetMaterial(h) 44 if err := w.Write(ks1); err != nil { 45 t.Fatalf("cannot write keyset: %v", err) 46 } 47 48 ks2, err := r.Read() 49 if err != nil { 50 t.Fatalf("cannot read keyset: %v", err) 51 } 52 53 if !proto.Equal(ks1, ks2) { 54 t.Errorf("written keyset (%s) doesn't match read keyset (%s)", ks1, ks2) 55 } 56} 57 58func TestBinaryIOEncrypted(t *testing.T) { 59 buf := new(bytes.Buffer) 60 w := keyset.NewBinaryWriter(buf) 61 r := keyset.NewBinaryReader(buf) 62 63 kse1 := &tinkpb.EncryptedKeyset{EncryptedKeyset: []byte(strings.Repeat("A", 32))} 64 65 if err := w.WriteEncrypted(kse1); err != nil { 66 t.Fatalf("cannot write encrypted keyset: %v", err) 67 } 68 69 kse2, err := r.ReadEncrypted() 70 if err != nil { 71 t.Fatalf("cannot read encrypted keyset: %v", err) 72 } 73 74 if !proto.Equal(kse1, kse2) { 75 t.Errorf("written encrypted keyset (%s) doesn't match read encrypted keyset (%s)", kse1, kse2) 76 } 77} 78