Index: ChangeLog
==================================================================
--- ChangeLog
+++ ChangeLog
@@ -30,21 +30,21 @@
 	* win/makefile.vc:
 	* configure: regen with ac-2.59
 
 	* tls.c (MiscObjCmd): Fixed non-static string array used in call
 	  of Tcl_GetIndexFromObj(). Memory smash waiting to happen. Thanks
-	  to Brian Griffin for alerting us all to the problem. 
+	  to Brian Griffin for alerting us all to the problem.
 
 2012-06-01  Andreas Kupries  <andreask@activestate.com>
 
 	* tls.c: Applied Jeff's patch from
 	  http://www.mail-archive.com/aolserver@listserv.aol.com/msg12356.html
 
 	* configure.in: Bump to version 1.6.2.
 	* win/makefile.vc:
 	* configure: regen with ac-2.59
-	
+
 2010-08-11  Jeff Hobbs  <jeffh@ActiveState.com>
 
 	*** TLS 1.6.1 TAGGED ***
 
 	* configure: regen with ac-2.59
@@ -108,11 +108,11 @@
 	* win/makefile.vc: with MSVC8
 	* win/rules.vc:
 
 2007-06-22  Jeff Hobbs  <jeffh@ActiveState.com>
 
-	* tlsIO.c (TlsInputProc, TlsOutputProc, TlsWatchProc): 
+	* tlsIO.c (TlsInputProc, TlsOutputProc, TlsWatchProc):
 	* tls.c (VerifyCallback): add an state flag in the verify callback
 	that prevents possibly recursion (on 'update'). [Bug 1652380]
 
 	* tests/ciphers.test: reworked to make test output cleaner to
 	understand missing ciphers (if any)
@@ -120,11 +120,11 @@
 	* Makefile.in, tclconfig/tcl.m4: update to TEA 3.6
 	* configure, configure.in:       using autoconf-2.59
 
 2007-02-28  Pat Thoyts  <patthoyts@users.sourceforge.net>
 
-	* win/makefile.vc: Rebase the DLL sensibly. Additional libs for 
+	* win/makefile.vc: Rebase the DLL sensibly. Additional libs for
 	static link of openssl.
 	* tls.tcl: bug #1579837 - TIP 278 bug (possibly) - fixed.
 
 2006-03-30  Pat Thoyts  <patthoyts@users.sourceforge.net>
 
@@ -142,19 +142,19 @@
 	                    build directory.
 
 2004-12-22  Pat Thoyts  <patthoyts@users.sourceforge.net>
 
 	* configure.in:     Incremented minor version to 1.5.1
-	* configure:        
+	* configure:
 
 2004-12-17  Pat Thoyts  <patthoyts@users.sourceforge.net>
 
 	* win/makefile.vc:  Added the MSVC build system (from the Tcl
 	* win/rules.vc:     sampleextension).
 	* win/nmakehlp.c:
 	* win/tls.rc        Added Windows resource file.
-	
+
 	* tls.tcl:          From patch #948155, added support for
 	                    alternate socket commands.
 	* tls.c:            Quieten some MSVC warnings. Prefer ckalloc
 	                    over Tcl_Alloc. (David Graveraux).
 
@@ -187,11 +187,11 @@
 	* tclconfig/README.txt, tclconfig/install-sh, tclconfig/tcl.m4:
 
 2004-03-17  Dan Razzell <research@starfishsystems.ca>
 
 	* tlsX509.c:	Add support for long serial numbers per RFC 3280.
