-*- mode: outline; coding: utf-8 -*-

* Changes in version 1.4

** New license terms

Previous versions of Industria were licensed under the GNU GPL v3 or
later. Starting with this release Industria is instead available under
the MIT license. See LICENSE.txt for details.

** Library versioning will be removed

The library files in Industria have until now been using the library
versioning feature of R6RS. This feature has not received the kind of
support that I hoped for and is causing problems. The next version of
Industria will not have version numbers. If your import statements
look like this:

  (import (weinholt disassembler i8080 (1 (>= 0)))
          ...)

Then you need to change them to look like this:

  (import (weinholt disassembler i8080)
          ...)

** (weinholt disassembler x86): jnle was misinterpreted as XOP

* Changes in version 1.3

** (weinholt crypto crc): Pre-defined the crc-64/ecma polynomial

** (weinholt disassembler x86): Support for most AMD XOP instructions

** (weinholt compression xz): New decompressor for XZ data

This is a new library that implements a custom binary input port for
reading XZ compressed data. This is a container format for the LZMA2
compression algorithm and it is becoming popular as a replacement for
gzip and bzip2. Filters are not yet supported.

* Changes in version 1.2

** (weinholt binfmt elf): Parser for ELF binaries

This library provides parsers for various structures in ELF binaries.
It also exports many standard constants. The libraries were included
in previous releases, but had been undocumented. This release improves
the interface and includes documentation.

** (weinholt crypto ec): New library for elliptic curve cryptography

This new library implements basic elliptic curve cryptography over
finite prime fields. It exports mathematical operators, some standard
curves, and procedures for bytevector conversion of points.

** (weinholt crypto ec dsa): New library for elliptic curve DSA

This library is similar to (weinholt crypto dsa), except it works with
elliptic curves. ECDSA signatures can be generated and verified.

** (weinholt crypto rsa): Private key operations

Private RSA key operations have been implemented. See the manual for
more details.

** (weinholt crypto ssh-public-key): Support for ECDSA keys

Support has been added for elliptic curve DSA keys. The new procedure
ssh-public-key-algorithm returns the SSH algorithm identifier of a
key.

** (weinholt net ssh): New library for the Secure Shell protocol

This library implements the Secure Shell protocol. This is a protocol
widely used in the Internet as a secure replacement for telnet and
some other services. Both servers and clients can be implemented using
this library. It's not yet known if the provided interface is suitable
for interactive applications.

** (weinholt net tcp): Very simple TCP client library

This library provides the tcp-connect procedure, which simply opens a
TCP connection to a host and service. This requires implementation-
specific code, so the author is not eager to provide more than the
bare minimum. Code has been provided for most R6RS implementations.

** (weinholt struct pack): Fix infinite loop in a special case

When `pack!' can't determine field offsets at expansion time and it
needs to make sure the padding between two fields is set to zero, it
will residualize a call to the private procedure `bytevector-zero!'.
This procedure had a bug that caused it to never terminate if the
start and end indices differed.

** (weinholt text internet): Internet address parsing and formatting

This new library provides procedures for converting between string and
bytevector representations of IPv4 and IPv6 addresses. The IPv6
address text representation is the one recommended by RFC 5952.

* Changes in version 1.1

** (weinholt bytevectors): Added bytevector=?/constant-time

The procedure bytevector=?/constant-time compares two bytevectors by
summing up their differences.

** (weinholt crypto blowfish): New procedures for CBC mode

The procedures blowfish-cbc-encrypt! and blowfish-cbc-decrypt! were
added.

** (weinholt crypto dh): New library for Diffie-Hellman key exchange

This code was previously spread out in different libraries. The
library exports make-dh-secret, expt-mod and a few MODP groups.

** (weinholt crypto dsa): Better secret numbers for signatures

The per-message secret number used by dsa-create-signature is now
generated more in accordance with FIPS 186-3 Appendix B.2.1.

** (weinholt crypto md5): Added md5-96 and equality predicates

Added md5-length, md5-96-copy-hash!, md5-hash=? and md5-96-hash=?. The
-96 procedures work with the leftmost 96 bits of a hash. The equality
predicate compares an md5 state with a bytevector in a manner intended
to not leak timing information about the comparison.

** (weinholt crypto openpgp): New exports

Added port-ascii-armormed? which checks if the data on a binary input
port looks like a binary OpenPGP packet or not. The procedure
get-openpgp-packet was added to the exports.

** (weinholt crypto sha-1): Added sha-1-96 and equality predicates

Same changes as the md5 library.

** (weinholt crypto sha-2): Equality predicates and HMAC bug fix

Same changes as the md5 library except that the -96 procedures are
-128 here. There are also bug fixes: the procedures hmac-sha-384 and
hmac-sha-512 were previously defined using an incorrect block size.
This change makes the output incompatible with previous versions, so
the major version was incremented to 1. Another bug fixed was that the
hmac procedures couldn't handle key lengths larger than the block
size.

** (weinholt disassembler i8080): New disassembler for Intel 8080

This is a new disassembler for Intel 8080/8085, which was the
predecessor of the Intel 8086.

** (weinholt disassembler x86): Limit get-instruction to 15 bytes

Instructions on the x86 can at most be 15 bytes long. Previously this
limit was not enforced by get-instruction. Overlong instructions now
raise &invalid-opcode as expected.
