Skip to content

Commit 11653f6

Browse files
authored
Fix issue when decrypting noncurrent versions (#2867)
1 parent 26b364e commit 11653f6

File tree

3 files changed

+38
-0
lines changed

3 files changed

+38
-0
lines changed

gems/aws-sdk-s3/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
Unreleased Changes
22
------------------
33

4+
* Issue - Fix issue when decrypting noncurrent versions of objects when using client side encryption (#2866).
5+
46
1.123.1 (2023-06-02)
57
------------------
68

gems/aws-sdk-s3/lib/aws-sdk-s3/encryptionV2/decrypt_handler.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ def authenticated_decrypter(context, cipher, envelope)
173173
auth_tag = context.client.get_object(
174174
bucket: context.params[:bucket],
175175
key: context.params[:key],
176+
version_id: context.params[:version_id],
176177
range: "bytes=-#{auth_tag_length}"
177178
).body.read
178179

gems/aws-sdk-s3/spec/encryptionV2/client_functional_spec.rb

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,41 @@ def stub_decrypt(kms_client, opts)
434434
expect(decrypted).to eq(plaintext)
435435
end
436436

437+
it 'can encrypt and decrypt non-current versions' do
438+
client = Aws::S3::EncryptionV2::Client.new(options)
439+
440+
data = stub_put(s3_client)
441+
442+
kms_client.stub_responses(
443+
:generate_data_key,
444+
{
445+
key_id: kms_key_id,
446+
ciphertext_blob: kms_ciphertext_blob,
447+
plaintext: kms_plaintext
448+
}
449+
)
450+
client.put_object(bucket: test_bucket, key: test_object, body: plaintext)
451+
expect(data[:metadata]['x-amz-cek-alg']).to eq('AES/GCM/NoPadding')
452+
expect(data[:metadata]['x-amz-wrap-alg']).to eq('kms+context')
453+
454+
stub_get(s3_client, data, true)
455+
456+
stub_decrypt(kms_client, any_kms_key: false, response:
457+
{
458+
key_id: kms_key_id,
459+
plaintext: kms_plaintext,
460+
encryption_algorithm: "SYMMETRIC_DEFAULT"
461+
})
462+
463+
expect(s3_client).to receive(:get_object)
464+
.with(hash_including(version_id: 'version_id'))
465+
.and_call_original
466+
467+
decrypted = client.get_object(bucket: test_bucket, key: test_object,
468+
version_id: 'version_id').body.read
469+
expect(decrypted).to eq(plaintext)
470+
end
471+
437472
context 'security_profile: v2' do
438473
it 'raises a DecryptionError when reading a legacy object' do
439474
client_v1 = Aws::S3::Encryption::Client.new(

0 commit comments

Comments
 (0)