485 lines
14 KiB
C#
485 lines
14 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Runtime.InteropServices;
|
|
using System.Text;
|
|
using BestHTTP.Extensions;
|
|
using Cpp2IlInjected;
|
|
|
|
namespace BestHTTP.Authentication
|
|
{
|
|
// Token: 0x020019ED RID: 6637
|
|
[Token(Token = "0x20019ED")]
|
|
[StructLayout(3)]
|
|
public sealed class Digest
|
|
{
|
|
// Token: 0x17001CE7 RID: 7399
|
|
// (get) Token: 0x0600B2C6 RID: 45766 RVA: 0x002A0BF8 File Offset: 0x0029EDF8
|
|
// (set) Token: 0x0600B2C7 RID: 45767 RVA: 0x002A0C0C File Offset: 0x0029EE0C
|
|
[Token(Token = "0x17001CE7")]
|
|
public Uri Uri
|
|
{
|
|
[Token(Token = "0x600B2C6")]
|
|
[Address(RVA = "0x3C39A0", Offset = "0x3C23A0", VA = "0x1803C39A0")]
|
|
get;
|
|
[Token(Token = "0x600B2C7")]
|
|
[Address(RVA = "0x3C39B0", Offset = "0x3C23B0", VA = "0x1803C39B0")]
|
|
private set;
|
|
}
|
|
|
|
// Token: 0x17001CE8 RID: 7400
|
|
// (get) Token: 0x0600B2C8 RID: 45768 RVA: 0x002A0C20 File Offset: 0x0029EE20
|
|
// (set) Token: 0x0600B2C9 RID: 45769 RVA: 0x002A0C34 File Offset: 0x0029EE34
|
|
[Token(Token = "0x17001CE8")]
|
|
public AuthenticationTypes Type
|
|
{
|
|
[Token(Token = "0x600B2C8")]
|
|
[Address(RVA = "0x3EE8D0", Offset = "0x3ED2D0", VA = "0x1803EE8D0")]
|
|
get;
|
|
[Token(Token = "0x600B2C9")]
|
|
[Address(RVA = "0x4F8C20", Offset = "0x4F7620", VA = "0x1804F8C20")]
|
|
private set;
|
|
}
|
|
|
|
// Token: 0x17001CE9 RID: 7401
|
|
// (get) Token: 0x0600B2CA RID: 45770 RVA: 0x002A0C48 File Offset: 0x0029EE48
|
|
// (set) Token: 0x0600B2CB RID: 45771 RVA: 0x002A0C5C File Offset: 0x0029EE5C
|
|
[Token(Token = "0x17001CE9")]
|
|
public string Realm
|
|
{
|
|
[Token(Token = "0x600B2CA")]
|
|
[Address(RVA = "0x3C1220", Offset = "0x3BFC20", VA = "0x1803C1220")]
|
|
get;
|
|
[Token(Token = "0x600B2CB")]
|
|
[Address(RVA = "0x3C1260", Offset = "0x3BFC60", VA = "0x1803C1260")]
|
|
private set;
|
|
}
|
|
|
|
// Token: 0x17001CEA RID: 7402
|
|
// (get) Token: 0x0600B2CC RID: 45772 RVA: 0x002A0C70 File Offset: 0x0029EE70
|
|
// (set) Token: 0x0600B2CD RID: 45773 RVA: 0x002A0C84 File Offset: 0x0029EE84
|
|
[Token(Token = "0x17001CEA")]
|
|
public bool Stale
|
|
{
|
|
[Token(Token = "0x600B2CC")]
|
|
[Address(RVA = "0x651230", Offset = "0x64FC30", VA = "0x180651230")]
|
|
get;
|
|
[Token(Token = "0x600B2CD")]
|
|
[Address(RVA = "0x6C60C0", Offset = "0x6C4AC0", VA = "0x1806C60C0")]
|
|
private set;
|
|
}
|
|
|
|
// Token: 0x17001CEB RID: 7403
|
|
// (get) Token: 0x0600B2CE RID: 45774 RVA: 0x002A0C98 File Offset: 0x0029EE98
|
|
// (set) Token: 0x0600B2CF RID: 45775 RVA: 0x002A0CAC File Offset: 0x0029EEAC
|
|
[Token(Token = "0x17001CEB")]
|
|
private string Nonce
|
|
{
|
|
[Token(Token = "0x600B2CE")]
|
|
[Address(RVA = "0x3C1250", Offset = "0x3BFC50", VA = "0x1803C1250")]
|
|
get;
|
|
[Token(Token = "0x600B2CF")]
|
|
[Address(RVA = "0x3C1290", Offset = "0x3BFC90", VA = "0x1803C1290")]
|
|
set;
|
|
}
|
|
|
|
// Token: 0x17001CEC RID: 7404
|
|
// (get) Token: 0x0600B2D0 RID: 45776 RVA: 0x002A0CC0 File Offset: 0x0029EEC0
|
|
// (set) Token: 0x0600B2D1 RID: 45777 RVA: 0x002A0CD4 File Offset: 0x0029EED4
|
|
[Token(Token = "0x17001CEC")]
|
|
private string Opaque
|
|
{
|
|
[Token(Token = "0x600B2D0")]
|
|
[Address(RVA = "0x3EE8E0", Offset = "0x3ED2E0", VA = "0x1803EE8E0")]
|
|
get;
|
|
[Token(Token = "0x600B2D1")]
|
|
[Address(RVA = "0x421E00", Offset = "0x420800", VA = "0x180421E00")]
|
|
set;
|
|
}
|
|
|
|
// Token: 0x17001CED RID: 7405
|
|
// (get) Token: 0x0600B2D2 RID: 45778 RVA: 0x002A0CE8 File Offset: 0x0029EEE8
|
|
// (set) Token: 0x0600B2D3 RID: 45779 RVA: 0x002A0CFC File Offset: 0x0029EEFC
|
|
[Token(Token = "0x17001CED")]
|
|
private string Algorithm
|
|
{
|
|
[Token(Token = "0x600B2D2")]
|
|
[Address(RVA = "0x3D32F0", Offset = "0x3D1CF0", VA = "0x1803D32F0")]
|
|
get;
|
|
[Token(Token = "0x600B2D3")]
|
|
[Address(RVA = "0x3D3460", Offset = "0x3D1E60", VA = "0x1803D3460")]
|
|
set;
|
|
}
|
|
|
|
// Token: 0x17001CEE RID: 7406
|
|
// (get) Token: 0x0600B2D4 RID: 45780 RVA: 0x002A0D10 File Offset: 0x0029EF10
|
|
// (set) Token: 0x0600B2D5 RID: 45781 RVA: 0x002A0D24 File Offset: 0x0029EF24
|
|
[Token(Token = "0x17001CEE")]
|
|
public List<string> ProtectedUris
|
|
{
|
|
[Token(Token = "0x600B2D4")]
|
|
[Address(RVA = "0x3EDEA0", Offset = "0x3EC8A0", VA = "0x1803EDEA0")]
|
|
get;
|
|
[Token(Token = "0x600B2D5")]
|
|
[Address(RVA = "0x3EDED0", Offset = "0x3EC8D0", VA = "0x1803EDED0")]
|
|
private set;
|
|
}
|
|
|
|
// Token: 0x17001CEF RID: 7407
|
|
// (get) Token: 0x0600B2D6 RID: 45782 RVA: 0x002A0D38 File Offset: 0x0029EF38
|
|
// (set) Token: 0x0600B2D7 RID: 45783 RVA: 0x002A0D4C File Offset: 0x0029EF4C
|
|
[Token(Token = "0x17001CEF")]
|
|
private string QualityOfProtections
|
|
{
|
|
[Token(Token = "0x600B2D6")]
|
|
[Address(RVA = "0x462740", Offset = "0x461140", VA = "0x180462740")]
|
|
get;
|
|
[Token(Token = "0x600B2D7")]
|
|
[Address(RVA = "0x462750", Offset = "0x461150", VA = "0x180462750")]
|
|
set;
|
|
}
|
|
|
|
// Token: 0x17001CF0 RID: 7408
|
|
// (get) Token: 0x0600B2D8 RID: 45784 RVA: 0x002A0D60 File Offset: 0x0029EF60
|
|
// (set) Token: 0x0600B2D9 RID: 45785 RVA: 0x002A0D74 File Offset: 0x0029EF74
|
|
[Token(Token = "0x17001CF0")]
|
|
private int NonceCount
|
|
{
|
|
[Token(Token = "0x600B2D8")]
|
|
[Address(RVA = "0x4F8170", Offset = "0x4F6B70", VA = "0x1804F8170")]
|
|
get;
|
|
[Token(Token = "0x600B2D9")]
|
|
[Address(RVA = "0x4F8620", Offset = "0x4F7020", VA = "0x1804F8620")]
|
|
set;
|
|
}
|
|
|
|
// Token: 0x17001CF1 RID: 7409
|
|
// (get) Token: 0x0600B2DA RID: 45786 RVA: 0x002A0D88 File Offset: 0x0029EF88
|
|
// (set) Token: 0x0600B2DB RID: 45787 RVA: 0x002A0D9C File Offset: 0x0029EF9C
|
|
[Token(Token = "0x17001CF1")]
|
|
private string HA1Sess
|
|
{
|
|
[Token(Token = "0x600B2DA")]
|
|
[Address(RVA = "0x3EDE90", Offset = "0x3EC890", VA = "0x1803EDE90")]
|
|
get;
|
|
[Token(Token = "0x600B2DB")]
|
|
[Address(RVA = "0x3EDEC0", Offset = "0x3EC8C0", VA = "0x1803EDEC0")]
|
|
set;
|
|
}
|
|
|
|
// Token: 0x0600B2DC RID: 45788 RVA: 0x002A0DB0 File Offset: 0x0029EFB0
|
|
[Token(Token = "0x600B2DC")]
|
|
[Address(RVA = "0x1A2CD80", Offset = "0x1A2B780", VA = "0x181A2CD80")]
|
|
internal Digest(Uri uri)
|
|
{
|
|
this.Uri = uri;
|
|
this.Algorithm = "md5";
|
|
}
|
|
|
|
// Token: 0x0600B2DD RID: 45789 RVA: 0x002A0DD8 File Offset: 0x0029EFD8
|
|
[Token(Token = "0x600B2DD")]
|
|
[Address(RVA = "0x1A2C8D0", Offset = "0x1A2B2D0", VA = "0x181A2C8D0")]
|
|
public void ParseChallange(string header)
|
|
{
|
|
int num;
|
|
do
|
|
{
|
|
num = 0;
|
|
this.<Type>k__BackingField = (AuthenticationTypes)num;
|
|
this.<Stale>k__BackingField = num != 0;
|
|
this.<Opaque>k__BackingField = num;
|
|
this.<HA1Sess>k__BackingField = num;
|
|
this.<NonceCount>k__BackingField = num;
|
|
this.<QualityOfProtections>k__BackingField = num;
|
|
List<string> list = this.<ProtectedUris>k__BackingField;
|
|
if (list != 0)
|
|
{
|
|
list.Clear();
|
|
}
|
|
List<HeaderValue> <Values>k__BackingField = new WWWAuthenticateHeaderParser(header).<Values>k__BackingField;
|
|
List.Enumerator enumerator;
|
|
if (enumerator != 0)
|
|
{
|
|
int stringLength = header.m_stringLength;
|
|
int stringLength2;
|
|
if (enumerator > (ulong)1863671838L)
|
|
{
|
|
if (enumerator > (ulong)3885209585L)
|
|
{
|
|
if (enumerator == (ulong)4143537083L)
|
|
{
|
|
while (enumerator == 0)
|
|
{
|
|
}
|
|
this.<QualityOfProtections>k__BackingField = enumerator;
|
|
}
|
|
if (enumerator == (ulong)4178082296L)
|
|
{
|
|
while (enumerator == 0)
|
|
{
|
|
}
|
|
this.<Nonce>k__BackingField = enumerator;
|
|
}
|
|
while (enumerator != (ulong)4179908061L)
|
|
{
|
|
}
|
|
while (enumerator == 0)
|
|
{
|
|
}
|
|
this.<Type>k__BackingField = (AuthenticationTypes)((ulong)2L);
|
|
}
|
|
if (enumerator == (ulong)1914854288L)
|
|
{
|
|
while (enumerator == 0)
|
|
{
|
|
}
|
|
this.<Realm>k__BackingField = enumerator;
|
|
}
|
|
while (enumerator != (ulong)3885209585L)
|
|
{
|
|
}
|
|
while (enumerator == 0)
|
|
{
|
|
}
|
|
while (enumerator != 0)
|
|
{
|
|
}
|
|
if (this.<ProtectedUris>k__BackingField == (ulong)0L)
|
|
{
|
|
List<string> list2 = new List();
|
|
this.<ProtectedUris>k__BackingField = list2;
|
|
}
|
|
string text;
|
|
this.<ProtectedUris>k__BackingField.Add(text);
|
|
string text2;
|
|
stringLength2 = text2.m_stringLength;
|
|
}
|
|
bool flag;
|
|
if (stringLength2 > 474311018)
|
|
{
|
|
if (stringLength2 == 1749328254)
|
|
{
|
|
while (stringLength2 == 0)
|
|
{
|
|
}
|
|
this.<Stale>k__BackingField = flag;
|
|
}
|
|
while (!flag)
|
|
{
|
|
}
|
|
while (!flag)
|
|
{
|
|
}
|
|
this.<Opaque>k__BackingField = flag;
|
|
}
|
|
if (flag)
|
|
{
|
|
while (!flag)
|
|
{
|
|
}
|
|
this.<Type>k__BackingField = (AuthenticationTypes)((ulong)1L);
|
|
}
|
|
while (!flag)
|
|
{
|
|
}
|
|
while (!flag)
|
|
{
|
|
}
|
|
this.<Algorithm>k__BackingField = flag;
|
|
}
|
|
if (num != -1)
|
|
{
|
|
}
|
|
}
|
|
while (num != 0);
|
|
}
|
|
|
|
// Token: 0x0600B2DE RID: 45790 RVA: 0x002A0F74 File Offset: 0x0029F174
|
|
[Token(Token = "0x600B2DE")]
|
|
[Address(RVA = "0x1A2B9B0", Offset = "0x1A2A3B0", VA = "0x181A2B9B0")]
|
|
public string GenerateResponseHeader(HTTPRequest request, Credentials credentials, bool isProxy = false)
|
|
{
|
|
string text7;
|
|
string requestPathAndQueryURL;
|
|
for (;;)
|
|
{
|
|
AuthenticationTypes authenticationTypes = this.<Type>k__BackingField;
|
|
if (authenticationTypes == AuthenticationTypes.Basic)
|
|
{
|
|
Encoding utf = Encoding.UTF8;
|
|
string <Password>k__BackingField = credentials.<Password>k__BackingField;
|
|
string <UserName>k__BackingField = credentials.<UserName>k__BackingField;
|
|
string text = string.Format("{0}:{1}", <UserName>k__BackingField, <Password>k__BackingField);
|
|
string text3;
|
|
string text2 = "Basic " + text3;
|
|
}
|
|
if (authenticationTypes != AuthenticationTypes.Digest)
|
|
{
|
|
goto IL_480;
|
|
}
|
|
int num = this.<NonceCount>k__BackingField;
|
|
num++;
|
|
this.<NonceCount>k__BackingField = num;
|
|
request.Finalize();
|
|
string text4 = this.<Algorithm>k__BackingField.TrimAndLower();
|
|
if (string.Equals(text4, "md5"))
|
|
{
|
|
string <Password>k__BackingField2 = credentials.<Password>k__BackingField;
|
|
string text5 = this.<Realm>k__BackingField;
|
|
string <UserName>k__BackingField2 = credentials.<UserName>k__BackingField;
|
|
string text6 = string.Format("{0}:{1}:{2}", <UserName>k__BackingField2, text5, <Password>k__BackingField2).CalculateMD5Hash();
|
|
}
|
|
if (!string.Equals(text4, "md5-sess"))
|
|
{
|
|
goto IL_47A;
|
|
}
|
|
if (string.IsNullOrEmpty(this.<HA1Sess>k__BackingField))
|
|
{
|
|
break;
|
|
}
|
|
text7 = this.<HA1Sess>k__BackingField;
|
|
string text8 = this.<QualityOfProtections>k__BackingField;
|
|
if (text8 != 0)
|
|
{
|
|
string text9 = text8.TrimAndLower();
|
|
}
|
|
int num2 = 0;
|
|
if (isProxy)
|
|
{
|
|
string host = request.CurrentUri.Host;
|
|
int port = request.CurrentUri.Port;
|
|
int num3;
|
|
string text10 = host + ":" + num3;
|
|
}
|
|
int hashCode = request.<MethodType>k__BackingField.GetHashCode();
|
|
requestPathAndQueryURL = request.CurrentUri.GetRequestPathAndQueryURL();
|
|
if (num2 == 0)
|
|
{
|
|
goto IL_316;
|
|
}
|
|
bool flag;
|
|
byte[] array;
|
|
if (!flag)
|
|
{
|
|
bool flag2;
|
|
if (!flag2)
|
|
{
|
|
goto Block_9;
|
|
}
|
|
}
|
|
else if (array == 0)
|
|
{
|
|
goto Block_10;
|
|
}
|
|
}
|
|
object[] array2 = new object[5];
|
|
string <UserName>k__BackingField3 = credentials.<UserName>k__BackingField;
|
|
throw new ArrayTypeMismatchException();
|
|
Block_9:
|
|
string text11 = (string.Empty + ":" + requestPathAndQueryURL).CalculateMD5Hash();
|
|
object[] array3 = new object[6];
|
|
throw new ArrayTypeMismatchException();
|
|
Block_10:
|
|
string text12 = VariableSizedBufferPool.NoData.CalculateMD5Hash();
|
|
string text14;
|
|
string text13 = string.Format("{0}:{1}:{2}", text14, requestPathAndQueryURL, text12).CalculateMD5Hash();
|
|
object[] array4 = new object[6];
|
|
throw new ArrayTypeMismatchException();
|
|
IL_316:
|
|
HTTPMethods httpmethods;
|
|
int hashCode2 = httpmethods.GetHashCode();
|
|
Uri uri;
|
|
string requestPathAndQueryURL2 = uri.GetRequestPathAndQueryURL();
|
|
string text16;
|
|
string text15 = (text16 + ":" + requestPathAndQueryURL2).CalculateMD5Hash();
|
|
string text17 = this.<Nonce>k__BackingField;
|
|
string text18 = string.Format("{0}:{1}:{2}", text7, text17, text15).CalculateMD5Hash();
|
|
object[] array5 = new object[6];
|
|
if (text16 != 0)
|
|
{
|
|
}
|
|
array5[0] = text16;
|
|
string text19 = this.<Realm>k__BackingField;
|
|
if (text19 != 0)
|
|
{
|
|
}
|
|
array5[1] = text19;
|
|
string text20 = this.<Nonce>k__BackingField;
|
|
if (text20 != 0)
|
|
{
|
|
}
|
|
array5[2] = text20;
|
|
if (requestPathAndQueryURL != 0)
|
|
{
|
|
}
|
|
array5[3] = requestPathAndQueryURL;
|
|
if (text7 != 0)
|
|
{
|
|
}
|
|
array5[4] = text7;
|
|
if (text18 != 0)
|
|
{
|
|
}
|
|
array5[5] = text18;
|
|
string text21 = string.Format("Digest username=\"{0}\", realm=\"{1}\", nonce=\"{2}\", uri=\"{3}\", cnonce=\"{4}\", response=\"{5}\"", array5);
|
|
string text22;
|
|
if ("auth-int" != 0)
|
|
{
|
|
string[] array6 = new string[5];
|
|
if (text21 != 0)
|
|
{
|
|
}
|
|
array6[0] = text21;
|
|
if (", qop=\"" != 0)
|
|
{
|
|
}
|
|
array6[1] = ", qop=\"";
|
|
array6[2] = "auth-int";
|
|
if ("\", nc=" != 0)
|
|
{
|
|
}
|
|
array6[3] = "\", nc=";
|
|
if ("\", nc=" != 0)
|
|
{
|
|
}
|
|
array6[4] = "\", nc=";
|
|
text22 = string.Concat(array6);
|
|
}
|
|
string text23 = this.<Opaque>k__BackingField;
|
|
if (text22 == 0)
|
|
{
|
|
string text24 = this.<Opaque>k__BackingField;
|
|
string text25 = text22 + ", opaque=\"" + text24 + "\"";
|
|
}
|
|
IL_47A:
|
|
return string.Empty;
|
|
IL_480:
|
|
throw new NullReferenceException();
|
|
}
|
|
|
|
// Token: 0x0600B2DF RID: 45791 RVA: 0x002A1558 File Offset: 0x0029F758
|
|
[Token(Token = "0x600B2DF")]
|
|
[Address(RVA = "0x1A2C7C0", Offset = "0x1A2B1C0", VA = "0x181A2C7C0")]
|
|
public bool IsUriProtected(Uri uri)
|
|
{
|
|
string host = uri.Host;
|
|
string host2 = this.<Uri>k__BackingField.Host;
|
|
if (string.CompareOrdinal(host, host2) == 0)
|
|
{
|
|
int hashCode = uri.GetHashCode();
|
|
if (this.<ProtectedUris>k__BackingField != 0)
|
|
{
|
|
int num = 0;
|
|
bool flag;
|
|
if (!flag)
|
|
{
|
|
List<string> list = this.<ProtectedUris>k__BackingField;
|
|
num++;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
throw new NullReferenceException();
|
|
}
|
|
}
|
|
}
|