239 lines
7.1 KiB
C#
239 lines
7.1 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: 0x02001436 RID: 5174
|
|
[Token(Token = "0x2001436")]
|
|
[StructLayout(3)]
|
|
public abstract class X448
|
|
{
|
|
// Token: 0x0600865A RID: 34394 RVA: 0x001D8194 File Offset: 0x001D6394
|
|
[Token(Token = "0x600865A")]
|
|
[Address(RVA = "0x20A07C0", Offset = "0x209F1C0", VA = "0x1820A07C0")]
|
|
public static bool CalculateAgreement(byte[] k, int kOff, byte[] u, int uOff, byte[] r, int rOff)
|
|
{
|
|
bool flag;
|
|
return !flag;
|
|
}
|
|
|
|
// Token: 0x0600865B RID: 34395 RVA: 0x001D81A8 File Offset: 0x001D63A8
|
|
[Token(Token = "0x600865B")]
|
|
[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: 0x0600865C RID: 34396 RVA: 0x001D81C8 File Offset: 0x001D63C8
|
|
[Token(Token = "0x600865C")]
|
|
[Address(RVA = "0x20A0880", Offset = "0x209F280", VA = "0x1820A0880")]
|
|
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;
|
|
}
|
|
|
|
// Token: 0x0600865D RID: 34397 RVA: 0x001D81FC File Offset: 0x001D63FC
|
|
[Token(Token = "0x600865D")]
|
|
[Address(RVA = "0x20A09C0", Offset = "0x209F3C0", VA = "0x1820A09C0")]
|
|
public static void GeneratePrivateKey(SecureRandom random, byte[] k)
|
|
{
|
|
double num = random.NextDouble();
|
|
}
|
|
|
|
// Token: 0x0600865E RID: 34398 RVA: 0x001D8218 File Offset: 0x001D6418
|
|
[Token(Token = "0x600865E")]
|
|
[Address(RVA = "0x20A0A30", Offset = "0x209F430", VA = "0x1820A0A30")]
|
|
public static void GeneratePublicKey(byte[] k, int kOff, byte[] r, int rOff)
|
|
{
|
|
uint[] array = new uint[16];
|
|
uint[] array2 = new uint[16];
|
|
Ed448.ScalarMultBaseXY(k, kOff, array, array2);
|
|
X448Field.Inv(array, array);
|
|
X448Field.Mul(array, array2, array);
|
|
X448Field.Sqr(array, array);
|
|
X448Field.Reduce(array, 1);
|
|
X448Field.Reduce(array, -1);
|
|
X448Field.Encode(array, r, rOff);
|
|
}
|
|
|
|
// Token: 0x0600865F RID: 34399 RVA: 0x001D826C File Offset: 0x001D646C
|
|
[Token(Token = "0x600865F")]
|
|
[Address(RVA = "0x20A0B80", Offset = "0x209F580", VA = "0x1820A0B80")]
|
|
private static void PointDouble(uint[] x, uint[] z)
|
|
{
|
|
uint[] array = new uint[16];
|
|
uint[] array2 = new uint[16];
|
|
X448Field.Add(x, z, array);
|
|
X448Field.Sub(x, z, array2);
|
|
X448Field.Sqr(array, array);
|
|
X448Field.Sqr(array2, array2);
|
|
X448Field.Mul(array, array2, x);
|
|
X448Field.Sub(array, array2, array);
|
|
X448Field.Mul(array, (uint)39082, z);
|
|
X448Field.Add(z, array2, z);
|
|
X448Field.Mul(z, array, z);
|
|
}
|
|
|
|
// Token: 0x06008660 RID: 34400 RVA: 0x001D82D4 File Offset: 0x001D64D4
|
|
[Token(Token = "0x6008660")]
|
|
[Address(RVA = "0x20A0CB0", Offset = "0x209F6B0", VA = "0x1820A0CB0")]
|
|
public static void Precompute()
|
|
{
|
|
Ed448.Precompute();
|
|
}
|
|
|
|
// Token: 0x06008661 RID: 34401 RVA: 0x001D82E8 File Offset: 0x001D64E8
|
|
[Token(Token = "0x6008661")]
|
|
[Address(RVA = "0x20A0D00", Offset = "0x209F700", VA = "0x1820A0D00")]
|
|
public static void ScalarMult(byte[] k, int kOff, byte[] u, int uOff, byte[] r, int rOff)
|
|
{
|
|
uint[] array = new uint[14];
|
|
int num = 0;
|
|
int length = k.Length;
|
|
int num2 = kOff + 1;
|
|
num++;
|
|
byte b;
|
|
array[0] = (uint)b;
|
|
uint[] array2 = new uint[16];
|
|
int num3 = 0;
|
|
X448Field.Decode56(u, uOff, array2, num3);
|
|
uint num4;
|
|
X448Field.Decode56(u, uOff, array2, (int)num4);
|
|
uint num5;
|
|
X448Field.Decode56(u, uOff, array2, (int)num5);
|
|
uint num6;
|
|
X448Field.Decode56(u, uOff, array2, (int)num6);
|
|
uint num7;
|
|
X448Field.Decode56(u, uOff, array2, (int)num7);
|
|
uint num8;
|
|
X448Field.Decode56(u, uOff, array2, (int)num8);
|
|
uint num9;
|
|
X448Field.Decode56(u, uOff, array2, (int)num9);
|
|
uint num10;
|
|
X448Field.Decode56(u, uOff, array2, (int)num10);
|
|
uint[] array3 = new uint[16];
|
|
uint num11 = array2[num];
|
|
num++;
|
|
array3[0] = num11;
|
|
uint[] array4 = new uint[16];
|
|
uint num12;
|
|
array4[0] = num12;
|
|
uint[] array5 = new uint[16];
|
|
array5[0] = num12;
|
|
uint[] array6 = new uint[16];
|
|
uint[] array7 = new uint[16];
|
|
uint[] array8 = new uint[16];
|
|
uint num13 = array6[num];
|
|
num++;
|
|
array7[0] = num13;
|
|
X448Field.Sub(array5, array6, array5);
|
|
uint num14 = array4[num];
|
|
num++;
|
|
array6[0] = num14;
|
|
X448Field.Sub(array3, array4, array3);
|
|
X448Field.Mul(array7, array3, array7);
|
|
X448Field.Mul(array5, array6, array5);
|
|
X448Field.Sqr(array6, array6);
|
|
X448Field.Sqr(array3, array3);
|
|
X448Field.Sub(array6, array3, array8);
|
|
uint num15;
|
|
X448Field.Mul(array8, num15, array4);
|
|
num++;
|
|
X448Field.Mul(array4, array8, array4);
|
|
X448Field.Mul(array3, array6, array3);
|
|
X448Field.Sub(array7, array5, array6);
|
|
num++;
|
|
X448Field.Sqr(array5, array5);
|
|
X448Field.Sqr(array6, array6);
|
|
X448Field.Mul(array6, array2, array6);
|
|
uint num17;
|
|
uint num16 = array[(int)num17];
|
|
uint num18 = array5[num];
|
|
num++;
|
|
array5[0] = num18;
|
|
num++;
|
|
array6[0] = num18;
|
|
uint[] array9 = new uint[16];
|
|
uint[] array10 = new uint[16];
|
|
uint num19 = array4[num];
|
|
num++;
|
|
array9[0] = num19;
|
|
X448Field.Sub(array3, array4, array10);
|
|
X448Field.Sqr(array9, array9);
|
|
X448Field.Sqr(array10, array10);
|
|
X448Field.Mul(array9, array10, array3);
|
|
X448Field.Sub(array9, array10, array9);
|
|
uint num20;
|
|
X448Field.Mul(array9, num20, array4);
|
|
num++;
|
|
X448Field.Mul(array4, array9, array4);
|
|
num++;
|
|
X448Field.Inv(array4, array4);
|
|
X448Field.Mul(array3, array4, array3);
|
|
uint num21 = array3[7];
|
|
num21 += (uint)1;
|
|
num21 += (uint)1;
|
|
uint num22 = array3[num];
|
|
num++;
|
|
num22 += num21;
|
|
array3[0] = num22;
|
|
array3[7] = (uint)num;
|
|
uint num23 = array3[num];
|
|
num++;
|
|
num23 += (uint)num;
|
|
array3[0] = num23;
|
|
array3[7] = 0U;
|
|
}
|
|
|
|
// Token: 0x06008662 RID: 34402 RVA: 0x001D85D8 File Offset: 0x001D67D8
|
|
[Token(Token = "0x6008662")]
|
|
[Address(RVA = "0x20A0A30", Offset = "0x209F430", VA = "0x1820A0A30")]
|
|
public static void ScalarMultBase(byte[] k, int kOff, byte[] r, int rOff)
|
|
{
|
|
uint[] array = new uint[16];
|
|
uint[] array2 = new uint[16];
|
|
Ed448.ScalarMultBaseXY(k, kOff, array, array2);
|
|
X448Field.Inv(array, array);
|
|
X448Field.Mul(array, array2, array);
|
|
X448Field.Sqr(array, array);
|
|
X448Field.Reduce(array, 1);
|
|
X448Field.Reduce(array, -1);
|
|
X448Field.Encode(array, r, rOff);
|
|
}
|
|
|
|
// Token: 0x06008663 RID: 34403 RVA: 0x001D862C File Offset: 0x001D682C
|
|
[Token(Token = "0x6008663")]
|
|
[Address(RVA = "0x3C1670", Offset = "0x3C0070", VA = "0x1803C1670")]
|
|
protected X448()
|
|
{
|
|
}
|
|
|
|
// Token: 0x04005CCA RID: 23754
|
|
[Token(Token = "0x4005CCA")]
|
|
public const int PointSize = 56;
|
|
|
|
// Token: 0x04005CCB RID: 23755
|
|
[Token(Token = "0x4005CCB")]
|
|
public const int ScalarSize = 56;
|
|
|
|
// Token: 0x04005CCC RID: 23756
|
|
[Token(Token = "0x4005CCC")]
|
|
private const uint C_A = 156326U;
|
|
|
|
// Token: 0x04005CCD RID: 23757
|
|
[Token(Token = "0x4005CCD")]
|
|
private const uint C_A24 = 39082U;
|
|
}
|
|
}
|