-			Format is now hexadecimal. 
+			Format is now hexadecimal.
 			[Request #915313]
 			Correctly convert certificate Distinguished Names
 			to Tcl string representation.  Eliminates use of
 			deprecated OpenSSL function.  Format is now compliant
 			with RFC 2253.  [Request #915315]
@@ -238,11 +238,11 @@
 	* tls.c (Tls_Init):   added tls::misc command provided by
 	* tlsX509.c:          Wojciech Kocjan (wojciech kocjan.org)
 	* tests/keytest1.tcl: to expose more low-level SSL commands
 	* tests/keytest2.tcl:
 
-2003-05-15  Dan Razzell	<research@starfishsystems.ca> 
+2003-05-15  Dan Razzell	<research@starfishsystems.ca>
 
 	* tls.tcl:
 	* tlsInt.h:
 	* tls.c: add support for binding a password callback to the socket.
 	Now each socket can have its own command and password callbacks instead
@@ -377,11 +377,11 @@
 	loaded into.  TLS will fail the test suite with Tcl 8.2-8.3.1.
 
 	* tests/all.tcl: added catch around ::tcltest::normalizePath
 	because it doesn't exist in pre-8.3 tcltest.
 
-	* tests/simpleClient.tcl: 
+	* tests/simpleClient.tcl:
 	* tests/simpleServer.tcl: added simple client/server test scripts
 	that use test certs and can do simple stress tests.
 
 2000-08-14  Jeff Hobbs  <hobbs@scriptics.com>
 
@@ -480,11 +480,11 @@
 
 2000-06-05  Scott Stanton  <stanton@ajubasolutions.com>
 
 	* Makefile.in: Fixed broken test target.
 
-	* tlsInt.h: 
+	* tlsInt.h:
 	* tls.c: Cleaned up declarations of Tls_Clean to avoid errors on
 	Windows (lint).
 
 2000-06-05  Brent Welch <welch@ajubasolutions.com>
 

Index: Makefile.in
==================================================================
--- Makefile.in
+++ Makefile.in
@@ -235,11 +235,11 @@
 
 #========================================================================
 # Install documentation.  Unix manpages should go in the $(mandir)
 # directory.
 #========================================================================
- 
+
 install-doc-html: doc
 	@$(INSTALL_DATA_DIR) "$(DESTDIR)$(pkglibdir)/html"
 	@list='$(srcdir)/doc/*.html'; for i in $$list; do \
 	    if test -f $$i ; then \
 		echo "Installing $$i"; \

Index: README.txt
==================================================================
--- README.txt
+++ README.txt
@@ -5,11 +5,11 @@
 
 This package provides an extension which implements Secure Socket Layer (SSL)
 and Transport Layer Security (TLS) over Transmission Control Protocol (TCP)
 network communication channels. It utilizes either the OpenSSL or LibreSSL
 software library.
- 
+
 Version 1.9 also provides a cryptography library providing TCL scripts access
 to the crypto capabilities of the OpenSSL library.
 
 
 Description

Index: acinclude.m4
==================================================================
--- acinclude.m4
+++ acinclude.m4
@@ -10,10 +10,19 @@
 
 AC_DEFUN([TCLTLS_SSL_OPENSSL], [
 	dnl Determine if pkg-config tool is available
 	AC_CHECK_TOOL([PKG_CONFIG], [pkg-config])
 
+	dnl Enable support for SSL 3.0 protocol
+	AC_ARG_ENABLE([ssl3], AS_HELP_STRING([--disable-ssl3], [disable SSL3 protocol]), [
+		if test "${enableval}" == "no"; then
+			AC_DEFINE([NO_SSL3], [1], [Disable SSL3 protocol])
+			AC_MSG_CHECKING([for disable SSL3 protocol])
+			AC_MSG_RESULT([yes])
+		fi
+	], AC_DEFINE([NO_SSL3], [1], [Disable SSL3 protocol]))
+
 	dnl Disable support for TLS 1.0 protocol
 	AC_ARG_ENABLE([tls1], AS_HELP_STRING([--disable-tls1], [disable TLS1 protocol]), [
 		if test "${enableval}" == "no"; then
 			AC_DEFINE([NO_TLS1], [1], [Disable TLS1 protocol])
 			AC_MSG_CHECKING([for disable TLS1 protocol])

Index: configure
==================================================================
--- configure
+++ configure
@@ -766,10 +766,11 @@
 enable_stubs
 enable_64bit
 enable_64bit_vis
 enable_rpath
 enable_symbols
+enable_ssl3
 enable_tls1
 enable_tls1_1
 enable_tls1_2
 enable_tls1_3
 enable_ssl_fastpath
@@ -1416,10 +1417,11 @@
                           shared builds (default: on)
   --enable-64bit          enable 64bit support (default: off)
   --enable-64bit-vis      enable 64bit Sparc VIS support (default: off)
   --disable-rpath         disable rpath support (default: on)
   --enable-symbols        build with debugging symbols (default: off)
+  --disable-ssl3          disable SSL3 protocol
   --disable-tls1          disable TLS1 protocol
   --disable-tls1_1        disable TLS1.1 protocol
   --disable-tls1_2        disable TLS1.2 protocol
   --disable-tls1_3        disable TLS1.3 protocol
   --enable-ssl-fastpath   enable using the underlying file descriptor for
@@ -9277,10 +9279,32 @@
   fi
 else
   PKG_CONFIG="$ac_cv_prog_PKG_CONFIG"
 fi
 
+
+		# Check whether --enable-ssl3 was given.
+if test ${enable_ssl3+y}
+then :
+  enableval=$enable_ssl3;
+		if test "${enableval}" == "no"; then
+
+printf "%s\n" "#define NO_SSL3 1" >>confdefs.h
+
+			{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for disable SSL3 protocol" >&5
+printf %s "checking for disable SSL3 protocol... " >&6; }
+			{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+		fi
+
+else case e in #(
+  e)
+printf "%s\n" "#define NO_SSL3 1" >>confdefs.h
+ ;;
+esac
+fi
+
 
 		# Check whether --enable-tls1 was given.
 if test ${enable_tls1+y}
 then :
   enableval=$enable_tls1;

Index: generic/tls.c
==================================================================
--- generic/tls.c
+++ generic/tls.c
@@ -43,11 +43,11 @@
 	(((key) == NULL) ? (char *) NULL : \
 		Tcl_TranslateFileName(interp, (key), (dsp)))
 
 static SSL_CTX *CTX_Init(State *statePtr, int isServer, int proto, char *key,
 		char *certfile, unsigned char *key_asn1, unsigned char *cert_asn1,
-		int key_asn1_len, int cert_asn1_len, char *CApath, char *CAfile,
+		Tcl_Size key_asn1_len, Tcl_Size cert_asn1_len, char *CApath, char *CAfile,
 		char *ciphers, char *ciphersuites, int level, char *DHparams);
 
 static int	TlsLibInit(int uninitialize);
 
 #define TLS_PROTO_SSL2		0x01
@@ -157,11 +157,11 @@
 static void
 InfoCallback(const SSL *ssl, int where, int ret) {
     State *statePtr = (State*)SSL_get_app_data((SSL *)ssl);
     Tcl_Interp *interp	= statePtr->interp;
     Tcl_Obj *cmdPtr;
-    char *major, *minor;
+    const char *major, *minor;
 
     dprintf("Called");
 
     if (statePtr->callback == (Tcl_Obj*)NULL)
 	return;
@@ -426,11 +426,11 @@
  *	  to a string describing the SSL negotiation failure reason
  *
  *-------------------------------------------------------------------
  */
 void
-Tls_Error(State *statePtr, char *msg) {
+Tls_Error(State *statePtr, const char *msg) {
     Tcl_Interp *interp	= statePtr->interp;
     Tcl_Obj *cmdPtr, *listPtr;
     unsigned long err;
     statePtr->err = msg;
 
@@ -1289,12 +1289,12 @@
 	    Tls_Free((tls_free_type *) statePtr);
 	    return TCL_ERROR;
 	}
 	ctx = ((State *)Tcl_GetChannelInstanceData(chan))->ctx;
     } else {
-	if ((ctx = CTX_Init(statePtr, server, proto, keyfile, certfile, key, cert, (int) key_len,
-	    (int) cert_len, CApath, CAfile, ciphers, ciphersuites, level, DHparams)) == NULL) {
+	if ((ctx = CTX_Init(statePtr, server, proto, keyfile, certfile, key, cert, key_len,
+	    cert_len, CApath, CAfile, ciphers, ciphersuites, level, DHparams)) == NULL) {
 	    Tls_Free((tls_free_type *) statePtr);
 	    return TCL_ERROR;
 	}
     }
 
@@ -1610,11 +1610,11 @@
  *
  *-------------------------------------------------------------------
  */
 static SSL_CTX *
 CTX_Init(State *statePtr, int isServer, int proto, char *keyfile, char *certfile,
-    unsigned char *key, unsigned char *cert, int key_len, int cert_len, char *CApath,
+    unsigned char *key, unsigned char *cert, Tcl_Size key_len, Tcl_Size cert_len, char *CApath,
     char *CAfile, char *ciphers, char *ciphersuites, int level, char *DHparams) {
     Tcl_Interp *interp = statePtr->interp;
     SSL_CTX *ctx = NULL;
     Tcl_DString ds;
     int off = 0, abort = 0;
@@ -1843,11 +1843,11 @@
 	}
 	Tcl_DStringFree(&ds);
 
     } else if (cert != NULL) {
 	load_private_key = 1;
-	if (SSL_CTX_use_certificate_ASN1(ctx, cert_len, cert) <= 0) {
+	if (SSL_CTX_use_certificate_ASN1(ctx, (int) cert_len, cert) <= 0) {
 	    Tcl_AppendResult(interp, "unable to set certificate: ",
 		GET_ERR_REASON(), (char *) NULL);
 	    SSL_CTX_free(ctx);
 	    return NULL;
 	}
@@ -1887,11 +1887,11 @@
 		return NULL;
 	    }
 	    Tcl_DStringFree(&ds);
 
 	} else if (key != NULL) {
-	    if (SSL_CTX_use_PrivateKey_ASN1(EVP_PKEY_RSA, ctx, key,key_len) <= 0) {
+	    if (SSL_CTX_use_PrivateKey_ASN1(EVP_PKEY_RSA, ctx, key, (int) key_len) <= 0) {
 		/* flush the passphrase which might be left in the result */
 		Tcl_SetResult(interp, NULL, TCL_STATIC);
 		Tcl_AppendResult(interp, "unable to set public key: ", GET_ERR_REASON(), (char *) NULL);
 		SSL_CTX_free(ctx);
 		return NULL;
@@ -2325,11 +2325,10 @@
 	    }
 	}
     }
     LAPPEND_OBJ(interp, objPtr, "caList", listPtr);
     LAPPEND_INT(interp, objPtr, "caListCount", sk_X509_NAME_num(ca_list));
-
 
     Tcl_SetObjResult(interp, objPtr);
     return TCL_OK;
 }
 
@@ -2808,10 +2807,11 @@
  *	Result:
  *		A standard Tcl error code.
  *
  *------------------------------------------------------*
  */
+
 DLLEXPORT int Tls_SafeInit(Tcl_Interp *interp) {
     dprintf("Called");
     return Tls_Init(interp);
 }
 
@@ -2830,10 +2830,11 @@
  *	Result:
  *		none
  *
  *------------------------------------------------------*
  */
+
 static int TlsLibInit(int uninitialize) {
     static int initialized = 0;
     int status = TCL_OK;
 #if defined(OPENSSL_THREADS) && defined(TCL_THREADS)
     size_t num_locks;

Index: generic/tls.h
==================================================================
--- generic/tls.h
+++ generic/tls.h
@@ -13,11 +13,11 @@
  * Also work done by the follow people provided the impetus to do this "right":-
  *	tclSSL (Colin McCormack, Shared Technology)
  *	SSLtcl (Peter Antman)
  *
  */
- 
+
 #ifndef _TLS_H
 #define _TLS_H
 
 #include <tcl.h>
 

Index: generic/tlsDigest.c
==================================================================
--- generic/tlsDigest.c
+++ generic/tlsDigest.c
@@ -1386,11 +1386,11 @@
     Tcl_IncrRefCount(digestObj);
     res = DigestDataHandler(interp, dataObj, digestObj, NULL, format, NULL, NULL, EVP_MAX_MD_SIZE);
     Tcl_DecrRefCount(digestObj);
     return res;
 }
- 
+
 int MD4ObjCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]) {
     (void) clientData;
     return TemplateCmd(interp, objc, objv, "md4", HEX_FORMAT | TYPE_MD);
 }
 

Index: generic/tlsEncrypt.c
==================================================================
--- generic/tlsEncrypt.c
+++ generic/tlsEncrypt.c
@@ -408,11 +408,11 @@
     Tcl_Channel parent;
     int out_len;
     Tcl_Size read;
     *errorCodePtr = 0;
     char *in_buf;
-    
+
     dprintf("Called");
 
     /* Abort if nothing to process */
     if (toRead <= 0 || statePtr->self == (Tcl_Channel) NULL) {
 	return 0;

Index: generic/tlsIO.c
==================================================================
--- generic/tlsIO.c
+++ generic/tlsIO.c
@@ -227,32 +227,32 @@
 		dprintf("I/O error occurred (errno = %lu)", (unsigned long) Tcl_GetErrno());
 		*errorCodePtr = Tcl_GetErrno();
 		if (*errorCodePtr == ECONNRESET) {
 		    *errorCodePtr = ECONNABORTED;
 		}
-		Tls_Error(statePtr, (char *) Tcl_ErrnoMsg(*errorCodePtr));
+		Tls_Error(statePtr, Tcl_ErrnoMsg(*errorCodePtr));
 
 	    } else {
 		dprintf("I/O error occurred (backingError = %lu)", backingError);
 		*errorCodePtr = Tcl_GetErrno();
 		if (*errorCodePtr == ECONNRESET) {
 		    *errorCodePtr = ECONNABORTED;
 		}
-		Tls_Error(statePtr, (char *) ERR_reason_error_string(backingError));
+		Tls_Error(statePtr, ERR_reason_error_string(backingError));
 	    }
 
 	    statePtr->flags |= TLS_TCL_HANDSHAKE_FAILED;
 	    return -1;
 
 	case SSL_ERROR_SSL:
 	    /* A non-recoverable, fatal error in the SSL library occurred, usually a protocol error */
 	    dprintf("SSL_ERROR_SSL: Got permanent fatal SSL error, aborting immediately");
 	    if (SSL_get_verify_result(statePtr->ssl) != X509_V_OK) {
-		Tls_Error(statePtr, (char *) X509_verify_cert_error_string(SSL_get_verify_result(statePtr->ssl)));
+		Tls_Error(statePtr, X509_verify_cert_error_string(SSL_get_verify_result(statePtr->ssl)));
 	    }
 	    if (backingError != 0) {
-		Tls_Error(statePtr, (char *) ERR_reason_error_string(backingError));
+		Tls_Error(statePtr, ERR_reason_error_string(backingError));
 	    }
 	    statePtr->flags |= TLS_TCL_HANDSHAKE_FAILED;
 	    *errorCodePtr = ECONNABORTED;
 	    return -1;
 
@@ -365,13 +365,13 @@
 
 	case SSL_ERROR_SSL:
 	    /* A non-recoverable, fatal error in the SSL library occurred, usually a protocol error */
 	    dprintf("SSL error, indicating that the connection has been aborted");
 	    if (backingError != 0) {
-		Tls_Error(statePtr, (char *) ERR_reason_error_string(backingError));
+		Tls_Error(statePtr, ERR_reason_error_string(backingError));
 	    } else if (SSL_get_verify_result(statePtr->ssl) != X509_V_OK) {
-		Tls_Error(statePtr, (char *) X509_verify_cert_error_string(SSL_get_verify_result(statePtr->ssl)));
+		Tls_Error(statePtr, X509_verify_cert_error_string(SSL_get_verify_result(statePtr->ssl)));
 	    } else {
 		Tls_Error(statePtr, "Unknown SSL error");
 	    }
 	    *errorCodePtr = ECONNABORTED;
 	    bytesRead = -1;
@@ -381,11 +381,11 @@
 	    if (ERR_GET_REASON(backingError) == SSL_R_UNEXPECTED_EOF_WHILE_READING) {
 		dprintf("(Unexpected) EOF reached")
 		*errorCodePtr = 0;
 		bytesRead = 0;
 		Tls_Error(statePtr, "EOF reached");
-	    }    
+	    }
 #endif
 	    break;
 
 	case SSL_ERROR_SYSCALL:
 	    /* Some non-recoverable, fatal I/O error occurred */
@@ -398,17 +398,17 @@
 
 	    } else if (backingError == 0 && bytesRead == -1) {
 		dprintf("I/O error occurred (errno = %lu)", (unsigned long) Tcl_GetErrno());
 		*errorCodePtr = Tcl_GetErrno();
 		bytesRead = -1;
-		Tls_Error(statePtr, (char *) Tcl_ErrnoMsg(*errorCodePtr));
+		Tls_Error(statePtr, Tcl_ErrnoMsg(*errorCodePtr));
 
 	    } else {
 		dprintf("I/O error occurred (backingError = %lu)", backingError);
 		*errorCodePtr = Tcl_GetErrno();
 		bytesRead = -1;
-		Tls_Error(statePtr, (char *) ERR_reason_error_string(backingError));
+		Tls_Error(statePtr, ERR_reason_error_string(backingError));
 	    }
 	    break;
 
 	case SSL_ERROR_ZERO_RETURN:
 	    dprintf("Got SSL_ERROR_ZERO_RETURN, this means an EOF has been reached");
@@ -564,27 +564,27 @@
 
 	    } else if (backingError == 0 && written == -1) {
 		dprintf("I/O error occurred (errno = %lu)", (unsigned long) Tcl_GetErrno());
 		*errorCodePtr = Tcl_GetErrno();
 		written = -1;
-		Tls_Error(statePtr, (char *) Tcl_ErrnoMsg(*errorCodePtr));
+		Tls_Error(statePtr, Tcl_ErrnoMsg(*errorCodePtr));
 
 	    } else {
 		dprintf("I/O error occurred (backingError = %lu)", backingError);
 		*errorCodePtr = Tcl_GetErrno();
 		written = -1;
-		Tls_Error(statePtr, (char *) ERR_reason_error_string(backingError));
+		Tls_Error(statePtr, ERR_reason_error_string(backingError));
 	    }
 	    break;
 
 	case SSL_ERROR_SSL:
 	    /* A non-recoverable, fatal error in the SSL library occurred, usually a protocol error */
 	    dprintf("SSL error, indicating that the connection has been aborted");
 	    if (backingError != 0) {
-		Tls_Error(statePtr, (char *) ERR_reason_error_string(backingError));
+		Tls_Error(statePtr, ERR_reason_error_string(backingError));
 	    } else if (SSL_get_verify_result(statePtr->ssl) != X509_V_OK) {
-		Tls_Error(statePtr, (char *) X509_verify_cert_error_string(SSL_get_verify_result(statePtr->ssl)));
+		Tls_Error(statePtr, X509_verify_cert_error_string(SSL_get_verify_result(statePtr->ssl)));
 	    } else {
 		Tls_Error(statePtr, "Unknown SSL error");
 	    }
 	    *errorCodePtr = ECONNABORTED;
 	    written = -1;

Index: generic/tlsInfo.c
==================================================================
--- generic/tlsInfo.c
+++ generic/tlsInfo.c
@@ -208,11 +208,11 @@
 	tag_len = EVP_CIPHER_CTX_get_tag_length(ctx);
 #endif
 	EVP_CIPHER_CTX_free(ctx);
 	LAPPEND_INT(interp, resultObj, "tag_length", tag_len);
     }
