Example #1
0
        /// <summary>
        /// Recalculate the checksum
        /// </summary>
        public override void UpdateCalculatedValues()
        {
            if (skipUpdating)
            {
                return;
            }

            // prevent us from entering this routine twice
            // by setting this flag, the act of retrieving the Bytes
            // property will cause this routine to be called which will
            // retrieve Bytes recursively and overflow the stack
            skipUpdating = true;

            // start with this packet with a zeroed out checksum field
            Checksum = 0;
            var originalBytes = Bytes;

            var ipv6Parent      = ParentPacket as IPv6Packet;
            var bytesToChecksum = ipv6Parent.AttachPseudoIPHeader(originalBytes);

            // calculate the one's complement sum of the tcp header
            Checksum = (ushort)ChecksumUtils.OnesComplementSum(bytesToChecksum);

            // clear the skip variable
            skipUpdating = false;
        }
Example #2
0
        /// <summary>
        /// Calculates the transport layer checksum, either for the
        /// tcp or udp packet
        /// </summary>
        /// <param name="option">
        ///     <see cref="TransportChecksumOption" />
        /// </param>
        /// <returns>
        /// A <see cref="int" />
        /// </returns>
        internal int CalculateChecksum(TransportChecksumOption option)
        {
            // save the checksum field value so it can be restored, altering the checksum is not
            // an intended side effect of this method
            var originalChecksum = Checksum;

            // reset the checksum field (checksum is calculated when this field is
            // zeroed)
            Checksum = 0;

            // copy the tcp section with data
            var dataToChecksum = ((IPPacket)ParentPacket).PayloadPacket.BytesSegment;

            var bytes = option == TransportChecksumOption.IncludePseudoIPHeader
                ? ((IPPacket)ParentPacket).GetPseudoIPHeader(dataToChecksum.Length)
                : new byte[0];

            // calculate the one's complement sum of the tcp header
            var cs = ChecksumUtils.OnesComplementSum(dataToChecksum, bytes);

            // restore the checksum field value
            Checksum = originalChecksum;

            return(cs);
        }
Example #3
0
        /// <summary>
        /// Determine if the transport layer checksum is valid
        /// </summary>
        /// <param name="option">
        /// A <see cref="TransportChecksumOption" />
        /// </param>
        /// <returns>
        /// A <see cref="bool" />
        /// </returns>
        public virtual bool IsValidChecksum(TransportChecksumOption option)
        {
            var dataToChecksum = ((IPPacket)ParentPacket).PayloadPacket.BytesSegment;

            if (dataToChecksum.Offset + dataToChecksum.Length > dataToChecksum.BytesLength)
            {
                return(false);
            }


            var bytes = option == TransportChecksumOption.IncludePseudoIPHeader
                ? ((IPPacket)ParentPacket).GetPseudoIPHeader(dataToChecksum.Length)
                : new byte[0];

            var onesSum = ChecksumUtils.OnesSum(dataToChecksum, bytes);

            Log.DebugFormat("option: {0}, byteArrayCombination.Length {1}",
                            option,
                            bytes.Length);

            const int expectedOnesSum = 0xFFFF;

            Log.DebugFormat("onesSum {0} expected {1}",
                            onesSum,
                            expectedOnesSum);

            return(onesSum == expectedOnesSum);
        }
        private static byte[] CalculateCrc(byte[] buffer)
        {
            var crc      = ChecksumUtils.CalculateCrc(buffer, 1, 10);
            var crcBytes = BitConverter.GetBytes(crc);

            return(crcBytes);
        }
