Files
SuperVPN/output/Libraries/BouncyCastle.Crypto/Org/BouncyCastle/Crypto/Tls/ServerName.cs
2025-10-09 09:57:24 +09:00

77 lines
1.5 KiB
C#

using System;
using System.IO;
using Org.BouncyCastle.Utilities;
namespace Org.BouncyCastle.Crypto.Tls;
public class ServerName
{
protected readonly byte mNameType;
protected readonly object mName;
public virtual byte NameType => mNameType;
public virtual object Name => mName;
public ServerName(byte nameType, object name)
{
if (!IsCorrectType(nameType, name))
{
throw new ArgumentException("not an instance of the correct type", "name");
}
mNameType = nameType;
mName = name;
}
public virtual string GetHostName()
{
if (!IsCorrectType(0, mName))
{
throw new InvalidOperationException("'name' is not a HostName string");
}
return (string)mName;
}
public virtual void Encode(Stream output)
{
TlsUtilities.WriteUint8(mNameType, output);
if (mNameType == 0)
{
byte[] array = Strings.ToAsciiByteArray((string)mName);
if (array.Length < 1)
{
throw new TlsFatalAlert(80);
}
TlsUtilities.WriteOpaque16(array, output);
return;
}
throw new TlsFatalAlert(80);
}
public static ServerName Parse(Stream input)
{
byte b = TlsUtilities.ReadUint8(input);
if (b == 0)
{
byte[] array = TlsUtilities.ReadOpaque16(input);
if (array.Length < 1)
{
throw new TlsFatalAlert(50);
}
object name = Strings.FromAsciiByteArray(array);
return new ServerName(b, name);
}
throw new TlsFatalAlert(50);
}
protected static bool IsCorrectType(byte nameType, object name)
{
if (nameType == 0)
{
return name is string;
}
throw new ArgumentException("unsupported NameType", "nameType");
}
}