@@ -45,19 +45,6 @@ module AwsCryptographyDbEncryptionSdkDynamoDbOperations refines AbstractAwsCrypt
45
45
method GetEncryptedDataKeyDescription (config: InternalConfig , input: GetEncryptedDataKeyDescriptionInput )
46
46
returns (output: Result< GetEncryptedDataKeyDescriptionOutput, Error> )
47
47
ensures GetEncryptedDataKeyDescriptionEnsuresPublicly (input, output)
48
- ensures output. Success? ==> (
49
- match input. input {
50
- case plaintextItem (item) =>
51
- DynamoToStruct. ItemToStructured (item). Success?
52
- && var extracted := DynamoToStruct. ItemToStructured (item). Extract ();
53
- && var keys := extracted. Keys;
54
- && "aws_dbe_head" in DynamoToStruct. ItemToStructured (item). Extract ()
55
- && var header := DynamoToStruct. ItemToStructured (item). Extract ()["aws_dbe_head"]. content. Terminal. value;
56
- && Header. PartialDeserialize (header). Success?
57
- case header (header) =>
58
- Header. PartialDeserialize (header). Success?
59
- }
60
- )
61
48
{
62
49
var header;
63
50
match input. input
@@ -67,20 +54,16 @@ module AwsCryptographyDbEncryptionSdkDynamoDbOperations refines AbstractAwsCrypt
67
54
:- Need ("aws_dbe_head" in DynamoToStruct.ItemToStructured(plaintextItem). Extract (), E ("aws_dbe_head is not present in the attribute map."));
68
55
header := DynamoToStruct. ItemToStructured (plaintextItem). Extract ()["aws_dbe_head"]. content. Terminal. value;
69
56
}
70
- case header (headeritem ) =>
71
- header := headeritem ;
57
+ case header (headerItem ) =>
58
+ header := headerItem ;
72
59
}
73
- :- Need (Header.PartialDeserialize(header). Success?, E ("Failed to deserialize header."));
74
- var deserializedHeader := Header. PartialDeserialize (header);
75
- var datakeys := deserializedHeader. Extract (). dataKeys;
60
+ var deserializedHeader :- Header. PartialDeserialize (header). MapFailure (e => E("Failed to deserialize header."));
61
+ var datakeys := deserializedHeader. dataKeys;
76
62
var list : EncryptedDataKeyDescriptionList := [];
77
63
for i := 0 to |datakeys| {
78
64
var singleDataKeyOutput : EncryptedDataKeyDescriptionOutput;
79
-
80
- :- Need (UTF8.Decode(datakeys[i].keyProviderId). Success?, E ("Failed to extract keyProviderId."));
81
- var extractedKeyProviderId := UTF8. Decode (datakeys[i].keyProviderId). Extract ();
82
-
83
- if |extractedKeyProviderId| < 7 || extractedKeyProviderId[0.. 7] != "aws- kms" {
65
+ var extractedKeyProviderId :- UTF8. Decode (datakeys[i].keyProviderId). MapFailure (e => E(e));
66
+ if ! ("aws- kms" < extractedKeyProviderId) {
84
67
singleDataKeyOutput := EncryptedDataKeyDescriptionOutput (
85
68
keyProviderId := extractedKeyProviderId,
86
69
keyProviderInfo := None,
@@ -91,20 +74,19 @@ module AwsCryptographyDbEncryptionSdkDynamoDbOperations refines AbstractAwsCrypt
91
74
92
75
// Format flavor is either 0 or 1
93
76
// https://github.com/aws/aws-database-encryption-sdk-dynamodb/blob/main/specification/structured-encryption/header.md#format-flavor
94
- :- Need (deserializedHeader.Extract() . flavor == 0 || deserializedHeader. Extract () . flavor == 1, E ("Invalid format flavor."));
77
+ :- Need (deserializedHeader.flavor == 0 || deserializedHeader.flavor == 1, E("Invalid format flavor."));
95
78
var algorithmSuite;
96
- if deserializedHeader. Extract () . flavor == 0{
79
+ if deserializedHeader. flavor == 0{
97
80
algorithmSuite := AlgorithmSuites. DBE_ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_SYMSIG_HMAC_SHA384;
98
81
} else {
99
82
algorithmSuite := AlgorithmSuites. DBE_ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_ECDSA_P384_SYMSIG_HMAC_SHA384;
100
83
}
101
84
102
85
:- Need (UTF8.Decode(datakeys[i].keyProviderInfo). Success?, E ("Failed to extract keyProviderInfo."));
103
- var extractedKeyProviderIdInfo := UTF8. Decode (datakeys[i].keyProviderInfo). Extract ( );
86
+ var extractedKeyProviderIdInfo := UTF8. Decode (datakeys[i].keyProviderInfo). MapFailure (e => E("Failed to deserialize header.") );
104
87
105
88
if extractedKeyProviderId == "aws- kms- hierarchy" {
106
- :- Need (EdkWrapping.GetProviderWrappedMaterial(datakeys[i].ciphertext, algorithmSuite). Success?, E ("Failed to get provider wrapped material."));
107
- var providerWrappedMaterial := EdkWrapping. GetProviderWrappedMaterial (datakeys[i].ciphertext, algorithmSuite). Extract ();
89
+ var providerWrappedMaterial :- EdkWrapping. GetProviderWrappedMaterial (datakeys[i].ciphertext, algorithmSuite). MapFailure (e => E("Failed to get provider wrapped material" ));
108
90
109
91
// The ciphertext structure in the hierarchy keyring contains Salt and IV before Version.
110
92
// The length of Salt is 16 and IV is 12 bytes. The length of Version is 16 bytes.
@@ -114,19 +96,18 @@ module AwsCryptographyDbEncryptionSdkDynamoDbOperations refines AbstractAwsCrypt
114
96
:- Need (EDK_CIPHERTEXT_BRANCH_KEY_VERSION_INDEX < EDK_CIPHERTEXT_VERSION_INDEX, E("Wrong branch key version index."));
115
97
:- Need (|providerWrappedMaterial| >= EDK_CIPHERTEXT_VERSION_INDEX, E("Incorrect ciphertext structure length."));
116
98
var branchKeyVersionUuid := providerWrappedMaterial[EDK_CIPHERTEXT_BRANCH_KEY_VERSION_INDEX .. EDK_CIPHERTEXT_VERSION_INDEX];
117
- :- Need (UUID.FromByteArray(branchKeyVersionUuid). Success?, E ("Failed to convert UUID from byte array."));
118
- var expectedBranchKeyVersion := UUID. FromByteArray (branchKeyVersionUuid). Extract ();
99
+ var expectedBranchKeyVersion :- UUID. FromByteArray (branchKeyVersionUuid). MapFailure (e => E("Failed to convert UUID from byte array."));
119
100
singleDataKeyOutput := EncryptedDataKeyDescriptionOutput (
120
101
keyProviderId := extractedKeyProviderId,
121
- keyProviderInfo := Some(extractedKeyProviderIdInfo),
122
- branchKeyId := Some (extractedKeyProviderIdInfo),
102
+ keyProviderInfo := Some(extractedKeyProviderIdInfo.value ),
103
+ branchKeyId := Some (extractedKeyProviderIdInfo.value ),
123
104
branchKeyVersion := Some (expectedBranchKeyVersion)
124
105
);
125
106
}
126
107
else {
127
108
singleDataKeyOutput := EncryptedDataKeyDescriptionOutput (
128
109
keyProviderId := extractedKeyProviderId,
129
- keyProviderInfo := Some(extractedKeyProviderIdInfo),
110
+ keyProviderInfo := Some(extractedKeyProviderIdInfo.value ),
130
111
branchKeyId := None,
131
112
branchKeyVersion := None
132
113
);
0 commit comments