Skip to content

Commit bb898d1

Browse files
akareddy04Anirav Kareddy
andauthored
chore: validate against legacy wrapping on client but customer passes keyring with no legacy wrapping (#473)
--------- Co-authored-by: Anirav Kareddy <[email protected]>
1 parent 1bc2ca3 commit bb898d1

File tree

3 files changed

+15
-11
lines changed

3 files changed

+15
-11
lines changed

src/main/java/software/amazon/encryption/s3/S3EncryptionClient.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
package software.amazon.encryption.s3;
44

55
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
6+
import org.apache.commons.logging.LogFactory;
67
import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
78
import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration;
89
import software.amazon.awssdk.awscore.exception.AwsServiceException;
@@ -61,6 +62,7 @@
6162
import software.amazon.encryption.s3.materials.MultipartConfiguration;
6263
import software.amazon.encryption.s3.materials.PartialRsaKeyPair;
6364
import software.amazon.encryption.s3.materials.RsaKeyring;
65+
import software.amazon.encryption.s3.materials.S3Keyring;
6466

6567
import javax.crypto.SecretKey;
6668
import java.io.IOException;
@@ -1068,6 +1070,12 @@ public S3EncryptionClient build() {
10681070
if (!onlyOneNonNull(_cryptoMaterialsManager, _keyring, _aesKey, _rsaKeyPair, _kmsKeyId)) {
10691071
throw new S3EncryptionClientException("Exactly one must be set of: crypto materials manager, keyring, AES key, RSA key pair, KMS key id");
10701072
}
1073+
if (_enableLegacyWrappingAlgorithms && _keyring !=null) {
1074+
S3Keyring keyring = (S3Keyring) _keyring;
1075+
if (!keyring.areLegacyWrappingAlgorithmsEnabled()) {
1076+
LogFactory.getLog(getClass()).warn("enableLegacyWrappingAlgorithms is set on the client, but is not set on the keyring provided. In order to enable legacy wrapping algorithms, set enableLegacyWrappingAlgorithms to true in the keyring's builder.");
1077+
}
1078+
}
10711079

10721080
if (_bufferSize >= 0) {
10731081
if (_enableDelayedAuthenticationMode) {

src/main/java/software/amazon/encryption/s3/materials/S3Keyring.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@ protected S3Keyring(Builder<?, ?> builder) {
3333
_dataKeyGenerator = builder._dataKeyGenerator;
3434
}
3535

36+
/**
37+
* @return true if legacy wrapping algorithms are enabled, false otherwise
38+
*/
39+
public boolean areLegacyWrappingAlgorithmsEnabled() { return _enableLegacyWrappingAlgorithms;}
40+
3641
/**
3742
* Generates a data key using the provided EncryptionMaterials and the configured DataKeyGenerator.
3843
* <p>

src/test/java/software/amazon/encryption/s3/S3EncryptionClientCompatibilityTest.java

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,9 @@
1515
import com.amazonaws.services.s3.model.EncryptedPutObjectRequest;
1616
import com.amazonaws.services.s3.model.EncryptionMaterials;
1717
import com.amazonaws.services.s3.model.EncryptionMaterialsProvider;
18-
import com.amazonaws.services.s3.model.GetObjectMetadataRequest;
19-
import com.amazonaws.services.s3.model.InitiateMultipartUploadRequest;
20-
import com.amazonaws.services.s3.model.InitiateMultipartUploadResult;
2118
import com.amazonaws.services.s3.model.KMSEncryptionMaterials;
2219
import com.amazonaws.services.s3.model.KMSEncryptionMaterialsProvider;
23-
import com.amazonaws.services.s3.model.ObjectMetadata;
2420
import com.amazonaws.services.s3.model.StaticEncryptionMaterialsProvider;
25-
import com.amazonaws.services.s3.model.StorageClass;
26-
import com.amazonaws.services.s3.model.UploadObjectRequest;
2721
import org.junit.jupiter.api.BeforeAll;
2822
import org.junit.jupiter.api.Test;
2923
import software.amazon.awssdk.core.ResponseBytes;
@@ -34,25 +28,21 @@
3428
import software.amazon.awssdk.services.s3.model.MetadataDirective;
3529
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
3630
import software.amazon.encryption.s3.internal.InstructionFileConfig;
37-
import software.amazon.encryption.s3.utils.BoundedInputStream;
3831

3932
import javax.crypto.KeyGenerator;
4033
import javax.crypto.SecretKey;
4134
import java.io.ByteArrayInputStream;
4235
import java.io.IOException;
43-
import java.io.InputStream;
4436
import java.nio.charset.StandardCharsets;
4537
import java.security.KeyPair;
4638
import java.security.KeyPairGenerator;
4739
import java.security.NoSuchAlgorithmException;
4840
import java.util.HashMap;
4941
import java.util.Map;
50-
import java.util.concurrent.ExecutionException;
5142

5243
import static org.junit.jupiter.api.Assertions.assertEquals;
53-
import static org.junit.jupiter.api.Assertions.assertNotEquals;
5444
import static org.junit.jupiter.api.Assertions.assertThrows;
55-
import static software.amazon.encryption.s3.S3EncryptionClient.builder;
45+
5646
import static software.amazon.encryption.s3.S3EncryptionClient.withAdditionalConfiguration;
5747
import static software.amazon.encryption.s3.utils.S3EncryptionClientTestResources.BUCKET;
5848
import static software.amazon.encryption.s3.utils.S3EncryptionClientTestResources.KMS_KEY_ID;
@@ -976,4 +966,5 @@ public void nullMaterialDescriptionV3() {
976966
v3Client.close();
977967

978968
}
969+
979970
}

0 commit comments

Comments
 (0)