Files
2026-06-04 11:42:34 +02:00

121 lines
3.5 KiB
C#

using System;
using System.Security;
using System.Security.Cryptography;
using System.Text;
using Mono.Xml;
namespace Mono.Security.Cryptography
{
// Token: 0x02000029 RID: 41
public abstract class DiffieHellman : AsymmetricAlgorithm
{
// Token: 0x060001B1 RID: 433 RVA: 0x0000B6CC File Offset: 0x000098CC
public new static DiffieHellman Create()
{
return DiffieHellman.Create("Mono.Security.Cryptography.DiffieHellman");
}
// Token: 0x060001B2 RID: 434 RVA: 0x0000B6D8 File Offset: 0x000098D8
public new static DiffieHellman Create(string algName)
{
return (DiffieHellman)CryptoConfig.CreateFromName(algName);
}
// Token: 0x060001B3 RID: 435
public abstract byte[] CreateKeyExchange();
// Token: 0x060001B4 RID: 436
public abstract byte[] DecryptKeyExchange(byte[] keyex);
// Token: 0x060001B5 RID: 437
public abstract DHParameters ExportParameters(bool includePrivate);
// Token: 0x060001B6 RID: 438
public abstract void ImportParameters(DHParameters parameters);
// Token: 0x060001B7 RID: 439 RVA: 0x0000B6E8 File Offset: 0x000098E8
private byte[] GetNamedParam(SecurityElement se, string param)
{
SecurityElement securityElement = se.SearchForChildByTag(param);
if (securityElement == null)
{
return null;
}
return Convert.FromBase64String(securityElement.Text);
}
// Token: 0x060001B8 RID: 440 RVA: 0x0000B710 File Offset: 0x00009910
public override void FromXmlString(string xmlString)
{
if (xmlString == null)
{
throw new ArgumentNullException("xmlString");
}
DHParameters dhparameters = default(DHParameters);
try
{
SecurityParser securityParser = new SecurityParser();
securityParser.LoadXml(xmlString);
SecurityElement securityElement = securityParser.ToXml();
if (securityElement.Tag != "DHKeyValue")
{
throw new CryptographicException();
}
dhparameters.P = this.GetNamedParam(securityElement, "P");
dhparameters.G = this.GetNamedParam(securityElement, "G");
dhparameters.X = this.GetNamedParam(securityElement, "X");
this.ImportParameters(dhparameters);
}
finally
{
if (dhparameters.P != null)
{
Array.Clear(dhparameters.P, 0, dhparameters.P.Length);
}
if (dhparameters.G != null)
{
Array.Clear(dhparameters.G, 0, dhparameters.G.Length);
}
if (dhparameters.X != null)
{
Array.Clear(dhparameters.X, 0, dhparameters.X.Length);
}
}
}
// Token: 0x060001B9 RID: 441 RVA: 0x0000B830 File Offset: 0x00009A30
public override string ToXmlString(bool includePrivateParameters)
{
StringBuilder stringBuilder = new StringBuilder();
DHParameters dhparameters = this.ExportParameters(includePrivateParameters);
try
{
stringBuilder.Append("<DHKeyValue>");
stringBuilder.Append("<P>");
stringBuilder.Append(Convert.ToBase64String(dhparameters.P));
stringBuilder.Append("</P>");
stringBuilder.Append("<G>");
stringBuilder.Append(Convert.ToBase64String(dhparameters.G));
stringBuilder.Append("</G>");
if (includePrivateParameters)
{
stringBuilder.Append("<X>");
stringBuilder.Append(Convert.ToBase64String(dhparameters.X));
stringBuilder.Append("</X>");
}
stringBuilder.Append("</DHKeyValue>");
}
finally
{
Array.Clear(dhparameters.P, 0, dhparameters.P.Length);
Array.Clear(dhparameters.G, 0, dhparameters.G.Length);
if (dhparameters.X != null)
{
Array.Clear(dhparameters.X, 0, dhparameters.X.Length);
}
}
return stringBuilder.ToString();
}
}
}