RabbitSign 2.1
--------------

 RabbitSign is a free implementation of the algorithms used to
 digitally sign software for the Texas Instruments TI-73, TI-83 Plus,
 TI-84 Plus, TI-89, TI-92 Plus, and Voyage 200 calculators.

 RabbitSign can handle a variety of common input file formats,
 including GraphLink files as well as "plain" hex and binary files.
 It is quite a lot faster than the official application signing
 programs from TI, and unlike those programs, does not have any
 arbitrary limitations on file names or contents.  It also has the
 ability (unique as far as I know) to re-sign applications that have
 been signed previously.

 Finally, of course, RabbitSign is free software, and should be able
 to run on any modern system with an ANSI C compiler.

 I have NOT received any assistance from TI on this, nor have I
 attempted to reverse-engineer any of their programs.  The details of
 the application format and signing algorithm were determined purely
 by my analysis of the output of TI's and Peter-Martijn Kuipers'
 appsign tools.


Installing
----------

 RabbitSign makes extensive use of high-precision integer arithmetic,
 which can be made substantially faster through the use of the GNU MP
 library (http://gmplib.org/).  Installing this library is optional
 but recommended.  (Users of Debian, Ubuntu, and related systems will
 need the libgmp3-dev package; users of RPM-based distributions will
 need gmp-devel.  GMP version 4.1 or later is required.)

 To compile, test, and install RabbitSign, from the main package
 directory, run:

	./configure

	make

	make check

	sudo make install

 This will install RabbitSign in /usr/local/bin.  To install in a
 different location, specify the '--prefix' argument when you run
 configure.  Run './configure --help' for more information.


Using
-----

 In order to sign an application or OS, you need to have an
 appropriate signing key.  The signing key for "shareware" TI-83/84
 Plus apps, 0104.key, is included in this package.  (The corresponding
 keys for the TI-73, TI-89, and TI-92 Plus have not been released, so
 only TI can sign applications for those calculators.)

 In addition, this package includes an unofficial signing key, 05.key,
 which can be used for TI-83/84 Plus operating systems.  To install an
 OS that has been signed using this key, you must first install the
 corresponding certificate, which can be done using Brandon Wilson's
 Free83P utility.

 To sign a hex or binary app file, use a command such as

	rabbitsign -g myapp.hex

 This will search for the key specified in the app header (using the
 801x field.)  It will then sign the app and write the result in
 GraphLink format to myapp.8xk.

 To use a specific key file, use the -k option:

	rabbitsign -g -k foo.key myapp.hex

 Run 'man rabbitsign' for more information.


A word of caution
-----------------

 If you do somehow acquire a valid signing key for the TI-89 or TI-92
 Plus, you should be able to use RabbitSign to sign applications for
 those calculators.  However, keep in mind that on those calculators,
 it is possible (in fact, quite easy) to seriously break the system
 merely by installing a buggy Flash app.  So be sure to test your app
 in an emulator before trying to install it on a real calculator!

 (Of course, testing your app before installing it is a good idea on
 the TI-83 Plus as well!)


History
-------

 version 2.1 -- July 25, 2009

  * Added the unofficial "05" key, which can be used in combination
    with Brandon Wilson's Free83P to sign TI-83/84 Plus OSes.

 version 2.0 -- July 19, 2009

  * Added the RSA algorithm; RabbitSign now allows signing and
    validating OS upgrades and 68k applications.  (You still need, of
    course, to obtain a valid signing key somehow.)
  * RabbitSign now checks that no app page begins with FFh.  (App
    pages that begin with FFh will cause problems when defragmenting.)
  * Added the -P option, which allows you to sign apps that come very
    close to filling the last page.  (This means adding an extra page
    to hold the signature.  It's still not a good idea most of the
    time.)
  * Added the -f option, which forces apps to be signed even if they
    contain problematic data or headers.
  * The 0104 public and private keys, along with various other known
    public keys, are now included in the RabbitSign library; key files
    are no longer required (you can still use your own key files, if
    necessary.)
  * Improved performance a little bit when using mpz.c.
  * mpz.c will now work correctly on 64-bit (and larger) systems.
  * Major API changes to provide various new features, and generally
    to make RabbitSign easier to integrate into other software.

 version 1.2 -- July 24, 2007

  * Avoid setting app length to 55 modulo 64.  (Such apps do not
    validate correctly on the TI-73 or 83+ BE, due to a bug in the
    boot code.)

 version 1.1 -- May 31, 2007

  * OMIT_FINAL_NEWLINE and PAD_OUTPUT are now default, to work around
    bugs in tifiles2 and TI-Connect respectively.
  * Padding added won't span a page boundary.
  * Corrected the warning message when re-signing a too-long app.
  * Just in case it wasn't fast enough, it now uses mpz_gcdext().  Try
    it with Niels Möller's subquadratic GCD code...
  * Just in case it was too fast, a set of simple, slow arithmetic
    routines is included for people too lazy to get GMP.
  * Unless suppressed with -q, warnings result in an exit status of 1.
  * Test code now compiles on old and/or dumb systems that provide
    rand() and not random().

 version 1.0 -- February 3, 2006

  * First public release.


Legal stuff
-----------

 RabbitSign is copyright (C) 2004-2009 Benjamin Moody.

 This program is free software; you can redistribute and/or modify it
 under the terms of the GNU General Public License version 3 or later.
 There is no warranty of any kind.  See the included 'COPYING' for
 details.

 The MD5 calculating code (md5.c and md5.h) comes from GNU md5sum,
 which was written by Ulrich Drepper and is copyright 1995-96 by the
 Free Software Foundation.  GNU md5sum is part of the GNU Coreutils
 package; see http://www.gnu.org/software/coreutils/ for more
 information.


Author
------

 Benjamin Moody / floppusmaximus@users.sf.net

 Bug reports, please.
