@@ -59,8 +59,11 @@ that customers SHOULD use.
5959## Motivation
6060
6161Prior to this change, the Default CMM serves two purposes.
62- First, it provides a base implementation of a CMM that uses a
63- keyring or master key provider to ensure valid materials.
62+ First, it provides a base implementation of a CMM that:
63+
64+ - Uses a keyring or master key provider to provide valid materials.
65+ - Handles providing the signature key and verification key with the materials.
66+
6467Second, it serves as a safe default that can be used for most use cases.
6568
6669While there is currently no conflict in these purposes,
@@ -72,7 +75,9 @@ One way to address this would be to directly add the new desired behavior
7275to the current Default CMM implementation,
7376however this makes our provided CMMs less composable.
7477Keeping the CMM composable is important because it allows users to assert desired properties
75- [ by construction] ( ../../tenets.md#correct-by-construction ) .
78+ [ by construction] ( https://github.com/awslabs/aws-encryption-sdk-specification/blob/2ec7674c304c408c2a32d412e834939c73f68d80/tenets.md#correct-by-construction ) .
79+ Additionally this approach would not allow customers to opt out of this new behavior if
80+ it is not desirable for their use case.
7681Because it is important to retain this base implementation,
7782we should define a CMM whose sole purpose is to be this base implementation.
7883We will call this CMM implementation the Keyring CMM.
@@ -124,7 +129,9 @@ or compose a CMM using the AWS Encryption SDK's provided CMM implementations
124129The Default CMM is a specific configuration of a
125130CMM implementation provided by the AWS Encryption SDK.
126131
127- The specific CMM configuration describes a safe default that serves most use cases.
132+ The specific CMM configuration describes a
133+ [ safe default] ( https://github.com/awslabs/aws-encryption-sdk-specification/blob/2ec7674c304c408c2a32d412e834939c73f68d80/tenets.md#sensible-defaults )
134+ that serves most use cases.
128135
129136The CMM configuration defined by the Default CMM is the [ Keyring CMM] ( #keyring-cmm ) as is
130137(The Keyring CMM provides no additional options other than specifying an underlying Keyring).
@@ -171,15 +178,19 @@ SHOULD compose with the Master Key Provider CMM.
171178
172179### Default CMM
173180
174- On initialization it MUST accept :
181+ On initialization, the caller MUST provide exactly one of the following :
175182
176- - an underlying [ Keyring] ( ../../framework/keyring-interface.md )
183+ - [ Keyring] ( ../../framework/keyring-interface.md )
184+ - If this AWS Encryption SDK implementations provides a [ Master Key Provider CMM] ( #master-key-provider-cmm ) ,
185+ a [ Master Key Provider] ( ../../framework/master-key-provider-interface.md )
177186
178- It MUST NOT take any additional configuration.
187+ The Default CMM MUST NOT accept any additional configuration.
179188
180189It MUST construct a CMM in the following manner:
181190
182- - Initialize a [ Keyring CMM] ( #keyring-cmm ) with the configured underlying Keyring
191+ - If a keyring was supplied, initialize a [ Keyring CMM] ( #keyring-cmm ) with the provided keyring.
192+ - If a master key provider was supplied, initialize a [ Master Key Provider CMM] ( #keyring-cmm )
193+ with the provided master key provider.
183194
184195This CMM MUST NOT offer any additional features beyond the composed CMM created
185196above.
0 commit comments