protected override void Encode(TlsStream stream)
        {
            stream.Write((byte)Parameters.CertificateTypes.Count);
            for (int i = 0; i < Parameters.CertificateTypes.Count; i++)
            {
                stream.Write((byte)Parameters.CertificateTypes [i]);
            }

            if (Protocol == TlsProtocolCode.Tls12)
            {
                var count = Parameters.HasSignatureParameters ? Parameters.SignatureParameters.SignatureAndHashAlgorithms.Count : 0;
                stream.Write((short)(count * 2));
                for (int i = 0; i < count; i++)
                {
                    SignatureHelper.EncodeSignatureAndHashAlgorithm(Parameters.SignatureParameters.SignatureAndHashAlgorithms [i], stream);
                }
            }

            var startPos = stream.Position;

            stream.Write((short)0);
            foreach (var issuer in Parameters.CertificateAuthorities)
            {
                var bytes = X501.FromString(issuer).GetBytes();
                stream.Write((short)bytes.Length);
                stream.Write(bytes);
            }
            var endPos = stream.Position;

            stream.Position = startPos;
            stream.Write((short)(endPos - startPos - 2));
            stream.Position = endPos;
        }
Exemple #2
0
        public override void Encode(TlsBuffer buffer)
        {
            var algorithms = SignatureParameters.SignatureAndHashAlgorithms;

            buffer.Write((short)ExtensionType);
            buffer.Write((short)(algorithms.Count * 2 + 2));
            buffer.Write((short)(algorithms.Count * 2));
            foreach (var algorithm in algorithms)
            {
                SignatureHelper.EncodeSignatureAndHashAlgorithm(algorithm, buffer);
            }
        }