Example #5
0
        [DataRow(true, CoreChecksumAlgorithm.SHA256, "x-amz-checksum-crc32", "x-amz-checksum-crc32")] // Checksum specified but another was set, still calculate it anyway.
        public void TestRequestChecksumSelection(bool fallbackToMD5, CoreChecksumAlgorithm checksumAlgorithm, string originalHeaderKey, string expectedHeaderKey)
        {
            var mock    = new Mock <IRequest>();
            var headers = new Dictionary <string, string>();
            var request = mock.Object;

            mock.SetupGet(x => x.Headers).Returns(headers);
            mock.SetupGet(x => x.Content).Returns(Encoding.ASCII.GetBytes("foo"));

            if (!string.IsNullOrEmpty(originalHeaderKey))
            {
                headers.Add(originalHeaderKey, "foo");
            }

            ChecksumUtils.SetRequestChecksum(request, checksumAlgorithm.ToString(), fallbackToMD5);

            if (!string.IsNullOrEmpty(expectedHeaderKey))
            {
                Assert.IsTrue(request.Headers.ContainsKey(expectedHeaderKey));
                Assert.IsFalse(string.IsNullOrEmpty(request.Headers[expectedHeaderKey]));
            }
            else
            {
                Assert.AreEqual(0, request.Headers.Count);
            }
        }
Example #6
0
        protected void SetupFlexibleChecksumStream(IWebResponseData responseData, Stream responseStream, long contentLength, IRequestContext requestContext)
        {
            var algorithm = ChecksumUtils.SelectChecksumForResponseValidation(requestContext?.OriginalRequest?.ChecksumResponseAlgorithms, responseData);

            if (algorithm == CoreChecksumAlgorithm.NONE)
            {
                return;
            }

            ChecksumAlgorithm = algorithm;
            ExpectedFlexibleChecksumResult = responseData.GetHeaderValue(ChecksumUtils.GetChecksumHeaderKey(algorithm));
            var checksum = Convert.FromBase64String(ExpectedFlexibleChecksumResult);

            switch (algorithm)
            {
            case CoreChecksumAlgorithm.CRC32C:
                FlexibleChecksumStream = new HashStream <HashingWrapperCRC32C>(responseStream, checksum, contentLength);
                break;

            case CoreChecksumAlgorithm.CRC32:
                FlexibleChecksumStream = new HashStream <HashingWrapperCRC32>(responseStream, checksum, contentLength);
                break;

            case CoreChecksumAlgorithm.SHA256:
                FlexibleChecksumStream = new HashStream <HashingWrapperSHA256>(responseStream, checksum, contentLength);
                break;

            case CoreChecksumAlgorithm.SHA1:
                FlexibleChecksumStream = new HashStream <HashingWrapperSHA1>(responseStream, checksum, contentLength);
                break;

            default:
                throw new AmazonClientException($"Unsupported checksum algorithm {algorithm}");
            }
        }
Example #7
0
        public IRequest Marshall(RestoreObjectRequest restoreObjectRequest)
        {
            IRequest request = new DefaultRequest(restoreObjectRequest, "AmazonS3");

            request.HttpMethod = "POST";

            if (restoreObjectRequest.IsSetRequestPayer())
            {
                request.Headers.Add(S3Constants.AmzHeaderRequestPayer, S3Transforms.ToStringValue(restoreObjectRequest.RequestPayer.ToString()));
            }

            if (restoreObjectRequest.IsSetExpectedBucketOwner())
            {
                request.Headers.Add(S3Constants.AmzHeaderExpectedBucketOwner, S3Transforms.ToStringValue(restoreObjectRequest.ExpectedBucketOwner));
            }

            if (string.IsNullOrEmpty(restoreObjectRequest.BucketName))
            {
                throw new System.ArgumentException("BucketName is a required property and must be set before making this call.", "RestoreObjectRequest.BucketName");
            }
            if (string.IsNullOrEmpty(restoreObjectRequest.Key))
            {
                throw new System.ArgumentException("Key is a required property and must be set before making this call.", "RestoreObjectRequest.Key");
            }

            request.ResourcePath = string.Format(CultureInfo.InvariantCulture, "/{0}/{1}",
                                                 S3Transforms.ToStringValue(restoreObjectRequest.BucketName),
                                                 S3Transforms.ToStringValue(restoreObjectRequest.Key));

            request.AddSubResource("restore");
            if (restoreObjectRequest.IsSetVersionId())
            {
                request.AddSubResource("versionId", S3Transforms.ToStringValue(restoreObjectRequest.VersionId));
            }

            var stringWriter = new XMLEncodedStringWriter(System.Globalization.CultureInfo.InvariantCulture);

            using (var xmlWriter = XmlWriter.Create(stringWriter, new XmlWriterSettings()
            {
                Encoding = Encoding.UTF8, OmitXmlDeclaration = true, NewLineHandling = NewLineHandling.Entitize
            }))
            {
                restoreObjectRequest.Marshall("RestoreRequest", xmlWriter);
            }

            try
            {
                var content = stringWriter.ToString();
                request.Content = Encoding.UTF8.GetBytes(content);
                request.Headers[HeaderKeys.ContentTypeHeader] = "application/xml";

                ChecksumUtils.SetRequestChecksum(request, restoreObjectRequest.ChecksumAlgorithm, fallbackToMD5: false);
            }
            catch (EncoderFallbackException e)
            {
                throw new AmazonServiceException("Unable to marshall request to XML", e);
            }

            return(request);
        }
