Esempio n. 1
0
        public TlsPskConnection Accept()
        {
            OpenSSL.OpenSSLCheck(OpenSSL.BIO_do_handshake(in_bio) == 1, "BIO_do_handshake");
            IntPtr conn = OpenSSL.BIO_pop(in_bio);

            IntPtr ssl;

            OpenSSL.BIO_get_ssl(conn, out ssl);
            OpenSSL.OpenSSLCheck(ssl != IntPtr.Zero, "BIO_get_ssl");
            OpenSSL.SSL_use_psk_identity_hint(ssl, identityHint);
            OpenSSL.SSL_set_psk_server_callback(ssl, (ssl_, identity, pskOut, max_psk_len) =>
            {
                Marshal.Copy(psk, 0, pskOut, (int)Math.Min(psk.Length, max_psk_len));
                return((uint)psk.Length);
            });

            OpenSSL.OpenSSLCheck(OpenSSL.BIO_do_handshake(conn) == 1, "BIO_do_handshake");

            return(new TlsPskConnection(conn));
        }