Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
IdentityHelper.cs
Go to the documentation of this file.
1using System.IO;
4using System.Text;
5
6namespace System.Security;
7
8internal static class IdentityHelper
9{
10 private static readonly char[] s_base32Char = new char[32]
11 {
12 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
13 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
14 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3',
15 '4', '5'
16 };
17
18 internal static string GetNormalizedUriHash(Uri uri)
19 {
21 }
22
23 internal static string GetNormalizedStrongNameHash(AssemblyName name)
24 {
25 byte[] publicKey = name.GetPublicKey();
26 if (publicKey == null || publicKey.Length == 0)
27 {
28 return null;
29 }
30 using MemoryStream memoryStream = new MemoryStream();
31 using BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
32 binaryWriter.Write(publicKey);
33 binaryWriter.Write(name.Version.Major);
34 binaryWriter.Write(name.Name);
35 memoryStream.Position = 0L;
36 return GetStrongHashSuitableForObjectName(memoryStream);
37 }
38
39 internal static string GetStrongHashSuitableForObjectName(string name)
40 {
41 using MemoryStream memoryStream = new MemoryStream();
42 using BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
43 binaryWriter.Write(name.ToUpperInvariant());
44 memoryStream.Position = 0L;
45 return GetStrongHashSuitableForObjectName(memoryStream);
46 }
47
49 {
50 using SHA1 sHA = SHA1.Create();
51 return ToBase32StringSuitableForDirName(sHA.ComputeHash(stream));
52 }
53
54 internal static string ToBase32StringSuitableForDirName(byte[] buff)
55 {
56 StringBuilder stringBuilder = new StringBuilder();
57 int num = buff.Length;
58 int num2 = 0;
59 do
60 {
61 byte b = (byte)((num2 < num) ? buff[num2++] : 0);
62 byte b2 = (byte)((num2 < num) ? buff[num2++] : 0);
63 byte b3 = (byte)((num2 < num) ? buff[num2++] : 0);
64 byte b4 = (byte)((num2 < num) ? buff[num2++] : 0);
65 byte b5 = (byte)((num2 < num) ? buff[num2++] : 0);
66 stringBuilder.Append(s_base32Char[b & 0x1F]);
67 stringBuilder.Append(s_base32Char[b2 & 0x1F]);
68 stringBuilder.Append(s_base32Char[b3 & 0x1F]);
69 stringBuilder.Append(s_base32Char[b4 & 0x1F]);
70 stringBuilder.Append(s_base32Char[b5 & 0x1F]);
71 stringBuilder.Append(s_base32Char[((b & 0xE0) >> 5) | ((b4 & 0x60) >> 2)]);
72 stringBuilder.Append(s_base32Char[((b2 & 0xE0) >> 5) | ((b5 & 0x60) >> 2)]);
73 b3 >>= 5;
74 if ((b4 & 0x80u) != 0)
75 {
76 b3 = (byte)(b3 | 8u);
77 }
78 if ((b5 & 0x80u) != 0)
79 {
80 b3 = (byte)(b3 | 0x10u);
81 }
82 stringBuilder.Append(s_base32Char[b3]);
83 }
84 while (num2 < num);
85 return stringBuilder.ToString();
86 }
87}
static new SHA1 Create()
Definition SHA1.cs:55
static string GetStrongHashSuitableForObjectName(Stream stream)
static string GetStrongHashSuitableForObjectName(string name)
static string GetNormalizedUriHash(Uri uri)
static string ToBase32StringSuitableForDirName(byte[] buff)
static string GetNormalizedStrongNameHash(AssemblyName name)
static readonly char[] s_base32Char
override string ToString()
StringBuilder Append(char value, int repeatCount)
override string ToString()
Definition Uri.cs:1119