diff --git a/include/openssl/ssl.h b/include/openssl/ssl.h
index c8e8872..f71e219 100644
--- a/include/openssl/ssl.h
+++ b/include/openssl/ssl.h
@@ -2763,9 +2763,6 @@
 OPENSSL_EXPORT const char *SSL_state_string(const SSL *s);
 OPENSSL_EXPORT const char *SSL_state_string_long(const SSL *s);
 
-OPENSSL_EXPORT int SSL_SESSION_print_fp(FILE *fp, const SSL_SESSION *ses);
-OPENSSL_EXPORT int SSL_SESSION_print(BIO *fp, const SSL_SESSION *ses);
-
 /* SSL_renegotiate_pending returns one if |ssl| is in the middle of a
  * renegotiation. */
 OPENSSL_EXPORT int SSL_renegotiate_pending(SSL *ssl);
diff --git a/ssl/CMakeLists.txt b/ssl/CMakeLists.txt
index 2785dcf..3c55e9d 100644
--- a/ssl/CMakeLists.txt
+++ b/ssl/CMakeLists.txt
@@ -31,7 +31,6 @@
   ssl_rsa.c
   ssl_session.c
   ssl_stat.c
-  ssl_txt.c
   t1_enc.c
   t1_lib.c
   tls_record.c
