| // Copyright 2019 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 testkeyset provides for test code methods to read or write cleartext keyset material. |
| package testkeyset |
| |
| import ( |
| "errors" |
| |
| "github.com/google/tink/go/internal" |
| "github.com/google/tink/go/keyset" |
| tinkpb "github.com/google/tink/go/proto/tink_go_proto" |
| ) |
| |
| var ( |
| keysetHandle = internal.KeysetHandle.(func(*tinkpb.Keyset, ...keyset.Option) (*keyset.Handle, error)) |
| keysetMaterial = internal.KeysetMaterial.(func(*keyset.Handle) *tinkpb.Keyset) |
| |
| errInvalidKeyset = errors.New("cleartextkeyset: invalid keyset") |
| errInvalidHandle = errors.New("cleartextkeyset: invalid handle") |
| errInvalidReader = errors.New("cleartextkeyset: invalid reader") |
| errInvalidWriter = errors.New("cleartextkeyset: invalid writer") |
| ) |
| |
| // NewHandle creates a new instance of Handle using the given keyset. |
| func NewHandle(ks *tinkpb.Keyset) (*keyset.Handle, error) { |
| if ks == nil || len(ks.Key) == 0 { |
| return nil, errInvalidKeyset |
| } |
| return keysetHandle(ks) |
| } |
| |
| // Read creates a keyset.Handle from a cleartext keyset obtained via r. |
| func Read(r keyset.Reader) (*keyset.Handle, error) { |
| if r == nil { |
| return nil, errInvalidReader |
| } |
| ks, err := r.Read() |
| if err != nil || ks == nil || len(ks.Key) == 0 { |
| return nil, errInvalidKeyset |
| } |
| return keysetHandle(ks) |
| } |
| |
| // Write exports the keyset from h to the given writer w without encrypting it. |
| // Storing secret key material in an unencrypted fashion is dangerous. If feasible, you should use |
| // [keyset.Handle.Write] instead. |
| func Write(h *keyset.Handle, w keyset.Writer) error { |
| if h == nil { |
| return errInvalidHandle |
| } |
| if w == nil { |
| return errInvalidWriter |
| } |
| return w.Write(KeysetMaterial(h)) |
| } |
| |
| // KeysetMaterial returns the key material contained in a keyset.Handle. |
| func KeysetMaterial(h *keyset.Handle) *tinkpb.Keyset { |
| return keysetMaterial(h) |
| } |
| |
| // KeysetHandle creates a keyset.Handle from cleartext key material. |
| // |
| // Callers should verify that the returned *keyset.Handle isn't nil. |
| // |
| // Deprecated: Use [NewHandle]. |
| func KeysetHandle(ks *tinkpb.Keyset) *keyset.Handle { |
| kh, err := keysetHandle(ks) |
| if err != nil { |
| // This *keyset.Handle can only return errors when *keyset.Option arguments |
| // are provided. To maintain backwards compatibility and avoid panic, it returns |
| // a nil value if an error happens. |
| return nil |
| } |
| return kh |
| } |