Class S3CryptoModuleBase<T extends com.amazonaws.services.s3.internal.crypto.MultipartUploadCryptoContext>
- java.lang.Object
-
- com.amazonaws.services.s3.internal.crypto.S3CryptoModule<T>
-
- com.amazonaws.services.s3.internal.crypto.S3CryptoModuleBase<T>
-
public abstract class S3CryptoModuleBase<T extends com.amazonaws.services.s3.internal.crypto.MultipartUploadCryptoContext> extends S3CryptoModule<T>
Common implementation for different S3 cryptographic modules.
-
-
Field Summary
Fields Modifier and Type Field Description protected com.amazonaws.services.s3.internal.crypto.ContentCryptoSchemecontentCryptoSchemeprotected CryptoConfigurationcryptoConfigA read-only copy of the crypto configuration.protected com.amazonaws.services.s3.internal.crypto.S3CryptoSchemecryptoSchemeprotected static intDEFAULT_BUFFER_SIZEprotected EncryptionMaterialsProviderkekMaterialsProviderprotected AWSKMSClientkmsprotected org.apache.commons.logging.Loglogprotected Map<String,T>multipartUploadContextsMap of data about in progress encrypted multipart uploads.protected com.amazonaws.services.s3.internal.S3Directs3
-
Constructor Summary
Constructors Modifier Constructor Description protectedS3CryptoModuleBase(AWSKMSClient kms, com.amazonaws.services.s3.internal.S3Direct s3, AWSCredentialsProvider credentialsProvider, EncryptionMaterialsProvider kekMaterialsProvider, CryptoConfiguration cryptoConfig)protectedS3CryptoModuleBase(com.amazonaws.services.s3.internal.S3Direct s3, AWSCredentialsProvider credentialsProvider, EncryptionMaterialsProvider kekMaterialsProvider, CryptoConfiguration cryptoConfig)For testing purposes only.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description voidabortMultipartUploadSecurely(AbortMultipartUploadRequest req)protected abstract longciphertextLength(long plaintextLength)Returns the length of the ciphertext computed from the length of the plaintext.CompleteMultipartUploadResultcompleteMultipartUploadSecurely(CompleteMultipartUploadRequest req)CopyPartResultcopyPartSecurely(CopyPartRequest copyPartRequest)protected com.amazonaws.services.s3.internal.crypto.ContentCryptoMaterialcreateContentCryptoMaterial(AmazonWebServiceRequest req)Creates and returns a non-null content crypto material for the given request.protected PutObjectRequestcreateInstructionPutRequest(String bucketName, String key, com.amazonaws.services.s3.internal.crypto.ContentCryptoMaterial cekMaterial)protected SecretKeygenerateCEK(EncryptionMaterials kekMaterials, Provider providerIn)com.amazonaws.services.s3.internal.crypto.S3CryptoSchemegetS3CryptoScheme()InitiateMultipartUploadResultinitiateMultipartUploadSecurely(InitiateMultipartUploadRequest req)protected CipherLiteInputStreamnewMultipartS3CipherInputStream(UploadPartRequest req, com.amazonaws.services.s3.internal.crypto.CipherLite cipherLite)protected longplaintextLength(AbstractPutObjectRequest request, ObjectMetadata metadata)Returns the plaintext length from the request and metadata; or -1 if unknown.PutObjectResultputInstructionFileSecurely(PutInstructionFileRequest req)voidputLocalObjectSecurely(UploadObjectRequest reqIn, String uploadId, OutputStream os)PutObjectResultputObjectSecurely(PutObjectRequest req)protected voidsecurityCheck(com.amazonaws.services.s3.internal.crypto.ContentCryptoMaterial cekMaterial, com.amazonaws.services.s3.internal.crypto.S3ObjectWrapper retrieved)Checks if the the crypto scheme used in the given content crypto material is allowed to be used in this crypto module.protected PutObjectRequestupdateInstructionPutRequest(PutObjectRequest req, com.amazonaws.services.s3.internal.crypto.ContentCryptoMaterial cekMaterial)Updates put request to store the specified instruction object in S3.protected ObjectMetadataupdateMetadataWithContentCryptoMaterial(ObjectMetadata metadata, File file, com.amazonaws.services.s3.internal.crypto.ContentCryptoMaterial instruction)UploadPartResultuploadPartSecurely(UploadPartRequest req)protected <R extends AbstractPutObjectRequest>
RwrapWithCipher(R request, com.amazonaws.services.s3.internal.crypto.ContentCryptoMaterial cekMaterial)Returns the givenPutObjectRequestbut has the content as input stream wrapped with a cipher, and configured with some meta data and user metadata.-
Methods inherited from class com.amazonaws.services.s3.internal.crypto.S3CryptoModule
getObjectSecurely, getObjectSecurely
-
-
-
-
Field Detail
-
DEFAULT_BUFFER_SIZE
protected static final int DEFAULT_BUFFER_SIZE
- See Also:
- Constant Field Values
-
kekMaterialsProvider
protected final EncryptionMaterialsProvider kekMaterialsProvider
-
log
protected final org.apache.commons.logging.Log log
-
cryptoScheme
protected final com.amazonaws.services.s3.internal.crypto.S3CryptoScheme cryptoScheme
-
contentCryptoScheme
protected final com.amazonaws.services.s3.internal.crypto.ContentCryptoScheme contentCryptoScheme
-
cryptoConfig
protected final CryptoConfiguration cryptoConfig
A read-only copy of the crypto configuration.
-
multipartUploadContexts
protected final Map<String,T extends com.amazonaws.services.s3.internal.crypto.MultipartUploadCryptoContext> multipartUploadContexts
Map of data about in progress encrypted multipart uploads.
-
s3
protected final com.amazonaws.services.s3.internal.S3Direct s3
-
kms
protected final AWSKMSClient kms
-
-
Constructor Detail
-
S3CryptoModuleBase
protected S3CryptoModuleBase(AWSKMSClient kms, com.amazonaws.services.s3.internal.S3Direct s3, AWSCredentialsProvider credentialsProvider, EncryptionMaterialsProvider kekMaterialsProvider, CryptoConfiguration cryptoConfig)
- Parameters:
cryptoConfig- a read-only copy of the crypto configuration.
-
S3CryptoModuleBase
protected S3CryptoModuleBase(com.amazonaws.services.s3.internal.S3Direct s3, AWSCredentialsProvider credentialsProvider, EncryptionMaterialsProvider kekMaterialsProvider, CryptoConfiguration cryptoConfig)For testing purposes only.
-
-
Method Detail
-
ciphertextLength
protected abstract long ciphertextLength(long plaintextLength)
Returns the length of the ciphertext computed from the length of the plaintext.- Parameters:
plaintextLength- a non-negative number- Returns:
- a non-negative number
-
putObjectSecurely
public PutObjectResult putObjectSecurely(PutObjectRequest req)
- Specified by:
putObjectSecurelyin classS3CryptoModule<T extends com.amazonaws.services.s3.internal.crypto.MultipartUploadCryptoContext>- Returns:
- the result of the putting the S3 object.
-
abortMultipartUploadSecurely
public final void abortMultipartUploadSecurely(AbortMultipartUploadRequest req)
- Specified by:
abortMultipartUploadSecurelyin classS3CryptoModule<T extends com.amazonaws.services.s3.internal.crypto.MultipartUploadCryptoContext>
-
copyPartSecurely
public final CopyPartResult copyPartSecurely(CopyPartRequest copyPartRequest)
- Specified by:
copyPartSecurelyin classS3CryptoModule<T extends com.amazonaws.services.s3.internal.crypto.MultipartUploadCryptoContext>
-
initiateMultipartUploadSecurely
public InitiateMultipartUploadResult initiateMultipartUploadSecurely(InitiateMultipartUploadRequest req)
- Specified by:
initiateMultipartUploadSecurelyin classS3CryptoModule<T extends com.amazonaws.services.s3.internal.crypto.MultipartUploadCryptoContext>
-
uploadPartSecurely
public UploadPartResult uploadPartSecurely(UploadPartRequest req)
NOTE: Because the encryption process requires context from previous blocks, parts uploaded with the AmazonS3EncryptionClient (as opposed to the normal AmazonS3Client) must be uploaded serially, and in order. Otherwise, the previous encryption context isn't available to use when encrypting the current part.
- Specified by:
uploadPartSecurelyin classS3CryptoModule<T extends com.amazonaws.services.s3.internal.crypto.MultipartUploadCryptoContext>
-
newMultipartS3CipherInputStream
protected final CipherLiteInputStream newMultipartS3CipherInputStream(UploadPartRequest req, com.amazonaws.services.s3.internal.crypto.CipherLite cipherLite)
-
completeMultipartUploadSecurely
public CompleteMultipartUploadResult completeMultipartUploadSecurely(CompleteMultipartUploadRequest req)
- Specified by:
completeMultipartUploadSecurelyin classS3CryptoModule<T extends com.amazonaws.services.s3.internal.crypto.MultipartUploadCryptoContext>
-
updateMetadataWithContentCryptoMaterial
protected final ObjectMetadata updateMetadataWithContentCryptoMaterial(ObjectMetadata metadata, File file, com.amazonaws.services.s3.internal.crypto.ContentCryptoMaterial instruction)
-
createContentCryptoMaterial
protected final com.amazonaws.services.s3.internal.crypto.ContentCryptoMaterial createContentCryptoMaterial(AmazonWebServiceRequest req)
Creates and returns a non-null content crypto material for the given request.- Throws:
AmazonClientException- if no encryption material can be found.
-
putLocalObjectSecurely
public final void putLocalObjectSecurely(UploadObjectRequest reqIn, String uploadId, OutputStream os) throws IOException
- Specified by:
putLocalObjectSecurelyin classS3CryptoModule<T extends com.amazonaws.services.s3.internal.crypto.MultipartUploadCryptoContext>uploadId- multipart upload idos- output stream which will be closed upon method completion.- Throws:
IOException
-
generateCEK
protected final SecretKey generateCEK(EncryptionMaterials kekMaterials, Provider providerIn)
- Parameters:
kekMaterials- non-null encryption materials
-
wrapWithCipher
protected final <R extends AbstractPutObjectRequest> R wrapWithCipher(R request, com.amazonaws.services.s3.internal.crypto.ContentCryptoMaterial cekMaterial)
Returns the givenPutObjectRequestbut has the content as input stream wrapped with a cipher, and configured with some meta data and user metadata.
-
plaintextLength
protected final long plaintextLength(AbstractPutObjectRequest request, ObjectMetadata metadata)
Returns the plaintext length from the request and metadata; or -1 if unknown.
-
getS3CryptoScheme
public final com.amazonaws.services.s3.internal.crypto.S3CryptoScheme getS3CryptoScheme()
-
updateInstructionPutRequest
protected final PutObjectRequest updateInstructionPutRequest(PutObjectRequest req, com.amazonaws.services.s3.internal.crypto.ContentCryptoMaterial cekMaterial)
Updates put request to store the specified instruction object in S3.- Parameters:
req- The put-instruction-file request for the instruction file to be stored in S3.cekMaterial- The instruction object to be stored in S3.- Returns:
- A put request to store the specified instruction object in S3.
-
createInstructionPutRequest
protected final PutObjectRequest createInstructionPutRequest(String bucketName, String key, com.amazonaws.services.s3.internal.crypto.ContentCryptoMaterial cekMaterial)
-
securityCheck
protected void securityCheck(com.amazonaws.services.s3.internal.crypto.ContentCryptoMaterial cekMaterial, com.amazonaws.services.s3.internal.crypto.S3ObjectWrapper retrieved)Checks if the the crypto scheme used in the given content crypto material is allowed to be used in this crypto module. Default is no-op. Subclass may override.- Throws:
SecurityException- if the crypto scheme used in the given content crypto material is not allowed in this crypto module.
-
putInstructionFileSecurely
public final PutObjectResult putInstructionFileSecurely(PutInstructionFileRequest req)
- Specified by:
putInstructionFileSecurelyin classS3CryptoModule<T extends com.amazonaws.services.s3.internal.crypto.MultipartUploadCryptoContext>- Returns:
- the result of putting the instruction file in S3; or null if the
specified S3 object doesn't exist. The S3 object can be
subsequently retrieved using the new instruction file via the
usual get operation by specifying a
EncryptedGetObjectRequest.
-
-