| // Copyright 2022 Google LLC |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| // |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| package stubkeymanager_test |
| |
| import ( |
| "bytes" |
| "errors" |
| "testing" |
| |
| "github.com/google/go-cmp/cmp" |
| "google.golang.org/protobuf/testing/protocmp" |
| "github.com/google/tink/go/internal/testing/stubkeymanager" |
| agpb "github.com/google/tink/go/proto/aes_gcm_go_proto" |
| tpb "github.com/google/tink/go/proto/tink_go_proto" |
| ) |
| |
| type fakePrimitive struct { |
| Name string |
| } |
| |
| func TestStubKeyManager(t *testing.T) { |
| keyType := "some.key.type" |
| km := stubkeymanager.StubKeyManager{ |
| URL: keyType, |
| Key: &agpb.AesGcmKey{Version: 1, KeyValue: []byte("key_value")}, |
| Prim: &fakePrimitive{Name: "fake-primitive-name"}, |
| KeyData: &tpb.KeyData{ |
| TypeUrl: keyType, |
| Value: []byte("key_value"), |
| KeyMaterialType: tpb.KeyData_SYMMETRIC, |
| }, |
| } |
| if !km.DoesSupport(keyType) { |
| t.Errorf("DoesSupport(%q) = false , want true", keyType) |
| } |
| if km.DoesSupport("some.other.key.type") { |
| t.Errorf("DoesSupport(%q) = true , want false", keyType) |
| } |
| if km.TypeURL() != km.URL { |
| t.Errorf("TypeURL() = %q, want %q", km.TypeURL(), keyType) |
| } |
| key, err := km.NewKey(nil) |
| if err != nil { |
| t.Errorf("NewKey() err = %v, want nil", err) |
| } |
| if !cmp.Equal(key, km.Key, protocmp.Transform()) { |
| t.Errorf("NewKey() = %v, want %v", key, km.Key) |
| } |
| keyData, err := km.NewKeyData(nil) |
| if err != nil { |
| t.Errorf("NewKeyData() err = %v, want nil", err) |
| } |
| if !cmp.Equal(keyData, km.KeyData, protocmp.Transform()) { |
| t.Errorf("NewKeyData() = %v, want %v", keyData, km.KeyData) |
| } |
| p, err := km.Primitive(nil) |
| if err != nil { |
| t.Errorf("Primitive() err = %v, want nil", err) |
| } |
| if !cmp.Equal(p, km.Prim) { |
| t.Errorf("Primitive() = %v, want %v", p, km.Prim) |
| } |
| } |
| |
| func TestStubPrivateKeyManager(t *testing.T) { |
| km := stubkeymanager.StubPrivateKeyManager{ |
| PubKeyData: &tpb.KeyData{ |
| TypeUrl: "some.key.type", |
| Value: []byte("key_value"), |
| KeyMaterialType: tpb.KeyData_ASYMMETRIC_PUBLIC, |
| }, |
| } |
| pubKeyData, err := km.PublicKeyData(nil) |
| if err != nil { |
| t.Errorf("PublicKeyData() err = %v, want nil", err) |
| } |
| if !cmp.Equal(pubKeyData, km.PubKeyData, protocmp.Transform()) { |
| t.Errorf("PublicKeyData() = %v, want %v", pubKeyData, km.PubKeyData) |
| } |
| } |
| |
| func TestStubDerivableKeyManager(t *testing.T) { |
| km := stubkeymanager.StubDerivableKeyManager{ |
| KeyMatType: tpb.KeyData_SYMMETRIC, |
| DerKey: &agpb.AesGcmKey{Version: 0, KeyValue: []byte("derived_key_value")}, |
| DerErr: errors.New("hiya"), |
| } |
| if km.KeyMaterialType() != km.KeyMatType { |
| t.Errorf("KeyMaterialType() = %d, want %d", km.KeyMaterialType(), tpb.KeyData_SYMMETRIC) |
| } |
| derivedKey, err := km.DeriveKey([]byte{}, &bytes.Buffer{}) |
| if !cmp.Equal(derivedKey, km.DerKey, protocmp.Transform()) { |
| t.Errorf("DeriveKey() = %v, want %v", derivedKey, km.DerKey) |
| } |
| if err != km.DerErr { |
| t.Errorf("DeriveKey() err = %v, want %v", err, km.DerErr) |
| } |
| } |