Skip to content

Commit aa8783c

Browse files
morambrocopybara-github
authored andcommitted
Remove PrimitiveFromKeyData from keyset.Config and config.Config
This is ~a noop. In the future we want to allow configs solely operating on `key.Key`s, so this CL cleans up the interface. For now we keep `PrimitiveFromKeyData` in a separate unexported interface `configWithLegacyFallback` to continue supporting `registry.KeyManager`s through the global registry. PiperOrigin-RevId: 832271484 Change-Id: I9f344f30c9bb28613ad84b3dcc73c9134ad1d06d
1 parent 05e3b8e commit aa8783c

File tree

17 files changed

+130
-462
lines changed

17 files changed

+130
-462
lines changed

daead/daead_factory_test.go

Lines changed: 20 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -886,17 +886,11 @@ func TestNewWithConfig(t *testing.T) {
886886
t.Fatalf("protoserialization.RegisterKeySerializer() err = %v, want nil", err)
887887
}
888888

889-
builderWithFullPrimitive := config.NewBuilder()
890-
if err := builderWithFullPrimitive.RegisterPrimitiveConstructor(reflect.TypeFor[*stubKey](), func(key key.Key) (any, error) { return &stubFullDEAD{}, nil }, internalapi.Token{}); err != nil {
891-
t.Fatalf("builderWithFullPrimitive.RegisterPrimitiveConstructor() err = %v, want nil", err)
889+
configBuilder := config.NewBuilder()
890+
if err := configBuilder.RegisterPrimitiveConstructor(reflect.TypeFor[*stubKey](), func(key key.Key) (any, error) { return &stubFullDEAD{}, nil }, internalapi.Token{}); err != nil {
891+
t.Fatalf("configBuilder.RegisterPrimitiveConstructor() err = %v, want nil", err)
892892
}
893-
configWithFullPrimitive := builderWithFullPrimitive.Build()
894-
895-
builderWithLegacyPrimitive := config.NewBuilder()
896-
if err := builderWithLegacyPrimitive.RegisterKeyManager(stubKeyURL, &stubKeyManager{}, internalapi.Token{}); err != nil {
897-
t.Fatalf("builderWithLegacyPrimitive.RegisterKeyManager() err = %v, want nil", err)
898-
}
899-
configWithLegacyPrimitive := builderWithLegacyPrimitive.Build()
893+
config := configBuilder.Build()
900894

901895
km := keyset.NewManager()
902896
keyID, err := km.AddKey(&stubKey{
@@ -914,43 +908,22 @@ func TestNewWithConfig(t *testing.T) {
914908
t.Fatalf("km.Handle() err = %v, want nil", err)
915909
}
916910

917-
for _, tc := range []struct {
918-
name string
919-
kh *keyset.Handle
920-
config keyset.Config
921-
wantPrefix []byte
922-
}{
923-
{
924-
name: "full primitive",
925-
config: &configWithFullPrimitive,
926-
kh: handle,
927-
wantPrefix: slices.Concat([]byte(fullDAEADPrefix)),
928-
},
929-
{
930-
name: "legacy primitive",
931-
config: &configWithLegacyPrimitive,
932-
kh: handle,
933-
wantPrefix: slices.Concat([]byte{cryptofmt.TinkStartByte, 0x01, 0x02, 0x03, 0x04}, []byte(legacyDAEADPrefix)),
934-
},
935-
} {
936-
t.Run(tc.name, func(t *testing.T) {
937-
defer internalregistry.ClearMonitoringClient()
938-
client := fakemonitoring.NewClient("fake-client")
939-
if err := internalregistry.RegisterMonitoringClient(client); err != nil {
940-
t.Fatalf("internalregistry.RegisterMonitoringClient() err = %v, want nil", err)
941-
}
942-
encrypter, err := daead.NewWithConfig(tc.kh, tc.config)
943-
if err != nil {
944-
t.Fatalf("daead.NewWithConfig(tc.kh, config) err = %v, want nil", err)
945-
}
911+
defer internalregistry.ClearMonitoringClient()
912+
client := fakemonitoring.NewClient("fake-client")
913+
if err := internalregistry.RegisterMonitoringClient(client); err != nil {
914+
t.Fatalf("internalregistry.RegisterMonitoringClient() err = %v, want nil", err)
915+
}
916+
encrypter, err := daead.NewWithConfig(handle, &config)
917+
if err != nil {
918+
t.Fatalf("daead.NewWithConfig() err = %v, want nil", err)
919+
}
946920

947-
m, err := encrypter.EncryptDeterministically([]byte("message"), nil)
948-
if err != nil {
949-
t.Fatalf("encrypter.EncryptDeterministically() err = %v, want nil", err)
950-
}
951-
if !bytes.HasPrefix(m, tc.wantPrefix) {
952-
t.Errorf("m = %q, want prefix: %q", m, tc.wantPrefix)
953-
}
954-
})
921+
m, err := encrypter.EncryptDeterministically([]byte("message"), nil)
922+
if err != nil {
923+
t.Fatalf("encrypter.EncryptDeterministically() err = %v, want nil", err)
924+
}
925+
wantPrefix := slices.Concat([]byte(fullDAEADPrefix))
926+
if !bytes.HasPrefix(m, wantPrefix) {
927+
t.Errorf("m = %q, want prefix: %q", m, wantPrefix)
955928
}
956929
}

hybrid/hybrid_factory_test.go

Lines changed: 32 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1116,23 +1116,14 @@ func TestNewWithConfig(t *testing.T) {
11161116
t.Fatalf("protoserialization.RegisterKeySerializer() err = %v, want nil", err)
11171117
}
11181118

1119-
builderWithFullPrimitive := config.NewBuilder()
1120-
if err := builderWithFullPrimitive.RegisterPrimitiveConstructor(reflect.TypeFor[*stubPublicKey](), func(key key.Key) (any, error) { return &stubFullHybridEncrypt{}, nil }, internalapi.Token{}); err != nil {
1121-
t.Fatalf("builderWithFullPrimitive.RegisterPrimitiveConstructor() err = %v, want nil", err)
1119+
configBuilder := config.NewBuilder()
1120+
if err := configBuilder.RegisterPrimitiveConstructor(reflect.TypeFor[*stubPublicKey](), func(key key.Key) (any, error) { return &stubFullHybridEncrypt{}, nil }, internalapi.Token{}); err != nil {
1121+
t.Fatalf("configBuilder.RegisterPrimitiveConstructor() err = %v, want nil", err)
11221122
}
1123-
if err := builderWithFullPrimitive.RegisterPrimitiveConstructor(reflect.TypeFor[*stubPrivateKey](), func(key key.Key) (any, error) { return &stubFullHybridDecrypt{}, nil }, internalapi.Token{}); err != nil {
1124-
t.Fatalf("builderWithFullPrimitive.RegisterPrimitiveConstructor() err = %v, want nil", err)
1123+
if err := configBuilder.RegisterPrimitiveConstructor(reflect.TypeFor[*stubPrivateKey](), func(key key.Key) (any, error) { return &stubFullHybridDecrypt{}, nil }, internalapi.Token{}); err != nil {
1124+
t.Fatalf("configBuilder.RegisterPrimitiveConstructor() err = %v, want nil", err)
11251125
}
1126-
configWithFullPrimitive := builderWithFullPrimitive.Build()
1127-
1128-
builderWithLegacyPrimitive := config.NewBuilder()
1129-
if err := builderWithLegacyPrimitive.RegisterKeyManager(stubPublicKeyURL, &stubPublicKeyManager{}, internalapi.Token{}); err != nil {
1130-
t.Fatalf("builderWithLegacyPrimitive.RegisterKeyManager() err = %v, want nil", err)
1131-
}
1132-
if err := builderWithLegacyPrimitive.RegisterKeyManager(stubPrivateKeyURL, &stubPrivateKeyManager{}, internalapi.Token{}); err != nil {
1133-
t.Fatalf("builderWithLegacyPrimitive.RegisterKeyManager() err = %v, want nil", err)
1134-
}
1135-
configWithLegacyPrimitive := builderWithLegacyPrimitive.Build()
1126+
config := configBuilder.Build()
11361127

11371128
km := keyset.NewManager()
11381129
privateKey := &stubPrivateKey{
@@ -1149,54 +1140,32 @@ func TestNewWithConfig(t *testing.T) {
11491140
t.Fatalf("km.Handle() err = %v, want nil", err)
11501141
}
11511142

1152-
for _, tc := range []struct {
1153-
name string
1154-
kh *keyset.Handle
1155-
config keyset.Config
1156-
wantPrefix []byte
1157-
}{
1158-
{
1159-
name: "full primitive",
1160-
config: &configWithFullPrimitive,
1161-
kh: handle,
1162-
wantPrefix: slices.Concat(stubPrefix, []byte("full_primitive")),
1163-
},
1164-
{
1165-
name: "legacy primitive",
1166-
config: &configWithLegacyPrimitive,
1167-
kh: handle,
1168-
wantPrefix: slices.Concat(stubPrefix, []byte("legacy_primitive")),
1169-
},
1170-
} {
1171-
t.Run(tc.name, func(t *testing.T) {
1172-
publicHandle, err := tc.kh.Public()
1173-
if err != nil {
1174-
t.Fatalf("handle.Public() err = %v, want nil", err)
1175-
}
1176-
1177-
encrypter, err := hybrid.NewHybridEncryptWithConfig(publicHandle, tc.config)
1178-
if err != nil {
1179-
t.Fatalf("hybrid.NewHybridEncryptWithConfig(tc.kh, config) err = %v, want nil", err)
1180-
}
1181-
decrypter, err := hybrid.NewHybridDecryptWithConfig(tc.kh, tc.config)
1182-
if err != nil {
1183-
t.Fatalf("hybrid.NewHybridDecryptWithConfig(tc.kh, config) err = %v, want nil", err)
1184-
}
1143+
publicHandle, err := handle.Public()
1144+
if err != nil {
1145+
t.Fatalf("handle.Public() err = %v, want nil", err)
1146+
}
1147+
encrypter, err := hybrid.NewHybridEncryptWithConfig(publicHandle, &config)
1148+
if err != nil {
1149+
t.Fatalf("hybrid.NewHybridEncryptWithConfig() err = %v, want nil", err)
1150+
}
1151+
decrypter, err := hybrid.NewHybridDecryptWithConfig(handle, &config)
1152+
if err != nil {
1153+
t.Fatalf("hybrid.NewHybridDecryptWithConfig() err = %v, want nil", err)
1154+
}
11851155

1186-
ct, err := encrypter.Encrypt([]byte("message"), nil)
1187-
if err != nil {
1188-
t.Fatalf("encrypter.Encrypt() err = %v, want nil", err)
1189-
}
1190-
if !bytes.HasPrefix(ct, tc.wantPrefix) {
1191-
t.Errorf("m = %q, want prefix: %q", ct, tc.wantPrefix)
1192-
}
1193-
pt, err := decrypter.Decrypt(ct, nil)
1194-
if err != nil {
1195-
t.Fatalf("decrypter.Decrypt() err = %v, want nil", err)
1196-
}
1197-
if !bytes.Equal(pt, []byte("message")) {
1198-
t.Errorf("pt = %q, want: %q", pt, []byte("message"))
1199-
}
1200-
})
1156+
ct, err := encrypter.Encrypt([]byte("message"), nil)
1157+
if err != nil {
1158+
t.Fatalf("encrypter.Encrypt() err = %v, want nil", err)
1159+
}
1160+
wantPrefix := slices.Concat(stubPrefix, []byte("full_primitive"))
1161+
if !bytes.HasPrefix(ct, wantPrefix) {
1162+
t.Errorf("m = %q, want prefix: %q", ct, wantPrefix)
1163+
}
1164+
pt, err := decrypter.Decrypt(ct, nil)
1165+
if err != nil {
1166+
t.Fatalf("decrypter.Decrypt() err = %v, want nil", err)
1167+
}
1168+
if !bytes.Equal(pt, []byte("message")) {
1169+
t.Errorf("pt = %q, want: %q", pt, []byte("message"))
12011170
}
12021171
}

internal/config/aeadconfig/v0_test.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -205,11 +205,6 @@ func TestConfigV0AEAD(t *testing.T) {
205205
},
206206
} {
207207
t.Run(test.name, func(t *testing.T) {
208-
// No key manager for this key type.
209-
if _, err := configV0.PrimitiveFromKeyData(test.keyData, internalapi.Token{}); err == nil {
210-
t.Fatalf("configV0.PrimitiveFromKeyData() err=nil, want error")
211-
}
212-
213208
aead, err := configV0.PrimitiveFromKey(test.key, internalapi.Token{})
214209
if err != nil {
215210
t.Fatalf("configV0.PrimitiveFromKey() err=%v, want nil", err)

internal/config/config.go

Lines changed: 1 addition & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -23,35 +23,19 @@ import (
2323
"github.com/tink-crypto/tink-go/v2/core/registry"
2424
"github.com/tink-crypto/tink-go/v2/internal/internalapi"
2525
"github.com/tink-crypto/tink-go/v2/key"
26-
tinkpb "github.com/tink-crypto/tink-go/v2/proto/tink_go_proto"
2726
)
2827

2928
// Config keeps a collection of functions that create a primitive from
3029
// [key.Key].
31-
//
32-
// This is an internal API.
3330
type Config struct {
3431
primitiveConstructors map[reflect.Type]func(key key.Key) (any, error)
3532
keysetManagers map[string]registry.KeyManager
3633
}
3734

38-
// PrimitiveFromKeyData creates a primitive from the given [tinkpb.KeyData].
39-
// Returns an error if there is no key manager registered for the given key
40-
// type URL.
41-
//
42-
// This is an internal API.
43-
func (c *Config) PrimitiveFromKeyData(kd *tinkpb.KeyData, _ internalapi.Token) (any, error) {
44-
km, ok := c.keysetManagers[kd.GetTypeUrl()]
45-
if !ok {
46-
return nil, fmt.Errorf("PrimitiveFromKeyData: no key manager for key URL %v", kd.GetTypeUrl())
47-
}
48-
return km.Primitive(kd.GetValue())
49-
}
50-
5135
// PrimitiveFromKey creates a primitive from the given [key.Key]. Returns an
5236
// error if there is no primitiveConstructor registered for the given key.
5337
//
54-
// This is an internal API.
38+
// This implements [keyset.Config].
5539
func (c *Config) PrimitiveFromKey(k key.Key, _ internalapi.Token) (any, error) {
5640
keyType := reflect.TypeOf(k)
5741
creator, ok := c.primitiveConstructors[keyType]
@@ -74,8 +58,6 @@ type Builder struct {
7458
// registered (no matter whether it's the same object or different, since
7559
// constructors are of type [Func] and they are never considered equal in Go
7660
// unless they are nil).
77-
//
78-
// This is an internal API.
7961
func (b *Builder) RegisterPrimitiveConstructor(keyType reflect.Type, constructor func(key key.Key) (any, error), _ internalapi.Token) error {
8062
if _, ok := b.config.primitiveConstructors[keyType]; ok {
8163
return fmt.Errorf("RegisterPrimitiveConstructor: attempt to register a different primitive constructor for the same key type %v", keyType)
@@ -84,19 +66,6 @@ func (b *Builder) RegisterPrimitiveConstructor(keyType reflect.Type, constructor
8466
return nil
8567
}
8668

87-
// RegisterKeyManager registers a key manager for a key type URL.
88-
//
89-
// Not thread-safe.
90-
//
91-
// This is an internal API.
92-
func (b *Builder) RegisterKeyManager(keyTypeURL string, km registry.KeyManager, _ internalapi.Token) error {
93-
if _, ok := b.config.keysetManagers[keyTypeURL]; ok {
94-
return fmt.Errorf("RegisterKeyManager: attempt to register a different key manager for %v", keyTypeURL)
95-
}
96-
b.config.keysetManagers[keyTypeURL] = km
97-
return nil
98-
}
99-
10069
// Build creates a [Config] from the [Builder].
10170
func (b *Builder) Build() Config {
10271
c := Config{

0 commit comments

Comments
 (0)