init commit
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
using System.Collections;
|
||||
using System.IO;
|
||||
using Org.BouncyCastle.Asn1;
|
||||
using Org.BouncyCastle.Asn1.X509;
|
||||
using Org.BouncyCastle.Utilities;
|
||||
|
||||
namespace Org.BouncyCastle.Crypto.Tls;
|
||||
|
||||
public class CertificateRequest
|
||||
{
|
||||
protected readonly byte[] mCertificateTypes;
|
||||
|
||||
protected readonly IList mSupportedSignatureAlgorithms;
|
||||
|
||||
protected readonly IList mCertificateAuthorities;
|
||||
|
||||
public virtual byte[] CertificateTypes => mCertificateTypes;
|
||||
|
||||
public virtual IList SupportedSignatureAlgorithms => mSupportedSignatureAlgorithms;
|
||||
|
||||
public virtual IList CertificateAuthorities => mCertificateAuthorities;
|
||||
|
||||
public CertificateRequest(byte[] certificateTypes, IList supportedSignatureAlgorithms, IList certificateAuthorities)
|
||||
{
|
||||
mCertificateTypes = certificateTypes;
|
||||
mSupportedSignatureAlgorithms = supportedSignatureAlgorithms;
|
||||
mCertificateAuthorities = certificateAuthorities;
|
||||
}
|
||||
|
||||
public virtual void Encode(Stream output)
|
||||
{
|
||||
if (mCertificateTypes == null || mCertificateTypes.Length == 0)
|
||||
{
|
||||
TlsUtilities.WriteUint8(0, output);
|
||||
}
|
||||
else
|
||||
{
|
||||
TlsUtilities.WriteUint8ArrayWithUint8Length(mCertificateTypes, output);
|
||||
}
|
||||
if (mSupportedSignatureAlgorithms != null)
|
||||
{
|
||||
TlsUtilities.EncodeSupportedSignatureAlgorithms(mSupportedSignatureAlgorithms, allowAnonymous: false, output);
|
||||
}
|
||||
if (mCertificateAuthorities == null || mCertificateAuthorities.Count < 1)
|
||||
{
|
||||
TlsUtilities.WriteUint16(0, output);
|
||||
return;
|
||||
}
|
||||
IList list = Platform.CreateArrayList(mCertificateAuthorities.Count);
|
||||
int num = 0;
|
||||
foreach (Asn1Encodable mCertificateAuthority in mCertificateAuthorities)
|
||||
{
|
||||
byte[] encoded = mCertificateAuthority.GetEncoded("DER");
|
||||
list.Add(encoded);
|
||||
num += encoded.Length + 2;
|
||||
}
|
||||
TlsUtilities.CheckUint16(num);
|
||||
TlsUtilities.WriteUint16(num, output);
|
||||
foreach (byte[] item in list)
|
||||
{
|
||||
TlsUtilities.WriteOpaque16(item, output);
|
||||
}
|
||||
}
|
||||
|
||||
public static CertificateRequest Parse(TlsContext context, Stream input)
|
||||
{
|
||||
int num = TlsUtilities.ReadUint8(input);
|
||||
byte[] array = new byte[num];
|
||||
for (int i = 0; i < num; i++)
|
||||
{
|
||||
array[i] = TlsUtilities.ReadUint8(input);
|
||||
}
|
||||
IList supportedSignatureAlgorithms = null;
|
||||
if (TlsUtilities.IsTlsV12(context))
|
||||
{
|
||||
supportedSignatureAlgorithms = TlsUtilities.ParseSupportedSignatureAlgorithms(allowAnonymous: false, input);
|
||||
}
|
||||
IList list = Platform.CreateArrayList();
|
||||
byte[] buffer = TlsUtilities.ReadOpaque16(input);
|
||||
MemoryStream memoryStream = new MemoryStream(buffer, writable: false);
|
||||
while (memoryStream.Position < memoryStream.Length)
|
||||
{
|
||||
byte[] encoding = TlsUtilities.ReadOpaque16(memoryStream);
|
||||
Asn1Object obj = TlsUtilities.ReadDerObject(encoding);
|
||||
list.Add(X509Name.GetInstance(obj));
|
||||
}
|
||||
return new CertificateRequest(array, supportedSignatureAlgorithms, list);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user