Files
Dec2017-Script-Dump/Photon3Unity3D/Photon/SocketServer/Security/DiffieHellmanCryptoProvider.cs
T
2026-06-04 11:42:34 +02:00

157 lines
4.2 KiB
C#

using System;
using System.Security.Cryptography;
using Photon.SocketServer.Numeric;
namespace Photon.SocketServer.Security
{
// Token: 0x02000004 RID: 4
internal class DiffieHellmanCryptoProvider : ICryptoProvider, IDisposable
{
// Token: 0x06000009 RID: 9 RVA: 0x000020AF File Offset: 0x000002AF
public DiffieHellmanCryptoProvider()
{
this.prime = new BigInteger(OakleyGroups.OakleyPrime768);
this.secret = this.GenerateRandomSecret(160);
this.publicKey = this.CalculatePublicKey();
}
// Token: 0x0600000A RID: 10 RVA: 0x000020E8 File Offset: 0x000002E8
public DiffieHellmanCryptoProvider(byte[] sharedSecretHash)
{
this.crypto = new RijndaelManaged();
this.crypto.Key = sharedSecretHash;
this.crypto.IV = new byte[16];
this.crypto.Padding = PaddingMode.PKCS7;
}
// Token: 0x17000003 RID: 3
// (get) Token: 0x0600000B RID: 11 RVA: 0x00002138 File Offset: 0x00000338
public bool IsInitialized
{
get
{
return this.crypto != null;
}
}
// Token: 0x17000004 RID: 4
// (get) Token: 0x0600000C RID: 12 RVA: 0x00002154 File Offset: 0x00000354
public byte[] PublicKey
{
get
{
return this.publicKey.GetBytes();
}
}
// Token: 0x0600000D RID: 13 RVA: 0x00002174 File Offset: 0x00000374
public void DeriveSharedKey(byte[] otherPartyPublicKey)
{
BigInteger bigInteger = new BigInteger(otherPartyPublicKey);
BigInteger bigInteger2 = this.CalculateSharedKey(bigInteger);
this.sharedKey = bigInteger2.GetBytes();
byte[] array;
using (SHA256 sha = new SHA256Managed())
{
array = sha.ComputeHash(this.sharedKey);
}
this.crypto = new RijndaelManaged();
this.crypto.Key = array;
this.crypto.IV = new byte[16];
this.crypto.Padding = PaddingMode.PKCS7;
}
// Token: 0x0600000E RID: 14 RVA: 0x00002208 File Offset: 0x00000408
public byte[] Encrypt(byte[] data)
{
return this.Encrypt(data, 0, data.Length);
}
// Token: 0x0600000F RID: 15 RVA: 0x00002228 File Offset: 0x00000428
public byte[] Encrypt(byte[] data, int offset, int count)
{
byte[] array;
using (ICryptoTransform cryptoTransform = this.crypto.CreateEncryptor())
{
array = cryptoTransform.TransformFinalBlock(data, offset, count);
}
return array;
}
// Token: 0x06000010 RID: 16 RVA: 0x0000226C File Offset: 0x0000046C
public byte[] Decrypt(byte[] data)
{
return this.Decrypt(data, 0, data.Length);
}
// Token: 0x06000011 RID: 17 RVA: 0x0000228C File Offset: 0x0000048C
public byte[] Decrypt(byte[] data, int offset, int count)
{
byte[] array;
using (ICryptoTransform cryptoTransform = this.crypto.CreateDecryptor())
{
array = cryptoTransform.TransformFinalBlock(data, offset, count);
}
return array;
}
// Token: 0x06000012 RID: 18 RVA: 0x000022D0 File Offset: 0x000004D0
public void Dispose()
{
this.Dispose(true);
GC.SuppressFinalize(this);
}
// Token: 0x06000013 RID: 19 RVA: 0x000022E4 File Offset: 0x000004E4
protected void Dispose(bool disposing)
{
bool flag = !disposing;
if (flag)
{
}
}
// Token: 0x06000014 RID: 20 RVA: 0x00002300 File Offset: 0x00000500
private BigInteger CalculatePublicKey()
{
return DiffieHellmanCryptoProvider.primeRoot.ModPow(this.secret, this.prime);
}
// Token: 0x06000015 RID: 21 RVA: 0x00002328 File Offset: 0x00000528
private BigInteger CalculateSharedKey(BigInteger otherPartyPublicKey)
{
return otherPartyPublicKey.ModPow(this.secret, this.prime);
}
// Token: 0x06000016 RID: 22 RVA: 0x0000234C File Offset: 0x0000054C
private BigInteger GenerateRandomSecret(int secretLength)
{
BigInteger bigInteger;
do
{
bigInteger = BigInteger.GenerateRandom(secretLength);
}
while (bigInteger >= this.prime - 1 || bigInteger == 0);
return bigInteger;
}
// Token: 0x04000005 RID: 5
private static readonly BigInteger primeRoot = new BigInteger((long)OakleyGroups.Generator);
// Token: 0x04000006 RID: 6
private readonly BigInteger prime;
// Token: 0x04000007 RID: 7
private readonly BigInteger secret;
// Token: 0x04000008 RID: 8
private readonly BigInteger publicKey;
// Token: 0x04000009 RID: 9
private Rijndael crypto;
// Token: 0x0400000A RID: 10
private byte[] sharedKey;
}
}