in src/main/java/software/amazon/encryption/s3/S3EncryptionClient.java [1069:1173]
public S3EncryptionClient build() {
if (!onlyOneNonNull(_cryptoMaterialsManager, _keyring, _aesKey, _rsaKeyPair, _kmsKeyId)) {
throw new S3EncryptionClientException("Exactly one must be set of: crypto materials manager, keyring, AES key, RSA key pair, KMS key id");
}
if (_bufferSize >= 0) {
if (_enableDelayedAuthenticationMode) {
throw new S3EncryptionClientException("Buffer size cannot be set when delayed authentication mode is enabled");
}
} else {
_bufferSize = DEFAULT_BUFFER_SIZE_BYTES;
}
if (_wrappedClient == null) {
_wrappedClient = S3Client.builder()
.credentialsProvider(_awsCredentialsProvider)
.region(_region)
.dualstackEnabled(_dualStackEnabled)
.fipsEnabled(_fipsEnabled)
.overrideConfiguration(_overrideConfiguration)
.endpointOverride(_endpointOverride)
.serviceConfiguration(_serviceConfiguration)
.accelerate(_accelerate)
.disableMultiRegionAccessPoints(_disableMultiRegionAccessPoints)
.forcePathStyle(_forcePathStyle)
.useArnRegion(_useArnRegion)
.httpClient(_httpClient)
.httpClientBuilder(_httpClientBuilder)
.disableS3ExpressSessionAuth(_disableS3ExpressSessionAuth)
.crossRegionAccessEnabled(_crossRegionAccessEnabled)
.build();
}
if (_wrappedAsyncClient == null) {
_wrappedAsyncClient = S3AsyncClient.builder()
.credentialsProvider(_awsCredentialsProvider)
.region(_region)
.dualstackEnabled(_dualStackEnabled)
.fipsEnabled(_fipsEnabled)
.overrideConfiguration(_overrideConfiguration)
.endpointOverride(_endpointOverride)
.serviceConfiguration(_serviceConfiguration)
.accelerate(_accelerate)
.disableMultiRegionAccessPoints(_disableMultiRegionAccessPoints)
.forcePathStyle(_forcePathStyle)
.useArnRegion(_useArnRegion)
.httpClient(_asyncHttpClient)
.httpClientBuilder(_asyncHttpClientBuilder)
.disableS3ExpressSessionAuth(_disableS3ExpressSessionAuth)
.crossRegionAccessEnabled(_crossRegionAccessEnabled)
.build();
}
if (_instructionFileConfig == null) {
_instructionFileConfig = InstructionFileConfig.builder()
.instructionFileClient(_wrappedClient)
.build();
}
if (_keyring == null) {
if (_aesKey != null) {
_keyring = AesKeyring.builder()
.wrappingKey(_aesKey)
.enableLegacyWrappingAlgorithms(_enableLegacyWrappingAlgorithms)
.secureRandom(_secureRandom)
.build();
} else if (_rsaKeyPair != null) {
_keyring = RsaKeyring.builder()
.wrappingKeyPair(_rsaKeyPair)
.enableLegacyWrappingAlgorithms(_enableLegacyWrappingAlgorithms)
.secureRandom(_secureRandom)
.build();
} else if (_kmsKeyId != null) {
KmsClient kmsClient = KmsClient.builder()
.credentialsProvider(_awsCredentialsProvider)
.region(_region)
.dualstackEnabled(_dualStackEnabled)
.fipsEnabled(_fipsEnabled)
.overrideConfiguration(_overrideConfiguration)
.build();
_keyring = KmsKeyring.builder()
.kmsClient(kmsClient)
.wrappingKeyId(_kmsKeyId)
.enableLegacyWrappingAlgorithms(_enableLegacyWrappingAlgorithms)
.secureRandom(_secureRandom)
.build();
}
}
if (_cryptoMaterialsManager == null) {
_cryptoMaterialsManager = DefaultCryptoMaterialsManager.builder()
.keyring(_keyring)
.cryptoProvider(_cryptoProvider)
.build();
}
_multipartPipeline = MultipartUploadObjectPipeline.builder()
.s3AsyncClient(_wrappedAsyncClient)
.cryptoMaterialsManager(_cryptoMaterialsManager)
.secureRandom(_secureRandom)
.build();
return new S3EncryptionClient(this);
}