-    
+
     /* AEAD properties */
     {
 	int aad_len = 0;
 	if (flags & EVP_CIPH_FLAG_AEAD_CIPHER) {
 	    aad_len = EVP_AEAD_TLS1_AAD_LEN;
@@ -442,11 +442,11 @@
 		if (c == NULL) continue;
 
 		/* cipher name or (NONE) */
 		cp = SSL_CIPHER_get_name(c);
 		if (cp == NULL) break;
-		Tcl_ListObjAppendElement(interp, resultObj, Tcl_NewStringObj((char *) cp, -1));
+		Tcl_ListObjAppendElement(interp, resultObj, Tcl_NewStringObj(cp, -1));
 	    }
 
 	} else {
 	    char buf[BUFSIZ];
 	    resultObj = Tcl_NewStringObj("", 0);

Index: generic/tlsInt.h
==================================================================
--- generic/tlsInt.h
+++ generic/tlsInt.h
@@ -187,11 +187,11 @@
 	BIO *p_bio;		/* Parent BIO (that is layered on Tcl_Channel) */
 
 	unsigned char *protos;	/* List of supported protocols in protocol format */
 	unsigned int protos_len; /* Length of protos */
 
-	char *err;
+	const char *err;
 } State;
 
 #ifdef USE_TCL_STUBS
 #ifndef Tcl_StackChannel
 #error "Unable to compile on this version of Tcl"
