Esempio n. 1
0
        public void CalculateChecksumTest(CoreChecksumAlgorithm algorithm, string content, string expectedBase64Checksum)
        {
            var contentBytes     = Encoding.Default.GetBytes(content);
            var computedChecksum = Convert.ToBase64String(CryptoUtilFactory.GetChecksumInstance(algorithm).ComputeHash(contentBytes));

            Assert.AreEqual(expectedBase64Checksum, computedChecksum);
        }
Esempio n. 2
0
 /// <summary>
 /// Initiates a stream wrapper to append trailing headers to an unsigned payload,
 /// with a trailing checksum
 /// </summary>
 /// <param name="baseStream">Stream to wrap</param>
 /// <param name="trailingHeaders">Header keys and values to append after the stream's conent</param>
 /// <param name="checksumAlgorithm">Algorithm to use to calculate the stream's checksum</param>
 public TrailingHeadersWrapperStream(
     Stream baseStream,
     IDictionary <string, string> trailingHeaders,
     CoreChecksumAlgorithm checksumAlgorithm) : this(baseStream, trailingHeaders)
 {
     if (checksumAlgorithm != CoreChecksumAlgorithm.NONE)
     {
         _checksumAlgorithm = checksumAlgorithm;
         _hashAlgorithm     = CryptoUtilFactory.GetChecksumInstance(checksumAlgorithm);
     }
 }
Esempio n. 3
0
        /// <summary>
        /// Initializes a chunked upload stream with one or more trailing headers,
        /// which may include a trailing checksum header
        /// </summary>
        /// <param name="stream">Stream to wrap</param>
        /// <param name="wrappedStreamBufferSize">Size of buffer used for reading from stream</param>
        /// <param name="headerSigningResult">SigV4 or SigV4a signing result for the request's headers</param>
        /// <param name="trailingChecksum">Algorithm to use to calculate the stream's checksum</param>
        /// <param name="trailingHeaders">Trailing headers to append after the wrapped stream</param>
        public ChunkedUploadWrapperStream(Stream stream,
                                          int wrappedStreamBufferSize,
                                          AWSSigningResultBase headerSigningResult,
                                          CoreChecksumAlgorithm trailingChecksum,
                                          IDictionary <string, string> trailingHeaders)
            : this(stream, wrappedStreamBufferSize, headerSigningResult)
        {
            if (trailingChecksum != CoreChecksumAlgorithm.NONE)
            {
                _trailingChecksum = trailingChecksum;
                _hashAlgorithm    = CryptoUtilFactory.GetChecksumInstance(trailingChecksum);
            }

            _trailingHeadersConsumed = false;
            _trailingHeaders         = trailingHeaders;
        }
Esempio n. 4
0
        /// <summary>
        /// Attempts to select and then calculate the checksum for a request
        /// </summary>
        /// <param name="request">Request to calculate the checksum for</param>
        /// <param name="checksumAlgorithm">Checksum algorithm to use, specified on the request using a service-specific enum</param>
        /// <param name="fallbackToMD5">If checksumAlgorithm is <see cref="CoreChecksumAlgorithm.NONE"/>,
        /// this flag controls whether or not to fallback to using a MD5 to generate a checksum.
        /// </param>
        public static void SetRequestChecksum(IRequest request, string checksumAlgorithm, bool fallbackToMD5 = true)
        {
            var coreChecksumAlgoritm = ChecksumUtils.ConvertToCoreChecksumAlgorithm(checksumAlgorithm);

            if (coreChecksumAlgoritm == CoreChecksumAlgorithm.NONE)
            {
                if (fallbackToMD5)
                {
                    SetRequestChecksumMD5(request);
                }
                return;
            }

            var checksumHeaderKey = GetChecksumHeaderKey(coreChecksumAlgoritm);

            // If the user provided a precalculated header for this checksum, don't recalculate it
            if (request.Headers.TryGetValue(checksumHeaderKey, out var checksumHeaderValue))
            {
                if (!string.IsNullOrEmpty(checksumHeaderValue))
                {
                    return;
                }
            }

            if (request.UseChunkEncoding || (request.DisablePayloadSigning ?? false))
            {
                // Add the checksum key to the trailing headers, but not the value
                // because we won't know it until the wrapper stream is fully read,
                // and we only want to read the wrapper stream once.
                //
                // The header key is required upfront for calculating the total length of
                // the wrapper stream, which we need to send as the Content-Length header
                // before the wrapper stream is transmitted.
                request.TrailingHeaders.Add(checksumHeaderKey, string.Empty);
                request.SelectedChecksum = coreChecksumAlgoritm;
            }
            else // calculate and set the checksum in the request headers
            {
                request.Headers[checksumHeaderKey] = CalculateChecksumForRequest(CryptoUtilFactory.GetChecksumInstance(coreChecksumAlgoritm), request);
            }
        }
Esempio n. 5
0
 public HashingWrapperSHA1()
     : base(CryptoUtilFactory.GetChecksumInstance(CoreChecksumAlgorithm.SHA1))
 {
 }
Esempio n. 6
0
 public HashingWrapperCRC32()
     : base(CryptoUtilFactory.GetChecksumInstance(CoreChecksumAlgorithm.CRC32))
 {
 }