Copyright 1998 Tadayoshi Kohno (kohno@cs.colorado.edu)
All Rights Reserved.
See the LICENSE file.


ChangeLog file -- primarily for personal use but may be of interest to others.

libSSH 0.0.1 beta released

1998 May 23
	- libSSH 0.0.1 beta release version packaged

1998 May 22
	- save identities using Tatu Ylonen's file format (with permission)
	- prepare 0.0.1 beta release

1998 May 21
	- got blowfish working.  looks to be a weird difference between
	  SSLeay's blowfish and SSH Communications SSH's in byte ordering.
	  Namely, we need to switch the order of every 4 bytes.  So
	  a stream of (as an uint32 in hex) aabbccdd needs to be changed
	  to ddccbbaa, encrypted (or decrypted) to eeff1122, then
	  changed again to 2211ffee.  Look around the BF_encrypt calls in
	  the SSLeay (0.8.1) crypto/bf/bf_cbc.c file.  So now blowfish for
	  libSSH (currently) has to swap orderings. :(
	- changed to use tatu ylonen's file format by default (have his
	  permission).  to use mine, define SSH_USE_KOHNO_IDENTITY
	- update documentation about ylonen's file format

1998 May 10
	- ssh_identity_save no longer says minimum length of passphrase --
	  that is up to the application to determine (commented out in
	  ssh_ident.c and removed #define in ssh_ident.h)
	- kohno-format identity loader didn't close the private file
	  like it should have
	- made so that if SSH_USE_YLONEN_IDENTITY  is defined, we will
	  compile ssh_identity_load so that it will read a ylonen-format
	  identity file.  if not defined, it will read a kohno-format
	  identity file.  This came from the old WinSSH-0.0.{47,56} 
	  projects (with a bit of modification).

1998 May 9
	- continue putting consts for all char *'s.  ssh_connect.c,
	  ssh_ident.c, ssh_proto.c, ssh_prepare.c, ssh_cmsg.c, ssh_comm.c,
	  ssh_debug.c, ssh_mp_stream.c, ssh_packet.c, to name a few.
	- the only place this really has an effect on the code is in the
	  debug function (below), ssh_connect_client, and ssh_identity_gen.
	  the later two are because the old version bzero's the passwords
	  and passphrases.  now it is up to the application to bzero passwords.
	- among the above changes, the SSHDebugPrinter function needs to take
	  const parameters

1998 May 8
	- starting putting "const"s infront of everything as per samorris
	  suggestions in his ConsoleSSH source code.
	- no longer bzero passwd in ssh_connect_client()
	- define _WINDOWS in ssh_types.h for Windows 95/NT (was in
	  makefile when we built the library).  it doesn't appear
	  to be needed in ssh_types.h when we just use the libssh.lib
	  library, but if we compile the ssh stuff in with another program,
	  then we need to define _WINDOWS
	- as a result, needed to take _WINDOWS (and ZLIB_DLL from before)
	  out of WinSSH's project definitions.

1998 May 1
	- ZLIB_DLL defined in ssh_types.h so that Windows applications
	  do not need to define it if they want to use the ZLIB DLL.
	  They can turn this off by specifying SSH_USE_ZLIB_STATIC.
	- moved CRYPTO_malloc_init to ssh_presetup_client().

1998 April 29
	- created INSTALL.txt for people building on Unix machines to
	  look at.  Also made the README.txt point to the INSTALL.txt
	  file

1998 April 28
	- school keeping me busy, but did manage to do a few 
	  compile-time bug fixes (options et al for other platforms).
	- redid the WINDOWS.txt installation file.

1998 April 18
	- initialized datatype for inflation, deflation
	- use Z_SYNC_FLUSH rather than Z_PARTIAL_FLUSH (zlib.h suggestion)
	- changed return values in ssh_recv() to SSH_MSG_ERROR on error
	  and updated ssh_request_pty to check for this
	- unix client now shows error in interactive session (if error occurs)
	- compress and uncompress done (or redone, commented, et al)
	  no while loop in uncompress() because we are doing the Z_SYNC_FLUSH.
	- created ssh_final.[ch] to handle finalizations after a connection
	- ssh_compression_unset() to be called by ssh_final_client() to cleanup
	- added information about finalization, compression to documentation
	- new makefile for Windows NT to use ZLIB library

1998 April 11
	- ssh_packet_{un,}pack_block takes for *block = type + data

	- ssh_packet_{un,}pack now uses SSH_TYPE_LEN for length of type

	- ssh_packet_block_{glom,extract} pack and unpack the type + data
	  block

	- ssh_send() and ssh_recv()
	  - now glom the data before sending and extract upon recieve.
	  - take glomed block and compress/uncompress

	- what should we do about the packing in ssh_connect -- before
	    everything setup so we probably don't want to go through the
	    hastle of glomming a block because we won't be compressing
	    anyway.

	- packet type needs to be compressed with the data.  for this reason
	  ssh_cmsg_.*_encode() should put the message type into the data.

	  then ssh_send() doesn't need a message type but just data.
	  then it can compress the data if it needs to.  this was a design
	  problem from the old version which didn't think about compression

	  for receive, we need to get back the packet, take the data,
	  (possibly decompress it), look at the type, then extract the
	  data.

	  we could also just pack the data ourselves. with more! bcopy's.
	  since we want to test compression, we are going to start from
	  the ground-up.  namely, getting ssh_packet_pack_block and
	  ssh_packet_unpack_block to work with a type + data field.
	  Then we can try compressing the type + data field (all this is
	  internal to ssh_comm).  Once this works, we can feel comfortable
	  making an ssh_send_block() and ssh_recv_block().  Ultimately
	  all the ssh_xxx_block() functions will become the regular
	  ssh_xxx() functions.

	- pass ssh_info to ssh_packet_pack.  this is currently not used
	  so can be taken out.

	  - additionally, we do a lot of NULL pointer checks that are
	    really redundant.  i should make a SSH_PARANOID_CHECKs define
	    and use it if we are really paranoid.


	- fixed/modified internal directory structure to help
	  accomodate concurrent development from mulitple locations


1998 April 5
	- continued work on compression
	  - renamed crc32() to ssh_crc32() to avoid conflict with zlib's crc32
	  - additional errno's for zlib errors
	  - set compression in ssh_request_compression()

	  - ssh_compress.c
	    - ssh_compression_set()
	      initializes z_streams
	    - ssh_compression_unset()
	      free compression memory
	      (tobe implemented, see planned ssh_final.c)
	    - ssh_compression_compress()
	      ssh_compression_uncompress()
	      (tobe implemented, stubs only.  compress and uncompress)

	  - ssh_comm.c
	    - need to compress/decompress type + data.  this "breaks"
	      part of the current design in that type and data are passed
	      as parameters to ssh_packet_pack.

	      so need to make a new packet packing routine to go with
	      compression.

	      - preliminarily pack type, data
	      - compress that
	      - through that into a new packet_pack

	      - new pack_unpack
	      - uncompress type and data
	      - extract type, data

	      how is this for efficiency

	- ssh_write_stdin_n() function takes length of string as parameter
	  (string does not need to be null terminated as ssh_write_stdin()
	  expects)

1998 April 4
	- check for NULL ssh_info in ssh_recv, ssh_send
	- check for NULL ssh_info in ssh_request_{pty,exec_shell}

	- compression
	  - added SSH_ERRNO_COMPRESS_LEVEL to ssh_errno.[hc]
	  - ssh_cmsg_compression_request_encode in ssh_cmsg.[hc]
	  - added stub to ssh_request_compression in ssh_prepare.c

	  - added ssh_compression_struct to ssh_types.h to hold ssh_struct
	    info on compression
	  - ssh_presetup calls function to initialize compression to none
	  - ssh_compession_none() in ssh_compress.c says use no compression
	  - ssh_compression_active() macro to determine if compression set
	    ssh_send() and ssh_recv() should check for this being set and,
	    if so, call the appropriate function.

	  - all stubs in place.  what remains is to actually use the zlib
	    library and provide calls to compression from within ssh_send()
	    and ssh_recv().

	- internal buffering
	  - started on internal buffering
	    - moved SSH_MAX_PACKET to ssh_types
	    - defined struct ssh_std_buffer_struct to buffer stdout/stderr data
	    - ssh_presetup.c initializes internal buffer
	  - backed out changes but left ssh_std_buffer_struct for future
	    reason being is described in ssh_comm.c's ssh_read_interactive()'s
	    header file.  to summarize, if the client application uses select()
	    to decide if it should call ssh_read_interactive(), then if ssh
	    internally buffers data, select() will not return when data *is*
	    available internally.  until this issue is explored more, there
	    will not be internal buffering


--------------

libSSH 0.0.1alpha released
1998 March 14
	- added random numbers to packet formation (ssh_packet.c)
	- moved S_BAD, S_GOOD definition to ssh_types.h
	- added ssh_random.c file to handle random number seeding
	  moved random number seeding from ssh_session_key_gen() to
	  ssh_presetup
	  updated ssh_errno.c to handle new errno from ssh_random.c
	- check for NULL ssh_struct pointer in ssh_presetup_client()
	  added ssh_errno for this

	- buffer overflow stuff
	  ssh_msg type SSH_MSG_ERROR returned from ssh_recv on error.
	  so now, when we are given a packet (recv) that is too big,
	  it at least tells us (this wasn't "really" a problem because
	  SSH_MAX_PACKET was set to 10000, but the max one I've seen
	  was 532 (maybe X or something packets are bigger))

	  for the ssh_read_interactive, we use a local array to read
	  into, so that's not "too" much of a problem.  the to decode
	  into ssh_smsg_merge..., we pass the length we want, so it
	  is relatively safer than before.

1998 March 7
	- improved DOCUMENTATION
	- created Visual C++ 5.0 Makefile for Windows NT (Makefile.VC)
	- moved all files to be headed by ssh_ so that they can
	  be copied anywhere and still be distinguished easily

1998 Feb 22
	- added DOCUMENTATION file
	- tested with an ssh_client that opened multiple, simultanious
	  connection

1998 Feb 21
	- moved debug information from one global configuration and
	  hard-coded messages to struct ssh_debug_struct with user-definable
	  functions
	- created ssh_prepare.[hc], ssh_presetup.[hc] to handle preparing
	  of the session after authentication and to handle pre-connection
	  setup, respectively

1998 Feb
	- moved connection-independant information to struct ssh_struct
	- created this history

1998 Jan
	- Ripped out SSH code form WinSSH and made into a library
	- Tested on HP-UX, SunOS, Linux, and Windows 95/NT
	- Supports DES, triple-DES, IDEA
	- Supports Password and RSA authentication
		- RSA key generation
	- Not all this stuff thoroughly tested under the Unix platforms
	
1997 Nov-Dec
	- Initial work creating WinSSH with imbedded but independant ssh
	  driver functions

