2020-08-19 16:47:18 -04:00
|
|
|
package kms
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
|
|
"github.com/hashicorp/boundary/internal/db"
|
2022-03-16 17:04:07 -04:00
|
|
|
wrapping "github.com/hashicorp/go-kms-wrapping/v2"
|
|
|
|
|
aead "github.com/hashicorp/go-kms-wrapping/v2/aead"
|
2020-08-19 16:47:18 -04:00
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
|
)
|
|
|
|
|
|
2021-09-30 09:17:27 -04:00
|
|
|
func TestRootKey(t *testing.T, conn *db.DB, scopeId string) *RootKey {
|
2020-08-19 16:47:18 -04:00
|
|
|
t.Helper()
|
|
|
|
|
require := require.New(t)
|
2022-01-05 14:38:38 -05:00
|
|
|
db.TestDeleteWhere(t, conn, func() interface{} { i := AllocRootKey(); return &i }(), "scope_id = ?", scopeId)
|
2020-08-19 16:47:18 -04:00
|
|
|
rw := db.New(conn)
|
|
|
|
|
k, err := NewRootKey(scopeId)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
id, err := newRootKeyId()
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
k.PrivateId = id
|
|
|
|
|
err = rw.Create(context.Background(), k)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
return k
|
|
|
|
|
}
|
|
|
|
|
|
2021-09-30 09:17:27 -04:00
|
|
|
func TestRootKeyVersion(t *testing.T, conn *db.DB, wrapper wrapping.Wrapper, rootId string) (kv *RootKeyVersion, kvWrapper wrapping.Wrapper) {
|
2020-08-19 16:47:18 -04:00
|
|
|
t.Helper()
|
|
|
|
|
require := require.New(t)
|
|
|
|
|
rw := db.New(conn)
|
2020-09-02 07:42:03 -04:00
|
|
|
rootKeyVersionWrapper := db.TestWrapper(t)
|
2022-03-16 17:04:07 -04:00
|
|
|
key, err := rootKeyVersionWrapper.(*aead.Wrapper).KeyBytes(context.Background())
|
|
|
|
|
require.NoError(err)
|
2020-08-19 16:47:18 -04:00
|
|
|
k, err := NewRootKeyVersion(rootId, key)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
id, err := newRootKeyVersionId()
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
k.PrivateId = id
|
|
|
|
|
err = k.Encrypt(context.Background(), wrapper)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
err = rw.Create(context.Background(), k)
|
|
|
|
|
require.NoError(err)
|
2022-03-16 17:04:07 -04:00
|
|
|
_, err = rootKeyVersionWrapper.(*aead.Wrapper).SetConfig(context.Background(), wrapping.WithKeyId(k.GetPrivateId()))
|
2020-09-02 07:42:03 -04:00
|
|
|
require.NoError(err)
|
|
|
|
|
return k, rootKeyVersionWrapper
|
2020-08-19 16:47:18 -04:00
|
|
|
}
|
|
|
|
|
|
2021-09-30 09:17:27 -04:00
|
|
|
func TestKms(t *testing.T, conn *db.DB, rootWrapper wrapping.Wrapper) *Kms {
|
2020-08-19 16:47:18 -04:00
|
|
|
t.Helper()
|
|
|
|
|
require := require.New(t)
|
|
|
|
|
rw := db.New(conn)
|
|
|
|
|
kmsRepo, err := NewRepository(rw, rw)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
kms, err := NewKms(kmsRepo)
|
|
|
|
|
require.NoError(err)
|
2022-03-16 17:04:07 -04:00
|
|
|
err = kms.AddExternalWrappers(context.Background(), WithRootWrapper(rootWrapper))
|
2020-08-19 16:47:18 -04:00
|
|
|
require.NoError(err)
|
|
|
|
|
return kms
|
|
|
|
|
}
|
2020-09-02 07:42:03 -04:00
|
|
|
|
2021-09-30 09:17:27 -04:00
|
|
|
func TestDatabaseKey(t *testing.T, conn *db.DB, rootKeyId string) *DatabaseKey {
|
2020-09-02 07:42:03 -04:00
|
|
|
t.Helper()
|
|
|
|
|
require := require.New(t)
|
|
|
|
|
rw := db.New(conn)
|
2022-01-05 14:38:38 -05:00
|
|
|
db.TestDeleteWhere(t, conn, func() interface{} { i := AllocDatabaseKey(); return &i }(), "root_key_id = ?", rootKeyId)
|
2020-09-02 07:42:03 -04:00
|
|
|
k, err := NewDatabaseKey(rootKeyId)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
id, err := newDatabaseKeyId()
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
k.PrivateId = id
|
|
|
|
|
k.RootKeyId = rootKeyId
|
|
|
|
|
err = rw.Create(context.Background(), k)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
return k
|
|
|
|
|
}
|
|
|
|
|
|
2021-09-30 09:17:27 -04:00
|
|
|
func TestDatabaseKeyVersion(t *testing.T, conn *db.DB, rootKeyVersionWrapper wrapping.Wrapper, databaseKeyId string, key []byte) *DatabaseKeyVersion {
|
2020-09-02 07:42:03 -04:00
|
|
|
t.Helper()
|
|
|
|
|
require := require.New(t)
|
|
|
|
|
rw := db.New(conn)
|
2022-03-16 17:04:07 -04:00
|
|
|
rootKeyId, err := rootKeyVersionWrapper.KeyId(context.Background())
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
rootKeyVersionId := rootKeyId
|
2020-09-02 07:42:03 -04:00
|
|
|
require.NotEmpty(rootKeyVersionId)
|
|
|
|
|
k, err := NewDatabaseKeyVersion(databaseKeyId, key, rootKeyVersionId)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
id, err := newDatabaseKeyVersionId()
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
k.PrivateId = id
|
|
|
|
|
err = k.Encrypt(context.Background(), rootKeyVersionWrapper)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
err = rw.Create(context.Background(), k)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
return k
|
|
|
|
|
}
|
2020-09-02 14:37:19 -04:00
|
|
|
|
2021-09-30 09:17:27 -04:00
|
|
|
func TestOplogKey(t *testing.T, conn *db.DB, rootKeyId string) *OplogKey {
|
2020-09-02 14:37:19 -04:00
|
|
|
t.Helper()
|
|
|
|
|
require := require.New(t)
|
|
|
|
|
rw := db.New(conn)
|
2022-01-05 14:38:38 -05:00
|
|
|
db.TestDeleteWhere(t, conn, func() interface{} { i := AllocOplogKey(); return &i }(), "root_key_id = ?", rootKeyId)
|
2020-09-02 14:37:19 -04:00
|
|
|
k, err := NewOplogKey(rootKeyId)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
id, err := newOplogKeyId()
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
k.PrivateId = id
|
|
|
|
|
k.RootKeyId = rootKeyId
|
|
|
|
|
err = rw.Create(context.Background(), k)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
return k
|
|
|
|
|
}
|
|
|
|
|
|
2021-09-30 09:17:27 -04:00
|
|
|
func TestOplogKeyVersion(t *testing.T, conn *db.DB, rootKeyVersionWrapper wrapping.Wrapper, oplogKeyId string, key []byte) *OplogKeyVersion {
|
2020-09-02 14:37:19 -04:00
|
|
|
t.Helper()
|
|
|
|
|
require := require.New(t)
|
|
|
|
|
rw := db.New(conn)
|
2022-03-16 17:04:07 -04:00
|
|
|
rootKeyId, err := rootKeyVersionWrapper.KeyId(context.Background())
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
rootKeyVersionId := rootKeyId
|
2020-09-02 14:37:19 -04:00
|
|
|
require.NotEmpty(rootKeyVersionId)
|
|
|
|
|
k, err := NewOplogKeyVersion(oplogKeyId, key, rootKeyVersionId)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
id, err := newOplogKeyVersionId()
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
k.PrivateId = id
|
|
|
|
|
err = k.Encrypt(context.Background(), rootKeyVersionWrapper)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
err = rw.Create(context.Background(), k)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
return k
|
|
|
|
|
}
|
|
|
|
|
|
2021-09-30 09:17:27 -04:00
|
|
|
func TestTokenKey(t *testing.T, conn *db.DB, rootKeyId string) *TokenKey {
|
2020-09-02 14:37:19 -04:00
|
|
|
t.Helper()
|
|
|
|
|
require := require.New(t)
|
2022-01-05 14:38:38 -05:00
|
|
|
db.TestDeleteWhere(t, conn, func() interface{} { i := AllocTokenKey(); return &i }(), "root_key_id = ?", rootKeyId)
|
2020-09-02 14:37:19 -04:00
|
|
|
rw := db.New(conn)
|
|
|
|
|
k, err := NewTokenKey(rootKeyId)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
id, err := newTokenKeyId()
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
k.PrivateId = id
|
|
|
|
|
k.RootKeyId = rootKeyId
|
|
|
|
|
err = rw.Create(context.Background(), k)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
return k
|
|
|
|
|
}
|
|
|
|
|
|
2021-09-30 09:17:27 -04:00
|
|
|
func TestTokenKeyVersion(t *testing.T, conn *db.DB, rootKeyVersionWrapper wrapping.Wrapper, tokenKeyId string, key []byte) *TokenKeyVersion {
|
2020-09-02 14:37:19 -04:00
|
|
|
t.Helper()
|
|
|
|
|
require := require.New(t)
|
|
|
|
|
rw := db.New(conn)
|
2022-03-16 17:04:07 -04:00
|
|
|
rootKeyId, err := rootKeyVersionWrapper.KeyId(context.Background())
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
rootKeyVersionId := rootKeyId
|
2020-09-02 14:37:19 -04:00
|
|
|
require.NotEmpty(rootKeyVersionId)
|
|
|
|
|
k, err := NewTokenKeyVersion(tokenKeyId, key, rootKeyVersionId)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
id, err := newTokenKeyVersionId()
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
k.PrivateId = id
|
|
|
|
|
err = k.Encrypt(context.Background(), rootKeyVersionWrapper)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
err = rw.Create(context.Background(), k)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
return k
|
|
|
|
|
}
|
|
|
|
|
|
2021-09-30 09:17:27 -04:00
|
|
|
func TestSessionKey(t *testing.T, conn *db.DB, rootKeyId string) *SessionKey {
|
2020-09-02 14:37:19 -04:00
|
|
|
t.Helper()
|
|
|
|
|
require := require.New(t)
|
2022-01-05 14:38:38 -05:00
|
|
|
db.TestDeleteWhere(t, conn, func() interface{} { i := AllocSessionKey(); return &i }(), "root_key_id = ?", rootKeyId)
|
2020-09-02 14:37:19 -04:00
|
|
|
rw := db.New(conn)
|
|
|
|
|
k, err := NewSessionKey(rootKeyId)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
id, err := newSessionKeyId()
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
k.PrivateId = id
|
|
|
|
|
k.RootKeyId = rootKeyId
|
|
|
|
|
err = rw.Create(context.Background(), k)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
return k
|
|
|
|
|
}
|
|
|
|
|
|
2021-09-30 09:17:27 -04:00
|
|
|
func TestSessionKeyVersion(t *testing.T, conn *db.DB, rootKeyVersionWrapper wrapping.Wrapper, sessionKeyId string, key []byte) *SessionKeyVersion {
|
2020-09-02 14:37:19 -04:00
|
|
|
t.Helper()
|
|
|
|
|
require := require.New(t)
|
|
|
|
|
rw := db.New(conn)
|
2022-03-16 17:04:07 -04:00
|
|
|
rootKeyId, err := rootKeyVersionWrapper.KeyId(context.Background())
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
rootKeyVersionId := rootKeyId
|
2020-09-02 14:37:19 -04:00
|
|
|
require.NotEmpty(rootKeyVersionId)
|
|
|
|
|
k, err := NewSessionKeyVersion(sessionKeyId, key, rootKeyVersionId)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
id, err := newSessionKeyVersionId()
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
k.PrivateId = id
|
|
|
|
|
err = k.Encrypt(context.Background(), rootKeyVersionWrapper)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
err = rw.Create(context.Background(), k)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
return k
|
|
|
|
|
}
|
2021-01-26 14:37:10 -05:00
|
|
|
|
2021-09-30 09:17:27 -04:00
|
|
|
func TestOidcKey(t *testing.T, conn *db.DB, rootKeyId string) *OidcKey {
|
2021-01-26 14:37:10 -05:00
|
|
|
t.Helper()
|
|
|
|
|
require := require.New(t)
|
2022-01-05 14:38:38 -05:00
|
|
|
db.TestDeleteWhere(t, conn, func() interface{} { i := AllocOidcKey(); return &i }(), "root_key_id = ?", rootKeyId)
|
2021-01-26 14:37:10 -05:00
|
|
|
rw := db.New(conn)
|
|
|
|
|
k, err := NewOidcKey(rootKeyId)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
id, err := newOidcKeyId()
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
k.PrivateId = id
|
|
|
|
|
k.RootKeyId = rootKeyId
|
|
|
|
|
err = rw.Create(context.Background(), k)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
return k
|
|
|
|
|
}
|
|
|
|
|
|
2021-09-30 09:17:27 -04:00
|
|
|
func TestOidcKeyVersion(t *testing.T, conn *db.DB, rootKeyVersionWrapper wrapping.Wrapper, oidcKeyId string, key []byte) *OidcKeyVersion {
|
2021-01-26 14:37:10 -05:00
|
|
|
t.Helper()
|
|
|
|
|
require := require.New(t)
|
|
|
|
|
rw := db.New(conn)
|
2022-03-16 17:04:07 -04:00
|
|
|
rootKeyId, err := rootKeyVersionWrapper.KeyId(context.Background())
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
rootKeyVersionId := rootKeyId
|
2021-01-26 14:37:10 -05:00
|
|
|
require.NotEmpty(rootKeyVersionId)
|
|
|
|
|
k, err := NewOidcKeyVersion(oidcKeyId, key, rootKeyVersionId)
|
|
|
|
|
require.NoError(err)
|
2021-10-28 09:45:58 -07:00
|
|
|
id, err := newOidcKeyVersionId()
|
2021-01-26 14:37:10 -05:00
|
|
|
require.NoError(err)
|
|
|
|
|
k.PrivateId = id
|
|
|
|
|
err = k.Encrypt(context.Background(), rootKeyVersionWrapper)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
err = rw.Create(context.Background(), k)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
return k
|
|
|
|
|
}
|
2021-11-04 09:34:01 -04:00
|
|
|
|
|
|
|
|
func TestAuditKey(t *testing.T, conn *db.DB, rootKeyId string) *AuditKey {
|
|
|
|
|
t.Helper()
|
|
|
|
|
ctx := context.Background()
|
|
|
|
|
require := require.New(t)
|
2022-01-05 14:38:38 -05:00
|
|
|
db.TestDeleteWhere(t, conn, func() interface{} { i := AllocAuditKey(); return &i }(), "root_key_id = ?", rootKeyId)
|
2021-11-04 09:34:01 -04:00
|
|
|
rw := db.New(conn)
|
|
|
|
|
k, err := NewAuditKey(ctx, rootKeyId)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
id, err := newAuditKeyId(ctx)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
k.PrivateId = id
|
|
|
|
|
k.RootKeyId = rootKeyId
|
|
|
|
|
err = rw.Create(context.Background(), k)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
return k
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestAuditKeyVersion(t *testing.T, conn *db.DB, rootKeyVersionWrapper wrapping.Wrapper, auditKeyId string, key []byte) *AuditKeyVersion {
|
|
|
|
|
t.Helper()
|
|
|
|
|
ctx := context.Background()
|
|
|
|
|
require := require.New(t)
|
|
|
|
|
rw := db.New(conn)
|
2022-03-16 17:04:07 -04:00
|
|
|
rootKeyVersionId, err := rootKeyVersionWrapper.KeyId(ctx)
|
|
|
|
|
require.NoError(err)
|
2021-11-04 09:34:01 -04:00
|
|
|
require.NotEmpty(rootKeyVersionId)
|
|
|
|
|
k, err := NewAuditKeyVersion(ctx, auditKeyId, key, rootKeyVersionId)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
id, err := newAuditKeyVersionId(ctx)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
k.PrivateId = id
|
|
|
|
|
err = k.Encrypt(context.Background(), rootKeyVersionWrapper)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
err = rw.Create(context.Background(), k)
|
|
|
|
|
require.NoError(err)
|
|
|
|
|
return k
|
|
|
|
|
}
|