@@ -210,11 +210,11 @@
 const Tcl_ChannelType *Tls_ChannelType(void);
 Tcl_Channel     Tls_GetParent(State *statePtr, int maskFlags);
 
 Tcl_Obj         *Tls_NewX509Obj(Tcl_Interp *interp, X509 *cert);
 Tcl_Obj		*Tls_NewCAObj(Tcl_Interp *interp, const SSL *ssl, int peer);
-void            Tls_Error(State *statePtr, char *msg);
+void            Tls_Error(State *statePtr, const char *msg);
 void            Tls_Free(tls_free_type *blockPtr);
 void            Tls_Clean(State *statePtr);
 int             Tls_WaitForConnect(State *statePtr, int *errorCodePtr, int handshakeFailureIsPermanent);
 int             Tls_DigestCommands(Tcl_Interp *interp);
 int             Tls_EncryptCommands(Tcl_Interp *interp);

Index: generic/tlsX509.c
==================================================================
--- generic/tlsX509.c
+++ generic/tlsX509.c
@@ -515,11 +515,11 @@
 
     /* Authority Key Identifier (AKI) is the Subject Key Identifier (SKI) of
 	its signer (the CA). RFC 5280 section 4.2.1.1, NID_authority_key_identifier */
     LAPPEND_OBJ(interp, certPtr, "authorityKeyIdentifier",
 	Tls_x509Identifier(X509_get0_authority_key_id(cert)));
