using System; using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates; using Mono.Security.Cryptography; namespace Mono.Security.Protocol.Tls.Handshake.Server { // Token: 0x020000BC RID: 188 internal class TlsServerKeyExchange : HandshakeMessage { // Token: 0x060006C0 RID: 1728 RVA: 0x00025CC0 File Offset: 0x00023EC0 public TlsServerKeyExchange(Context context) : base(context, HandshakeType.ServerKeyExchange) { } // Token: 0x060006C1 RID: 1729 RVA: 0x00025CCC File Offset: 0x00023ECC public override void Update() { throw new NotSupportedException(); } // Token: 0x060006C2 RID: 1730 RVA: 0x00025CD4 File Offset: 0x00023ED4 protected override void ProcessAsSsl3() { this.ProcessAsTls1(); } // Token: 0x060006C3 RID: 1731 RVA: 0x00025CDC File Offset: 0x00023EDC protected override void ProcessAsTls1() { ServerContext serverContext = (ServerContext)base.Context; RSA rsa = (RSA)serverContext.SslStream.PrivateKeyCertSelectionDelegate(new X509Certificate(serverContext.ServerSettings.Certificates[0].RawData), null); RSAParameters rsaparameters = rsa.ExportParameters(false); base.WriteInt24(rsaparameters.Modulus.Length); this.Write(rsaparameters.Modulus, 0, rsaparameters.Modulus.Length); base.WriteInt24(rsaparameters.Exponent.Length); this.Write(rsaparameters.Exponent, 0, rsaparameters.Exponent.Length); byte[] array = this.createSignature(rsa, base.ToArray()); base.WriteInt24(array.Length); base.Write(array); } // Token: 0x060006C4 RID: 1732 RVA: 0x00025D9C File Offset: 0x00023F9C private byte[] createSignature(RSA rsa, byte[] buffer) { MD5SHA1 md5SHA = new MD5SHA1(); TlsStream tlsStream = new TlsStream(); tlsStream.Write(base.Context.RandomCS); tlsStream.Write(buffer, 0, buffer.Length); md5SHA.ComputeHash(tlsStream.ToArray()); tlsStream.Reset(); return md5SHA.CreateSignature(rsa); } } }