Example #8
0
        /// <summary>
        /// Calculates the transport layer checksum, either for the
        /// tcp or udp packet
        /// </summary>
        /// <param name="option"><see cref="TransportPacket.TransportChecksumOption"/></param>
        /// <returns>
        /// A <see cref="System.Int32"/>
        /// </returns>
        internal int CalculateChecksum(TransportChecksumOption option)
        {
            // save the checksum field value so it can be restored, altering the checksum is not
            // an intended side effect of this method
            var originalChecksum = Checksum;

            // reset the checksum field (checksum is calculated when this field is
            // zeroed)
            Checksum = 0;

            // copy the tcp section with data
            byte[] dataToChecksum = ((IpPacket)ParentPacket).PayloadPacket.Bytes;

            if (option == TransportChecksumOption.AttachPseudoIPHeader)
            {
                dataToChecksum = ((IpPacket)ParentPacket).AttachPseudoIPHeader(dataToChecksum);
            }

            // calculate the one's complement sum of the tcp header
            int cs = ChecksumUtils.OnesComplementSum(dataToChecksum);

            // restore the checksum field value
            Checksum = originalChecksum;

            return(cs);
        }
Example #9
0
        public IRequest Marshall(PutBucketRequestPaymentRequest putBucketRequestPaymentRequest)
        {
            IRequest request = new DefaultRequest(putBucketRequestPaymentRequest, "AmazonS3");

            request.HttpMethod = "PUT";

            if (putBucketRequestPaymentRequest.IsSetChecksumAlgorithm())
            {
                request.Headers.Add(S3Constants.AmzHeaderSdkChecksumAlgorithm, S3Transforms.ToStringValue(putBucketRequestPaymentRequest.ChecksumAlgorithm));
            }

            if (putBucketRequestPaymentRequest.IsSetExpectedBucketOwner())
            {
                request.Headers.Add(S3Constants.AmzHeaderExpectedBucketOwner, S3Transforms.ToStringValue(putBucketRequestPaymentRequest.ExpectedBucketOwner));
            }

            if (string.IsNullOrEmpty(putBucketRequestPaymentRequest.BucketName))
            {
                throw new System.ArgumentException("BucketName is a required property and must be set before making this call.", "PutBucketRequestPaymentRequest.BucketName");
            }

            request.ResourcePath = string.Concat("/", S3Transforms.ToStringValue(putBucketRequestPaymentRequest.BucketName));

            request.AddSubResource("requestPayment");

            var stringWriter = new XMLEncodedStringWriter(System.Globalization.CultureInfo.InvariantCulture);

            using (var xmlWriter = XmlWriter.Create(stringWriter, new XmlWriterSettings()
            {
                Encoding = Encoding.UTF8, OmitXmlDeclaration = true, NewLineHandling = NewLineHandling.Entitize
            }))
            {
                var requestPaymentConfigurationRequestPaymentConfiguration = putBucketRequestPaymentRequest.RequestPaymentConfiguration;
                if (requestPaymentConfigurationRequestPaymentConfiguration != null)
                {
                    xmlWriter.WriteStartElement("RequestPaymentConfiguration", "");
                    if (requestPaymentConfigurationRequestPaymentConfiguration.IsSetPayer())
                    {
                        xmlWriter.WriteElementString("Payer", "", S3Transforms.ToXmlStringValue(requestPaymentConfigurationRequestPaymentConfiguration.Payer));
                    }
                    xmlWriter.WriteEndElement();
                }
            }

            try
            {
                var content = stringWriter.ToString();
                request.Content = Encoding.UTF8.GetBytes(content);
                request.Headers[HeaderKeys.ContentTypeHeader] = "application/xml";

                ChecksumUtils.SetRequestChecksum(request, putBucketRequestPaymentRequest.ChecksumAlgorithm);
            }
            catch (EncoderFallbackException e)
            {
                throw new AmazonServiceException("Unable to marshall request to XML", e);
            }

            return(request);
        }