- 
+
     /* Subject Key Identifier (SKI) is used to identify certificates that contain
 	a particular public key. RFC 5280 section 4.2.1.2, NID_subject_key_identifier */
     LAPPEND_OBJ(interp, certPtr, "subjectKeyIdentifier",
 	Tls_x509Identifier(X509_get0_subject_key_id(cert)));
 

Index: license.terms
==================================================================
--- license.terms
+++ license.terms
@@ -25,14 +25,14 @@
 NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
 MODIFICATIONS.
 
 GOVERNMENT USE: If you are acquiring this software on behalf of the
 U.S. government, the Government shall have only "Restricted Rights"
-in the software and related documentation as defined in the Federal 
+in the software and related documentation as defined in the Federal
 Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2).  If you
 are acquiring the software on behalf of the Department of Defense, the
 software shall be classified as "Commercial Computer Software" and the
 Government shall have only "Restricted Rights" as defined in Clause
 252.227-7013 (c) (1) of DFARs.  Notwithstanding the foregoing, the
 authors grant the U.S. Government and others acting in its behalf
 permission to use and distribute the software in accordance with the
-terms specified in this license. 
+terms specified in this license.

Index: tests/oldTests/server.pem
==================================================================
--- tests/oldTests/server.pem
+++ tests/oldTests/server.pem
@@ -269,11 +269,11 @@
 cmlzYmFuZTEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxFDASBgNVBAsTC2Rl
 dmVsb3BtZW50MRkwFwYDVQQDExBDcnlwdFNvZnQgRGV2IENBMFwwDQYJKoZIhvcN
 AQEBBQADSwAwSAJBAOAOAqogG5QwAmLhzyO4CoRnx/wVy4NZP4dxJy83O1EnL0rw
 OdsamJKvPOLHgSXo3gDu9uVyvCf/QJmZAmC5ml8CAwEAATANBgkqhkiG9w0BAQQF
 AANBADRRS/GVdd7rAqRW6SdmgLJduOU2yq3avBu99kRqbp9A/dLu6r6jU+eP4oOA
