Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ ComputeHash()

static byte[] System.Runtime.Serialization.DataContract.ComputeHash ( byte[] namespaces)
inlinestaticprivateinherited

Definition at line 2092 of file DataContract.cs.

2093 {
2094 int[] array = new int[16]
2095 {
2096 7, 12, 17, 22, 5, 9, 14, 20, 4, 11,
2097 16, 23, 6, 10, 15, 21
2098 };
2099 uint[] array2 = new uint[64]
2100 {
2101 3614090360u, 3905402710u, 606105819u, 3250441966u, 4118548399u, 1200080426u, 2821735955u, 4249261313u, 1770035416u, 2336552879u,
2102 4294925233u, 2304563134u, 1804603682u, 4254626195u, 2792965006u, 1236535329u, 4129170786u, 3225465664u, 643717713u, 3921069994u,
2103 3593408605u, 38016083u, 3634488961u, 3889429448u, 568446438u, 3275163606u, 4107603335u, 1163531501u, 2850285829u, 4243563512u,
2104 1735328473u, 2368359562u, 4294588738u, 2272392833u, 1839030562u, 4259657740u, 2763975236u, 1272893353u, 4139469664u, 3200236656u,
2105 681279174u, 3936430074u, 3572445317u, 76029189u, 3654602809u, 3873151461u, 530742520u, 3299628645u, 4096336452u, 1126891415u,
2106 2878612391u, 4237533241u, 1700485571u, 2399980690u, 4293915773u, 2240044497u, 1873313359u, 4264355552u, 2734768916u, 1309151649u,
2107 4149444226u, 3174756917u, 718787259u, 3951481745u
2108 };
2109 int num = (namespaces.Length + 8) / 64 + 1;
2110 uint num2 = 1732584193u;
2111 uint num3 = 4023233417u;
2112 uint num4 = 2562383102u;
2113 uint num5 = 271733878u;
2114 for (int i = 0; i < num; i++)
2115 {
2116 byte[] array3 = namespaces;
2117 int num6 = i * 64;
2118 if (num6 + 64 > namespaces.Length)
2119 {
2120 array3 = new byte[64];
2121 for (int j = num6; j < namespaces.Length; j++)
2122 {
2123 array3[j - num6] = namespaces[j];
2124 }
2125 if (num6 <= namespaces.Length)
2126 {
2127 array3[namespaces.Length - num6] = 128;
2128 }
2129 if (i == num - 1)
2130 {
2131 array3[56] = (byte)(namespaces.Length << 3);
2132 array3[57] = (byte)(namespaces.Length >> 5);
2133 array3[58] = (byte)(namespaces.Length >> 13);
2134 array3[59] = (byte)(namespaces.Length >> 21);
2135 }
2136 num6 = 0;
2137 }
2138 uint num7 = num2;
2139 uint num8 = num3;
2140 uint num9 = num4;
2141 uint num10 = num5;
2142 for (int k = 0; k < 64; k++)
2143 {
2144 uint num11;
2145 int num12;
2146 if (k < 16)
2147 {
2148 num11 = (num8 & num9) | (~num8 & num10);
2149 num12 = k;
2150 }
2151 else if (k < 32)
2152 {
2153 num11 = (num8 & num10) | (num9 & ~num10);
2154 num12 = 5 * k + 1;
2155 }
2156 else if (k < 48)
2157 {
2158 num11 = num8 ^ num9 ^ num10;
2159 num12 = 3 * k + 5;
2160 }
2161 else
2162 {
2163 num11 = num9 ^ (num8 | ~num10);
2164 num12 = 7 * k;
2165 }
2166 num12 = (num12 & 0xF) * 4 + num6;
2167 uint num13 = num10;
2168 num10 = num9;
2169 num9 = num8;
2171 num8 = (num8 << array[(k & 3) | ((k >> 2) & -4)]) | (num8 >> 32 - array[(k & 3) | ((k >> 2) & -4)]);
2172 num8 += num9;
2173 num7 = num13;
2174 }
2175 num2 += num7;
2176 num3 += num8;
2177 if (i < num - 1)
2178 {
2179 num4 += num9;
2180 num5 += num10;
2181 }
2182 }
2183 return new byte[6]
2184 {
2185 (byte)num2,
2186 (byte)(num2 >> 8),
2187 (byte)(num2 >> 16),
2188 (byte)(num2 >> 24),
2189 (byte)num3,
2190 (byte)(num3 >> 8)
2191 };
2192 }
static uint ReadUInt32LittleEndian(ReadOnlySpan< byte > source)

References System.array, System.Runtime.Serialization.Dictionary, System.Text.RegularExpressions.i, and System.Buffers.Binary.BinaryPrimitives.ReadUInt32LittleEndian().

Referenced by System.Runtime.Serialization.DataContract.GetNamespacesDigest().