Example #10
0
 public virtual bool IsValidChecksum(TransportChecksumOption option)
 {
     byte[] bytes = ((IpPacket)this.ParentPacket).PayloadPacket.Bytes;
     if (option == TransportChecksumOption.AttachPseudoIPHeader)
     {
         bytes = ((IpPacket)this.ParentPacket).AttachPseudoIPHeader(bytes);
     }
     return(ChecksumUtils.OnesSum(bytes) == 0xffff);
 }
Example #11
0
 internal int CalculateChecksum(TransportChecksumOption option)
 {
     this.Checksum = 0;
     byte[] bytes = ((IpPacket)this.ParentPacket).PayloadPacket.Bytes;
     if (option == TransportChecksumOption.AttachPseudoIPHeader)
     {
         bytes = ((IpPacket)this.ParentPacket).AttachPseudoIPHeader(bytes);
     }
     return(ChecksumUtils.OnesComplementSum(bytes));
 }
Example #12
0
        public int CalculateIPChecksum()
        {
            byte[] header           = this.Header;
            byte[] destinationArray = new byte[header.Length];
            Array.Copy(header, destinationArray, header.Length);
            ushort num = 0;

            EndianBitConverter.Big.CopyBytes(num, destinationArray, IPv4Fields.ChecksumPosition);
            return(ChecksumUtils.OnesComplementSum(destinationArray, 0, destinationArray.Length));
        }
Example #13
0
        public void CalculateFletcherSumForSampleMessage()
        {
            byte[] message          = new byte[] { 0x07, 0x84, 0x09, 0x7E, 0x10, 0x58, 0x01, 0x00 };
            byte[] expectedChecksum = new byte[] { 0x7C, 0xD1 };


            byte[] fletcherSum = ChecksumUtils.CalculateFletcher16Checksum(message);

            CollectionAssert.AreEqual(expectedChecksum, fletcherSum);
        }
Example #14
0
        public void CalculateFletcherSumForTwoByteMessage()
        {
            byte[] message          = new byte[] { 0x01, 0x02 };
            byte[] expectedChecksum = new byte[] { 0x03, 0x04 };


            byte[] fletcherSum = ChecksumUtils.CalculateFletcher16Checksum(message);

            CollectionAssert.AreEqual(expectedChecksum, fletcherSum);
        }
Example #15
0
        public void CanCalculateHash(string key, uint expected)
        {
            // Arrange

            // Act
            var actual = ChecksumUtils.JenkinsLookup3(key);

            // Assert
            Assert.Equal(expected, actual);
        }
        public void CrcUtilReturnProperValue()
        {
            var payload = new byte[] { 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };

            Assert.Equal(12, payload.Length);

            ushort crc = ChecksumUtils.CalculateCrc(payload);

            Assert.Equal(65120, crc);
        }
Example #17
0
        public void CalculateFletcherSumForTwoByteMessageWithOverflow()
        {
            byte[] message          = new byte[] { 0xF1, 0xF2 };
            byte[] expectedChecksum = new byte[] { 0xE4, 0xD6 };


            byte[] fletcherSum = ChecksumUtils.CalculateFletcher16Checksum(message);

            CollectionAssert.AreEqual(expectedChecksum, fletcherSum);
        }
        public virtual bool IsValidTransportLayerChecksum(bool pseudoIPHeader)
        {
            byte[] upperLayer = IPData;
            if (pseudoIPHeader)
            {
                upperLayer = AttachPseudoIPHeader(upperLayer);
            }
            int onesSum = ChecksumUtils.OnesSum(upperLayer);

            return(onesSum == 0xFFFF);
        }
