/// <summary> /// Update the request's ObjectMetadata with the necessary information for decrypting the object. /// </summary> /// <param name="request"> /// AmazonWebServiceRequest encrypted using the given instruction /// </param> /// <param name="instructions"> /// Non-null instruction used to encrypt the data in this AmazonWebServiceRequest . /// </param> /// <param name="encryptionClient">Encryption client used for put objects</param> internal static void UpdateMetadataWithEncryptionInstructionsV2(AmazonWebServiceRequest request, EncryptionInstructions instructions, AmazonS3EncryptionClientBase encryptionClient) { var keyBytesToStoreInMetadata = instructions.EncryptedEnvelopeKey; var base64EncodedEnvelopeKey = Convert.ToBase64String(keyBytesToStoreInMetadata); var ivToStoreInMetadata = instructions.InitializationVector; var base64EncodedIv = Convert.ToBase64String(ivToStoreInMetadata); MetadataCollection metadata = null; var putObjectRequest = request as PutObjectRequest; if (putObjectRequest != null) { metadata = putObjectRequest.Metadata; } var initiateMultipartrequest = request as InitiateMultipartUploadRequest; if (initiateMultipartrequest != null) { metadata = initiateMultipartrequest.Metadata; } if (metadata != null) { metadata.Add(XAmzWrapAlg, instructions.WrapAlgorithm); metadata.Add(XAmzTagLen, DefaultTagBitsLength.ToString()); metadata.Add(XAmzKeyV2, base64EncodedEnvelopeKey); metadata.Add(XAmzCekAlg, instructions.CekAlgorithm); metadata.Add(XAmzIV, base64EncodedIv); metadata.Add(XAmzMatDesc, JsonMapper.ToJson(instructions.MaterialsDescription)); } }
internal static PutObjectRequest CreateInstructionFileRequestV2(AmazonWebServiceRequest request, EncryptionInstructions instructions) { var keyBytesToStoreInInstructionFile = instructions.EncryptedEnvelopeKey; var base64EncodedEnvelopeKey = Convert.ToBase64String(keyBytesToStoreInInstructionFile); var ivToStoreInInstructionFile = instructions.InitializationVector; var base64EncodedIv = Convert.ToBase64String(ivToStoreInInstructionFile); var jsonData = new JsonData { [XAmzTagLen] = DefaultTagBitsLength.ToString(), [XAmzKeyV2] = base64EncodedEnvelopeKey, [XAmzCekAlg] = instructions.CekAlgorithm, [XAmzWrapAlg] = instructions.WrapAlgorithm, [XAmzIV] = base64EncodedIv, [XAmzMatDesc] = JsonMapper.ToJson(instructions.MaterialsDescription) }; var contentBody = jsonData.ToJson(); var putObjectRequest = request as PutObjectRequest; if (putObjectRequest != null) { return(GetInstructionFileRequest(putObjectRequest.BucketName, putObjectRequest.Key, EncryptionInstructionFileV2Suffix, contentBody)); } var completeMultiPartRequest = request as CompleteMultipartUploadRequest; if (completeMultiPartRequest != null) { return(GetInstructionFileRequest(completeMultiPartRequest.BucketName, completeMultiPartRequest.Key, EncryptionInstructionFileV2Suffix, contentBody)); } return(null); }