Version 0.9.11
--------------

- When multi-tier X.509 hierarchical trust chains are used,
  Windows XP sends its certificate plus any intermediate CA
  certificates wrapped in a PKCS#7 signedData structure.
  Pluto is now able to parse received certificates of type
  CERT_PKCS7_WRAPPED_X509. In a first step all intermediate
  CA certificates are added to the chained list of cacerts
  rejecting self-signed root CA certificates. In a second
  step the host or user certificate contained in the PKCS#7
  structure is verified along the trust chain up to the
  self-signed root CA certificate which must be present
  in /etc/ipsec.d/cacerts and which is loaded statically
  when Pluto starts up.

- The monitoring functions ipsec auto --listcerts, --listcacerts
  and --listcrls now also feature a timestamp logging
  the exact time when a certificate or CRL was last loaded.


Version 0.9.10
--------------

- Multiple certificates and corresponding multiple private keys
  for the local FreeS/WAN host are now supported. Assuming that the
  local side is "left", the parameter leftcert= indicates the
  certificate to be sent to the peer.

  A leftcert entry in the conn %default section provides a default
  certificate so that /etc/x509cert.der is not needed anymore.

  Examples:

  conn %default
       left=%defaultroute
       leftcert=myCert1.pem

  conn rw1
       right=%any
       rightid=@peer1.domain1
       # leftid is the DN of myCert1

  conn rw2
       right=%any
       rightid=@peer2.domain2
       leftcert=myCert2.pem
       # leftid is the DN of myCert2

  conn rw3
       right=%any
       rightid=@peer3.domain1
       leftid=@myid.domain1
       # leftid is myid.domain1 and must be a subjectAltName
         contained in myCert1

  The certificates are loaded relative to /etc/ipsec.d or from
  an arbitrary absolute path. The corresponding private keys
  are loaded via ipsec.secrets:

  : RSA myKey1.pem "<optional passphrase>"

  : RSA myKey2.pem "<optional passphrase>"

  Based on the public key contained in the leftcert certificate
  the corresponding private key is found automatically.

- Due to the support of multiple certificates and corresponding
  private keys, configuration has become much simpler. Therefore
  a large part of the README has been rewritten. Still, backward
  compatibility to previous versions of the patch has been
  maintained.

- Since x509.c has grown quite significantly over the last few
  versions, it has been split into asn1.c, pkcs.c and x509.c,
  accompanied by the corresponding header files asn1.h, pkcs.h
  and x509.h.

- The ASN.1 parser now tolerates UTCTIME and GENERALIZEDTIME
  objects with nonzero time zone offsets and missing seconds
  field (DER coding requires both Zulu time and a seconds field,
  so in a proper certificate these special cases should never
  occur). Thanks go to Jochen Eisinger for his patch.

- Adopted the new FreeS/WAN keyid for RSA public keys, consisting
  of 9 base64 digits. Used in ipsec auto --listpubkeys.

- "make install" now creates the /etc/ipsec.d directory and its
  sub directories cacerts, crls, and private.


Version 0.9.9
-------------

- When Pluto wants to use an expired public key in the public key
  cache in order to check a signature, then the expired key is now
  deleted from the chained list and the setup of the connection is
  prevented.

- No certificate request is sent if the public key of the connection
  has been preloaded using rightrsasigkey=0x.... This makes
  interoperability with non-X.509 enabled FreeS/WAN clients possible
  because they choke on certificate requests.

- Created the environment variables $PLUTO_MY_ID and $PLUTO_PEER_ID
  which can be accessed in the updown script. Use in ID based firewalling
  policies or for logging purposes.

- Added the distinguished name attribute [Siemens] Trust Center Global
  ID (TCGID=) having the OID 1.3.6.1.4.1.1201.1.1.2.2.75


Version 0.9.8
-------------

