static private CreateInstructionFileRequest ( |
||
request | ||
instructions | ||
return |
internal static PutObjectRequest CreateInstructionFileRequest(AmazonWebServiceRequest request, EncryptionInstructions instructions)
{
byte[] keyBytesToStoreInInstructionFile = instructions.EncryptedEnvelopeKey;
string base64EncodedEnvelopeKey = Convert.ToBase64String(keyBytesToStoreInInstructionFile);
byte[] IVToStoreInInstructionFile = instructions.InitializationVector;
string base64EncodedIV = Convert.ToBase64String(IVToStoreInInstructionFile);
JsonData jsonData = new JsonData();
jsonData["EncryptedEnvelopeKey"] = base64EncodedEnvelopeKey;
jsonData["IV"] = base64EncodedIV;
string credentials = jsonData.ToJson();
var putObjectRequest = request as PutObjectRequest;
if (putObjectRequest != null)
{
PutObjectRequest requestforInstructionFile = new PutObjectRequest()
{
BucketName = putObjectRequest.BucketName,
Key = putObjectRequest.Key + instructionfileSuffix,
ContentBody = credentials
};
requestforInstructionFile.Metadata.Add(instructionFileInfo, "");
return requestforInstructionFile;
}
var completeMultiPartRequest = request as CompleteMultipartUploadRequest;
if (completeMultiPartRequest != null)
{
PutObjectRequest requestforInstructionFile = new PutObjectRequest()
{
BucketName = completeMultiPartRequest.BucketName,
Key = completeMultiPartRequest.Key + instructionfileSuffix,
ContentBody = credentials
};
requestforInstructionFile.Metadata.Add(instructionFileInfo, "");
return requestforInstructionFile;
}
else
return null;
}
/// <summary> /// Updates the request where the instruction file contains encryption information /// and the input stream contains the encrypted object contents. /// </summary> /// <param name="putObjectRequest"></param> private void GenerateEncryptedObjectRequestUsingInstructionFile(PutObjectRequest putObjectRequest) { // Create instruction EncryptionInstructions instructions = EncryptionUtils.GenerateInstructions(this.encryptionMaterials); EncryptionUtils.AddUnencryptedContentLengthToMetadata(putObjectRequest); // Encrypt the object data with the instruction putObjectRequest.InputStream = EncryptionUtils.EncryptRequestUsingInstruction(putObjectRequest.InputStream, instructions); // Create request for uploading instruction file PutObjectRequest instructionFileRequest = EncryptionUtils.CreateInstructionFileRequest(putObjectRequest, instructions); S3ClientForInstructionFile.PutObject(instructionFileRequest); }