Example #19
0
        /// <summary>
        /// Marshall PutObjectTaggingRequest into an http request.
        /// </summary>
        public IRequest Marshall(PutObjectTaggingRequest putObjectTaggingRequest)
        {
            IRequest request = new DefaultRequest(putObjectTaggingRequest, "AmazonS3");

            request.HttpMethod = "PUT";

            if (putObjectTaggingRequest.IsSetChecksumAlgorithm())
            {
                request.Headers.Add(S3Constants.AmzHeaderSdkChecksumAlgorithm, S3Transforms.ToStringValue(putObjectTaggingRequest.ChecksumAlgorithm));
            }
            if (putObjectTaggingRequest.IsSetExpectedBucketOwner())
            {
                request.Headers.Add(S3Constants.AmzHeaderExpectedBucketOwner, S3Transforms.ToStringValue(putObjectTaggingRequest.ExpectedBucketOwner));
            }
            if (putObjectTaggingRequest.IsSetRequestPayer())
            {
                request.Headers.Add(S3Constants.AmzHeaderRequestPayer, S3Transforms.ToStringValue(putObjectTaggingRequest.RequestPayer));
            }

            if (string.IsNullOrEmpty(putObjectTaggingRequest.BucketName))
            {
                throw new System.ArgumentException("BucketName is a required property and must be set before making this call.", "PutObjectTaggingRequest.BucketName");
            }
            if (string.IsNullOrEmpty(putObjectTaggingRequest.Key))
            {
                throw new System.ArgumentException("Key is a required property and must be set before making this call.", "PutObjectTaggingRequest.Key");
            }

            request.ResourcePath = string.Format(CultureInfo.InvariantCulture, "/{0}/{1}",
                                                 S3Transforms.ToStringValue(putObjectTaggingRequest.BucketName),
                                                 S3Transforms.ToStringValue(putObjectTaggingRequest.Key));
            request.AddSubResource("tagging");

            if (putObjectTaggingRequest.IsSetVersionId())
            {
                request.AddSubResource("versionId", putObjectTaggingRequest.VersionId);
            }

            try
            {
                var content = AmazonS3Util.SerializeTaggingToXml(putObjectTaggingRequest.Tagging);
                request.Content = Encoding.UTF8.GetBytes(content);
                request.Headers[HeaderKeys.ContentTypeHeader] = "application/xml";

                ChecksumUtils.SetRequestChecksum(request, putObjectTaggingRequest.ChecksumAlgorithm);
            }
            catch (EncoderFallbackException e)
            {
                throw new AmazonServiceException("Unable to marhsall request to XML", e);
            }

            return(request);
        }
Example #20
0
        public void ResponseChecksumSelection_NoChecksumsReturned()
        {
            var operationSupportedChecksums = new List <CoreChecksumAlgorithm>
            {
                CoreChecksumAlgorithm.CRC32,
                CoreChecksumAlgorithm.CRC32C
            };
            var responseData = new WebResponseData();

            // No checksum headers on the response, so we cannot choose one to validate
            Assert.AreEqual(CoreChecksumAlgorithm.NONE,
                            ChecksumUtils.SelectChecksumForResponseValidation(operationSupportedChecksums, responseData));
        }