-TfdbFZtAAD2Hx9jUtY3tfdrJOb8= 
+TfdbFZtAAD2Hx9jUtY3tfdrJOb8=
 -----END CERTIFICATE-----
 
 -----BEGIN CERTIFICATE-----
 MIICVjCCAgACAQAwDQYJKoZIhvcNAQEEBQAwgbUxCzAJBgNVBAYTAkFVMRMwEQYD
 VQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5

Index: tests/oldTests/tlsHttp.tcl
==================================================================
--- tests/oldTests/tlsHttp.tcl
+++ tests/oldTests/tlsHttp.tcl
@@ -10,11 +10,11 @@
 
 #
 # Initialize context
 #
 #tls::init -certfile client.pem -cafile server.pem -ssl2 1 -ssl3 1 -tls1 0 ;#-cipher RC4-MD5
-tls::init -cafile server.pem 
+tls::init -cafile server.pem
 #
 # Register with http module
 #
 http::register https 443 [list ::tls::socket -require 1]
 

Index: tests/oldTests/tlsSrv.tcl
==================================================================
--- tests/oldTests/tlsSrv.tcl
+++ tests/oldTests/tlsSrv.tcl
@@ -17,11 +17,11 @@
     if {[catch {read $chan 1024} data]} {
 	puts stderr "EOF ($data)"
 	catch {close $chan}
 	return
     }
