Esempio n. 1
0
        /// <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));
            }
        }
Esempio n. 2
0
        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);
        }