Example #21
0
        /// <summary>
        /// Determine if the transport layer checksum is valid
        /// </summary>
        /// <param name="option">
        /// A <see cref="TransportChecksumOption"/>
        /// </param>
        /// <returns>
        /// A <see cref="System.Boolean"/>
        /// </returns>
        public virtual bool IsValidChecksum(TransportChecksumOption option)
        {
            var upperLayer = ((IpPacket)ParentPacket).PayloadPacket.Bytes;

            if (option == TransportChecksumOption.AttachPseudoIPHeader)
            {
                upperLayer = ((IpPacket)ParentPacket).AttachPseudoIPHeader(upperLayer);
            }

            var       onesSum         = ChecksumUtils.OnesSum(upperLayer);
            const int expectedOnesSum = 0xffff;

            return(onesSum == expectedOnesSum);
        }
        /// <summary> Computes the IP checksum, optionally updating the IP checksum header.
        ///
        /// </summary>
        /// <param name="update">Specifies whether or not to update the IP checksum
        /// header after computing the checksum.  A value of true indicates
        /// the header should be updated, a value of false indicates it
        /// should not be updated.
        /// </param>
        /// <returns> The computed IP checksum.
        /// </returns>
        public int ComputeIPChecksum(bool update)
        {
            //copy the ip header
            byte[] ip = ArrayHelper.copy(Bytes, _ethPayloadOffset, IPHeaderLength);
            //reset the checksum field (checksum is calculated when this field is zeroed)
            ArrayHelper.insertLong(ip, 0, IPv4Fields_Fields.IP_CSUM_POS, 2);
            //compute the one's complement sum of the ip header
            int cs = ChecksumUtils.OnesComplementSum(ip, 0, ip.Length);

            if (update)
            {
                IPChecksum = cs;
            }

            return(cs);
        }
Example #23
0
        private void ScanFiles()
        {
            // If no includes were specified, add all files and subdirectories
            // from the fileset's base directory to the fileset.
            if ((FileSet.Includes.Count == 0) && (FileSet.AsIs.Count == 0))
            {
                FileSet.Includes.Add("**/*.dll");

                // Make sure to rescan the fileset
                FileSet.Scan();
            }

            AgentProjectInfo projectInfo = new AgentProjectInfo();

            if (String.IsNullOrEmpty(ProjectToken))
            {
                projectInfo.Coordinates = new Coordinates(null, Project.ProjectName, null);
            }
            else
            {
                projectInfo.ProjectToken = ProjectToken;
            }

            // scan files and calculate SHA-1 values
            List <DependencyInfo> dependencies = projectInfo.Dependencies;

            foreach (String pathname in FileSet.FileNames)
            {
                FileInfo srcInfo = new FileInfo(pathname);
                if (srcInfo.Exists)
                {
                    String sha1     = ChecksumUtils.GetSha1Hash(pathname);
                    String filename = srcInfo.Name;
                    Log(Level.Debug, "SHA-1 for " + filename + " is: " + sha1);

                    DependencyInfo dependency = new DependencyInfo();
                    dependency.Sha1       = sha1;
                    dependency.ArtifactId = filename;
                    dependency.SystemPath = pathname;
                    dependencies.Add(dependency);
                }
            }
            Log(Level.Info, "Found " + dependencies.Count + " direct dependencies");
            projects.Add(projectInfo);
        }
Example #24
0
        /// <summary>
        ///     Determine if the transport layer checksum is valid
        /// </summary>
        /// <param name="option">
        ///     A <see cref="TransportChecksumOption" />
        /// </param>
        /// <returns>
        ///     A <see cref="System.Boolean" />
        /// </returns>
        public virtual bool IsValidChecksum(TransportChecksumOption option)
        {
            var upperLayer = ((IpPacket)this.ParentPacket).PayloadPacket.Bytes;

            log.DebugFormat("option: {0}, upperLayer.Length {1}", option, upperLayer.Length);

            if (option == TransportChecksumOption.AttachPseudoIPHeader)
            {
                upperLayer = ((IpPacket)this.ParentPacket).AttachPseudoIPHeader(upperLayer);
            }

            var       onesSum         = ChecksumUtils.OnesSum(upperLayer);
            const int expectedOnesSum = 0xffff;

            log.DebugFormat("onesSum {0} expected {1}", onesSum, expectedOnesSum);

            return(onesSum == expectedOnesSum);
        }
Example #25
0
        public void ResponseChecksumSelection_SingleChecksum()
        {
            var operationSupportedChecksums = new List <CoreChecksumAlgorithm>
            {
                CoreChecksumAlgorithm.SHA256,
                CoreChecksumAlgorithm.CRC32
            };
            var responseData = new WebResponseData();

            responseData.Headers = new Dictionary <string, string>
            {
                { "x-amz-checksum-sha256", "checksum" }
            };

            // Even though CRC32 is supported and comes first in priority order, only SHA256 is returned from service
            Assert.AreEqual(CoreChecksumAlgorithm.SHA256,
                            ChecksumUtils.SelectChecksumForResponseValidation(operationSupportedChecksums, responseData));
        }