- PKCS#1 RSA private key files can now be read directly by
  Pluto, thereby eliminating the need to extract the private
  key using the fswcert tool. As a consequence fswcert is not bundled
  with the X.509 patch any more but is still available as a
  separate distribution from http://www.strongsec.com/freeswan/.

  RSA private key files are declared in /etc/ipsec.secrets in
  the form

    : RSA myKey.pem

  as a PEM file or with

    : RSA freeswanKey.der

  as a DER file. If the private key has been encrypted with 3DES
  and protected with a passphrase then with the notation

    : RSA pulpoKey.pem "This is my passphrase"

  the key file is automatically decrypted. Be careful to make
  /etc/ipsec.secrets root readable only.

  Relative pathnames are looked up in the directory /etc/ipsec.d/private.
  Absolute pathnames like e.g./usr/ssl/private/pulpoKey.pem are also
  possible. If not protected by a passphrase be sure to make key
  files root readable only.

- Distinguished Names in ipsec.conf can now be written without
  the preceding '@' character. The new notation is

    leftid="C=CH, O=strongSec GmbH, CN=pulpo.strongsec.com"

  or alternatively

    leftid="/C=CH/O=strongSec GmbH/CN=pulpo.strongsec.com"

  The old notation

    leftid="@C=CH, O=strongSec GmbH, CN=pulpo.strongsec.com"

  or alternatively

    leftid="@/C=CH/O=strongSec GmbH/CN=pulpo.strongsec.com"

  will also be supported, thus ensuring that existing configuration
  files can still be used.

- leftcert and rightcert can now be used together with leftid and
  rightid, if you want to specify a subjectAltName instead of the
  default subject distinguished name of the certificate. Example:

  conn use_ID_DER_ASN1_DN
       right=%any
       rightcert=peerCert.pem

  or

  conn use_ID_FQDN
       right=%any
       rightid=@peer.host
       rightcert=peerCert.pem

  Of course the ID_FQDN peer.host must exist as a DNS subjectAltName
  extension in the certificate "peerCert.pem", otherwise the subject DN
  is automatically assumed.

- A certificate can now contain an unlimited amount of subjectAltNames
  either of the same type or of various types.

- crlDistributionPoints are now parsed in certificates. This is
  a further step towards support of dynamic CRL updates.


Version 0.9.7
-------------

- Fixed both a bug and a memory leak in send_delete(), the
  function responsible for sending delete notifications. Both
  patches were contributed by D. Hugh Redelmeier. Thanks!


Version 0.9.6
-------------

- The following monitoring functions are now available:

  ipsec auto --listpubkeys  #lists all installed public keys
  ipsec auto --listcacerts  #lists all installed cacerts
  ipsec auto --listcrls     #lists all installed crls

  all three commands can be used with the option --utc
  which causes all dates to be represented in UTC time
  instead of the default local time. The expiration date of cacerts
  and crls is checked and a warning is issued some time
  (30 days for cacerts / 7 days for crls) before imminent expiry.

- Dates extracted from certificates and CRLs (e.g. validity,
  next update,revocation dates) are now represented as standard
  time_t objects.

- The three patches to the pluto directory, utils/auto and
  utils/_confread, respectively, have been merged into a
  single patch "freeswan.diff" that can be applied to the
  freeswan top directory.

- The script utils/auto does not generate a whack message for
  leftrsasigkey=%cert and/or rightrsasigkey=%cert anymore,
  since no RSA keys must be stored in the chained list of
  public keys before the actual connection is negotiated.

- Locally stored host certificates defined in ipsec.conf are now
  loaded by pluto. The fswcert tool is not used by utils/_confread
  anymore.

- Bug fix: Everytime a certificate was received during IKE Main Phase,
  the validated public key is inserted into a chained list of
  public keys without prior deletion of the already existing copy.
  This behaviour leads caused a memory leak in version 0.9.5, but only
  in combination with freeswan-1.93 or the snapshot.


Version 0.9.5
-------------

