1*e7b1675dSTing-Kang Chang// Copyright 2022 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 Chang// Package stubkeymanager defines key managers for testing primitives. 18*e7b1675dSTing-Kang Changpackage stubkeymanager 19*e7b1675dSTing-Kang Chang 20*e7b1675dSTing-Kang Changimport ( 21*e7b1675dSTing-Kang Chang "io" 22*e7b1675dSTing-Kang Chang 23*e7b1675dSTing-Kang Chang "google.golang.org/protobuf/proto" 24*e7b1675dSTing-Kang Chang "github.com/google/tink/go/core/registry" 25*e7b1675dSTing-Kang Chang "github.com/google/tink/go/internal/internalregistry" 26*e7b1675dSTing-Kang Chang tinkpb "github.com/google/tink/go/proto/tink_go_proto" 27*e7b1675dSTing-Kang Chang) 28*e7b1675dSTing-Kang Chang 29*e7b1675dSTing-Kang Chang// StubKeyManager is a key manager for testing. 30*e7b1675dSTing-Kang Changtype StubKeyManager struct { 31*e7b1675dSTing-Kang Chang URL string 32*e7b1675dSTing-Kang Chang Prim interface{} 33*e7b1675dSTing-Kang Chang Key proto.Message 34*e7b1675dSTing-Kang Chang KeyData *tinkpb.KeyData 35*e7b1675dSTing-Kang Chang} 36*e7b1675dSTing-Kang Chang 37*e7b1675dSTing-Kang Changvar _ (registry.KeyManager) = (*StubKeyManager)(nil) 38*e7b1675dSTing-Kang Chang 39*e7b1675dSTing-Kang Chang// Primitive returns the stub primitive. 40*e7b1675dSTing-Kang Changfunc (km *StubKeyManager) Primitive(serializedKey []byte) (interface{}, error) { 41*e7b1675dSTing-Kang Chang return km.Prim, nil 42*e7b1675dSTing-Kang Chang} 43*e7b1675dSTing-Kang Chang 44*e7b1675dSTing-Kang Chang// NewKey returns the stub Key. 45*e7b1675dSTing-Kang Changfunc (km *StubKeyManager) NewKey(serializedKeyFormat []byte) (proto.Message, error) { 46*e7b1675dSTing-Kang Chang return km.Key, nil 47*e7b1675dSTing-Kang Chang} 48*e7b1675dSTing-Kang Chang 49*e7b1675dSTing-Kang Chang// NewKeyData returns the stub KeyData. 50*e7b1675dSTing-Kang Changfunc (km *StubKeyManager) NewKeyData(serializedKeyFormat []byte) (*tinkpb.KeyData, error) { 51*e7b1675dSTing-Kang Chang return km.KeyData, nil 52*e7b1675dSTing-Kang Chang} 53*e7b1675dSTing-Kang Chang 54*e7b1675dSTing-Kang Chang// DoesSupport returns true if this KeyManager supports key type identified by typeURL. 55*e7b1675dSTing-Kang Changfunc (km *StubKeyManager) DoesSupport(typeURL string) bool { 56*e7b1675dSTing-Kang Chang return typeURL == km.URL 57*e7b1675dSTing-Kang Chang} 58*e7b1675dSTing-Kang Chang 59*e7b1675dSTing-Kang Chang// TypeURL returns the stub type url. 60*e7b1675dSTing-Kang Changfunc (km *StubKeyManager) TypeURL() string { 61*e7b1675dSTing-Kang Chang return km.URL 62*e7b1675dSTing-Kang Chang} 63*e7b1675dSTing-Kang Chang 64*e7b1675dSTing-Kang Chang// StubPrivateKeyManager is a private key manager for testing. 65*e7b1675dSTing-Kang Changtype StubPrivateKeyManager struct { 66*e7b1675dSTing-Kang Chang StubKeyManager 67*e7b1675dSTing-Kang Chang PubKeyData *tinkpb.KeyData 68*e7b1675dSTing-Kang Chang} 69*e7b1675dSTing-Kang Chang 70*e7b1675dSTing-Kang Changvar _ (registry.PrivateKeyManager) = (*StubPrivateKeyManager)(nil) 71*e7b1675dSTing-Kang Chang 72*e7b1675dSTing-Kang Chang// PublicKeyData returns the stub public key data. 73*e7b1675dSTing-Kang Changfunc (skm *StubPrivateKeyManager) PublicKeyData(serializedKey []byte) (*tinkpb.KeyData, error) { 74*e7b1675dSTing-Kang Chang return skm.PubKeyData, nil 75*e7b1675dSTing-Kang Chang} 76*e7b1675dSTing-Kang Chang 77*e7b1675dSTing-Kang Chang// StubDerivableKeyManager is a derivable key manager for testing. 78*e7b1675dSTing-Kang Changtype StubDerivableKeyManager struct { 79*e7b1675dSTing-Kang Chang StubKeyManager 80*e7b1675dSTing-Kang Chang KeyMatType tinkpb.KeyData_KeyMaterialType 81*e7b1675dSTing-Kang Chang DerKey proto.Message 82*e7b1675dSTing-Kang Chang DerErr error 83*e7b1675dSTing-Kang Chang} 84*e7b1675dSTing-Kang Chang 85*e7b1675dSTing-Kang Changvar _ (internalregistry.DerivableKeyManager) = (*StubDerivableKeyManager)(nil) 86*e7b1675dSTing-Kang Chang 87*e7b1675dSTing-Kang Chang// KeyMaterialType returns the stub key material type. 88*e7b1675dSTing-Kang Changfunc (dkm *StubDerivableKeyManager) KeyMaterialType() tinkpb.KeyData_KeyMaterialType { 89*e7b1675dSTing-Kang Chang return dkm.KeyMatType 90*e7b1675dSTing-Kang Chang} 91*e7b1675dSTing-Kang Chang 92*e7b1675dSTing-Kang Chang// DeriveKey returns the stub derived key and error. 93*e7b1675dSTing-Kang Changfunc (dkm *StubDerivableKeyManager) DeriveKey(serializedKeyFormat []byte, pseudorandomness io.Reader) (proto.Message, error) { 94*e7b1675dSTing-Kang Chang return dkm.DerKey, dkm.DerErr 95*e7b1675dSTing-Kang Chang} 96