-	
+
     if {$verbose && $data != ""} {
 	puts -nonewline stderr $data
     }
     if {[eof $chan]} {    ;# client gone or finished
 	puts stderr "EOF"
@@ -42,13 +42,13 @@
     puts [tls::status $chan]
 
     fconfigure $chan -buffering none -blocking 0
     fileevent $chan readable [list reflectCB $chan 1]
 }
-#tls::init -cafile server.pem -certfile server.pem 
+#tls::init -cafile server.pem -certfile server.pem
 tls::init -cafile server.pem
-#tls::init 
+#tls::init
 
 set chan [tls::socket -server acceptCB \
 		-request 1 -require 0 1234]
 #		-require 1 -command tls::callback 1234]
 

Index: tests/oldTests/tlsSrv2.tcl
==================================================================
--- tests/oldTests/tlsSrv2.tcl
+++ tests/oldTests/tlsSrv2.tcl
@@ -16,11 +16,11 @@
     if {[catch {read $chan 1024} data]} {
 	puts stderr "EOF ($data)"
 	catch {close $chan}
 	return
     }
-	
+
     if {$verbose && $data != ""} {
 	puts -nonewline stderr $data
     }
     if {[eof $chan]} {    ;# client gone or finished
 	puts stderr "EOF"

Index: tests/tlsIO.test
==================================================================
--- tests/tlsIO.test
+++ tests/tlsIO.test
@@ -3,59 +3,59 @@
 # This file contains a collection of tests for one or more of the Tcl
 # built-in commands.  Sourcing this file into Tcl runs the tests and
 # generates output for errors.  No output means no errors were found.
 #
 # Copyright (c) 1994-1996 Sun Microsystems, Inc.
-# Copyright (c) 1998-2000 Ajuba Solutions. 
+# Copyright (c) 1998-2000 Ajuba Solutions.
 #
 # See the file "license.terms" for information on usage and redistribution
 # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
 #
 # RCS: @(#) $Id: tlsIO.test,v 1.24 2015/06/06 09:07:08 apnadkarni Exp $
 
 # Running socket tests with a remote server:
 # ------------------------------------------
-# 
+#
 # Some tests in socket.test depend on the existence of a remote server to
 # which they connect. The remote server must be an instance of tcltest and it
 # must run the script found in the file "remote.tcl" in this directory. You
 # can start the remote server on any machine reachable from the machine on
 # which you want to run the socket tests, by issuing:
-# 
+#
 #     tcltest remote.tcl -port 8048	# Or choose another port number.
-# 
+#
 # If the machine you are running the remote server on has several IP
 # interfaces, you can choose which interface the server listens on for
 # connections by specifying the -address command line flag, so:
-# 
+#
 #     tcltest remote.tcl -address your.machine.com
-# 
+#
 # These options can also be set by environment variables. On Unix, you can
 # type these commands to the shell from which the remote server is started:
-# 
+#
 #     shell% setenv serverPort 8048
 #     shell% setenv serverAddress your.machine.com
-# 
+#
 # and subsequently you can start the remote server with:
-# 
+#
 #     tcltest remote.tcl
-# 
+#
 # to have it listen on port 8048 on the interface your.machine.com.
-#     
+#
 # When the server starts, it prints out a detailed message containing its
 # configuration information, and it will block until killed with a Ctrl-C.
 # Once the remote server exists, you can run the tests in socket.test with
 # the server by setting two Tcl variables:
-# 
+#
 #     % set remoteServerIP <name or address of machine on which server runs>
 #     % set remoteServerPort 8048
-# 
+#
 # These variables are also settable from the environment. On Unix, you can:
-# 
+#
 #     shell% setenv remoteServerIP machine.where.server.runs
 #     shell% setenv remoteServerPort 8048
-# 
+#
 # The preamble of the socket.test file checks to see if the variables are set
 # either in Tcl or in the environment; if they are, it attempts to connect to
 # the server. If the connection is successful, the tests using the remote
 # server will be performed; otherwise, it will attempt to start the remote
 # server (via exec) on platforms that support this, on the local host,
@@ -566,11 +566,11 @@
              set l [gets $s]
              if {[eof $s]} {
                  global x
                  close $s
                  set x done
-             } else { 
+             } else {
 	         incr i
                  puts $s $l
              }
 	}
 	set i 0