- Bug fix: When a roadwarrior set up multiple IPsec SAs,
  rekeying was impossible since the ID was missing in the
  roadwarrior instances. Fixed in rw_instantiate() in ipsec_doi.c.


Version 0.9.4
-------------

- Support of several subnets in certificate based roadwarrior
  connections. Example

  conn rw1
	right=%any
	leftsubnet=10.0.1.0/24
	auto=add

  conn rw2
	right=%any
	leftsubnet=10.0.2.0/24
	auto=add

  conn rw3
  	right=%any
	rightsubnet=10.0.3.0/24
	leftsubnet=10.0.1.0/24
	auto=add

- Support of ISO-8859-1 character set in distinguished names (DNs).
  In the example

  rightid="@C=CH, O=strongSec GmbH, OU=@*#%&^~$[]{}<>!,
           CN=iso@strongsec.com"

  the relative distinguished names (RDNs) C= and O= are coded
  as ASN.1 type PRINTABLESTRING, whereas OU= and CN= are coded
  now correctly as T61STRING since they contain special characters.

- Support of MD2 hash by including md2.h and md2.c from RSAREF
  [RFC 1319]. Reason: some CA's use md2WithRSAEncryption
  to sign user or host certificates.

- Fixed two potential dynamic memory allocation bugs in load_crls
  and load_cacerts.


Version 0.9.3
-------------

- If FreeS/WAN has a certificate of its own then it will now send an
  ISAKMP certificate request (CR) message to its peer. This makes
  interoperability with Cisco IOS routers and the Cisco PIX firewall
  possible, since these boxes send their certificates only upon request.

- CA certificates and CRls stored in the directories /etc/ipsec.d/cacerts
  and /etc/ipsec.d/crls, respectively, can now be coded either in base64 PEM
  or binary DER format. Irrespective of the file suffix (.pem, .der, .cer,
  .crl, etc.) the correct format is automagically determined by pluto.
  Thus manual conversion into DER format is not required anymore!

- Henry Spencer has made syntax checking in _confread more stringent.
  Additionally all shell parameters are now quoted. This changes require
  a slightly modified notation for distinguished names:

  in LDAP-style notation
    leftid="@C=CH, O=strongSec GmbH, CN=pulpo.strongsec.com"

  or alternatively in the form generated by openssl x509 -subject
    leftid="@/C=CH/O=strongSec GmbH/CN=pulpo.strongsec.com"

- Most changes proposed by Hugh Redelmeier have been worked into this
  release. Two major tasks remain to be done: the internal representation
  of UTCTIME and a revision of Kai Martius' delete notifications.


Version 0.9.2
-------------

- Distinguished Names can now be specified in ipsec.conf
  either in LDAP-style notation
    leftid=@'C=CH, O=strongSec GmbH, CN=pulpo.strongsec.com'
  or alternatively in the form generated by openssl x509 -subject
    leftid=@'/C=CH/O=strongSec GmbH/CN=pulpo.strongsec.com'
  Additional whitespace is automatically truncated. The old binary form
    leftid=@~3025....
  is still supported and might be used to represent foreign character sets.

- When a certificate shows up as revoked after updating the
  CRLs with ipsec auto --rereadcrls, the public key connected
  with this certificate is deleted when the ISAKMP SA of
  an existing connection using this key comes up for renewal.

- Since roadwarrior connections can have many instances, the
  ID of the peer is now logged for each established ISAKMP SA.

- The X.509 patch distribution comes with the new fswcert version 0.6

- Bug fix: the exotic subjectAltName "directoryName" occuring in
  Thawte certificates caused an endless loop in the X.509 parser.


Version 0.9.1
-------------

- Bug fix: handle exception when /etc/ipsec.d/crls or
 /etc/ipsec.d/cacerts do not exist.

- Bug fix: do not free filelist when directory is empty


Version 0.9
-----------

