in src/Internal/SetupEncryptionHandlerV2.cs [183:211]
protected override void GenerateEncryptedUploadPartRequest(UploadPartRequest request)
{
string uploadID = request.UploadId;
var contextForEncryption = this.EncryptionClient.CurrentMultiPartUploadKeys[uploadID];
var envelopeKey = contextForEncryption.EnvelopeKey;
var IV = contextForEncryption.NextIV;
var instructions = new EncryptionInstructions(EncryptionMaterials.MaterialsDescription, envelopeKey, IV);
if (request.IsLastPart == false)
{
if (contextForEncryption.IsFinalPart)
throw new AmazonClientException("Last part has already been processed, cannot upload this as the last part");
if (request.PartNumber < contextForEncryption.PartNumber)
throw new AmazonClientException($"Upload Parts must be in correct sequence. Request part number {request.PartNumber} must be >= to {contextForEncryption.PartNumber}");
UpdateRequestInputStream(request, contextForEncryption, instructions);
contextForEncryption.PartNumber = request.PartNumber;
}
else
{
UpdateRequestInputStream(request, contextForEncryption, instructions);
contextForEncryption.IsFinalPart = true;
}
((Amazon.Runtime.Internal.IAmazonWebServiceRequest)request).RequestState.Add(Constants.S3CryptoStreamRequestState, request.InputStream);
}