diff --git a/ssl/ssl_txt.c b/ssl/ssl_txt.c
deleted file mode 100644
index 3ba0887..0000000
--- a/ssl/ssl_txt.c
+++ /dev/null
@@ -1,214 +0,0 @@
-/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
- * All rights reserved.
- *
- * This package is an SSL implementation written
- * by Eric Young (eay@cryptsoft.com).
- * The implementation was written so as to conform with Netscapes SSL.
- *
- * This library is free for commercial and non-commercial use as long as
- * the following conditions are aheared to.  The following conditions
- * apply to all code found in this distribution, be it the RC4, RSA,
- * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
- * included with this distribution is covered by the same copyright terms
- * except that the holder is Tim Hudson (tjh@cryptsoft.com).
- *
- * Copyright remains Eric Young's, and as such any Copyright notices in
- * the code are not to be removed.
- * If this package is used in a product, Eric Young should be given attribution
- * as the author of the parts of the library used.
- * This can be in the form of a textual message at program startup or
- * in documentation (online or textual) provided with the package.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *    "This product includes cryptographic software written by
- *     Eric Young (eay@cryptsoft.com)"
- *    The word 'cryptographic' can be left out if the rouines from the library
- *    being used are not cryptographic related :-).
- * 4. If you include any Windows specific code (or a derivative thereof) from
- *    the apps directory (application code) you must include an acknowledgement:
- *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
- *
- * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * The licence and distribution terms for any publically available version or
- * derivative of this code cannot be changed.  i.e. this code cannot simply be
- * copied and put under another distribution licence
- * [including the GNU Public Licence.]
- */
-/* ====================================================================
- * Copyright 2005 Nokia. All rights reserved.
- *
- * The portions of the attached software ("Contribution") is developed by
- * Nokia Corporation and is licensed pursuant to the OpenSSL open source
- * license.
- *
- * The Contribution, originally written by Mika Kousa and Pasi Eronen of
- * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites
- * support (see RFC 4279) to OpenSSL.
- *
- * No patent licenses or other rights except those expressly stated in
- * the OpenSSL open source license shall be deemed granted or received
- * expressly, by implication, estoppel, or otherwise.
- *
- * No assurances are provided by Nokia that the Contribution does not
- * infringe the patent or other intellectual property rights of any third
- * party or that the license provides you with all the necessary rights
- * to make use of the Contribution.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN
- * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA
- * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY
- * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR
- * OTHERWISE. */
-
-#include <openssl/ssl.h>
-
-#include <inttypes.h>
-#include <stdio.h>
-
-#include <openssl/bio.h>
-#include <openssl/err.h>
-#include <openssl/x509.h>
-
-#include "internal.h"
-
-
-int SSL_SESSION_print_fp(FILE *fp, const SSL_SESSION *x) {
-  BIO *b;
-  int ret;
-
-  b = BIO_new(BIO_s_file());
-  if (b == NULL) {
-    OPENSSL_PUT_ERROR(SSL, ERR_R_BUF_LIB);
-    return 0;
-  }
-
-  BIO_set_fp(b, fp, BIO_NOCLOSE);
-  ret = SSL_SESSION_print(b, x);
-  BIO_free(b);
-  return ret;
-}
-
-int SSL_SESSION_print(BIO *bp, const SSL_SESSION *x) {
-  unsigned int i;
-  const char *s;
-
-  if (x == NULL ||
-      BIO_puts(bp, "SSL-Session:\n") <= 0) {
-    goto err;
-  }
-
-  if (x->ssl_version == SSL3_VERSION) {
-    s = "SSLv3";
-  } else if (x->ssl_version == TLS1_2_VERSION) {
-    s = "TLSv1.2";
-  } else if (x->ssl_version == TLS1_1_VERSION) {
-    s = "TLSv1.1";
-  } else if (x->ssl_version == TLS1_VERSION) {
-    s = "TLSv1";
-  } else if (x->ssl_version == DTLS1_VERSION) {
-    s = "DTLSv1";
-  } else if (x->ssl_version == DTLS1_2_VERSION) {
-    s = "DTLSv1.2";
-  } else {
-    s = "unknown";
-  }
-
-  if (BIO_printf(bp, "    Protocol  : %s\n", s) <= 0) {
-    goto err;
-  }
-
-  if (BIO_printf(bp, "    Cipher    : %s\n",
-                 ((x->cipher == NULL) ? "unknown" : x->cipher->name)) <= 0) {
-    goto err;
-  }
-
-  if (BIO_puts(bp, "    Session-ID: ") <= 0) {
-    goto err;
-  }
-
-  for (i = 0; i < x->session_id_length; i++) {
-    if (BIO_printf(bp, "%02X", x->session_id[i]) <= 0) {
-      goto err;
-    }
-  }
-
-  if (BIO_puts(bp, "\n    Session-ID-ctx: ") <= 0) {
-    goto err;
-  }
-
-  for (i = 0; i < x->sid_ctx_length; i++) {
-    if (BIO_printf(bp, "%02X", x->sid_ctx[i]) <= 0) {
-      goto err;
-    }
-  }
-
-  if (BIO_puts(bp, "\n    Master-Key: ") <= 0) {
-    goto err;
-  }
-
-  for (i = 0; i < (unsigned int)x->master_key_length; i++) {
-    if (BIO_printf(bp, "%02X", x->master_key[i]) <= 0) {
-      goto err;
-    }
-  }
-
-  if (BIO_puts(bp, "\n    PSK identity: ") <= 0 ||
-      BIO_printf(bp, "%s", x->psk_identity ? x->psk_identity : "None") <= 0) {
-    goto err;
-  }
-
-  if (x->tlsext_tick_lifetime_hint &&
-      BIO_printf(bp, "\n    TLS session ticket lifetime hint: %" PRIu32
-                     " (seconds)",
-                 x->tlsext_tick_lifetime_hint) <= 0) {
-    goto err;
-  }
-
-  if (x->tlsext_tick) {
-    if (BIO_puts(bp, "\n    TLS session ticket:\n") <= 0 ||
-        BIO_hexdump(bp, x->tlsext_tick, x->tlsext_ticklen, 4) <= 0) {
-      goto err;
-    }
-  }
-
-  if (x->time != 0L && BIO_printf(bp, "\n    Start Time: %ld", x->time) <= 0) {
-    goto err;
-  }
-
-  if (x->timeout != 0L &&
-      BIO_printf(bp, "\n    Timeout   : %ld (sec)", x->timeout) <= 0) {
-    goto err;
-  }
-
-  if (BIO_puts(bp, "\n") <= 0 ||
-      BIO_puts(bp, "    Verify return code: ") <= 0 ||
-      BIO_printf(bp, "%ld (%s)\n", x->verify_result,
-                 X509_verify_cert_error_string(x->verify_result)) <= 0) {
-    goto err;
-  }
-
-  return 1;
-
-err:
-  return 0;
-}