@@ -1229,11 +1229,11 @@
     proc timerproc {} {
 	global done count c
 	set done true
 	set count {timer went off, eof is not sticky}
 	close $c
-    }	
+    }
     set count 0
     set done false
     proc write_then_close {s} {
 	puts $s bye
 	close $s
@@ -1464,11 +1464,11 @@
     close $s1
     close $s2
     close $s3
     sendCommand {close $socket10_9_test_server}
     set i
-} 100    
+} 100
 
 test tlsIO-11.8 {client with several servers} {socket doTestsWithRemoteServer} {
     sendCertValues
     sendCommand {
 	tls::init -certfile $serverCert -cafile $caCert -keyfile $serverKey
@@ -1941,11 +1941,11 @@
              set l [gets $s]
              if {[eof $s]} {
                  global x
                  close $s
                  set x done
-             } else { 
+             } else {
 	         incr i
                  puts $s $l
              }
 	}
 	set i 0
@@ -1953,15 +1953,15 @@
 	close $f
 
 	# thread cleans itself up.
 	testthread exit
     } script
-    
+
     # create a thread
     set serverthread [testthread create { source script } ]
     update
-    
+
     after 1000
     set s [tls::socket 127.0.0.1 8828]
     fconfigure $s -buffering line
 
     catch {
@@ -1971,11 +1971,11 @@
     close $s
     update
 
     after 2000
     lappend result [threadReap]
-    
+
     set result
 
 } {hello 1}
 
 test tlsIO-14.1 {test tls::unimport} {socket} {
@@ -2029,16 +2029,16 @@
     # Following code is based on what was reported in bug #58. Prior
     # to fix the program would crash with a segfault.
     proc Accept {sock args} {
         fconfigure $sock -blocking 0;
         fileevent $sock readable [list Handshake $sock]
-    } 
+    }
     proc Handshake {sock} {
         set ::done HAND
         catch {tls::handshake $sock} msg
         set ::done $msg
-    } 
+    }
     # NOTE: when doing an in-process client/server test, both sides need
     # to be non-blocking for the TLS handshake
 
     # Server - Only accept TLS 1.2
     set s [tls::socket \