- Major release supporting CA certificate trust chains,
  certificate revocation lists (CRLs), and the subjectAltNames
  IpAddress (IPV4_ADDR), DnsName (FQDN), and rfc822Name (USER_FQDN).
  Peer certificates don't have to be stored locally anymore.
  Certificates and CRLs can be reloaded dynamically using
  whack commands.

- The "commit flag" patch needed for connections with Windows 2000
  has been incorporated into demux.c.

- Bug fix: Added all possible subjectAltName choices, like e.g.
  the exotic ediPartyName since they occur sometimes.


Version 0.8.5
-------------

- Bug fix: X.509v1 certificates where no version field
  exists and no v3 extensions are present are now also
  handled correctly.

- The v3 extension "subjectAltName" is now parsed in detail
  and the general names "dnsName", "ipAddress" and "rfc822Name"
  are extracted.


Version 0.8.4
-------------

- Bug fix: Detailed X.509 certificate loggin is now suppressed
  with plutodebug=none setting.

- Parsing of X.509 certificate totally rewritten using a
  generalized table driven approach. Strict ASN.1 type
  checking applied during parsing process.

- Modulus n and public exponent e of RSA public key gets now
  extracted.


Version 0.8.3
-------------

- Most things that have to do with X.509 certificates
  have been moved to the new source and header files
  x509.c and x509.h, respectively.

- Parsing of X.509v3 certificates has been implemented as a
  first step in the direction of CA certificate support.
  The produced source code is 100% of Swiss origin!


Version 0.8.2
-------------

- Some IPSec peers send a certificate request (CR)
  already in the first ISAKMP message (MI1 or MR2).
  So we allow them to do this.


Version 0.8.1
-------------

- Version number of X.509 patch is now shown in the logs.

- atoid() in id.c now stores the binary representation
  of the ID_DER_ASN1_DN and IK_KEY_ID fields in the
  same temporary string were the hexadecimal versions were
  stored. This simplifies dynamic memory management and
  makes the patch more robust in regard to the frequent
  pluto changes.


Version 0.8
-----------

- X.501 distinguished names can now be output in human-readable
  form instead of the previous ASN.1 binary format. This gives
  a much more concise output when using e.g. the status command
  "ipsec auto --status". The most common X.501 object identifiers
  (OIDs) are supported.


Version 0.7.2
-------------

- When a road warrior initiates a Phase 1 handshake
  the local FreeS/WAN host responds by setting up a
  tentantive connection. Let the local ID type of this
  connection be "ID_FQDN". After the roadwarrior has identified
  himself by sending his true ID, the connection is re-evaluated
  by calling the function  refine_host_connection() in
  connections.c. If there is a fitting connection for the
  roadwarrior but the local host for this new connection has
  a different ID type e.g. ID_DER_ASN1_DN, then the new connection
  fails. Version 0.7.2 fixes this by additionally testing
  whether the tentative and the new connections have the same
  private key in case the two ID types do not agree.


Version 0.7.1
-------------

- In Phase 1 ID payloads protocol/ports can also take on
  the values 17 / 500. Fixed this for ID_FQDN, ID_KEY_ID
  and ID_DERN_ASN1_DN. (Fix proposed by Per Cederqvist).

- Version 0.7.1 is now bundled with fswcert version 0.5


Version 0.7
-----------

- Fixed bug in preshared.c found by Svenning Soerensen:
  changed sizeof(id) into sizeof(*id)


Version 0.6
-----------

- Totally rewrote memory allocation scheme for KEY_ID and
  DER_ASN1_DN id strings. They are now stored in binary
  form in id.name. the id.key_id field is not used anymore.
  This should fix the pluto dumps that occured when deleting
  connections. Should also mend various memory leaks.

- With plutodebug=none, all debug messages produced by
  id handling are now suppressed.


Version 0.5
-----------

- Supports now both X.509 and OpenPGP certificates

- Better support of CERT and CR messages in packets.c

- X.509 certificate read from /etc/x509cert.der or
  OpenPGP certificate read from /etc/pgpcert.pgp

- "cert_type" is now automatically set
