221 lines
6.6 KiB
C#
221 lines
6.6 KiB
C#
using System;
|
|
using System.Runtime.InteropServices;
|
|
using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Rfc8032;
|
|
using BestHTTP.SecureProtocol.Org.BouncyCastle.Security;
|
|
using Cpp2IlInjected;
|
|
|
|
namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Rfc7748
|
|
{
|
|
// Token: 0x02001434 RID: 5172
|
|
[Token(Token = "0x2001434")]
|
|
[StructLayout(3)]
|
|
public abstract class X25519
|
|
{
|
|
// Token: 0x0600862F RID: 34351 RVA: 0x001D6AC4 File Offset: 0x001D4CC4
|
|
[Token(Token = "0x600862F")]
|
|
[Address(RVA = "0x209ADB0", Offset = "0x20997B0", VA = "0x18209ADB0")]
|
|
public static bool CalculateAgreement(byte[] k, int kOff, byte[] u, int uOff, byte[] r, int rOff)
|
|
{
|
|
bool flag;
|
|
return !flag;
|
|
}
|
|
|
|
// Token: 0x06008630 RID: 34352 RVA: 0x001D6AD8 File Offset: 0x001D4CD8
|
|
[Token(Token = "0x6008630")]
|
|
[Address(RVA = "0x74C4E0", Offset = "0x74AEE0", VA = "0x18074C4E0")]
|
|
private static uint Decode32(byte[] bs, int off)
|
|
{
|
|
int length = bs.Length;
|
|
int num = off + 1;
|
|
throw new NullReferenceException();
|
|
}
|
|
|
|
// Token: 0x06008631 RID: 34353 RVA: 0x001D6AF8 File Offset: 0x001D4CF8
|
|
[Token(Token = "0x6008631")]
|
|
[Address(RVA = "0x209AE70", Offset = "0x2099870", VA = "0x18209AE70")]
|
|
private static void DecodeScalar(byte[] k, int kOff, uint[] n)
|
|
{
|
|
int num = 0;
|
|
int length = k.Length;
|
|
int num2 = kOff + 1;
|
|
byte b = k[k];
|
|
num++;
|
|
n[0] = (uint)b;
|
|
uint num3 = n[3];
|
|
n[3] = num3;
|
|
n[3] = num3;
|
|
}
|
|
|
|
// Token: 0x06008632 RID: 34354 RVA: 0x001D6B48 File Offset: 0x001D4D48
|
|
[Token(Token = "0x6008632")]
|
|
[Address(RVA = "0x209AFE0", Offset = "0x20999E0", VA = "0x18209AFE0")]
|
|
public static void GeneratePrivateKey(SecureRandom random, byte[] k)
|
|
{
|
|
byte b = k[3];
|
|
k[3] = b;
|
|
k[3] = b;
|
|
}
|
|
|
|
// Token: 0x06008633 RID: 34355 RVA: 0x001D6B74 File Offset: 0x001D4D74
|
|
[Token(Token = "0x6008633")]
|
|
[Address(RVA = "0x209B070", Offset = "0x2099A70", VA = "0x18209B070")]
|
|
public static void GeneratePublicKey(byte[] k, int kOff, byte[] r, int rOff)
|
|
{
|
|
X25519.ScalarMultBase(k, kOff, r, rOff);
|
|
}
|
|
|
|
// Token: 0x06008634 RID: 34356 RVA: 0x001D6B8C File Offset: 0x001D4D8C
|
|
[Token(Token = "0x6008634")]
|
|
[Address(RVA = "0x209B080", Offset = "0x2099A80", VA = "0x18209B080")]
|
|
private static void PointDouble(int[] x, int[] z)
|
|
{
|
|
int[] array = new int[10];
|
|
int[] array2 = new int[10];
|
|
X25519Field.Apm(x, z, array, array2);
|
|
X25519Field.Sqr(array, array);
|
|
X25519Field.Sqr(array2, array2);
|
|
X25519Field.Mul(array, array2, x);
|
|
X25519Field.Sub(array, array2, array);
|
|
X25519Field.Mul(array, 121666, z);
|
|
X25519Field.Add(z, array2, z);
|
|
X25519Field.Mul(z, array, z);
|
|
}
|
|
|
|
// Token: 0x06008635 RID: 34357 RVA: 0x001D6BEC File Offset: 0x001D4DEC
|
|
[Token(Token = "0x6008635")]
|
|
[Address(RVA = "0x209B1E0", Offset = "0x2099BE0", VA = "0x18209B1E0")]
|
|
public static void Precompute()
|
|
{
|
|
Ed25519.Precompute();
|
|
}
|
|
|
|
// Token: 0x06008636 RID: 34358 RVA: 0x001D6C00 File Offset: 0x001D4E00
|
|
[Token(Token = "0x6008636")]
|
|
[Address(RVA = "0x209B550", Offset = "0x2099F50", VA = "0x18209B550")]
|
|
public static void ScalarMult(byte[] k, int kOff, byte[] u, int uOff, byte[] r, int rOff)
|
|
{
|
|
uint[] array = new uint[8];
|
|
X25519.DecodeScalar(k, kOff, array);
|
|
int[] array2 = new int[10];
|
|
X25519Field.Decode(u, uOff, array2);
|
|
int[] array3 = new int[10];
|
|
int num = 0;
|
|
int num2 = array2[num];
|
|
num++;
|
|
array3[0] = num2;
|
|
int[] array4 = new int[10];
|
|
uint num3;
|
|
array4[0] = (int)num3;
|
|
int[] array5 = new int[10];
|
|
array5[0] = (int)num3;
|
|
int[] array6 = new int[10];
|
|
int[] array7 = new int[10];
|
|
int[] array8 = new int[10];
|
|
X25519Field.Apm(array5, array6, array7, array5);
|
|
X25519Field.Apm(array3, array4, array6, array3);
|
|
X25519Field.Mul(array7, array3, array7);
|
|
X25519Field.Mul(array5, array6, array5);
|
|
X25519Field.Sqr(array6, array6);
|
|
X25519Field.Sqr(array3, array3);
|
|
int num4 = 0;
|
|
int num5 = array6[num4];
|
|
num4++;
|
|
array8[0] = num5;
|
|
uint num6;
|
|
X25519Field.Mul(array8, (int)num6, array4);
|
|
int num7 = 0;
|
|
int num8 = array3[num7];
|
|
num7++;
|
|
X25519Field.Mul(array4, array8, array4);
|
|
X25519Field.Mul(array3, array6, array3);
|
|
int num9 = 0;
|
|
int num10 = array7[num9];
|
|
int num11 = array5[num9];
|
|
array5[0] = num8;
|
|
num10 -= num11;
|
|
num9++;
|
|
array6[0] = num10;
|
|
X25519Field.Sqr(array5, array5);
|
|
X25519Field.Sqr(array6, array6);
|
|
X25519Field.Mul(array6, array2, array6);
|
|
int num12 = 0;
|
|
int num13 = array5[num12];
|
|
num12++;
|
|
array5[0] = num13;
|
|
int num14 = 0;
|
|
num14++;
|
|
array6[0] = num13;
|
|
int num15 = 0;
|
|
int[] array9 = new int[10];
|
|
int[] array10 = new int[10];
|
|
X25519Field.Apm(array3, array4, array9, array10);
|
|
X25519Field.Sqr(array9, array9);
|
|
X25519Field.Sqr(array10, array10);
|
|
X25519Field.Mul(array9, array10, array3);
|
|
num15++;
|
|
uint num16;
|
|
X25519Field.Mul(array9, (int)num16, array4);
|
|
int num17 = array10[num15];
|
|
num15++;
|
|
X25519Field.Mul(array4, array9, array4);
|
|
num15++;
|
|
X25519Field.Inv(array4, array4);
|
|
X25519Field.Mul(array3, array4, array3);
|
|
int num18 = array3[4];
|
|
X25519Field.Reduce(array3, num18);
|
|
X25519Field.Reduce(array3, num18);
|
|
}
|
|
|
|
// Token: 0x06008637 RID: 34359 RVA: 0x001D6E58 File Offset: 0x001D5058
|
|
[Token(Token = "0x6008637")]
|
|
[Address(RVA = "0x209B230", Offset = "0x2099C30", VA = "0x18209B230")]
|
|
public static void ScalarMultBase(byte[] k, int kOff, byte[] r, int rOff)
|
|
{
|
|
int[] array = new int[10];
|
|
int[] array2 = new int[10];
|
|
byte[] array3 = new byte[32];
|
|
Ed25519.PruneScalar(k, kOff, array3);
|
|
Ed25519.PointAccum pointAccum = new Ed25519.PointAccum();
|
|
Ed25519.ScalarMultBase(array3, pointAccum);
|
|
int[] y = pointAccum.y;
|
|
int num = 0;
|
|
int num2 = y[num];
|
|
num++;
|
|
array[0] = num2;
|
|
int num3 = pointAccum.z[num];
|
|
num++;
|
|
array2[0] = num3;
|
|
X25519Field.Apm(array2, array, array, array2);
|
|
X25519Field.Inv(array2, array2);
|
|
X25519Field.Mul(array, array2, array);
|
|
X25519Field.Normalize(array);
|
|
int num4 = 0;
|
|
X25519Field.Encode128(array, num4, r, rOff);
|
|
X25519Field.Encode128(array, 5, r, rOff);
|
|
}
|
|
|
|
// Token: 0x06008638 RID: 34360 RVA: 0x001D6F10 File Offset: 0x001D5110
|
|
[Token(Token = "0x6008638")]
|
|
[Address(RVA = "0x3C1670", Offset = "0x3C0070", VA = "0x1803C1670")]
|
|
protected X25519()
|
|
{
|
|
}
|
|
|
|
// Token: 0x04005CC1 RID: 23745
|
|
[Token(Token = "0x4005CC1")]
|
|
public const int PointSize = 32;
|
|
|
|
// Token: 0x04005CC2 RID: 23746
|
|
[Token(Token = "0x4005CC2")]
|
|
public const int ScalarSize = 32;
|
|
|
|
// Token: 0x04005CC3 RID: 23747
|
|
[Token(Token = "0x4005CC3")]
|
|
private const int C_A = 486662;
|
|
|
|
// Token: 0x04005CC4 RID: 23748
|
|
[Token(Token = "0x4005CC4")]
|
|
private const int C_A24 = 121666;
|
|
}
|
|
}
|