Example #26
0
        public void TestResponseChecksumSelection_UnsupportedChecksum()
        {
            var operationSupportedChecksums = new List <CoreChecksumAlgorithm>
            {
                CoreChecksumAlgorithm.SHA256,
                CoreChecksumAlgorithm.CRC32
            };
            var responseData = new WebResponseData();

            responseData.Headers = new Dictionary <string, string>
            {
                { "x-amz-checksum-crc64", "checksum" }
            };

            // CRC64 is not currently supported by the SDK
            Assert.AreEqual(CoreChecksumAlgorithm.NONE,
                            ChecksumUtils.SelectChecksumForResponseValidation(operationSupportedChecksums, responseData));
        }
        public void CrcUtilOverloadedMethodsReturnEqualValues()
        {
            var frame = new byte[] { 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x61, 0x3E };

            Assert.Equal(16, frame.Length);

            var payload = new byte[12];

            Buffer.BlockCopy(frame, 1, payload, 0, 12);

            var crc = ChecksumUtils.CalculateCrc(payload);

            Assert.Equal(65120, crc);

            var crc2 = ChecksumUtils.CalculateCrc(frame, 1, 12);

            Assert.Equal(crc, crc2);
        }
Example #28
0
        /// <summary>
        ///     Calculates the IP checksum, optionally updating the IP checksum header.
        /// </summary>
        /// <returns>
        ///     The calculated IP checksum.
        /// </returns>
        public ushort CalculateIPChecksum()
        {
            //copy the ip header
            var theHeader = this.Header;
            var ip        = new byte[theHeader.Length];

            Array.Copy(theHeader, ip, theHeader.Length);

            //reset the checksum field (checksum is calculated when this field is zeroed)
            var theValue = (UInt16)0;

            EndianBitConverter.Big.CopyBytes(theValue, ip, IPv4Fields.ChecksumPosition);

            //calculate the one's complement sum of the ip header
            var cs = ChecksumUtils.OnesComplementSum(ip, 0, ip.Length);

            return((ushort)cs);
        }
Example #29
0
        public void TestResponseChecksumSelection_Priority()
        {
            var operationSupportedChecksums = new List <CoreChecksumAlgorithm>
            {
                CoreChecksumAlgorithm.SHA256,
                CoreChecksumAlgorithm.CRC32
            };
            var responseData = new WebResponseData();

            responseData.Headers = new Dictionary <string, string>
            {
                { "x-amz-checksum-sha256", "checksum" },
                { "x-amz-checksum-crc32", "checksum" }
            };

            // CRC32 should take priority over SHA256 when both are returned
            Assert.AreEqual(CoreChecksumAlgorithm.CRC32,
                            ChecksumUtils.SelectChecksumForResponseValidation(operationSupportedChecksums, responseData));
        }
Example #30
0
        private void updateIPChecksums(ref byte[] data)
        {
            int header_len = (data[IP_HEADER_IHL_OFFSET] & 0x0F) * 4;

            //reset the checksum field (checksum is calculated when this field is zeroed)
            data[IP_HEADER_CHECKSUM_OFFSET]     = 0;
            data[IP_HEADER_CHECKSUM_OFFSET + 1] = 0;
            //calculate the one's complement sum of the ip header
            var val = (UInt16)ChecksumUtils.OnesComplementSum(data, IP_HEADER_IHL_OFFSET, header_len);

            EndianBitConverter.Big.CopyBytes(val, data, IP_HEADER_CHECKSUM_OFFSET);

            // disable UDP checksum
            if (data[IP_HEADER_PROTOCOL_OFFSET] == (byte)IPProtocolType.UDP)
            {
                data[IP_HEADER_IHL_OFFSET + header_len + UDP_HEADER_CHECKSUM_OFFSET]     = 0;
                data[IP_HEADER_IHL_OFFSET + header_len + UDP_HEADER_CHECKSUM_OFFSET + 1] = 0;
            }
        }