Skip to content

Commit

Permalink
feat: Adding a storage option to the KeyStore (#594)
Browse files Browse the repository at this point in the history
The key store now allows for both a default DynamoDB table,
or any custom storage system.

The important aspect about the key store
is the fact that branch keys can be versioned easily,
and are cryptographically safe to use.
The actual storage medium is not important.

See: https://github.com/awslabs/aws-encryption-sdk-specification/blob/master/changes/2024-6-17_key-store-persistance/background.md#background
  • Loading branch information
seebees authored Sep 18, 2024
1 parent 9c61e8b commit 0f79e74
Show file tree
Hide file tree
Showing 76 changed files with 8,525 additions and 1,560 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ module TestAwsKmsHierarchicalKeyring {
return encryptionMaterialsIn;
}

method {:test} TestHierarchyClientESDKSuite()
method {:test} {:vcs_split_on_every_assert} TestHierarchyClientESDKSuite()
{
var branchKeyId := BRANCH_KEY_ID;
// TTL = 166.67 hours
Expand All @@ -84,10 +84,17 @@ module TestAwsKmsHierarchicalKeyring {
id := None,
kmsConfiguration := kmsConfig,
logicalKeyStoreName := logicalKeyStoreName,
grantTokens := None,
ddbTableName := branchKeyStoreName,
ddbClient := Some(ddbClient),
kmsClient := Some(kmsClient)
storage := Some(
KeyStoreTypes.ddb(
KeyStoreTypes.DynamoDBTable(
ddbTableName := branchKeyStoreName,
ddbClient := Some(ddbClient)
))),
keyManagement := Some(
KeyStoreTypes.kms(
KeyStoreTypes.AwsKms(
kmsClient := Some(kmsClient)
)))
);

var keyStore :- expect KeyStore.KeyStore(keyStoreConfig);
Expand All @@ -113,7 +120,7 @@ module TestAwsKmsHierarchicalKeyring {
TestRoundtrip(hierarchyKeyring, materials, TEST_ESDK_ALG_SUITE_ID, branchKeyId);
}

method {:test} TestHierarchyClientDBESuite() {
method {:test} {:vcs_split_on_every_assert} TestHierarchyClientDBESuite() {
var branchKeyId := BRANCH_KEY_ID;
// TTL = 166.67 hours
var ttl : Types.PositiveLong := (1 * 60000) * 10;
Expand All @@ -127,10 +134,17 @@ module TestAwsKmsHierarchicalKeyring {
id := None,
kmsConfiguration := kmsConfig,
logicalKeyStoreName := logicalKeyStoreName,
grantTokens := None,
ddbTableName := branchKeyStoreName,
ddbClient := Some(ddbClient),
kmsClient := Some(kmsClient)
storage := Some(
KeyStoreTypes.ddb(
KeyStoreTypes.DynamoDBTable(
ddbTableName := branchKeyStoreName,
ddbClient := Some(ddbClient)
))),
keyManagement := Some(
KeyStoreTypes.kms(
KeyStoreTypes.AwsKms(
kmsClient := Some(kmsClient)
)))
);

var keyStore :- expect KeyStore.KeyStore(keyStoreConfig);
Expand All @@ -156,7 +170,7 @@ module TestAwsKmsHierarchicalKeyring {
TestRoundtrip(hierarchyKeyring, materials, TEST_DBE_ALG_SUITE_ID, branchKeyId);
}

method {:test} TestBranchKeyIdSupplier()
method {:test} {:vcs_split_on_every_assert} TestBranchKeyIdSupplier()
{
var branchKeyIdSupplier: Types.IBranchKeyIdSupplier := new DummyBranchKeyIdSupplier();
// TTL = 166.67 hours
Expand All @@ -171,10 +185,17 @@ module TestAwsKmsHierarchicalKeyring {
id := None,
kmsConfiguration := kmsConfig,
logicalKeyStoreName := logicalKeyStoreName,
grantTokens := None,
ddbTableName := branchKeyStoreName,
ddbClient := Some(ddbClient),
kmsClient := Some(kmsClient)
storage := Some(
KeyStoreTypes.ddb(
KeyStoreTypes.DynamoDBTable(
ddbTableName := branchKeyStoreName,
ddbClient := Some(ddbClient)
))),
keyManagement := Some(
KeyStoreTypes.kms(
KeyStoreTypes.AwsKms(
kmsClient := Some(kmsClient)
)))
);

var keyStore :- expect KeyStore.KeyStore(keyStoreConfig);
Expand Down Expand Up @@ -202,7 +223,7 @@ module TestAwsKmsHierarchicalKeyring {
TestRoundtrip(hierarchyKeyring, materials, TEST_DBE_ALG_SUITE_ID, BRANCH_KEY_ID_B);
}

method {:test} TestInvalidDataKeyError()
method {:test} {:vcs_split_on_every_assert} TestInvalidDataKeyError()
{
var branchKeyIdSupplier: Types.IBranchKeyIdSupplier := new DummyBranchKeyIdSupplier();
// TTL = 166.67 hours
Expand All @@ -215,10 +236,17 @@ module TestAwsKmsHierarchicalKeyring {
id := None,
kmsConfiguration := kmsConfig,
logicalKeyStoreName := logicalKeyStoreName,
grantTokens := None,
ddbTableName := branchKeyStoreName,
ddbClient := Some(ddbClient),
kmsClient := Some(kmsClient)
storage := Some(
KeyStoreTypes.ddb(
KeyStoreTypes.DynamoDBTable(
ddbTableName := branchKeyStoreName,
ddbClient := Some(ddbClient)
))),
keyManagement := Some(
KeyStoreTypes.kms(
KeyStoreTypes.AwsKms(
kmsClient := Some(kmsClient)
)))
);
var keyStore :- expect KeyStore.KeyStore(keyStoreConfig);
var hierarchyKeyring :- expect mpl.CreateAwsKmsHierarchicalKeyring(
Expand Down
Loading

0 comments on commit 0f79e74

Please sign in to comment.